[Spring Boot] 어노테이션(Spring Boot)

hameee·2023년 12월 12일
0

Spring Boot

목록 보기
2/20
post-thumbnail

📍 어노테이션(Annotation) 종류

🌈 PDF로 보려면 👉여기👈를 클릭하세요.

이미지 출처

📍 @ResponseBody와 return 타입에 따른 응답 콘텐츠 타입

조건작동응답 콘텐츠 타입
@Controller
+ @ResponseBody
+ return String
HttpMessageConverterHTML
@Controller
+ @ResponseBody
+ return 객체(Map, List, Class 등)
HttpMessageConverter(Jackson 라이브러리)JSON
@Controller
+ return String(JSP 파일 경로)
ViewResolverJSP 파일에서 설정된 콘텐츠 타입

👉 HttpMessageConverter

  • 특정 미디어 타입 데이터(JSON, XML, HTML, 텍스트 등)와 Java 객체를 변환을 담당하는 인터페이스이다.
  • DispatcherServlet은 요청이 들어올 때 적절한 HttpMessageConverter를 선택하여 요청 메시지를 Java 객체로 변환하거나, 응답 메시지를 Java 객체에서 특정 미디어 타입의 데이터로 변환하여 클라이언트에게 반환한다.

👉 Jackson 라이브러리

  • JSON 형식의 데이터를 처리하기 위한 라이브러리이다.
  • Spring에서 JSON 데이터와 Java 객체 간의 변환을 담당하는 MappingJackson2HttpMessageConverter(HttpMessageConverter의 구현체)에서 사용된다.

📍 @Controller vs. @RestController

@Controller@RestController
주로 뷰를 사용하여 모델의 데이터를 렌더링해야 하는
Spring MVC 서비스에서 사용
응답 본문에 바인딩된 객체 값을 반환하는
RESTful 웹 서비스에서 사용
응답을 어떻게 보낼지에 대한 제어와 유연성을 제공모든 결과를 응답 본문에 작성
응답 값이 HttpMessageConverters를 통해 변환되고
응답 객체를 통해 보내져야 하는 경우, @ResponseBody을 추가해야 함
@Controller@ResponseBody의 결합이므로 따로 추가할 필요 없음

📍 @RequestMapping 위치

  • 메소드 위(전체 경로)
  • 클래스 위(공통 경로) + 메소드 위(나머지 경로)
// 1) 메소드 위(전체 경로)

package com.example.lesson01;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class Lesson01Ex01RestController {

	@RequestMapping("/lesson01/ex01/1") // ⭐️ 전체 경로
	public String ex01_1() {
		return "1번 메소드 입니다.";
	}
	
	@RequestMapping("/lesson01/ex01/2") // ⭐️ 전체 경로
	public String ex01_2() {
		return "2번 메소드 입니다.";
	}
	
}
// 2) 클래스 위(공통 경로) + 메소드 위(나머지 경로)

package com.example.lesson01;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/lesson01/ex01") // ⭐️ 공통 경로
@RestController
public class Lesson01Ex01RestController {

	@RequestMapping("/1") // ⭐️ 나머지 경로
	public String ex01_1() {
		return "1번 메소드 입니다.";
	}
	
	@RequestMapping("/2") // ⭐️ 나머지 경로
	public String ex01_2() {
		return "2번 메소드 입니다.";
	}
	
}

📍 @ResponseBody 위치

  • 메소드
    • 메소드 위(권장)
    • 메소드 반환 타입 앞
  • 클래스 위
// 1) 메소드 위(권장)

package com.example.lesson01;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class Lesson01Ex01Controller {

	@RequestMapping("/lesson01/ex01/3")
	@ResponseBody // ⭐️
	public String ex01_3() {
		return "3번 메소드 입니다.";
	}
	
}
// 2) 메소드 반환 타입 앞

package com.example.lesson01;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class Lesson01Ex01Controller {

	@RequestMapping("/lesson01/ex01/3")
	public @ResponseBody String ex01_3() { // ⭐️
		return "3번 메소드 입니다.";
	}
	
}

📍 @SpringBootApplication

  • @Configuration + @EnableAutoConfiguration + @ComponentScan
  • 스프링 빈을 스캔(@Configuration, @ComponentScan)하여 스프링 애플리케이션을 자동으로 구성(@EnableAutoConfiguration)하도록 한다.
  • @Configuration: Bean을 정의하는 클래스임을 표시한다.(하나 이상의 @Bean 메소드 포함)
  • @EnableAutoConfiguration: 클래스 경로를 기반으로 스프링 애플리케이션의 구성을 자동으로 추측하도록 한다.
  • @ComponentScan: @Configuration 클래스, @Component 클래스를 스캔하도록 한다.

👉 Spring Bean vs. Java Bean

  • Spring Bean: 스프링 프레임워크에서 관리되고 생성되는 객체, 어노테이션으로 생성
  • Java Bean: 일반 Java 클래스, new로 객체 생성

📍 @Component

  • @Component는 다른 어노테이션들의 부모 역할을 한다.

이미지 출처

📍 @Component vs. @Configurataion vs. @Bean

  • @Component: 일반 클래스에 붙음 🚩스프링 빈: 클래스의 인스턴스
  • @Configurtaion: 설정 클래스에 붙음
    • @Bean : 메소드에 붙음, 🚩스프링 빈: 리턴하는 객체

📍 @DateTimeFormat

  • @DateTimeFormat (pattern="yyyy-MM-dd") Date date와 같은 형식으로 사용한다.
  • 날짜 및 시간 형식을 지정하기 위한 어노테이션
  • 컨트롤러 메서드의 매개변수나 도메인의 필드에 적용되어 String을 Date로 파싱하는 데 사용
  • 하지만 해당 어노테이션을 붙이지 않아도 DB의 자료형이 Data라면, 자동으로 String을 Date로 변환하여 DB에 삽입한다.
    ex) 입력 데이터(String) -> Controller(String) -> BO(String) -> Mapper.java(String) -> Mapper.xml & DB(Data로 자동 변환)

References

🔗 https://www.jrebel.com/blog/spring-annotations-cheat-sheet
🔗 https://medium.com/@.midi/interview-questions-on-spring-restful-web-services-86d0e5e28a14

0개의 댓글