어노테이션은 다른 프로그램에게 유용한 정보를 제공하기위해 사용되는 것으로
주석과 같은 의미를 가진다.
사전적 정의는 이러한데, 사실 사용될 때 보면 정말 많은 정보와 기능을 담고 있다.
어노테이션을 사용한 프로그래밍은 유지보수적, 코드 가독성에 정말 많은 도움을 주니까
꼭 알아두도록 하자.
어노테이션의 역할
어노테이션의 종류
어노테이션은 크게 세 종류로 구분할 수 있다.
자바에서 기본적으로 제공하는 어노테이션이다.
@Override가 대표적인 표준 어노테이션이다.
어노테이션에 붙이는 어노테이션으로, 어노테이션을 정의하는 것에 사용한다.
이게 대체 무슨말인가 하면 표준 어노테이션의 적용 범위나 주석(스키마)를 단다고 생각하면 된다.
말 그대로 어노테이션을 붙이면 사용자가 원하는 행동을 할 수 있도록 정의할 수 있게 하는 것이다.
TestCase포스트에서 Valid를 사용하면서 MyNotNull 어노테이션을 만들면서 jakarta 어노테이션을 만든 적이 있었는데, 이런 것이 사용자 어노테이션이다.
장점으로는 표준 어노테이션과 다르게 행동을 정의할 수 있다는 점이 있지만,
행동을 제약하려면 특정한 방식 즉 나름의 프레임 워크를 따라 가야해서 어느정도는 규칙을 지켜야 한다.
아래는 스프링 부트에서 정말 많이 사용되는, 그리고 자바에서도 많이 사용되는 어노테이션들이다.
점점 알게 될 수록 추가할 예정이다.
메서드 파라미터의 검증을 위해 사용함
API 그룹 설정
테그에 설정된 name이 같은 것끼리 하나의 api그룹으로 묶음
controller나 Controller의 메서드 영역에 설정
모델에 대한 정보를 작성함
각 필드값들에 대한 설명이나 기본값, 허용가능한 값 등 api문서를 더 상세히 기술하는 것에 사용함.
API동작에 대한 명세를 작성하기 위해 사용
summary에는 간략한 설명, description에는 상세 설명을 기제한다.
파라미터에 대한 설명을 작성한다. name에 반드시 해당 파라미터의 이름을 적어야한다.
API POST요청을 처리한다.
뒤에 있는 주소로 POST를 하여 받은 데이터를 저장한다.
API POST,PUT,PATCH와 같이 사용한다. 요청 본문에 있는 데이터를 전송한다.
아래의 클래스에 있는 getter,setter을 자동으로 생성해준다.
api 코드에 대한 반환 값을 입력한다.
API엔드포인트에서 보안 요구사항을 정의
아무것도 없다면 보안 요구사항을 무효화하거나 변경하는 것
http GET요청을 처리한다
뒤에 있는 주소로 GET을 해서 받아온다
기본 생성자를 자동으로 생성.
모든 필드를 초기화하는 생성자를 자동으로 생성.
예시
@SequenceGenerator(name="EMP_SEQ", allocationSize=25)
속성
@Id는 PK를 형성해주는역할을 함
@ GeneratedValue를 같이 사용해서 4가지 방법으로 자동생성하는 방법이 있음
@GeneratedValue(strategy = GenerationType.IDENTITY)
기본키 생성을 데이터베이스에게 위임하는 방식
데이터베이스가 자동으로 생성하게 된다.
JPA가 처리할때 데이터베이스에 먼저 insert쿼리를 실행 해서 PK를 먼저 받아오는 방식
@GeneratedValue(strategy = GenerationType.SEQUNCE)
DB의 Sequence Object를 이용해서 DB가 생성한다
@SequenceGenerator가 필요함
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator="USER_PK_GENERATOR")
이렇게 사용하는데, generator에는 SquenceGenerator의 이름이 들어가야 한다.
DB에서 받아와서 생성하고 allocationSize로 증가 범위를 조절한다.
@GeneratedValue(strategy = GenerationType.TABLE)
테이블을 이용해서 생성한다.
방식은 Seq방식과 동일하지만 최적화되지 않은 것을 사용하기 때문에 성능에 이슈가 있다
@GeneratedValue(strategy = GenerationType.AUTO)
기본 설정 값으로 자동 생성한다.
변수를 .변수명(값)으로 지정할 수 있게 해주는 패턴이다. 유지보수가 용이하다.
생성자,수정자의 의존성을 자동으로 주입한다.
메서드 매개변수를 명시적으로 연결해주는 역할을 한다.
name : 필드와 매핑할 테이블의 컬럼 이름
nullable : null값의 허용 여부 설정. 기본값은 true
엔티티와 매핑할 테이블을 지정
name : 매핑할 테이블 이름
schema : DB에서 schema를 매핑
description : 클래스나 필드의 대한 설명 추가
example : 문서에서 보여줄 예제 값을 설정
minimum(필드) : 최소값 제한
maximum(필드) : 최대값 제한
EnumType.ORDINAL, EnumType.STRING
enum의 값이나 이름을 데이터베이스에 저장한다.
엔티티 내부에서 DB와 매핑되지 않도록 한다.
Autowired가 가능하도록 SpringBean에 등록한다.
String으로 빈의 이름을 설정할 수 있음
HTTP요청을 자바 객체로 변환하여 객체에 저장한다.
의존성 주입 방법중에 생성자 주입을 임의의 코드없이 자동으로 설정해 줌
추가 로깅 인터페이스로 디버깅 상세화 제공
Http에서 해당 이름으로 바인딩 할 수 있게 한다.