ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.