Spring boot

어노테이션 정리 및 렌더링 추가 설명

yoooon1212 2024. 8. 6. 11:26

 

 

  1. @Autowired: 의존성 주입(Dependency Injection)을 수행할 때 사용되며, 필드, 생성자, 메서드에 적용할 수 있습니다.
  2. @Controller: 웹 애플리케이션의 컨트롤러 클래스를 표시합니다.
  3. @Service: 비즈니스 로직을 수행하는 서비스 클래스를 표시합니다.
  4. @Repository: 데이터 액세스 계층에 사용되는 리포지토리 클래스를 표시합니다.
  5. @RestController: RESTful 웹 서비스의 컨트롤러 클래스를 표시합니다. **@Controller**와 **@ResponseBody**를 함께 사용하는 단축 형태입니다.

 

@Configuration과 @Component의 주요 차이점

 

@Configuration은 스프링 빈을 정의하는 설정 클래스에 붙이는 반면, @Component는 단순히 스프링이 관리해야 하는 클래스를 표시할 때 사용됩니다.

 

@Configuration은 보통 @Bean 어노테이션과 함께 사용되어 스프링 빈을 생성하는 메소드를 정의하고, 이를 빈으로 등록합니다. 반면 @Component는 주로 단순한 POJO 클래스에 사용됩니다.

 

 

 POJO란

Plain Old Java Object 의 약어로, 특정한 제한이나 규약이 없는 일반적인 자바 객체를 가리킵니다. 즉, POJO 클래스는 특정 프레임워크나 라이브러리에 종속되지 않고 순수하게 자바로 작성된 클래스를 의미합니다.

@Component 어노테이션은 주로 이러한 단순한 POJO 클래스에 사용됩니다. 예를 들어, 서비스나 레포지토리와 같은 비즈니스 로직이나 데이터 액세스 로직을 수행하는 클래스들은 보통 @Service나 @Repository 어노테이션을 사용하여 스프링 빈으로 등록됩니다. 하지만 그 외의 일반적인 도메인 모델이나 유틸리티 클래스와 같은 경우에는 특별한 어노테이션 없이도 그 자체로 스프링 빈이 될 수 있습니다.

따라서 @Component 어노테이션은 이러한 일반적인 클래스를 스프링 빈으로 등록할 때 사용됩니다. 이렇게 등록된 빈은 스프링 애플리케이션 내에서 주입되거나 사용될 수 있습니다.

 

 

활용 예시

 

Controller VS RestController

**@ResponseBody는 Data로 예외를 내려줍니다.(자세한 설명은 밑에)

 

 

 

~~Repository인 인터페이스에는 @Mapper 사용

 

 

handler 패키지 내의 GlobalControllerAdvice에는 @ControllerAdvice 사용

 

 

Data로 예외를 내려주기 위해 @ResponseBody 사용

 

**ControllerAdvice 사용 시 @ResponseBody 추가

**Controller 사용 시 Controller + ResponseBody 인 RestController 사용

 

 

 

 

이 메서드에 @ResponseBody가 포함되어 있지 않은 이유는?

HTML 페이지로 redirection을 처리하기 때문입니다.

 

@ResponseBody는 메서드의 반환값을 HTTP 응답 본문에 직접 포함시키는데 사용됩니다.

주로 JSON, XML, 간단한 문자열과 같은 데이터를 클라이언트에게 직접 전달할 때 사용됩니다. 

 

클라이언트에게 JSON이나 텍스트 데이터를 직접 반환하는 것이 아니라, 특정 뷰 페이지로 redirection 하면서 추가 데이터를 반환하기 위함입니다. 그러므로 HTML 렌더링과 모델 데이터 전송을 위해 'ModelAndView'를 사용한 것입니다. 

 

위 코드는 'RedirectException'이 발생했을 때 errorPage라는 뷰로 이동하며, 에러 메시지와 상태 코드를 모델에 담아 전달합니다. 이 과정에서 @ResponseBody가 없기 때문에 Spring MVC는 ' ModelAndView'를 사용하여 뷰를 렌더링합니다.

 

이때, 뷰 리졸버(View Resolver)는 반환된  ' ModelAndView' 객체를 사용하여 errorPage라는 이름의 뷰(JSP 파일)를 찾고 렌더링합니다. 

 

 

** 렌더링 추가 설명**(웹 개발)

렌더링(Rendering)

컴퓨팀과 프로그래밍에서 주어진 데이터를 시작적 또는 청각적 표현으로 변환하는 과정을 의미합니다. 

1. 서버 사이드 렌더링(Server-Side Rendering, SSR)
- 서버에서 HTML 콘텐츠를 생성한 후 클라이언트(브라우저)로 전송하는 과정입니다. 
- 서버에서 페이지를 완성해 클라이언트로 보내므로 초기 로딩 속도가 빠르고, SEO(검색 엔진 최적화)에 유리합니다. 

2. 클라이언트 사이드 렌더링(Client-Side Rendering, CSR)
- 초기에는 기본 HTML만 전송하고, 브라우저가 JS(자바스크립트)를 통해 페이지의 나머지 콘턴츠를 동적으로 생성하는 방식입니다. 
- 예로, React, Angular, Vue.js와 같은 프레임워크가 있습니다. 
- 초기 로딩 속도가 느릴 수 있지만, 페이지 간 전환이 빠릅니다. 

3. 뷰 렌더링(View Rendering)
- 서버 또는 클라이언트에서 동적으로 HTML, CSS, JavaScript 를 생성해 사용자에게 보여주는 것을 의미합니다. 
- Spring MVC에서는 컨트롤러가 'ModelAndView' 객체를 반환하면 뷰 리졸버(View Resolver)가 해당 뷰를 렌더링합니다.