본문 바로가기

Spring29

Spring 프로젝트 되살리기 9 - API 로깅 기능 구현 (AOP) 이전 이야기https://record47584.tistory.com/94 Spring 프로젝트 되살리기 8 - 인가(Authorization) 인터셉터 구현이전 이야기https://record47584.tistory.com/93 Spring 프로젝트 되살리기 7 - 리팩토링 4 (record, 정적 팩토리 메서드)이전 이야기https://record47584.tistory.com/91 Spring 프로젝트 되살리기 6 - 유닛 테스트 코드 고record47584.tistory.com 시나리오 9관리자 api 기능을 요청했을 때, 요청 시간과 요청자 id, request/response body 값을 로깅해달라는 요청이 들어왔다. AOP를 이용해 이를 구현해보자 (AOP에 대한 개념과 구현 방법은 아래 .. 2026. 7. 27.
AOP(Aspect-Oriented Programming)의 개념과 구현 AOP(Aspect-Oriented Programming)란? 여러 클래스에 공통으로 필요한 로직(로깅, 트랜잭션, 실행시간 측정 등)을 비즈니스 로직과 분리해서 한 곳에 모아두는 방식만약 모든 api의 실행 시간을 체크해야 한다면, 모든 api에 시간 측정 코드를 넣는게 아닌, 반복되는 부분을 별도 클래스로 빼서, "실행시켜야 할 대상"만 지정하면 자동으로 앞뒤에 끼어들게 만드는 방식우리가 자주 쓰는 @Transactional도 AOP로 구현됨 API 전체 처리 경로더보기클라이언트 요청 │ ▼① Filter (JwtFilter 등) - 요청 방향 │ - request.setAttribute("userId", ...) 등 세팅 │ - chain.doFilter() 호출 ▼.. 2026. 7. 27.
Spring 프로젝트 되살리기 8 - 인가(Authorization) 인터셉터 구현 이전 이야기https://record47584.tistory.com/93 Spring 프로젝트 되살리기 7 - 리팩토링 4 (record, 정적 팩토리 메서드)이전 이야기https://record47584.tistory.com/91 Spring 프로젝트 되살리기 6 - 유닛 테스트 코드 고치기이전 이야기https://record47584.tistory.com/90 Spring 프로젝트 되살리기 5 - 리펙토링 3 (@EntityGraph 적용)이전 이record47584.tistory.com 시나리오 8더보기@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOEx.. 2026. 7. 27.
Spring 프로젝트 되살리기 7 - 코드 리팩토링 4 (record, 정적 팩토리 메서드 적용) 이전 이야기https://record47584.tistory.com/91 Spring 프로젝트 되살리기 6 - 유닛 테스트 코드 고치기이전 이야기https://record47584.tistory.com/90 Spring 프로젝트 되살리기 5 - 리펙토링 3 (@EntityGraph 적용)이전 이야기https://record47584.tistory.com/89 Spring 프로젝트 되살리기 4 - 코드 리펙토링 2 (@Valid 적용)이전record47584.tistory.com 시나리오 7이제 프로젝트에 기능적으로 문제될 것은 없어보인다. 그럼 좀 더 유지보수가 편하도록 코드를 수정해보자. 리팩토링 1 - class를 record로 변경record 자료형을 쓰면 더 간결하게 DTO를 작성할 수 있다... 2026. 7. 26.
인터셉터(Interceptor)의 개념과 구현 인터셉터(Interceptor)란? Controller가 호출되기 전/후를 가로채서 공통 로직을 실행하는 Spring MVC의 기능 DispatcherServlet이 Handler(Controller)를 찾은 다음, 그 Controller를 호출하기 직전과 직후 시점에 끼어든다.주로 인가에 대한 책임을 가짐 왜 필터(Filter)가 아니라 인터셉터(Interceptor)에서 인가를 책임지는가? 작은 프로젝트에서는 괜찮을 수 있지만, API가 많아지고 세분화되면 다음과 같은 이유로 필터가 인가를 처리하는데 어려움을 가지게 된다. 어떤 Controller가 호출될지 모름Controller 메서드 단위의 판단을 할 수 없음URL 패턴만으로는 인가 로직이 허술해짐Filter로 인가를 처리하면 URL 패턴에만.. 2026. 7. 25.
Spring 프로젝트 되살리기 6 - 유닛 테스트 코드 고치기 이전 이야기https://record47584.tistory.com/90 Spring 프로젝트 되살리기 5 - 리펙토링 3 (@EntityGraph 적용)이전 이야기https://record47584.tistory.com/89 Spring 프로젝트 되살리기 4 - 코드 리펙토링 2 (@Valid 적용)이전 이야기https://record47584.tistory.com/88 Spring 프로젝트 되살리기 3 - 코드 리펙토링 1 (중첩 if문 제거record47584.tistory.com 시나리오 6 이제 코드에 큰 문제는 없어보인다. 유닛 테스트를 진행하려는데 실패하는 테스트들이 존재한다.프로젝트 코드가 문제인가? 테스트 코드가 문제인가? 확인하고 수정해보자. 트러블 슈팅 1@Testpublic vo.. 2026. 7. 25.