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

@JsonFormat 과 TimeZone 설정

문제상황: DB 에 저장된 시간대가 UTC 기준으로 저장되고 조회됨. 해결방법: application.yml 파일에 spring.jpa.properties.hibernate.jdbc.time_zone = Asia/Seoul 설정하면 된다. 역할: 데이터베이스에 날짜

2024년 2월 13일
·
0개의 댓글
·
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일
·
0개의 댓글
·
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일
·
3개의 댓글
·
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개의 댓글
·