GrowMe

SpringBoot 주요 애너테이션과 메서드 및 주의사항(지속 업데이트 중) 본문

About Spring

SpringBoot 주요 애너테이션과 메서드 및 주의사항(지속 업데이트 중)

오늘도 타는중 2022. 6. 19. 23:02
@Annotation과 그 관련 메서드
# SpringBoot
# Test

 

  • @SpringBootApplication : 라이브러리의 자동 설정 및 Bean 읽기와 생성을 자동으로 시켜준다. 항상 프로젝트의 최상단에 위치해야 그 하위 패키지의 파일 설정을 도와줄 수 있다. 또한 내부 run 메서드로 내장 WAS를 실행한다.
  • @RestController : 컨트롤러를 JSON을 반환하는 컨트롤러로 만들어준다. @Controller + @ResponseBody
    -) view가 아닌 객체를 리턴한다.
  • @ExtendWith : 테스트 진행 시, JUnit 내장 실행자 외, 다른 실행자를 실행시키며, 스프링부트 테스트와 JUnit의 연결자 역할을 한다.
  • @WebMvcTest : 웹에서의 요청과 응답을 전체 애플리케이션 실행이 아닌, Controller만을 로드하여 테스트
    - MockMvc : 웹 API 테스트 시 사용하며, HTTP GET, POST 등에 대한 API 테스트 가능
    - perform() : MockMvc가 제공하는 메서드로, 브라우저에서 서버에 URL 요청을 하듯 컨트롤러를 실행
    -> ResultActions 객체를 리턴
  • andExpect() : ResultActions 객체의 하위 메서드로 서버의 응답 결과를 검증한다.. MockMvcResultMatchers 객체에 정의된 정적 메서드를 인자로 받음. MockMvcResultMatcher 객체는 컨트롤러가 어떤 결과를 전송했는지를 나타낸다.
  • MockMvcResultMatcher가 제공하는 메서드
    • 응답상태 코드 : isOk(), isNotFount(), is(int status) 등
    • 뷰/리다이렉트 검증 : view().name("user"), redirectedUrl("/user") 등
    • 모델 정보 검증 : model().attributeExists(String name) 등
  • @Autowired : 스프링이 관리하는 Bean을 주입 받는다.
  • @Getter : 선언된 모든 필드의 get 메소드 생성
  • @RequiredArgsConstructor : final 필드가 포함된 필드의 생성자를 생성
  • @NoArgsConstructor : 기본 생성자 자동 추가
  • assertThat() : 검증하고 싶은 대상을 인자로 받는다. 메서드 체이닝 지원으로, isEqualTo와 이어서 사용 가능하다.
  • isEqualTo() : assertThat에 있는 값 == isEqualTo의 값일 때 성공
  • @RequestParam : 외부에서 API로 넘긴 파라미터를 가져온다.
    - param() : API 테스트 시, 사용될 요청 파라미터를 설정. String 값만 허용.
  • @RequestBody : HTTP 요청의 바디 내용(JSON)을 자바 객체로 변환해서 매핑된 메소드 파라미터로 전달.
  • @ResponseBody : 자바 객체를 HTTP 요청의 바디(JSON)으로 변환하여 클라이언트로 전송.
  • jsonPath() : JSON 응답값을 필드별로 검증 가능한 메서드. $를 기준으로 필드명을 명시.
  • @Entity : 테이블과 링크될 클래스. 기본값 : (ex : SalesManager.java -> sales_manager table
  • @ID : 해당 테이블의 PK 필드임을 명시
  • @GeneratedValue : PK의 생성 규칙을 나타냄
  • @Column : 테이블의 칼럼을 나타냄. @Entity가 붙은 클래스의 필드는 모두 칼럼이 된다(생략가능).
    -> 사용하는 이유는 주로, 기본값 이외 추가로 변경 필요할 시 사용.
  • @Builder : 해당 클래스의 빌더 패턴 클래스 생성. 생성자 상단에 선언 시, 생성자에 포함된 빌더에 포함.
    - builder() : @Builder 붙은 클래스의 객체(선택자)를 생성. (ex : Example.builder().a(a).b(b).build();
  • @AfterEach : 단위 테스트가 끝날 때마다 수행되는 메서드 지정
  • @SpringBootTest : 실제 애플리케이션을 자신의 로컬에 올려 포트 주소가 Listening되고,
    실제 Database와 연결되는 Live 테스트. 내부의 webEnvironment 속성을 사용해 테스트를 자세히 정의 가능.
  • @LocalServerPort : 실제 실행되는 포트번호를 해당 필드에 주입.
  • @PathVariable : 요청 URL의 구분자로 파라미터에 해당하는 변수를 지정해줄 때 사용.
  • @Transactional : 해당 메서드를 하나의 트랜잭션으로 구분해준다. 메서드 바디에 커밋과 롤백을 자동 추가해준다.
  • @EntityListeners : 해당 클래스(BaseTimeEntity)에  event 전과 후에 대한 콜백을 처리하고 코드를 실행하는 방법
  • @MappedSuperclass : 어떤 클래스(Entity)가 해당 BaseTimeEntity을 상속하면, createdDate, modifiedDate 필드 또한 칼럼으로 인식하도록 함.
  • @CreatedDate : Entity가 생성되어 저장될 때, 시간이 자동 저장된다.
  • @LastModifiedDate : 조회한 Entity의 값을 변경할 때 시간이 자동 저장된다.
  • @EnableJpaAuditing : JPA Auditing(조회, 변경 등 이벤트 등이 일어나는지 체크)을 활성화.

SpringBoot 주의사항 및 알아야할 사항들

*SpringBoot는 내장 WAS 사용을 권장한다. (언제 어디서나 같은 환경에서 스프링부트 배포가 가능하기 때문)

 

*Spring에서는 Bean을 주입받는 방식 중, 생성자로 주입받는 방식을 권장한다.

   -에러를 컴파일 단에서 잡을 수 있고, 주입을 한번에 받을 수 있어 편리하기 때문.

 

*Entity 클래스를 Request/Response 클래스로 사용해서는 안된다.

 

*단위테스트의 장점

1. 빠른피드백이 가능하며, 수동검증이 필요 없어진다.

2. 기능에 대한 불확실성을 줄일 수 있다.

3. 개발 단계 초기에 문제 발견하도록 도와준다.

4. 단위 테스트 자체가 시스템에 대한 실제 문서로 제공될 수 있다.

5. 기능 추가, 코드 리팩토링 및 라이브러리 업그레이드 시, 기존 기능이 잘 작동하는지 확인 가능하다.

 

Comments