백엔드개발 5

Feign Client 를 활용하여 외부통신 연동하기

📌 들어가며 백엔드 API 개발을 하다보면 외부 서비스와 연동해야 하는 일이 많이 생깁니다. 특히 현재 주문/결제 도메인팀에 있다보니 더더욱 비즈니스 로직에서 외부통신을 해야하는 경우가 많이 생기는 것 같습니다. 이번 포스팅에서는 외부통신을 도와주는 많은 라이브러리들(HttpClient, WebClient) 중 Feign Client 에 대해 알아보고자 합니다. 📌 Feign Client Feign Client란 Netflix에서 개발한 Http Client입니다. (HttpClient는 Http 요청을 간편하게 만들어서 보낼 수 있도록 돕는 객체) 처음에는 Netflix에서 자체적으로 개발을 진행(Spring Cloud Netflix Feign)했지만 현재는 오픈소스 프로젝트인 OpenFeign으로 전..

BackEnd/SpringBoot 2023.04.22

DDD - 애그리거트

들어가며 애그리거트는 DDD에서 굉장히 자주 등장하는 용어입니다. 항상 개발을 공부할 때마다 느끼는 것은 정의가 천차만별 이라는 것입니다. 이번 포스팅에서는 이 '애그리거트'의 정의와 간단한 예시를 알아보고자 합니다. 📌 애그리거트의 등장 배경 보통 DDD에 대한 설명을 할 때 설명의 예시가 되는 시스템으로 '온라인 쇼핑몰'에 대한 예시를 많이 들고 있습니다. 개인적으로는 온라인 쇼핑몰 e-커머스 시스템이 고객, 주문, 결제, 상품 등 다양한 서브 도메인들로 이루어져 있기 때문이 아닐까 싶습니다. 저 또한 e-커머스 시스템을 예시로 들도록 하겠습니다. e-커머스 시스템을 상위 수준에서 모델을 정리하면 다음과 같을 수 있습니다. 이러한 상위 수준에서의 모델을 개별 객체 수준으로 나타내면 다음과 같습니다. ..

BackEnd/DDD 2023.02.04

백엔드 아키텍처 개요

대학교 시절과 회사에 입사한지 얼마 되지 않았을 때 까지는 아키텍처의 중요성에 대해 간과했습니다. 그나마 알고 있는 것이라고는 MVC 프레임워크 정도가 전부였습니다. 물론, MVC 프레임워크 역시 아키텍처 영역에서 보기에는 표현영역을 위한 기술 중에 하나일 뿐이지 아키텍처를 대변하지는 않습니다. 회사에서 프로젝트를 진행하면서 DDD 에 관해 접하게 되고 AA(Application Architecture) 분들과 협업을 하게 되면서 아키텍처에 대한 공부 역시 필요하다는 것을 알게 되었습니다. 사실 아키텍처 공부는 정말 끝이 없는 것 같습니다. 정확한 영역이 어디까지인지도 아직 잘 모르겠습니다. 아키텍처를 공부하다 보면 이와 관련된 수많은 다른 영역들을 접하게 됩니다. DIP, infrastructure, ..

Architecture 2023.01.16

DDD란 무엇인가(2) - 도메인, 서브도메인, 바운디드 컨텍스트 등

DDD의 기본 개념에 대해 알아보았던 DDD란 무엇인가(1) 에 이어서 이번 글에서는 DDD에서 많이 사용하는 용어들에 대한 정리를 해보고자 합니다. 회사 프로젝트에서 타회사 AA(Application Architecture) 분들과 설계 단계에서 대화를 나눌 때 많이 접했던 용어들과 그분들이 설명해주셨던 대로 정리해보고자 합니다. 개인적으로 해당 부분은 개발자들의 영역이기보다는 비즈니스 정책을 정하는 현업분들(또는 기획자)의 의견이 필요한 영역이라고 생각합니다. 도메인 - 도메인은 외국 용어이기도 하고 딱히 해당 용어를 우리말로 번역할 만한 단어가 없는 것 같습니다. 도메인은 우리가 해결하고자 하는 문제 영역이라고 볼 수 있습니다. 그냥 '네이버', '쿠팡' 처럼 서비스 자체를 도메인이라고봐도 됩니다...

BackEnd/DDD 2022.12.04

JPA의 Dirty Checking이란?

Jpa를 활용하여 백엔드 개발을 하다보면 'JPA 영속성 컨텍스트' 혹은 '더티 체킹'이란 말을 종종 들을 수 있습니다. 실제로 얼마전에 회사에서 코드리뷰를 진행하는데 어떤 팀원 분께서 다음과 같이 말씀하셨다. 제가 알기로 JPA는 더티 체킹이라는 걸 해서 변경사항을 감지해 자동으로 update를 해주는 걸로 알고 있는데 왜 한번 더 save를 해줬나요? 이유가 있어요? 그 때 나는 물론 명확하게 답변을 드리지 못했다... 아..? 네..! 그러면 한번 더 save 하지 않고 트랜잭션을 마무리 하도록 하겠습니다. 라고 대충 얼버무렸던 기억이.... 그래서 오늘은 이 Dirty Checking 이라는 것의 개념을 한번 짚고 넘어가려고 합니다. 다음에는 명확히 답변드릴 수 있도록...! 예를 들어 다음과 같..

BackEnd/JPA 2022.11.05