본문 바로가기
  • 시 쓰는 개발자
Spring

annotation 정리

by poetDeveloper 2024. 3. 11.

생성자 관련 annotation - OOOArgsConstructor

@RequiredArgsConstructor

final이나 @NonNull인 필드 값만 파라미터로 받는 생성자를 만들어줌.

 

@AllArgsConstructor

모든 필드 값을 파라미터로 받는 생성자를 만들어줌. 파라미터를 다 받아야함. 근데 이렇게 하면 필요한 걸 빠뜨리지 않고 객체를 만들 수는 있겠지만 다 넣어야 해서 오히려 객체 만들기 자체가 어려울 수 있음.

 

@NoArgsConstructor

파라미터 아무것도 없는 기본 생성자. 이게 있어야 jpa가 테이블을 만들어줌. 객체화 하려면 생성자가 있어야하는데, 파라미터를 넘겨줘야만 객체를 만들 수 있는 상황이라면 객체를 쉽게 만들 수가 없고 그렇게 되면 테이블에 넣을 수 없기 때문에, 기본 생성자로 다루는 것임.


@Getter, @Setter

lombok 라이브러리 쓰면 게터 세터를 주입할 수 있다.


@Controller, @service, @Repository

다 컨테이너에 등록해서 빈객체 생성해주는건데 같은기능이지만 용도 구분을 위해 이름 다른것

 

@Transactional ★

db를 다룰 때 트랜잭션을 적용하면 데이터 추가, 갱신, 삭제 등을 하다가 오류가 발생했을 때 모든 작업들을 원상태로 되돌릴 수 있다.  또한 service 로직에서 하는 행동이 create가 아니라 이미 있는 걸 수정하는 update일 때 Transactional이 붙어있으면 DB를 안건들이고도 자동으로 업데이트가 되는데 controller 로직에서는 transactional없어서 직접 DB를 건들여줘야함. 즉 Service단에서 Transactional이 있으면 DB 건드는 로직이 필요 없고, Controller에는 이게 없어서 DB를 직접적으로 건들이는 코드가 필요하다는 것. 즉, DB 최적화에 도움이 되므로 적절한 때에 사용해주자.
ex. memberRepo.save / memberRepo.join


RestApi 관련 annotation

@OOOMapping

GET, POST, DELETE, PUT, PATCH 매핑이 있고, uri 설정할때 사용

 

@RequestBody

클라 → 서버로 json 보낼 때 서버에서 @RequestBody 써서 body에 담긴 값들을 자바 객체로 변환 시켜, 객체에 저장

 

@RequestMapping

들어온 요청을 특정 메서드와 매핑하기 위해 사용하는 것. value와 method를 사용. value는 요청받을 url을 설정하게 된다.

method는 어떤 요청으로 받을지 정의하게 된다.(GET, POST, PUT, DELETE 등)

 

@Valid

RequestBody로 객체 가져올 때 들어오는 값을 검사함.

 

@ResponseBody

서버 -> 클라로 응답할때 @ResponseBody를 써서 자바 객체를 HTTP 응답 본문의 객체로 변환하여 클라이언트로 전송

 

@Slf4j - simple logging facade for java

로그를 남겨줌. 로그가 필요한 부분에 log 변수로 로그를 생성

 

@RequestParam

스프링 프레임워크에서 HTTP 요청 파라미터를 컨트롤러의 메서드 파라미터에 바인딩할 때 사용되는 어노테이션. 이를 이용하여 컨트롤러 메서드의 파라미터로 전달된 HTTP 요청 파라미터를 읽어와서 해당 파라미터에 매핑한다. 예를 들어, @RequestParam("name") String name과 같이 사용하면, HTTP 요청 파라미터 중 "name" 파라미터의 값을 name 변수에 매핑한다. @RequestParam 어노테이션에는 다양한 속성이 있다. 그 중에서도 가장 자주 사용되는 것은 다음과 같다.

  • value: HTTP 요청 파라미터 이름을 지정합니다.
  • required: 해당 파라미터가 필수인지 여부를 지정합니다. 기본값은 true입니다.
  • defaultValue: HTTP 요청 파라미터 값이 없을 때 사용할 기본값을 지정합니다.

@RequestParam 어노테이션을 이용하여 컨트롤러 메서드의 파라미터에 HTTP 요청 파라미터를 바인딩할 수 있으므로, 웹 애플리케이션에서 HTTP 요청 파라미터를 사용하여 데이터를 전달하는 경우에 매우 유용하다.


@NotBlank

반드시 값이 있고, 공백을 제외한 길이가 1 이상이다.
null이 아닌 값. 즉 공백이 아닌 문자를 하나 이상 포함한다

 

@NotEmpty

반드시 값이 있고, 길이 혹은 크기가 1 이상이다. null 이거나 empty(빈 문자열)가 아니어야 한다.

 

@NotNull 

값이 반드시 있어야 한다. null 이 아닌 값이면 어떤 타입이든 가능


Domain 관련 annotation

@Builder

            searchList.add(Post.builder()
                    .postId(post.getPostId())
                    .likeCount(post.getLikeCount())
                    .views(post.getViews())
                    .build()

 

@Getter , @Setter , @Entity

이걸 쓰면 DB에 넣어줌. 엔티티로서 다루겠다는 의미. entity와 dto는 비슷한 의미인데, dto는 다른 곳에서 쓰기가 힘들어서 범용성이 더 떨어진다.

 

@Where(clause = "deleted = false")

여기서 말하는게 소프트 딜리트이다.

  • true : db에는 있는데 조회가 안되는거
  • false : 삭제되지 않은 애들만

애당초 deleted의 디폴트를 false로 설정해놨기때문에 삭제되지 않았다면 ~~ 이라는 게 항상 true이다. 삭제한다면 이를 true로 바꿔주면 된다.

'Spring' 카테고리의 다른 글

스프링 느낀점 - 2023.03.07. 작성  (0) 2024.05.09
JPA N+1 문제  (0) 2024.05.05
Controller vs RestController  (0) 2024.03.09
RequestBody, ResponseBody  (0) 2024.03.08
Bean에 대하여  (0) 2024.03.08