자바진영의 어떤 서비스를 다루다보면 우리는 편하게 @Annotation을 접할 수 있을 것이다.
이 어노테이션은 각 프레임워크나 라이브러리가 지원해주는 다양한 기능들을 내포하고 있다.
물론 무조건 사용하라는 법은 없지만 아무래도 이미 개발된 내용의 기능들을 가져다 사용하면 코드의 가독성도 증가하고 해당 로직을 작성하는데 소모되는 에너지를 줄일 수 있을 것이다. (직접 어노테이션을 만들어서 사용도 가능하다.)
이 글은 해당 어노테이션이 어떤 기능을 제공하는지를 학습하면서, 그 과정속에서 얻게된 정보들을 정리하는 글 입니다.
1. Annotation
- @을 이용한 주석, 코드에 주석을 달아 특별한 의미를 부여한 것
- 컴파일러가 특정 오류를 억제하도록 지시하는 것과 같이 프로그램 코드의 일부가 아닌 프로그램에 관한 데이터를 제공.
- 코드에 정보를 추가하는 정형화된 방법
- 즉, 프로그램에게 추가적인 정보를 제공해주는 메타데kiang이터(Meta-data : 데이터를 위한 데이터)
이 어노테이션은 JDK 1.5버전 이상부터 사용이 가능하며 클래스 파일에 임베디드 되어 컴파일러에 의해 생성된 이후 JVM에 포함되어 동작한다.
- 런타임 시점에 특정 기능을 실행하도록 정보를 제공
- 개발 환경이 빌드나 배포시 코드를 자동으로 생성할 수 있도록 정보 제공
- 컴파일러에게 작성한 코드의 문법을 체크하도록 정보 제공
2. Spring - - - - - - Lombok
Java 기반의 라이브러리로, 어노테이션을 기반으로 코드를 자동완성 해주는 라이브러리가 있다.
대표적으로 우리가 사용하는 @Getter, @Setter 등이 있는데,
- 클래스 이름 위에 적용하면 모든 변수들에 적용 가능, 변수 이름 위에 적용하면 해당 변수들만 사용 가능하며,
- 생성된 접근자와 설정자 메서드를 사용할 수 있음.
- 어떠한 필드에 선언하면 자동으로 get.xxx() , set.xxx() (boolean 타입인 경우 is.xxx() )메소드를 생성해줌.
2.1 어노테이션 정리
- @ToString
필드를 기반으로 ToString 메서드를 자동으로 생성
- @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor (생성자를 만들어주는 어노테이션)
생성자를 자동으로 만들어주는 어노테이션
@NoArgsConstructor
매개변수가 없는 기본 생성자를 생성하며, 어떠한 변수도 사용하지 않는 기본 생성자를 자동완성 한다.
@AllArgsConstructor
필드 값을 모두 포함한 생성자를 생성한다. ( 모든 변수를 사용하는 생성자를 자동 완성 )
@RequiredArgsConstructor
final 필드와 @NotNull 어노테이션이 붙은 필드에 대한 생성자를 생성하며 Required -> 즉, 꼭 필요한 객체의 변수를 인수로 받는 생성자를 구현해준다.
참고 : https://projectlombok.org/features/constructor (lombok 공식 문서)
- @Data
@Getter, @Setter, @RequiredArgsConstuctor, @TosSting, @EqulasAndHashCode 를 한번에 설정해주는 어노테이션
- EqualsAndHashCode
- Equals와 hashCode 메서드를 자동으로 생성해주며, callSuper를 사용해 메서드 자동 생성 시 부모 클래스의 필드까지 고려할 것인지 설정 가능.
- callSuper = true이면 부모 클래스 필드 값도 동일한지 고려하고, callSuper=false(기본값)로 설정하면 자신 클래스의 필드 값들만 고려
- @Builder
- 모델 객체를 생성할 때, Builder를 자동으로 추가해주는 어노테이션
- 다수의 필드를 가지는 클래스의 경우, 생성자 대신에 빌더를 사용하는 경우가 多
여기서 model 객체란?
1. Controller에서 생성한 데이터를 담아 View로 전달할 때 사용하는 객체
2. addAttribute("키", "값") 메서드를 사용해 전달할 데이터 세팅
- @Entity
- 데이터베이스의 테이블과 일대일로 매칭되는 객체 단위
- @Entity가 붙은 클래스는 JPA가 관리하는 것으로, 엔티티라고 불림
- JPA에서 엔티티는 테이블에 대응하는 하나의 클래스
- JPA에서는 '하나의 엔티티 타입을 생성한다'라는 의미는 '하나의 클래스를 작성한다'라는 의미가 됨.
- @Id
- 데이터베이스의 테이블은 기본적으로 유일한 값을 가지게 되는데 그것을 primary key(기본키) 라고 하며, @Id 어노테이션을 통해 primary key를 설정할 수 있음.
- @GeneratedValue (ver.2)
- 기본키의 데이터 형식은 정해져있지 않아서 구분이 가능한 유일한 키 값을 가지고 있어야 하는데, 대부분 Long을 주로 사용
* 직접 할당 (@Id) 만 사용
* 자동 생성 (@GeneratedValue)
- IDENTITY : 데이터베이스에 위임 (MYSQL)
* Auto_increment
( auto increment 방식은 숫자형의 기본키 속성을 auto increment로 지정하면 새로운 레코드가 생성될 때마다 마지막 기본키 값에서 자동으로 +1을 해주는 방식, @GeneratedValue의 strategy 속성을 GenerationType.IDENTITY로 지정해 auto increment 컬럼인 것을 EntityManager에 알려줌)
- SEQUENCE : 데이터베이스 시퀸스 오브젝트 사용(ORACLE)
* @SequenceGenerator 필요
- TABLE : 키 생성용 테이블 사용, 모든 DB에서 사용
* @TableGenerator 필요
- AUTO : 방언에 따라 자동 지정, 기본값
- @Column
- @Column은 데이터베이스의 테이블에 있는 컬럼과 동일하게 1:1로 매칭되기 때문에 Entity클래스안에 내부변수로 정의됨.
- @Controller
- 사용자의 요청이 진입하는 지점(entry point)
-요청에 따른 처리 방법을 결정, 실질적인 처리는 서비스(Layered Architecture)에서 담당
- 사용자에게 View(또는 서버에서 처리된 데이터를 포함한 VIew)를 응답으로 보내줌
- Model 객체를 만들어 데이터를 담고 View를 찾는 것
- @RequestMapping
- 해당 어노테이션으로 선언된 클래스의 모든 메소드가 하나의 요청에 대한 처리를 할 경우 사용
- URL을 컨트롤러의 메서드와 매핑할 때 사용함
- @RestController
- @Controller와 @ResponseBody의 조합
- @RestControll는 단순히 객체만 반환하고 객체 데이터는 JSON, XML 형식으로 HTTP 응답에 담아 전송
- @Controller와 @ResponseBody를 사용하여 만들 수 있지만 RESTful 웹서비스의 기본 동작이라 Spring
'스프링' 카테고리의 다른 글
[#1] Spring Security - 시큐리티는 무엇이고, Filter는 무엇인지 (0) | 2022.12.29 |
---|---|
[10분 테코톡] - @JDK Dynamic Proxy & CGLIB (0) | 2022.12.22 |
[10분 테코톡] - @Transactional (0) | 2022.12.21 |
스프링 AOP (0) | 2022.12.07 |
Controller, Service 왜 나눌까요? (2022.12.02 - 작성 중) (0) | 2022.12.02 |