개요 이번 글에서는 내부망 TO 내부망에 있는 웹서버를 탈 때 애플리케이션의 IP 수집과 관련해서 이야기해 보려고 합니다. 배경 사내 프로젝트 QA 환경에서 결제 API를 사용 중에 문제를 만났다. 분명 한국에서 VPN 없이 결제 시도를 했는데 해외 결제 모듈이랑 연동되는 현상을 발견했다. 결제 모듈을 불러오는 방식은 아래 플로우와 같다. Client IP 수집 수집된 IP 기반으로 국가 코드 조회 API 요청 Response된 국가 코드를 통해 결제 API 요청시 같이 파라미터로 넣어 요청 하지만 이때 국내 IP임에도 불구하고 국가 코드 조회 API가 US(미국)라는 국가 코드를 반환했다. 해당 API의 파라미터 로그를 확인해보니 IP가 사내 Private IP로 잡혀 전달되고 있었던 것이었다. IP ..
개요 이번 글에서는 Fetch API 사용시에 서버에 Request Body를 인식하지 못하는 문제를 해결하는 방법에 대해 이야기해 보려고 한다. 배경 사내에 공유할 JavaScript SDK를 개발하고 테스트하고 있었는데 아래 사진과 같이 API 응답으로 400 Bad Request를 받는 문제가 발생하였다. Request Body도 제대로 작성하였고 JSON 형태로 만들어서 Fetch API Body에 담아 보내줬는데 자꾸 API 서버의 DTO Class Validation에 걸려 400이 떨어졌다. 문제 원인 문제 원인은 개발자 도구 -> 네트워크 탭에서 확인할 수 있었다. API 요청 헤더에 위 사진의 빨간 박스 내용과 같이 Content-Type이 text/plain으로 되어 있어 API 서버쪽..
개요 이번 글에서는 Spring Data JPA에서 @ManyToOne 관계를 가지는 엔티티를 조회할 때 발생하는 N + 1 문제를 해결하는 방법에 대해 이야기해 보려고 합니다. 배경 최근에 사내에 ORM을 사용하는 프로젝트가 많아지면서 @ManyToOne 관계를 가지는 엔티티를 조회할 때 N + 1 문제에 대해 고려하지 않고 개발되어 조회 쿼리가 추가적으로 발생되는 이슈가 있어 N + 1 문제가 무엇인지 알아보고 어떻게 해결하는지에 대해 설명해 보겠습니다. N + 1 문제란? 연관 관계가 설정된 Entity를 조회할 경우에 조회된 데이터 개수(N) 만큼 연관관계의 조회 쿼리가 추가로 발생하는 문제이다. N + 1 문제 예시 - Lazy Loading @Entity @Getter public class ..
개요 저번 포스팅에서는 프로젝트에 Spring Security를 적용하여 임시적인 옵션들을 구성해 주었다. 이번 포스팅에서는 본격적인 API 개발을 위해 루트가 되는 Game 엔티티를 설계해 보겠다. Game Entity 설계(1) - 디렉토리 생성 및 클래스 생성 사진과 같이 Game이라는 도메인을 대표하는 루트 디렉토리 밑에 Entity라는 하위 디렉토리를 생성하여 Game이라는 클래스 파일을 생성해 준다. Game Entity 설계(2) - Entity 설계 package com.gamepleconnect.game.entity; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import javax.persi..