본문 바로가기

개발

(28)
MapStruct의 이해 배경이전 프로젝트는 Spring Cloud를 활용한 MSA 환경 구축해보기였습니다. 다들 처음이라 비동기 방식인 kafka를 사용하지 않고 feign client를 이용해 동기형식으로만 구성했죠. 정말 상당히 불편한 부분이었습니다. 예를 들어서 주문의 경우 다른 서비스들을 매우 많이 호출해야 했었는데, 동기형식으로 진행하지 반응 속도도 그렇고 한번 에러가 발생하면 어디서부터 보상 트랜잭션을 수행해줘야 할지.. 오히려 더 복잡한 느낌이었습니다. 그러다 다른 팀의 발표를 듣던 중 kafka를 이용한 팀이 있었는데, 이때 튜터님께서는 MapStruct를 이용하면 dto간 매핑이 간편해진다고 했던 기억이 있습니다. 이번 프로젝트는 kafka를 이용할 것이기 때문에 이 MapStruct에 대해 간단히 알아보려고 ..
Json 구조의 이해... 지금까지 Json 구조를 Java에서 어떻게 쉽게 매핑할 수 있을까를 생각해봤는데.. { } 를 기준으로 클래스 객체 단위라고 생각하면 편할 것 같다. 몇겹이든 간에, { } 단위로 받아들이면 잘 빼내올 수 있을듯!
CQRS와 ElasticSearch, Redis 관계 서로의 관계 및 간단 설명CQRS(Commands and Queries Responsibility Segregation) 패턴과 Elasticsearch, Redis의 관계는 주로 데이터 관리 및 성능 최적화와 관련이 있습니다. 아래에서 각 개념과 그 관계를 자세히 설명하겠습니다.1. CQRS 패턴CQRS는 시스템의 명령(Commands)과 조회(Queries)를 분리하는 아키텍처 패턴입니다. 이 패턴은 다음과 같은 이점을 제공합니다:명령과 조회 분리: 데이터 변경 작업과 데이터 조회 작업을 분리하여 각 작업에 최적화된 모델을 사용할 수 있습니다.성능 최적화: 조회와 명령의 요구 사항이 다르기 때문에, 각각에 맞는 데이터 저장소를 사용할 수 있습니다. 예를 들어, 복잡한 데이터 조회를 위해 읽기 전용 데..
도커 스웜 배경하나의 호스트 OS에서 컨테이너가 많아지게 되면 CPU, 메모리, 디스크 용량 등과 같은 자원이 부족하게 됩니다. 이를 해결하기 위해선 어떻게 할까요? 크게 scale up과 scale out 방법이 떠오릅니다. scale up의  경우엔 하나의 서버 자체의 크기를 키우는 것이고, scale out은 여러대의 서버를 운영하게 하는거죠. 보통 scale out을 많이 사용한다고  알려져있는데 이때 클러스터라는 개념이 등장합니다. 클러스터란 각기 다른 서버들을 하나로 묶어 하나의 시스템같이 동작하게 만들어 클라이언트들에게 고가용성의 서비스를 제공하는 것을 말합니다. 하지만 서버 등록은 어떻게 할건지, 어떠한 서버에 어떠한 작업을 할당할건지 등과 같은 처리해야 될 작업이 증가하게 됩니다. 이때 나오게 된 ..
docker compose에서 health check를 활용한 spring boot app 띄우기 배경개발을 조금씩 해나가면서 docker의 소중함에 대해 정말 많이 느끼고 있습니다.. 이번 프로젝트 MSA 환경에서도 docker container를 통해 각 서버를 순서대로 띄우려고 했는데 잘 안됐단 말이죠. 구글링과 gpt를 통해 health check를 사용하면 된다는 것을 알아서 적용을 해보았지만 정상적으로 health 체크가 되지 않는지 자꾸 다음 서버가 제대로 띄워지지 않았습니다.. 튜터님이 actuator를 통해 health 체크를 하면 되지 않을까?라고 살짝 언급을 주셔서 그 부분에 이어서 내용을 시작해 보도록 하겠습니다. 내용먼저 actuator를 활용하기 위해 spring boot의 eureka 서버에 gradle 설정을 해야합니다. spring boot 버전은 3.4.0, jdk는 ..
MSA에서의 swagger 사용 문제 정의MSA에서의 swagger + restdocs적용해결과정다행스럽게도 튜터님께서 MSA에 swagger + restdocs 적용하는 방법을 깔끔하게 알려주셔서 그대로 적용한 결과 잘 되었습니다. 문제는 restdocs 적용을 위한 테스트 코드 작성이었는데, 테스트 코드 작성이 거의 전무한 저에게는 MSA에서 다른 서버로 요청을 보내 값을 받아오는 로직이 포함된 경우 어떻게 할지 고민이 되었죠. 구글링과 챗gpt를 이용한 결과 mock 객체를 만들어서 사용하면 된다고 하더군요. 이 부분을 적용하여 수정에 수정을 거친 결과 정상적으로 테스트가 실행되는 것을 확인했습니다.결과코드user서버에서 다른 서버들로 요청을 보낼 때에 사용한 mock객체에는 @MokitoBean을 붙여서 테스트에 사용하였습니다...
MSA 구조에서의 요청/응답 불일치 문제 문제정의Spring Cloud Service에서 서버간 데이터를 주고 받을 때 데이터의 일관된 형식을 지키지 않게 되면 서로 주고 받지 못하는 문제 발생해결과정코드받아오는 필드들의 구조와 이름을 정확하게 일치시키는 작업이 필요했습니다. user 서버에서 delivery 서버로 요청을 보내는 경우를 예로 들자면이 부분은 delivery-server의 controller 부분입니다. @GetMapping public ResponseEntity getManagers( @RequestParam(value = "search", required = false) String search, // 배송 담당자 타입 @RequestParam(value = "type", re..
Postgresql 연결 오류 배경local에서 설치한 postgre 잘 사용하다가 docker를 통해 postgresql을 띄우고 사용하려고 했습니다. 하지만 계속 연결 오류가 뜨더군요. 권한 문제는 아니었습니다. 뭐가 문제일까요? 내용1. docker container가 제대로 안 띄워졌나?-> container도 잘 띄워져 있고, 접속해서 db까지 정상적으로 만들었는데 이 부분은 문제가 없었습니다. 2. 비밀번호가 잘못 설정되었나?-> intellij의 db접근 username과 password를 "" 를 포함시켜 String 형태로 줘야하나? 솔직히 이 부분은 안될것 같았지만 시도해보았습니다. 당연히 실패 3. container는 잘 띄워져 있고, 오류 코드가 아이디/비밀번호 오류 코드가 아니다. 접근 오류의 코드이다. 그렇다..