-
Spring Annotation 정리프로그래밍 기초 공부 2023. 3. 13. 23:09
Annotation이란?
- Java5부터 새롭게 추가된 문법요소
- 사전적으로는 "주석"이라는 의미를 가짐
- 자바 코드에 @를 이용해 주석처럼 달아 특수한 의미를 부여해줌
- 프로그램에 관한 데이터를 제공하고, 코드에 정보를 추가하는 정형화된 방법
- annotation 사용시 코드량이 감소하고 유지보수가 쉬워지며 생산성이 증가
@Bean
- 개발자가 작성한 Method를 통해 반환되는 객체를 Bean으로 만드는 어노테이션
- 주로 @Configuration 어노테이션이 들어간 Spring을 설정하는 클래스 내에 들어가는 메서드를 선언
@Configuration
- 스프링 IOC Container에게 어노테이션이 붙은 해당 클래스가 Bean으로 구성된 클래스임을 알려주는 어노테이션
@EnableAutoCongiguration
- 사전에 정의한 라이브러리들을 Bean으로 등록해 주는 어노테이션
- (사전에 정의한 라이브러리들 모두가 등록되는 것은 아님, 특정 조건이 만족될 경우 Bean으로 등록)
@Component
- 개발자가 직접 작성한 Class를 Bean으로 만드는 것
- 싱글톤 클래스 빈을 생성하는 어노테이션
- (@Scope를 통해 싱글톤이 아닌 방식으로도 생성이 가능)
- 선언적인 어노테이션
- (패키지 스캔 안에 이 어노테이션은 "이 클래스를 정의했으니 빈으로 등록하라"라는 뜻)
@ComponentScan
- @Component, @Service, @Repository, @Controller 등의 어노테이션을 스캔하여 Bean으로 등록하는 어노테이션
@Controller
- Spring의 컨트롤러 역할을 지정해주는 어노테이션
@RestController
- json과 xml의 형태로 객체 데이터 반환 목적으로 사용되는 어노테이션
- @Controller에 @ResponseBody가 결합된 어노테이션
- @Controller 어노테이션과 달리 @RestController 어노테이션이 붙은 컨트롤러 클래스의 각 메서드 마다 @ResponseBody를 추가할 필요가 없음
*) Controller는 주로 사용자의 요청을 처리하고 난 후 정해진 뷰에 객체를 넘겨주는 역할을 함
@Service
- Spring의 서비스 역할을 지정해주는 어노테이션
*) Service는 비즈니스 로직을 수행하고 DB에 접근하는 DAO를 이용해서 결과값을 받아오는 역할을 함
*) DAO는 쉽게 말해 Mysql 서버에 접근하여 SQL 쿼리문을 실행할 수 있는 객체
@Repository
- Spring의 레퍼지토리 역할을 지정해주는 어노테이션
*) Entity에 의해 생성된 DB에 접근하는 메서드들을 사용하기 위한 인터페이스 JpaRepository를 상속받도록 함으로써 기본적인 동작이 모두 가능해짐
@RequestMapping
- 특정 URL로 요청을 보내면 들어온 요청을 특정 메소드와 매핑하기 위해 사용하는 어노테이션 Controller 단에서 사용
- 주로 value와 method 송성을 사용
- (value는 요청받을 URL을 설정, method는 http 메서드 중 어떤 메서드를 통해 요청받을지 정의)
@PostMapping
@GetMapping
@PutMapping
@DeleteMapping
@PatchMapping- Spring 4.3부터 Spring MVC Controller Method를 위한 어노테이션이 추가됨
- 각각의 어노테이션들은 HttpMethods에 매칭되며, method단에서 사용이 가능
// 변경 전 @RequestMapping(values = "test", method = RequestMethod.GET) // 변경 후 @GetMapping(values = "test")
@RequestBody
- HttpRequest의 본문 requestBody의 내용을 자바 객체로 매핑하는 역할
- 클라이언트의 요청이 들어왔을 때, DispatcherServlet에서 먼저 해당 HttpRequest의 타입을 확인하고, MessageConverter를 통해 요청 본문인 requestBody를 통째로 변환해서 메서드로 전달
*) GET 메서드의 요청은 URI 또는 URL의 파라미터로 전달이 되기 때문에 @RequestBody 어노테이션을 통해 해당 요청을 받을 수 없음
@ResponseBody
- 자바객체를 HTTP요청의 body내용으로 매핑하여 클라이언트로 전송
- 반환 타입에 맞는 MessageConverter를 통해 return하는 객체를 해당 타입으로 변환해서 클라이언트로 전달
- 반환 시 json, xml과 같은 데이터를 반환해줌
@RequestParam
- URL에서 파라미터 값과 이름을 함께 전달하게하는 어노테이션
- 주로 GET 방식의 통신을 할 때 많이 사용
- 파라미터 종류 4가지 존재
- defaultValue : 기본값 설정
- name : 바인딩할 파라미터의 이름
- value : name과 같은 의미
- required : 필수 값 사용 여부 설정
- ex) /user/test?id=1 과 같이 사용
@PathVariable
- URL경로 주소에 사용하는 값을 매개 변수로 사용 가능하게 해주는 어노테이션
- 어떠한 요청이든 하나밖에 사용할 수 없음
- ex) /user/test/1 과 같이 사용
@Autowired
- Spring Framework에서 지원하는 의존 관계를 자동으로 연결하여 빈을 주입해주는 기능을 가진 어노테이션
- 해당 어노테이션을 지정하면, 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입
- 여러가지 의존관계 주입이 있지만 보통은 생성자 주입을 선택
@SpringBootTest
- Spring Boot Test에 필요한 의존성을 제공하는 어노테이션
@Test
- Junit에서 테스 할 대상을 표시하는 어노테이션
@Entity
- JPA를 사용해 테이블과 클래스를 매핑해주는 어노테이션
- 해당 어노테이션의 사용으로 JPA가 해당되는 클래스를 관리하게 됨
- name을 통해서 JPA에서 사용할 Entity 이름을 지정할 수 있음
- 기본 생성자가 꼭 필요하고, 변수를 final로 선언할 수 없음
@Id
- 특정 속성을 기본키로 설정하는 어노테이션
@GeneratedValue
- 기본키 값을 자동으로 생성해주는 어노테이션
- IDENEITY : 기본키 생성을 DB에 위임 (Mysql)
- SEQUENCE : DB시퀀스를 사용해서 기본키 할당 (ORACLE)
- TABLE : 키 생성 테이블 사용 (모든 DB 사용 가능)
- AUTO : 선택된 DB에 따라 JPA가 전략을 자동으로 선택
@Column
- 객체 필드를 테이블 컬럼과 매핑
- name : 필드와 매핑할 테이블의 컬럼 이름 지정 (default는 필드이름으로 대체)
- insertable
- true : 엔티티 저장시 필드값 저장
- false : 필드값이 저장되지 않음
- updatable
- true : 엔티티 수정시 값이 수정
- false : 엔티티 수정시 값이 수정 되지 않음
- table : 하나의 엔티티를 두 개 이상의 테이브에 매핑할 때 사용
- nullable : null값 허용 여부 설정
- (false : not null 제약 조건)
- unique : 컬럼에 유니크 제약조건 부여
- columnDefinition : DB 컬럼 정보를 직접 부여
- length : 문자 길이 제약조건
- (String 타입일 때 사용)
Lombok의 대표적인 Annotation
@Setter
- Class의 모든 필드에 Setter method를 자동으로 생성해줌
@Getter
- Class의 모든 필드에 Getter method를 자동으로 생성해줌
@AllArgsConstructor
- Class의 모든 필드 값을 파라미터로 받는 생성자를 자동으로 생성
@NoArgsConstructor
- Class의 기본 생성자를 자동으로 생성
@ToString
- Class의 모든 필드의 toString method를 자동으로 생성
'프로그래밍 기초 공부' 카테고리의 다른 글
JPQL 이란? (0) 2023.03.30 DAO, DTO, VO란? (0) 2023.03.23 Stream (0) 2023.02.02 스크럼이란? (0) 2023.01.25 iBatis와 MyBatis (0) 2023.01.24