[TIL] Filter예외 처리, 서버 배포

2025. 2. 19. 23:43·TIL
728x90
반응형
SMALL

오늘 한 일

  • Entity 연관관계 설정
  • 서버 배포 준비
  • Filter 로직 수정

작업 내용

Entity 연관관계 설정

각 팀원들이 생성한 Entity를 전체적으로 검토하고 잘못된 엔티티나 필드명이 있는지 점검하는 시간을 가졌다.

이 과정 또한 PR을 통해 코멘트를 달고 해결하는 과정이 이루어졌다. 그 과정에서 UUID, ID라는 변수명이 각 타입에 맞지 않게 생성되어있는 것을 발견하고 추가로 컨벤션을 작성하였다.

서버 배포 준비

Docker와 GitActoins를 사용한 배포 방식과 Code Deploy와 Docker를 사용한 배포 방식을 고민하게 됐다.

이전에는 Docker와 GitActions를 사용해봐서 새로운 방식으로 배포방식을 사용해볼까 고민했었다. 하지만 Code Deploy는 AWS중심의 배포 방식이라 이후에 다른 서버를 사용하게 된다면 그 과정에서 별도의 파일을 또 생성해야할까 하는 고민이 있었다. 이 고민은 이후에 추가로 공부하고 포스팅해볼 예정이다.

Filter로직 수정

이전 코드에서 관과한게 하나 있다. Authenticaion과 관련된 예외는 SpringSecurity가 감지해서 이를 처리해주지만 내가 직접 만든 CustomJwtException을 사용하게 되면 감지를 못한다는 것이다.
그래서 내가 원하는 커스텀 예외 메세지가 아닌 500 서버에러가 발생했다.

try {
            String accessToken = jwtHelper.resolveToken(request);
            if (accessToken != null && jwtHelper.validateToken(accessToken)) {
                Authentication authentication = jwtHelper.getAuthenticationFromAccessToken(accessToken);
                SecurityContextHolder.getContext().setAuthentication(authentication);
                filterChain.doFilter(request, response);
                return;
            }
        } catch (CustomJwtException e) {
            request.setAttribute("httpStatus", e.getHttpStatus());
            request.setAttribute("message", e.getMessage());
            request.setAttribute("code", e.getCode());
        }

그래서 이 부분은 직접 출력하는 방식으로 개선했다. 직접 response에 ObjectMapper로 메세지와 코드를 담아 반환시키는 방식으로 수정했다.

try {
            String accessToken = jwtHelper.resolveToken(request);
            if (accessToken != null) {
                jwtHelper.validateToken(accessToken);
                Authentication authentication = jwtHelper.getAuthenticationFromAccessToken(accessToken);
                if (authentication != null) {
                    SecurityContextHolder.getContext().setAuthentication(authentication);
                    filterChain.doFilter(request, response);
                    return;
                }
            }
        } catch (CustomJwtException e) {
            log.error("JWT validation failed: {}", e.getMessage());

            //response에 바로 에러 응답을 설정하여 필터 체인 중단
            response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");
            response.setStatus(e.getHttpStatus().value());

            // ObjectMapper로 예쁘게 출력할 수 있도록 수정
            String errorResponse = String.format("{\"status\": \"%s\", \"message\": \"%s\", \"code\": \"%s\"}",
                    e.getHttpStatus(), e.getMessage(), e.getCode());

            response.getWriter().write(errorResponse);
            return;
        }
728x90
반응형
SMALL

'TIL' 카테고리의 다른 글

[Spring Security 예외 처리] 인증 및 인가에 대한 예외처리 방법  (0) 2025.02.25
[TIL] Stream 활용하기, CI/CD 파이프라인 개발, 엔티티 개발 협업  (0) 2025.02.20
[TIL] 팀원간 코드 리뷰 진행 및 인덱스가 많아지면 생기는 문제, JPA의 flush 발생하는 조건  (0) 2025.02.18
[TIL] SoftDelete 개발 방식, 서브 모듈 설정, PR 및 Postman으로 API문서 공유하기  (0) 2025.02.17
[TIL] Spring Security 예외 설정 , S3 설정, JWT 구현, JPA Auditawre  (0) 2025.02.15
'TIL' 카테고리의 다른 글
  • [Spring Security 예외 처리] 인증 및 인가에 대한 예외처리 방법
  • [TIL] Stream 활용하기, CI/CD 파이프라인 개발, 엔티티 개발 협업
  • [TIL] 팀원간 코드 리뷰 진행 및 인덱스가 많아지면 생기는 문제, JPA의 flush 발생하는 조건
  • [TIL] SoftDelete 개발 방식, 서브 모듈 설정, PR 및 Postman으로 API문서 공유하기
공부하고 기억하는 공간
공부하고 기억하는 공간
IT 비전공자로 시작하여 훌륭한 개발자가 되기 위해 공부하고 있는 공간입니다. 틀린 내용이나 부족한 부분이 있으면 댓글로 알려주세요 바로 수정하겠습니다.
    250x250
  • 공부하고 기억하는 공간
    IT - railroad
    공부하고 기억하는 공간
  • 전체
    오늘
    어제
    • 분류 전체보기 (325)
      • 면접 준비 (22)
        • OS (6)
        • Spring Security (0)
        • Java (3)
        • DB (11)
        • Network (3)
      • ElasticSearch (2)
      • Kafka (4)
      • Spring (22)
        • Spring Cloud (7)
        • Security6 (5)
        • JPA (12)
        • 프로젝트 리팩토링 회고록 (4)
        • Logging (8)
        • Batch (2)
      • Redis (17)
        • Redis 개념 (8)
        • Redis 채팅 (5)
        • Redis 읽기쓰기 전략 (1)
      • AWS (11)
      • 리눅스 (29)
        • 리눅스 마스터 2급 (5)
        • 네트워크(기초) (7)
        • 리눅스의 이해 (6)
        • 리눅스의 설치 (2)
        • 리눅스 운영 및 관리 (6)
      • JAVA-기초 (16)
        • JAVA기본 (11)
        • Design Pattern (5)
      • JSP (27)
        • JSP 기본 개념 (10)
        • JSP (1)
      • SQL (1)
      • TIL (36)
      • 문제 풀이 (2)
        • Programmers (9)
        • 백준 문제풀이 (28)
      • JavaScript (10)
      • HTML (17)
      • Ngrinder (1)
        • Ngrinder 문서 정리 (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      스프링프레임워크
      레디스
      자바기초
      redis 채팅
      자바 면접
      CSS
      Til
      리눅스
      자바
      Springframework
      java
      자바 알고리즘
      jsp기초
      spring redis
      HTML
      자바 면접질문
      jsp request
      리눅스마스터2급정리
      자바스크립트
      JSP
      Spring
      JS
      Spring Data Redis
      백준
      JavaScript
      springsecurity
      redis
      자바 반복문
      프로그래머스
      리눅스마스터2급
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    공부하고 기억하는 공간
    [TIL] Filter예외 처리, 서버 배포
    상단으로

    티스토리툴바