profile
꾸준하게 쌓아가자
post-thumbnail

레디스를 사용한 통합 테스트

문제상황 테스트 환경에서 임베디드 레디스를 사용해서 테스트를 진행. 예외 메세지: Unable to connect to Redis org.springframework.data.redis.RedisConnectionFailureException: Unable to con

2023년 12월 10일
·
0개의 댓글
·

Jackson 역직렬화

인수테스트에서 응답을 역직렬화하는 과정에서 아래와 같은 예외가 발생했다.2023-11-15 20:35:45.875 WARN 54421 --- o-auto-1-exec-1 .w.s.m.s.DefaultHandlerExceptionResolver : Resolved \[

2023년 11월 15일
·
0개의 댓글
·
post-thumbnail

JPA N + 1 문제 해결하기

문제상황 JPA 를 사용할 때 특정한 상황에서 추가적인 쿼리가 실행된다. 이때 DB ConnectionPool(Spring 의 경우 HikariCP 사용)은 한정 자원이므로 DB Connection 사용은 줄이는 게 좋다. 원인 JPA 의 @JoinColumn 을 사용하여 연관관계 객체를 삽입할 때 추가적인 쿼리가 실행된다.(Fetch Type 과 상관없...

2023년 10월 9일
·
0개의 댓글
·
post-thumbnail

Virtual Thread (feat. Java 21)

서론 지난달 Final RC 가 끝난 Java 21 은 9월 19일에 출시된다. 새로운 기능 중 이번에 정식으로 제공되는 Virtual Thread 에 대해서 알아봤다.(19,20 에서 preview 기능으로 제공) 본론 Virtual Thread 가 만들어진 배경

2023년 9월 6일
·
0개의 댓글
·
post-thumbnail

REST API

서론 REST API 는 HTTP 메서드로 행위를 표현하고 자원을 URI 로 표현해서 만든 API 라고 알고 있었다. 하지만 여기에 몇 가지 제약사항이 더 있다고 들었던 적이 있다. 그래서 이번에 과연 REST 는 무엇이며, 왜 만들어졌는지, REST API 를 만들기 위한 제약사항은 무엇인지, 제약사항을 지켜서 만든 REST API 는 어떤 이점이 있는지...

2023년 7월 25일
·
0개의 댓글
·
post-thumbnail

[Jackson] ObjectMapper 설정 변경하기

문제상황 응답 객체의 필드 이름을 isSelected(boolean 타입, private, Lombok @Getter 사용)로 지었는데 해당 객체를 사용하는 API 응답 값에서 isSelected 가 아닌 selected 로 출력되는 문제가 있었다. 원인 Jackso

2023년 4월 1일
·
1개의 댓글
·
post-thumbnail

ContentCachingRequestWrapper, ContentCachingResponseWrapper

문제상황 인터셉터에서 로깅 할 때 Requset, Response 의 Body 가 출력되지 않았다. 원인 먼저 ContentCachingRequestWrapper, ContentCachingResponseWrapper 를 사용한 이유는 요청, 응답의 본문 내용(In

2022년 11월 17일
·
0개의 댓글
·
post-thumbnail

RefreshToken(feat. RTR)

문제상황 F12 프로젝트에서 인가를 JWT 기반으로 구현했다. 백엔드에서 1 시간 유효기간을 가진 JWT 기반 토큰을 발급해 주면 프론트엔드는 이를 세션 스토리지에 저장해서 사용했다. 이때 문제점은 두 가지였다. 첫 번째 사용자가 1 시간마다 로그인을 다시 해야 하는 점, 두 번째 보안 문제, 세션 스토리지는 자바스크립트로 읽어 올 수 있다. 즉 해당 토큰...

2022년 11월 15일
·
0개의 댓글
·
post-thumbnail

submodule 적용하기

문제상황 프로젝트에 포함된 Credential 관련 내용(DataSource, 인증, 인가에 관련된 설정 등)들이 Public Repo 에 그대로 노출될 위험이 있다. 해결 첫 번째 해결 방법 Jasypt(Java Simplified Encryption) 암호화 라이

2022년 11월 10일
·
0개의 댓글
·
post-thumbnail

Tomcat

우테코에서 톰캣 구현 미션을 하면서 구성요소와 동작 과정을 짧게 정리했다. 톰캣(WAS) 의 역할 서블릿 객체 관리(생성, 초기화, 호출, 종료) HttpServletRequest, HttpServletResponse 생성 톰캣 컴포넌트 구성 Coyote(HTT

2022년 11월 8일
·
0개의 댓글
·
post-thumbnail

Decorator pattern vs Subclassing

새로운 기능을 추가할 경우 사용할 수 있는 디자인 패턴이다. subclassing(상속) 을 사용하는 경우보다 더 효율적일 가능성이 있다. Subclassing 을 하는 경우 기존의 클래스를 상속하는 경우 상위 클래스가 변경되면 하위 클래스가 영향을 받을수 있

2022년 11월 2일
·
0개의 댓글
·
post-thumbnail

페이징 성능 개선

문제 상황 fetch join 을 통해 N+1 문제를 해결하고 성능테스트를 해본 결과 최근 리뷰 조회 시 평균 latency 가 4 초. 개선이 필요했다. 원인 offset 을 사용한 페이징 방식 offset 을 사용하면 항상 첫 번째 row 부터 읽어온다.(그 뒤

2022년 11월 1일
·
0개의 댓글
·
post-thumbnail

토비의 스프링 테스트

이번 기회에 스프링으로 프로젝트를 하면서 스프링 테스트에 대해 정리하고자 토비의 스프링 2장 테스트를 읽어봤다. 다음은 정리한 내용들이다. 틀린 부분이 있다면 피드백 부탁드립니다! > 스프링이 개발자에게 제공하는 중요한 가치중 하나가 테스트이다. 테스트의 유용성 테

2022년 10월 16일
·
0개의 댓글
·
post-thumbnail

ExceptionHandler 에서 @CookieValue 를 사용할 수 없는 이유

문제상황 RefreshToken 이 유효하지 않은 경우 예외를 던지고 쿠키가 삭제되도록 구현했다. Controller 에서 사용했던 것 처럼 @CookieValue 를 사용해 쿠키를 인자로 받으려고 했지만 해당 테스트가 계속 실패했다.(해당 ExceptionHandl

2022년 9월 17일
·
0개의 댓글
·
post-thumbnail

HTTP Cache

캐시의 생명 주기(cache-control) no-cache(강제 재검증) vs no-store(캐싱을 하지않음) cache-control에 no-cache 로 설정하면 캐시를 사용하지만 항상 서버(프록시서버, 리버스 프록시서버, CDN

2022년 9월 3일
·
0개의 댓글
·
post-thumbnail

HTTPS 적용 및 통신 과정

팀 프로젝트에 HTTPS 를 적용한 과정과 HTTPS 통신 과정을 정리했다. 먼저 HTTPS 는 두 가지 방법으로 적용해 봤다. 직접 인증서를 발급 받아 Nginx 에서 설정하기 CloudFlare 를 사용해서 HTTPS 적용하기 1. 직접 인증서를 발급 받아

2022년 8월 10일
·
0개의 댓글
·
post-thumbnail

@ModelAttribute를 생략할 수 있는 이유

@ModelAttribute 는 요청 파라미터를 객체로 바인딩할때 사용된다. 그리고 생략이 가능하다 는 특징이 있다. 어떻게 생략이 가능한걸까? spring 내부를 뜯어보자. 먼저 빈이 등록되는 과정중에 afterPropertiesSet() 메서드를 통해 Argume

2022년 7월 2일
·
2개의 댓글
·
post-thumbnail

Pageable 사이즈 제한하기

문제상황 Spring 에서 제공하는 Pageable 을 사용해서 페이징 기능을 구현했다. 이때 F12 서비스에 맞지 않게 많은 page size 를 요청하는 경우 서비스 레이어에 들어오기 전에 제한할 필요가 있었다. 원인 Spring 에서 제공하는 PageableHandlerMethodArgumentResolver 를 사용해서 기존 설정을 바꿀 수 없었다...

2022년 7월 2일
·
2개의 댓글
·
post-thumbnail

[CORS] Preflighted request

문제상황 프론트엔드와 연동해서 데모하는 과정 중 인가가 필요한 API 호출을 하면 백엔드 서버에 예외가 발생했다. 원인 브라우저가 보낸 예비 요청(OPTIONS 메서드)에는 토큰값이 담기지 않기 때문에 인가 인터셉터의 토큰 검증 과정(preHandle 메서드)에서

2022년 6월 14일
·
2개의 댓글
·
post-thumbnail

예외는 진짜 예외 상황에만 사용하라

문제상황 이번 체스 미션을 진행하면서 여러 검증 메서드를 많이 만들었다. 검증을 할때 기준없이 boolean 타입을 반환 하거나 예외를 던지니 코드를 읽기 불편했다. 원인 중간에 예외를 던지면 편하게 로직의 흐름에 신경을 쓰지않아도 돼서 예외를 남용하게 됐다. 해결 흐름제어로 사용된 예외를 처리할때 내가 예상하지 못한 부분의 예외까지 처리될 가능성이...

2022년 4월 4일
·
0개의 댓글
·