회사에서 Spring Cloud Gateway를 기반으로 Gateway 서버를 개발하고 잘 운영하고 있었는데, B2B로 서버를 납품했을 때 문제가 발생했었다. 부산에서 제주도에 위치한 서버 API를 호출하는데, 지연 시간이 적게는 5초에서 길게는 15초에서 20초 사이였다. 사실 서버의 문제라기 보다는 네트워크 망의 문제인 것 같은데, 납품되는 곳이 제주도에 위치한 IDC 센터이고, 국정원에서 보안감사를 하고 있어서 패킷 덤프 뜰 수도 없어, 일단 Gateway 서버와 다운 스트림(엣지 뒤에 있는 서비스 서버) 간의 request response 시간대를 보고자 로그를 볼 필요성이 있었다. 감사하게도, Spring Cloud Gateway에서는 해당 기능을 제공하고 있다. cloud.spring.io/s..
현재 내가 일하고 있는 회사의 서버팀에서는 Spring Boot 기반으로 모든 API 서버를 만들며 (목적에 따라 Node 또는 Go, C++로 작성된 서버도 있다.) Docker를 이용하여 애플리케이션을 배포하고 있다. Spring Boot 프로젝트를 어떻게 Docker Image로 만드는지 간단하게 예시와 설명을 해보겠다. 1) spring boot 프로젝트 만들기 우선 간단하게 Spring Boot 프로젝트를 만들어보자. spring boot 2.3.4 기반의 gradle 프로젝트이며, build.gradle에 사용된 라이브러리는 다음과 같다. plugins { id 'org.springframework.boot' version '2.3.4.RELEASE' id 'io.spring.dependenc..
스프링 부트 기반의 어플리케이션을 Docker Container에 올리는 방법을 설명해보겠다. Dockerizing이라는 말은 대상 어플리케이션을 Docker Image로 만들어 Docker에서 Container로 구동 가능한 형태를 만드는 것을 의미한다. 먼저 간단하게 Spring Boot Application을 만들어보자. File -> New Project -> Spring Initializer Next Dependencies -> Web -> Spring Web Click Next 간단하게 hello world를 리턴하는 Controller를 만들어본다. package com.tistory.johnmark.demo; import org.springframework.web.bind.annotatio..
최근 기존에 NodeJS와 Typescript, NestJS으로 이루어진 API 서버를 Java와 Spring Boot 환경으로 마이그레이션 작업을 진행하고 있다. 그중 Spring Security를 적용하면서 REST API 형태로 JSON으로 Login 요청을 날리면 Spring Security에서는 데이터를 받지 못하고 해당 요청을 Block 하는 이슈가 있어서 이를 확인하고 해결한 과정을 기록해본다. Spring Security는 여러개의 Filter들이 묶여서 동작하는 Filter Chain으로 이루어져 있다. 그렇다면 Login을 담당하는 Filter는 어떤 것일까? SecurityConfiguration 클래스를 작성하다 보면 다음과 같은 메소드를 볼 수 있을 것이다. package com...
최근 Spring Boot, Spring Boot Data Jpa, Hibernate를 사용하면서 Spring Boot Data JPA 프로젝트에서 Querydsl을 적용하는 방법에 대하여 알려드리겠습니다. 먼저 Querydsl 관련 플러그인을 다음과 같이 추가해줍니다. 그다음, querydsl 라이브러리를 dependencies에 다음과 같이 추가해줍니다. 이후, gradle에서 querydsl을 통해 Qclass를 생성하기 위하여 QClass가 생성될 디렉토리의 위치와 관련 설정들을 작성하는 Task를 다음과 같이 추가해줍니다. Java 플러그인에는 Source Set이라는 개념이 들어가 있으며, 이는 함께 컴파일과 실행되는 소스 파일들의 그룹들을 뜻합니다. 다음과 같이 자바 코드와 QClass가 같..
Spring Boot의 기본 로그 객체는 Logback으로 SLF4j의 구현체이다. Spring Boot 프로젝트를 실행하면 아래와 같이 LogBack의 기본 로그 포맷이 콘솔에 찍히게 된다. 업무에 사용되는 모니터링 시스템이나, 로깅 시스템에 따라 로그 포맷을 바꿔야 하는 경우가 있는데 이러한 경우 다음과 같은 방법으로 로그 포맷을 변경할 수 있다. 1. application파일에서 로깅 포맷을 변경 (저는 yml 형태로 application 파일을 설정합니다.) [ resources/application.yml ] logging: pattern: console: "%cyan([GatewayServer]) - %magenta([%d{yyyy:mm:dd HH:MM:ss}]) - %highlight([%-..