[Springboot] @JsonProperty는 언제 써야 할까!
2023. 2. 22. 00:07
개발/Spring
이번에 개발하다가 DB 테이블 컬럼 중 숫자형태의 'A_CNT' 이런 앞에가 짧은 컬럼이 있어서, 늘 하던대로 RequestDTO 에 aCnt 로 작성하고 난 뒤 Post 방식으로 데이터를 보내봤더니 자꾸만 0 이 넘어오는게 아닌가???? @JsonProperty 이 때 @JsonProperty를 쓰면된다.(변수가 많다면 @JsonNaming 으로 통합해도 됨) @Getter @Setter @NoArgsConstructor @AllArgsConstructor public class Sample { @JsonProperty("a_cnt") private int aCnt; } 이렇게 하고 요청할 때 a_cnt 로 던지면 정상적으로 오게된다. 추가로 mybatis 에서 camelCase vo를 자동으로 변환해..
[MSA] SAGA pattern
2022. 12. 19. 13:44
개발/Spring
지난번 MSA 포스팅에 사용한 Outbox pattern글에 이어 SAGA pattern을 작성하려한다. MSA : Outbox Pattern MSA 아키텍처? 마이크로서비스아키텍처에 대한 화두가 널리 퍼진지 한 8년정도 된 것 같다. 대학교 1학년 때(2014년도)에 쿠버네티스에 대해 알게되어 도커컨테이너에 대해 공부했었던 기억이 있 flowlog.tistory.com Saga패턴 Saga 패턴은 간단히 말해 이벤트에 대한 보상트랜잭션을 발행할 수 있는 것이다. 가장 흔한 예로 주문서비스가 있는데, 재고-주문-결제 라는 하위 이벤트가 존재하게 된다. 이 때, 기존 프로세스라면 재고->주문->결제를 정상적으로 수행하는데 만약 결제에서 잔액부족의 이유로 결제취소가 이루어진다면 해당 주문건에 대한 트랜잭션 ..
[Springboot] 대용량 Select Query OOM 방지를 위한 스트림
2022. 12. 13. 00:12
개발/Spring
서론 대량의 select 쿼리를 날릴 때 대부분의 개발자들은 Memory 요소를 파악하지 못하는 것 같다. 이번에도 몇십만건의 데이터를 한번에 load 해서 front에 뿌리는 프로세스에서 was가 후두둑 죽어가는게 아닌가. 이전 프로젝트에서도 배치개발을 하던 과장급 프리랜서가 있었는데, 운영에 올리자마자 터지고 난리도 아니였다. 그들의 답변은 항상 '개발환경에선 잘된다, 단지 데이터가 많을 뿐 -> 인프라문제다.' 제발 메모리 이슈좀 알아서 해결해라!!!!!!!!!!!! 테스트 목적 '직접'해보자 Q. 수십~수백만 건의 데이터를 어떻게 사용자에게 보여줄 것인가??? 검색해보니 제일먼저 Mybatis fetchSize 조정이 있었다.(default 10) - 만약 1000개의 데이터를 select 한다면..
[MSA] Outbox Pattern
2022. 11. 4. 13:58
개발/Spring
MSA 아키텍처? 마이크로서비스아키텍처에 대한 화두가 널리 퍼진지 한 8년정도 된 것 같다. 대학교 1학년 때(2014년도)에 쿠버네티스에 대해 알게되어 도커컨테이너에 대해 공부했었던 기억이 있는데, 인프라(infrastructure)영역은 쿠버네티스, 오픈시프트(redhat), 탄주(vmware) 등의 오케스트레이터를 통해 널리 사용하고 있는 것 같다. 그럼 이제 어플리케이션영역이 마이크로서비스화 되어야한다. 필자는 작년 한 해동안 마이데이터 제공자 API 프로젝트를 openshift 기반 환경에서 진행하였는데, redhat 기반이라 해당 플랫폼에서 제공하는 3scale(API G/W), rhsso(인증), Fuse, Jboss 를 사용하여 컨테이너를 운용했다. 하지만 마이데이터 제공자는 단순히 Rea..
[Springboot] Fabric8 kubernetes 리소스 컨트롤하기
2022. 10. 26. 23:59
개발/Spring
스프링부트에서 쿠버네티스 리소스를 컨트롤하기 위해 제공되는 라이브러리가 2개 있다. 하나는 kubernetes에서 제공하는 것이고 또 하나는 Fabric8 에서 제공하는 라이브러리이다. 이 두개의 차이는 이 링크에서 아주 잘 설명하고 있다. 위 링크에서 대충 보자면 kubernetes는 객체를 선언하고 하는 작업들이 많고 Fabric8은 웹소켓을 이용한다는 것이다. (소스 구현부도 Fabric이 편해보임..) 이제 간단히 k8s 리소스를 가져와보자. Pom.xml k8s / ocp 라이브러리가 따로 존재한다.(필자의 현재 코드는 k8s용) io.fabric8 kubernetes-client 6.1.1 io.fabric8 openshift-client 6.1.1 Controller 간단히 GET /k8s/..
[Spring Cloud] Zipkin(집킨) 분산 추적 해보기
2022. 10. 26. 23:43
개발/Spring
Zipkin(집킨)은 스프링클라우드에서 제공하는 분산추적 서비스이다. Zipkin(집킨)서버와 sleuth(슬루스)가 있으며 집킨서버는 데이터를 보관 및 웹대시보드를 제공하며, 슬루스는 로그 데이터들을 잘 처리하여 집킨에 보내는 역할이다. 집킨서버의 데이터 저장소는 - 인메모리 - mysql - 카산드라 - elasticSearch 로 설정할 수 있으며 별다른 설정이 없을 경우 인메모리(WAS)에 저장하게 된다. Zipkin 구동 간단히 도커를 통해 기동하며 port는 default 9411 을 사용한다. docker run -d -p 9411:9411 openzipkin/zipkin Pom.xml zipkin 사용을 위한 라이브러리 추가 위에서 설명했듯이 슬루스란 친구를 통해 데이터를 zipkin서버에..
[Springboot] Sse(Server Send Event) 단방향 통신을 이용해 tail -f 기능 구현
2022. 10. 26. 23:27
개발/Spring
난 이걸 왜 쓰게되었나? OCP 웹콘솔에 보면 pod의 log를 지속적으로 호출하는 페이지가 있는데, 말 그대로 서버가 클라이언트 쪽에 로그를 일방적으로 보내는 방식인거 같았고, 이걸 구현해보고 싶다는 생각이 들어 통신모듈을 찾아보다가 SSE(Server Send Event)라는 라이브러리를 알게되어 찾아보니 보통 접속중인 사용자에게 push 알림을 보내는 용도, 스포츠 중계서비스에 이용할 수 있다. 필자는 리눅스에서 로그 파일을 볼 때 이용하는 tail -f 기능으로 활용해보려한다. 단방향 통신을 위한 모듈 SeeEmitter 클래스는 2015년(Spring Framework 4.2)부터 사용할 수 있게 되었다. Internet Exporer를 제외한 모든 브라우저를 지원한다. HTTP/1.1 프로토콜..
[Springboot] kafka JSON 통신하기
2022. 10. 25. 21:32
개발/Spring
그동안 메시지 큐에 대해 알고만 있지 사용은 해보지 않았다. 메시지 큐는 어떤 서비스A가 서비스B에게 데이터를 전송할 때 서비스B가 만약 메모리등의 이슈로 정상적인 응답을 하지 못할 경우 해당 요청에 대한 데이터에 유실이 발생할 수 있어서 그 중간 매개체로 사용하게 된다. 실제로 작년에 ELK, EFK 를 구축할 때 메시지 큐를 포함한 아키텍처를 많이 보았었다. filebeat 에서 Logstash로 데이터를 전송할 때나, Logstash에서 Elasticsearch 에 데이터를 전송할 때 메시지큐를 사용하는 것이다. 메시지 큐는 카프카(Kafka), 레빗엠큐(RabbitMQ) 등의 솔루션이 있고, 이 글은 카프카를 사용하여 JSON 타입의 메시지 전송을 해볼 것이다. 카프카(Kafka) 카프카는 도커로..
[Springboot] springBoot와 springCloud 버전 맞추기
2022. 10. 24. 17:36
개발/Spring
스프링부트 application을 개발하던 중 스프링 클라우드 zipkin 을 사용하려다 에러가 발생하였다. configurationPropertiesBeans' defined in class path resource [org/springframework/cloud/autoconfigure/ConfigurationPropertiesRebinderAutoConfiguration.class]: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.cloud.context.properties.Co..
[Springboot] Maven 멀티 모듈 프로젝트 만들기(Eclipse)
2022. 10. 4. 16:02
개발/Spring
이제는 쿠버네티스 서비스가 주로 이루면서, 마이크로서비스아키텍처 서비스개발이 많이 진행되어가고 있다. spring 에서도 gateway, discovery, config 등 cloud 서비스를 구축하는데에 필요한 데모프로젝트들이 많이 있는데, 오늘은 Maven 멀티 모듈 프로젝트를 구성을 포스팅한다. Maven Project 생성 가장 먼저 Eclipse 를 키고 New>Maven Project 를 선택한다. 상위 프로젝트 프로젝트 타입 Maven Project 프로젝트 이름 test 패키지 이름 com.joon95.test Maven Module 생성 이제 1에서 생성한 project를 우클릭>New>Other Maven Module을 생성한다. 테스트로 core, market 프로젝트를 만들었다. 하..
[Springboot] Exception 처리하기
2022. 8. 4. 16:07
개발/Spring
springboot 로 RestApi 를 만들다보니 Exception 처리는 필수이다. 한번 해보자. 에러는 {“error”:”에러코드”,”error_decription”:”에러설명”} 위와 같이 내보낼 것이다. ErrorEnum 정의 @Getter public enum ErrorEnum { /* API 응답 코드 */ E00000("00000", "처리 성공", HttpStatus.OK), E40401("40401", "요청한 엔드포인트가 존재하지 않습니다.", HttpStatus.NOT_FOUND); E50002("50002", "API 요청 처리 실패.", HttpStatus.INTERNAL_SERVER_ERROR); private String code; private String msg; priv..