2023.07.25.화.TIL

heeh·2023년 7월 25일

TIL

목록 보기
50/82
post-thumbnail

2023.07.25.화.TIL

  • 팀 회의 및 노션 작성
    • 하루계획
      • 오전
        • 09:00 ~ 13:00
          • 팀 회의
          • Spring 심화주차 KDT 실무형 스프링 백엔드 엔지니어 양성과정 2회차
      • 오후
        • 14:00 ~ 18:00
          • Spring 심화주차 KDT 실무형 스프링 백엔드 엔지니어 양성과정 2회차
          • AWS
      • 저녁
        • 19:00 ~ 21:00
          • AWS

SPRING 심화 복습

  • @BeforeEachvoid setUp() { System.out.println("각각의 테스트 코드가 실행된 전에 수행");}
  • @AfterEachvoid tearDOwn() { System.out.println("각각의 테스트 코드가 실행된 후에 수행 \n");}
  • @BeforeAllstatic void beforeAll() { System.out.println("모든 테스트 코드가 실행되기 전에 최초로 수행 \n");}
  • @AfterAllstatic void afterAll() { System.out.println("모든 테스트 코드가 수행된 후 마지막으로 수행");}
  • @DisplayName("테스트의 내용을 한눈에 알아볼 수 있게 네이밍 해줄 때")
    @Nested
        @DisplayName("주제 별로 테스트를 그룹지어서 파악하기 좋습니다.")
        @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
        class Test1 {
    
            @Order(1)
            @Test
            @DisplayName("Test1 클래스")
            void test() {
                System.out.println("\nTest1 클래스");
            }
    
            @Order(3)
            @Test
            @DisplayName("Test1 - test1()")
            void test1() {
                System.out.println("Test1.test1");
            }
  • @RepeatedTest(value = 5, name = "반복 테스트 {currentRepetition} / {totalRepetitions}")
    • test 코드의 for문
  • ctrl + n setup
    • 윈도우는 alt + ins
  • import static org.junit.jupiter.api.Assertions.*;
    • *은 Assertions 관련된 것을 모두 import
  • assertNotNull 과 assertNull
    • assertNotNull : 0이 아닌 값이 있을 것
    • assertNull : 0인 Null일 것
  • Given - When - Then 패턴
    • 테스트 코드 스타일을 표현하는 방식
    • 테스트 코드를 알아보기 쉽게!
    • Given : 줘야 할 데이터
    • When : 실행
    • Then : 검증
  • public class Calculator에 우클릭 - Generate(alt+ins) - test
  • JUnit 5 User Guide
    https://junit.org/junit5/docs/current/user-guide/#writing-tests-annotations
  • service와 repository를 분리하여 service만 테스트하고 싶을 때
    • Mock Object(가짜 객체)를 생성해서 제공
    • 제공을 해주는 라이브러리 : Mockito 라이브러리
  • willReturn
    • 어떤 값을 줄 것이냐
  • assertThrows
    • 예측 던지기?!
  • filter : product의 id와 찾으려고 하는 id 같은지 확인
  • SecurityContextHolder
    • 인증 객체를 담고 있는 context를 담는 공간
    • SecurityContext에 접근 하기 위해서는 SecurityContextHolder가 필요
  • setAuthentication
    • 인증 객체에 줌
  • .setAuthentication((Authentication) ((HttpServletRequest) req).getUserPrincipal());
    • .getUserPrincipal()하여 Authentication 객체로 바꿔서 set하는 것
    • 가짜 인증을 하는 행위!
  • public class MockSpringSecurityFilter implements Filter
    • Mockito에서 가짜 객체들을 넣어줬던 것처럼 가짜 필터를 만듦
  • @MockBean
    • 가짜 빈 만들기
  • Scratch 파일은 프로젝트와 상관 없이 특정한 메서드 혹은 코드를 수행 시켜보고 싶을 때 사용하는 파일
    • 프로젝트 내부에 생성되지 않고 Scratches & Consoles 하위에 Scratches 폴더에 java 파일(선택)이 생김
  • joinPoint.proceed 위에 핵심 기능 수행
    • joinPoint를 사용해서 proceed 메서드를 호출하면 DispatcherServlet이 보내려고 하던 Controller의 메서드를 호출
    • 요청 데이터도 보내주면서 내부적으로 수행
    • result(결과)가 되면 잡아 채기
  • 트랜잭셔널 애노테이션도 내부적으로 AOP에 의해 실행
  • HttpStatus enum : 100번 대, 200번 대, 300번 대, 400번 대 등
  • build.gradle → plugins → id ‘io,springframework.boot’ version ‘3.1.0’ 과 같은 버전을 잘 확인
    • 버전의 차이로 오류가 날 수 있음
  • Spring에서 쉽게 처리할 수 있도록 ExecprionHandler 애너테이션 제공
  • @ExceptionHandler({IllegalArgumentException.class})
    • class에서 IllegalArgumentException가 터졌을 때 @ExceptionHandler로 잡는다
    • Controller에서 예외 발생 시 잡아 챌 수 있다
  • AOP를 이용한 예외 처리 방식
    • 메서드 마다 try catch 할 필요 없음 → 깔끔한 예외 처리
  • RestControllerAdvice는 타겟팅이 ElementType.TYPE = 클래스 쪽에만 걸 수 있다
  • ControllerAdvice를 사용하는 이유
    • 예외처리라는 것을 중앙 집중화 하기 좋음
      • 클래스 내부 하나로 다 컨트롤 할 수 있으니까 편리
      • 코드 중복 방지, 유지 보수성 높임
    • 예외 처리 로직들을 모듈화해서 관리가 쉬움
      • 팀 내에서 공통된 예외 처리 로직을 공유하거나 다른 팀에서 예외 처리를 참고 할 수 있음
    • 전체적으로 개발에 대한 생선성 향상
profile
공부하자개발하자으쌰으쌰

0개의 댓글