본문 바로가기

분류 전체보기

BFF (Backend For Front. aka Aggregator) BFF는 왜 사용할까? 마이크로 서비스 아키텍처로 구현된 이커머스는 여러 도메인 앱으로 구성되어 있다. 도메인의 예로는 회원, 장바구니, 주문, 상품, 쿠폰 등이 있다. 그리고 각 MSA는 프론트엔드에서 사용할 수 있도록 API를 제공한다. 그런데 이 API는 화면에 노출되어야하는 데이터에 최적화되어있지 않은 경우가 많다. 불필요한 데이터를 내려주거나, 원하는 형식이 아닐 수 있다. 그래서 클라이언트(ex. 브라우저, 앱)에서는 원하는 형식으로 데이터를 재가공하는 절차가 필요하다. 이 경우, 데이터 가공 절차가 많아질수록 클라이언트의 리소스를 많이 사용하게 된다는 단점이 있다. BFF는 프론트엔드 화면을 위한 데이터 가공 로직을 담당하는 서버를 의미한다. Backend for Front의 약자이다. 클라..
디자인패턴 - Strategy Design Pattern Strategy Design Pattern 대부분의 기능은 동일하지만, 타입에 따라 일부 동작만 다르게 처리해야하는 경우, 유용한 디자인 패턴이다. 본 글에서는 결제 방법 (토스 혹은 포인트 결제)에 따라 장바구니 기능이 다르게 동작하는 예제를 설명할 것이다. Diagram Example public interface PaymentStrategy { public void pay(int amount); } public class PointStrategy implements PointStrategy { private String userId; public PointStrategy(String userId){ this.userId=userId; } @Override public void pay(int amou..
Enum 활용하기 Enum의 장점 public enum PizzaStatus { ORDERED, READY, DELIVERED; } Enum의 장점은 다음과 같다. 코드의 가독성을 높여준다. 허용하는 값의 목록을 문서화한다. 잘못된 값이 전달되는 문제를 줄일 수 있다. 실수를 줄여준다. Enum 비교하기 Enum은 ==, equals 함수로 비교할 수 있다. Enum은 JVM 에 한 개의 인스턴스만 생성되기 때문에 모든 Enum 객체는 동일한 주소값을 갖는다. testPz.getStatus().equals(Pizza.PizzaStatus.DELIVERED); testPz.getStatus() == Pizza.PizzaStatus.DELIVERED; Enum 활용하기 (1) Enum에 함수 추가하기 public enum P..
[다이어그램툴] excalidraw 온라인으로 다이어그램을 그릴 수 있는 gui 툴이다.draw.io 가 갑갑하고, mermaid 문법을 알기 싫다면, 사용해볼 법하다.단순한 다이어그램을 그리기 편하다.excalidraw 활용 사례는 다음과 같다.  https://excalidraw.com/ Excalidraw — Collaborative whiteboarding made easyExcalidraw is a virtual collaborative whiteboard tool that lets you easily sketch diagrams that have a hand-drawn feel to them.excalidraw.com
15단계로 배우는 도커와 쿠버네티스 ✏️ 줄치며 책 읽기 챕터 01. 쿠버네티스란? 쿠버네티스란 컨테이너화된 애플리케이션을 유연하게 운영할 수있는 기능을 제공하는 플랫폼이다. 마스터 kubectl 같은 API 클라이언트로 요청을 받아 애플리케이션 배포, 스케일 업/다운, 컨테이너 버전 업 등의 요구를 처리한다. 노드 실제 프로그램이 실행되는 서비이다. 요청이 늘어나면 기본적으로 컨테이너의 수를 늘리면 되는데, 이때 노드 수를 늘려야할 때도 있다. 쿠버네티스의 연결 가능한 노드 수는 1.11 기준으로 5000대이다. 노드를 추가하고 제거하는 작업은 애플리케이션이 돌아가는 도중에도 가능하다. 챕터 02. 컨테이너의 이해 (1) docker daemon 도커 데몬은 클라이언트인 도커 커맨드의 명령을 받아 도커 오브젝트인 이미지, 컨테이너, 볼륨..
Zalando 사례를 통해 REST API 가이드 살펴보기 zalando는 패션, 신발, 뷰티 부문을 판매하는 독일의 온라인 커머스 기업이다. zalando에서 작성한 Restful API 가이드의 몇가지 사례를 통해 좋은 API를 설계하는 방법을 정리해보고자 한다. https://opensource.zalando.com/restful-api-guidelines 설계 원칙 API가 첫번째이다. 기능을 구현하기 전에 API를 미리 설계해야한다. 클라이언트와 동료들에게 사전에 API 리뷰를 받아야한다. 추가로 API를 설계할 때 고려해야하는 점은 다음과 같다. 도메인과 기능의 목적을 제대로 이해해야한다. 일반화된 리소스를 제공해야한다. 특수한 사례별로 API를 제공하는 것은 피해야한다. API는 무엇을 제공하는지만 표현해야한다. 어떻게 기능을 제공하는지는 API에 ..
Lombok 기본 생성자와 Getter/Builder 어노테이션 @Getter @Builder public class AddItemToCartCommand { private final Long userId; private final Long productId; private final Integer quantity; } Request DTO에 Getter, Builder 어노테이션만 추가하면, 다음과 같은 에러를 보게 되는 경우가 있다. Cannot construct instance of (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator) 이번주에도 이 에러를 보게 되었다. 낯설지 않아서, 에러 노트..
JPA Entity와 Lombok Annotation java entity를 쓰다보면 Lombok annotation이 덕지덕지 붙게 된다. 요렇게 말이다. 👇🏻👇🏻 @AllArgsConstructor @NoargsConstructor(access = AccessLevel.PROTECTED) @Getter @Entity public class CartItem { ... 왜 annotation이 덕지덕지 붙게 되는건지, 왜 프로젝트마다 스타일이 다른건지 매번 까먹게 되어서 노션에 정리한걸 기록해보고자 한다. Context @Entity Entity를 사용하려면 JPA Proxy 기능 때문에 매개변수가 없는 기본 생성자가 필요하다. @Entity 어노테이션은 기본 생성자가 없는 경우, 알아서 기본 생성자를 만들어준다. 그래서 @NoArgsConstructor ..