Jin's Dev Story

[SpringBoot] @Annotation 본문

Web & Android/SpringBoot

[SpringBoot] @Annotation

woojin._. 2023. 10. 14. 10:02
  • 소스코드에 @어노테이션의 형태로 표현하며 클래스, 필드, 메소드의 선언부에 적용할 수 있는 특정기능이 부여된 표현법을 말함
  • 애플리케이션 규모가 커질수록, xml 환경설정이 매우 복잡해지는데 이러한 어려움을 개선시키기 위해 자바 파일에 어노테이션을 적용해서 개발자가 설정 파일 작업을 할 때 발생시키는 오류를 최소화해주는 역할
  • 어노테이션 사용으로 소스 코드에 메타데이터를 보관할 수 있고, 컴파일 타임의 체크뿐 아니라 어노테이션 API를 사용해 코드 가독성도 높여줌

 

@Bean

  • 객체 생성

@Autowired

  • 객체 자동 주입

@Valid

  • validation 실행

@Controller

  • 컨트롤러 클래스 내의 메소드의 리턴 타입으로 문자열을 사용했을 때, 문자열에 해당하는 View를 찾아서 클라이언트에게 반환해준다.

@GetMapping(”/”)

  • @RequestMapping(value=”/”, method=RequestMethod.GET)을 사용해도 동일
  • GET 방식을 “/” 요청이 들어왔을 때 실행될 메소드

model.addAttribute(String name, Object value);

  • View의 속성명에 맞는 data가 전달 됨
  • model 객체에 data 담기

@Enumerated(EnumType.STRING)이 어노테이션을 붙이지 않으면 정수가 저장된다. (0, 1, 2 ... )

  • Enum 값을 String으로 저장하고 싶을 때 사용

@Log4j2

  • 로그 사용

Lombok 관련

@Getter

  • Getter 메소드 생성

@Setter

  • Setter 메소드 생성

@Builder

  • builder() : 빌더 클래스의 인스턴스 생성
  • build() : 실제 생성자 호출하여 객체 생성
  • 빌더 패턴을 자동으로 생성해준다.

@NoArgsConstructor(access = AccessLevel.PROTECTED)

  • 파라미터가 없는 기본 생성자 생성
  • 생성자를 통해서 값 변경 목적으로 접근하는 메시지들 차단
  • @Entity 적용시 기본생성자는 필수이기 때문에 롬복에서 제공하는 이 어노테이션을 사용한다.

@AllArgsConstructor

  • @Builder와 @NoArgsConstructor를 함께 사용시 모든 매개 변수를 받는 생성자가 없으면 에러가 발생한다.
  • 모든 필드 값을 파라미터로 받는 생성자 생성

@ToString

  • 가능하면 안적는게 좋음
  • 내용을 보기 위해 사용

@Date

  • 롬복에서 제공하는 어노테이션
  • @Getter, @Setter, @ToString 모두 포함


REST 관련

@RestController

  • Controller가 REST 방식을 처리하기 위한 것

@RequestMapping

  • REST API 호출 시 작성된 URL의 method 값에 따라 맵핑 시켜준다.

@ResponseBody

  • JSP 같은 View로 전달되는 것이 아니라 데이터 자체를 전달

@RequestBody

  • HTTP 요청의 body를 자바 객체로 변환 시켜준다.

@PathVariable

  • 주소의 일부분을 변수로 사용하고 싶을 때 사용하는 어노테이션
  • 사용 시 null이나 공백이 들어가면 안됨
  • 컨트롤러에서 url 입력할때 { 변수명 } 으로 작성하고
    @GetMapping("/{id}")
    
  • 메소드 정의할 때 @PathVariable("변수명")
    public String test(@PathVariable Long id){

@RequestParam

  • HTTP를 통하여 받아온 데이터를 단일 파라미터로 변환해준다.

Entity

@Lob

  • 255개 이상의 문자를 저장하고 싶을 때 지정
  • Large Object

@Entity

  • 기본적으로 클래스 이름과 동일한 테이블과 매핑된다.
  • 엔티티와 테이블명을 다르게 하고 싶을 땐 @Table 사용
  • JPA를 사용해서 테이블과 매핑할 클래스에 필수로 붙여야 한다.

@Table

  • 테이블 이름은 원래 클래스 이름으로 저장되는데, @Table(name=”이름”)을 사용하면 원하는 테이블 이름으로 저장 가능

@Id

  • 엔티티의 필수 어노테이션으로서 @Id가 없는 엔티티는 사용할 수 없다.
  • 테이블의 키본키를 매핑한다

@DynamicUpdate

  • 실제 값이 변경된 컬럼으로만 update 쿼리를 만들어주는 어노테이션

@GeneratedValue(Strategy = GenerationType.AUTO)

  • id 값을 따로 할당하지 않아도 데이터베이스가 자동으로 AUTO_INCREMENT를 하여 기본키를 생성해줌
  • 기본키 생성을 데이터베이스에게 위임하는 방식

@Column

  • 필드와 컬럼을 매핑할 때 사용한다.

@JoinColumn

  • 외래키를 매핑할 때 사용한다.

테스트 관련

@Test

  • @SpringBootTest와 함께 사용
  • Unit Test를 위해 사용

@DisplayName

  • ex) @DisplayName(”상품명 조회 테스트”)
  • 테스트 이름 지정

@SpringBootTest

  • 테스트 케이스가 실행될 때 테스트에 필요한 모든 설정과 빈들을 자동으로 초기화 하는 역할

@Transactional

  • Transactional을 붙이면 테스트는 가능하나 DB에 저장이 되지 않는다.

서비스

@Service

  • 서비스 레이어 클래스인 것을 명시

@Transactional

  • 해당 범위의 메서드가 트랜잭션이 되도록한다

@RequiredArgsContructor

  • 클래스의 의존성 관계가 변경될 때마다 생성자 코드를 수정할 필요가 없다.
  • @Service @Transactional @RequiredArgsConstructor public class MemberService { private final MemberRepository memberRepository; }
  • final이 선언된 모든 필드를 인자값으로 하는 생성자를 생성해준다.

빈 관련

@Bean

  • 개발자가 컨트롤이 불가능한 외부 라이브러리들을 Bean으로 등록하고 싶은 경우에 사용

@Component

  • 개발자가 직접 컨트롤이 가능한 Class들의 경우 사용

@Configuration

  • 설정 파일로 사용 시

@EnableJpaAuditing

  • 감시 기능

'Web & Android > SpringBoot' 카테고리의 다른 글

[SpringBoot] 한글 변환(\u~)  (0) 2023.10.14
[SpringBoot] 에러 처리  (0) 2023.10.14
[SpringBoot] 페이징 처리  (0) 2023.10.14
[SpringBoot] ResponseEntity  (0) 2023.10.14
[SpringBoot] Entity  (0) 2023.10.14