Spring , JPA 11

Spring Data Envers 사용방법 - 간편하게 히스토리 테이블 관리하기

개요Hibernate Envers 프로젝트는 각각의 대상 엔티티의 이력관리를 간편하게 도와줍니다 Envers Hibernate/JPA Entity의 변경 사항을 추적할 수 있게 별도 테이블에 변경 사항을 자동 저장해준다. Spring Data Envers Hibernate Envers 의 변경 사항을 쉽게 조회할 수 있게 해준다. Spring Data Envers 적용하기1. dependency 추가Gradle (build.gradle)dependencies { // envers implementation "org.springframework.data:spring-data-envers" }Maven(pom.xml) org.springframework.data spring-data-envers 2. Ena..

Spring , JPA 2023.11.13

Spring Cloud OpenFeign 사용법

개요 open feign 은 RestTemplate , WebClient 와 같이 외부 API 호출 용도로 사용하는 Http client binder 입니다. Rest Template 를 사용해보신 분은 많은 코드가 축소된 것을 확인할 수 있습니다. 의존성 추가 Open Feign은 Spring Cloud 기반의 기술이므로 Spring Cloud에 대한 의존성이 필요하다. Spring Cloud 문서를 보면 현재의 Spring Boot 버전에 맞는 버전이 명시되어 있는데, 적합한 버전을 확인한다. OpenFeign 활성화 OpenFeign을 활성화하려면 다른 스프링 부트 기능들과 유사하게 @EnableFeignClients 어노테이션을 붙여주면 된다. OpenFeign을 활성화하려면 기본적으로 main ..

Spring , JPA 2023.11.12

Spring Boot Logging (log4j, logback, log4j2)

자바 로깅 프레임워크 log4j, logback, log4j2, apache common logging, slf4j 등 다양한 프레임워크 들이 있는데, 그중 log4j , logback, log4j2 을 비교해보겠습니다. Log4J 참고 | https://logging.apache.org/log4j/1.2/index.html 이중 가장 오래된 프레임워크로 로그 프레임워크에 대한 초반을 설정했다. EOL 상태이며, 보안취약점으로 인해 Log4j2 로 업데이트를 권고하고 있다. Logbak Log4J 개발이 중단되며, Log4j 를 대체하기 위해 출시됐으므로 Log4J 의 성능 부분에 대한 개선 작업이 많이 이루어 진 프레임워크이다. 자동 리로딩과 필터링 기능 지원 Spring Boot 에 기본적으로 적용돼..

Spring , JPA 2023.07.09

Spring Boot , Java Application Graceful Shutdown

1. Spring Boot Graceful Shudown Spring Boot는 자동으로 Graceful Shutdown을 지원하지 않으므로, 설정이 필요하다. Spring Boot 2.3 부터 Spring Boot는 이제 서블릿 및 반응형 플랫폼 모두에서 4개의 임베디드 웹 서버(Tomcat, Jetty, Undertow 및 Netty) 모두에 대해 정상적인 종료 기능을 지원한다. 정상적인 종료를 활성화하려면 application.yml 파일에서 server.shutdown 속성을 graceful 로 설정하기만 하면 된다. application.yml example (1) server.shutdown: graceful 그런 다음 Tomcat, Netty 및 Jetty는 네트워크 계층에서 새 요청 수락을..

Spring , JPA 2023.03.13

[spring] Spring Webflux 란?

목차 1. Webflux 란 Webflux 란 Spring 5에서 새롭게 추가된 모듈이며, 클라이언트와 서버에서 Reactive 한 개발을 할 수 있도록 도와준다. 1.1. Spring MVC (전통적 웹 방식) Spring MVC 는 Servlet 기반으로 만들어졌고, Sync + Blocking 방식으로 동작한다. 하나의 요청을 처리할 때 요청당 1개의 스레드(Thread)를 사용하며, Response 를 기다리며 Thread 를 지연시킨다. 물론 Spring MVC 모델을 사용해도, 서버 자원량을 늘려서 Multi Thread 를 사용하면 block 되지 않고 많은 요청을 처리 할 수 있지만 스레드(Thread) 간의 Context Swith 발생 시 비용이 생겨 비효율적이다. 요청에 따라 무한정 ..

Spring , JPA 2023.01.17

[spring] Spring Webflux CRUD

목차 개요 demo-fe , demo-api 로 총 2개의 Spring Boot프로젝트를 만들어서 WebClient 와 WebFlux CRUD 를 진행했다. 1.demo-fe Application 역할 : FrontEnd , View 역할 , DB 연결 X Tech Stack WEB-Client 기반의 REST-API (webflux) , Spring Open API 3 , thymeleaf gradle 7.5 , jdk 11 , spring-boot 2.6.12 1.1. WebClient 설정 build.gradle (gradle 사용시) dependencies { implementation 'org.springframework.boot:spring-boot-starter-webflux' } 먼저 We..

Spring , JPA 2023.01.16

[kafka] kafka Install

Spring 에서 Kafka 를 테스트해보기전, 로컬에 Kafka 설치를 해야한다. 1. Kafka Script (Quick Install) https://kafka.apache.org/downloads 에서 원하는 Kafka 버전을 선택하여 다운받는다. 저는 Kafka 2.8.0 버전을 다운받아 사용했습니다. (윈도우 로컬에 설치할경우) WSL 환경에서 실행시킬경우 bootstrap server 주소를 WSL IP 로 변경해줘야한다. (localhost X) 따라서 윈도우에서 설치후 아래 스크립트에서 .sh 를 .bat 으로 변경하여 사용하면된다. # Run Zookeeper bin/zookeeper-server-start.sh config/zookeeper.properties # Run Kafka b..

Spring , JPA 2023.01.09

Webflux with MDC

Spring Webflux 를 개발하다보면 비동기 어플리케이션의 모니터링의 어려움을 겪게된다. 이를 MDC 를 활용하여 해결할 수 있다. 1. MDC (Mapped Diagnostic Context) 란? 멀티스레딩 서버에서 여러 개의 스레드가 동시에 실행되면서 로그를 찍으면 로그를 구분할 수 없게 된다. 그래서 요청마다 ID(Correlation ID)를 부여하여 요청마다 로그를 모아서 볼 수 있다. (Spring Cloud Slueth가 Trace Id 를 부여하는 것과 동일하다.) 요청을 처음 받았을때 Correlation ID를 생성하고, 이를 ThreadLocal에 저장했다가 로그를 쓸때 매번 이 ID를 ThreadLocal에서 꺼내서 같이 출력하면 된다. 참고 : 로그시스템 #4-MDC를 이용..

Spring , JPA 2023.01.04

[Spring Cloud Gateway] JWT & Opaque Token

목차 1. Opaque Token 이란 ? 전달하는 정보 측면에서 불투명한 토큰 토큰은 인증 서버에 저장된 정보를 가리키는 식별자일 뿐이며 서버 측에서 자체 검사를 통해 유효성을 검사함 2. Opaque Token vs JWT Opaque Token 을 사용하는 이유는 JWT (Json Web Token) 은 만료 시간 (expires_in) 이 되기 전에는 탈취 당하더라도 해당 Token 을 무효화 할 수 없기 때문이다. 실생활 예를 든다면, 고객이 카드를 잃어버린 것은 고객의 잘못이기 때문에 카드를 잃어버림으로서 일어나는 손해는 고객이 일부 책임을 져야 한다. 그러나 고객이 카드 분실 신고를 했을 경우 카드사는 해당 카드를 사용 정지를 해야 한다. 이를 구현하려면 JWT 를 DB 로 관리하여 무효화 ..

Spring , JPA 2023.01.04

ConfigMap Auto Refresh, Spring Boot

선행사항 kubernetes 설치 (kind , k3d , k3s ,k8s …) 해당 namespace 에 configmap sa role , rolebinding 아래 작업 수행시 ConfigMap 파일을 (= application.yml 내용) 수정한후 kubectl apply -f 을 해주면 Kubernetes Pod 재시작 없이 Spring Boot Application 에 수정한 설정이 적용된다. 목차 1. Spring Boot Project profile 은 dev 와 local 로 2개를 사용하고 있습니다. dev local kubernetes 환경 local desktop IDE 실행환경 1.1. build.gradle implementation 'org.springframework.clo..

Spring , JPA 2022.12.29