본문 바로가기

Backend Development

(40)
[Spring boot] atomikos 라이브러리 활용 XA 멀티 DBMS Transacaction 구현 백엔드 개발을 할때 하나의 DB 가 아닌 여러 DB를 활용해서 개발을 해야 할 경우가 있을 수 있다. 여러 DB에 데이터를 write 할 경우에 데이터 정합성을 위한 transaction 관리가 쉽지 않을텐데 Spring boot 3.0대 최신 버전도 지원하는 atomikos 라이브러리를 활용해보면 여러 DB write의 경우에도 Spring의 @Transactional 어노테이션으로 간단히 트랜잭션 설정을 할 수 가 있다. atomikos 공식 사이트의 주소는 아래와 같다 https://www.atomikos.com/Main/TransactionsEssentials 위 주소를 방문하면 essential 버전과 extream 버전 2가지가 있는데 essential 버전이 오픈소스 라이센스 free 버전이..
[Spring Boot] Quartz 배치 DisallowConcurrentExecution 설정 Spring boot에서 Quartz를 활용하여 배치를 수행시킬때 예기치 못하게 처리 데이터가 많아져서 배치 주기 안에 Job을 못끝내는 경우가 발생할 수 있다. 수행중인 Batch job이 끝나지 않았다면 다음 Trigger 주기때 Job은 실행이 되는 것일까? 그렇다면 실행중에 또 실행이 되어서 결과값에 영향을 주지 않을까? 배치 주기 5초인 Job이 10초간 실행될때 테스트 아래와 같이 5초 간격으로 도는 Test Job을 등록을 해두었다 해당 잡은 5초마다 log 테이블에 start시간과 end time을 저장한다. Job의 내용은 아래와 같이 간단하다. 수행되자마자 DB에 start 시간을 기록하고 10초간의 Sleep 시간을 갖고 마지막에 end 시간을 저장하고 종료된다. 즉 주기 5초보다 J..
[Maven] Maven 디펜던시 Tree, 디펜던시 라이브러리 Copy 하기 Spring boot 및 Maven으로 백엔드 개발을 진행하다보면 현재 사용하고 있는 전체 라이브러리를 모아서 보거나 전체 리스트 및 라이브러리 간의 dependency를 알고 싶을 때가 있다. IntelliJ Tool 등에서 수동으로 UI를 통해 전체 라이브러리를 살펴볼수도 있으나 마우스로 하나씩 클릭해 보면서 확인하는것에는 한계가 있을 수 있다. 이번 Article에서는 Terminal에서 간단히 사용중인 전체 라이브러리 리스트 및 라이브러리간 디펜던시를 Linux console tree 형식으로 살펴보는 방법, 사용중인 전체 라이브러리를 특정 위치로 Copy해오는 방법을 알아보고자 한다. 전체 라이브러리 리스트 및 라이브러리간 디펜던시 Tree 출력 Terminal에서 아래와 같이 명령어를 입력하면..
[Spring boot] Spring Redis Session Clustering 설정하기 Backend 개발 시 HA 구성이나 여러 유관 시스템 연동 시 세션 Clustering을 통해 정보를 공유해야할 경우가 생긴다. 이럴 경우에 Tomcat, Nginx, Jboss 등의 웹 서버 단에서 Sticky Session 설정을 할수도 있으나 Spring framework에서 제공하는 session redis 기능을 활용하면 수월하게 Session Clustering 환경을 구축 할 수 있다. Spring Session 기능은 아래 공식 문서에서 찾아볼 수 있다. https://docs.spring.io/spring-session/reference/index.html 중요한 부분은 언급되어 있는 아래 최소 사항 항목이다. Java 17+ 및 Spring 6.0.x 사항이 언급되어 있다. 나름 최신..
[Spring boot] RestTemplate 으로 http 통신하기 Spring 에서 제공하는 http client로는 대표적으로 RestTemplate이 있다. 이 RestTemplate으로 http 요청을 날리게되면 기본적으로 그때마다 connection을 맺고 응답을 받으면 끊게된다. Spring 에서 제공하는 RestTemplate은 직접 http 요청을 하는 역할을 수행하지않는다. 직접 수행하는 클래스를 한번 래핑한 어댑터 역할을 하는 클래스이다. 기본적으로는 jdk에서 제공하는 HttpUrlConnection 클래스를 이용한다. 기본적인 예제를 아래와 같이 만들어보고 간단한 Get 메소드를 호출해본다. 예제 #1 @Service public class HttpUtil { private final ObjectMapper objectMapper = new Obje..
[Spring boot] MultipartFile 파일 업로드 구현 Multipart 전송이란? 파일 업로드를 구현할 때, 클라이언트가 웹브라우저라면 폼을 통해서 파일을 등록해서 전송하게 된다. 이때 웹 브라우저가 보내는 HTTP 메시지는 Content-Type 속성이 multipart/form-data 로 지정되며, 정해진 형식에 따라 메시지를 인코딩하여 전송한다. 이를 처리하기 위한 서버는 멀티파트 메시지에 대해서 각 파트별로 분리하여 개별 파일의 정보를 얻게 된다. (From Wireframe) 이미지 파일을 전송한다고 해서 이메일에 첨부파일을 붙여 메일을 보내는 것처럼 png나 jpg 파일 자체가 전송되는 것이 아니다. 이미지 파일도 문자로 이뤄져 있기 때문에 이미지 파일을 스펙에 맞게 문자로 생성하여 HTTP request body에 담아 서버로 전송하는 것임...
[Spring boot] Embedded Tomcat redis session clustering 서버 개발을 할때 여러 was에서 세션 정보를 공유해야할 경우가 있다. 이럴때 세션 저장소로 redis cache 를 많이 활용하게 되는데 Spring boot 내장 embedded tomcat에서는 어떻게 설정을 하면 되는지 확인해 본다. Tomcat cluster redis session 라이브러리는 아래 사이트에 가면 다운로드 받을 수 있다. https://github.com/ran-jit/tomcat-cluster-redis-session-manager/wiki 여러 버전이 있는데 제일 최근 버전인 4.0 버전을 사용해 보기로 한다. 다운로드 library maven project에 추가하기 위에서 다운로드 압축파일을 풀면 아래 파일들이 나온다. commons-pool2-2.6.2.jar jedi..
Embedded Redis 로 redis junit 작성하기 Backend 를 개발할때 Cache 서버로 Redis Memory Server를 많이 사용한다. 그렇다면 JUnit 테스트 코드 작성시에도 간단하게 Redis Server를 사용할 수 있을까? 아래 라이브러리 및 설정을 활용하여 JUnit시 test embedded redis를 활용할 수 있다. pom.xml org.springframework.boot spring-boot-starter-data-redis 2.7.4 it.ozimov embedded-redis 0.7.3 test 위 it.ozimov 의 상세 정보는 아래 릴리즈 사이트에 가서 살펴볼수 있다. https://github.com/ozimov/embedded-redis 라이브러리 다운로드 후 property 설정에 기본적인 테스트 Redi..