기타 19

윈도우에서 PostgreSQL의 PSQL(UTF8) 사용 시 한글 깨짐 문제 해결

대충 위와 같은 문제가 생겼을 때 해결 방법이다.(필자는 PSQL에서 client_encoding 설정을 UTF8로 했을 때 일부 한글이 깨졌음.)   발생 원인: 윈도우 자체에서 사용하는 코드 페이지하고 윈도우 터미널의 코드 페이지가 달라서 생기는 문제  해결 방법: 윈도우 터미널의 코드 페이지를 UTF8로 설정하고 윈도우 자체의 코드 페이지도 UTF8 로 사용하게끔 설정하면 해결 가능 콘솔창 코드 페이지 UTF8 설정 방법: 레지스트리 편집기에서 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage 경로에 OEMCP 데이터 값을 65001 로 변경하거나 cmd에서 실행할 때마다 chcp 65001 명령 사용하여 적용 윈도우 코드 페이지 U..

Spring Security 세션 정책 적용되지 않는 문제 해결

Spring Security에서 위와 같이 동시 로그인을 차단하는 세션 정책을 설정하였으나 적용되지 않는 문제가 발생했다.       문제의 원인을 파악하고자 스프링 시큐리티에서 제공하는 세션 관련 클래스들을 찾아봤다. 그 중 동시 접속과 관련된 세션 처리를 하는 ConcurrentSessionControlAuthenticationStrategy.class 를 발견할 수 있었고 브레이크 포인트를 찍어서 디버깅해보았다. 위 사진에 보면 sessionRegistry.getAllSessions() 메서드를 호출하는데, 인증 객체의 Principal 값을 토대로 그것과 유사한 모든 세션을 조회해오는 메서드이다. 여기서 Principal 은 UserDetails 를 상속받은 클래스를 말한다.   실제 동작을 보면..

Prometheus 를 사용하고 AlertManager 를 통해 서버 부하 알림 전송 해보기

이번 게시물에서는 서버 모니터링 도구인 Prometheus 를 사용하고, 서버에 부하가 발생되면 AlertManager 를 통해 Slack 으로 알림을 전송해보도록 하겠다.     1. 애플리케이션 설정  먼저 애플리케이션에 위와 같이 의존성을 추가해준다. Micrometer 에서 제공하는 Metric 정보를 Prometheus 가 읽을 수 있도록 변경해주는 역할을 하게 해준다.      yml 파일에서 Spring Actuator 의 EndPoint 를 설정해준다.      설정을 마치고 애플리케이션을 구동한 후 /actuator/prometheus 경로에 접속해보면 Micrometer에서 제공해주는 metric 정보들을 Prometheus 가 읽을 수 있도록 변환한 것을 확인할 수 있다.     2...

기타/관리 2024.07.06

SpringBoot 3 에서 Zipkin 서버를 통한 분산 추적 해보기

MSA 환경의 각 서비스들을 호출하는 과정에서 Zipkin 서버를 설치하고 이를 활용하여 분산 추적을 해보려고 한다.      공식 홈페이지에서 zipkin 파일을 다운로드하고 실행해준다. (기본적으로 9411 포트로 열린다.)      그리고 프로젝트에 위와 같이 필요한 의존성들을 추가해준다. 만약 OpenFeign 을 사용하지 않는다면 맨 마지막 줄에 있는 의존성은 추가해주지 않아도 된다. 내부적으로 Micrometer 를 통해 zipkin 서버로 데이터를 전송하기 때문에 Micrometer 관련 의존성들이 추가되는 것을 확인할 수 있다.      그리고 위와 같이 프로젝트의 yml 파일을 열어서 설정을 추가해준다.management.tracing.sampling.proability : 보내게 될 데..

기타/관리 2024.07.05

Resilience4J의 CircuitBreak 호출 시 FeignClient 쿠키 값 전달 되지 않는 문제 해결

간단해보이는 줄로만 알았던 CircuitBreak 를 적용하는 과정에서 겪은 문제와 해결 방안을 기록하려 한다.    1. 문제의 발단  resilience4j 의존성을 추가해준다.      CircuitBreaker를 이용해서 FeignClient 를 호출할 것이기 때문에 위 설정 정보를 yml 파일에 추가해주었다.      Resilience 설정 클래스를 만들어 위와 같이 설정해주었다. 간단히 설명하자면 failureRateThreshold: 실패 비율을 말한다. (정해진 n개의 요청 중 이 비율 이상의 실패를 가지게되면 OPEN 상태로 전환한다.) waitDurationInOpenState : OPEN 상태에서 HALF-OPEN 상태로 전환되는 딜레이를 나타낸다. slidingWindowType:..

Redis 를 통한 세션 동기화

MSA 에서 각각의 member-service 가 scale-out 된 상황에서 세션을 동기화 하는 방법에 대해 다뤄보려 한다.  이 게시물에서는 Redis 를 세션 서버로 이용할 것이다. Redis 를 설치하는 방법은 이전 게시물에서 찾아볼 수 있다. 프로젝트에 의존성을 추가해준다. redis 관련 의존성과 spring-session 을 추가해주면 된다. 여기서 spring-session 의 경우, 서블릿의 HttpSession 과 통합하여 좀 더 편리하게 redis 를 통해 세션을 관리하게 해준다.      설정 파일에 위와 같이 세션에 대한 설정 정보를 추가해준다. spring-session 을 사용하기 때문에 기존에 있던 HttpSession 에서는 In-Memory 에서 세션을 저장하거나 조회하..

fegin client GET 메서드 요청 시 오류 해결

이 게시물에서는 마이크로서비스들끼리 FeignClient를 이용해 통신을 구현하던 중 만나게된 FeignException$MethodNotAllowed 예외를 해결한 과정을 기록한다.       member 서비스의 API를 GET 방식으로 요청하는 FeignClient 코드이다. JSON 데이터를 전송한다.이 서비스의 이름을 Request-Service 로 지칭하겠다.      member-service 의 코드이다. JSON 형식으로 받아서 처리하도록 해놓았다.이 서비스의 이름을 Response-Service 로 지칭하겠다.  그런데 실제 동작을 해보면 아래와 같은 예외가 발생한다.  Request-Servicefeign.FeignException$MethodNotAllowed: [405] durin..

QueryDSL 과 Spring Cloud 의존성 충돌 문제

Gradle 을 통해 Spring-Cloud 의존성을 추가하고 빌드하는 과정에서 위와 같은 오류를 발견했다.      문제가 되는 의존성을 찾아내기 위해 하나하나 주석 처리해가면서 빌드해 본 결과 queryDSL 의존성에서 문제가 발생한다는 것을 알아냈다.      구글링을 조금 해보니 잘 정리된 게시물을 발견하였고, 위와 같이 수정해주니 잘 작동하는 것을 확인했다.