본문 바로가기

분류 전체보기

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 ..
Product catalog란? 제품 카탈로그는 쇼핑몰 전시 영역에 노출되는 상품 대표 속성을 말한다. 아마존 도서 상품 상세 페이지를 예시로 살펴보자. 상품 상세 진입 시 보여지는 상품 이미지, 책 재목, 소개, ISBN, 출판일, 출판사 등은 책을 대표하는 공통적인 속성이다. 판매자가 달라도 동일한 제품이면 전시 영역에 노출되어야하는 제품 속성은 동일하다. 이를 카탈로그라 부른다. 상품은 실제로 판매되는 재화 단위를 말한다. 판매자 별로 판매처, 가격, 제품 상태, 판매 정책 등은 다를 수 있다. 다시 아마존을 예시로 살펴보자. 아마존 도서 페이지의 종이책 항목을 보면, 새제품 / 중고탭을 살펴보자. 여기에는 도서 카탈로그에 속한 상품 목록들이 조회된다. 각 상품은 동일한 제품이지만, 상품 상태, 가격 등은 판매자 별로 다르다. 이..
Mock VS Stub VS Spy Mock 반환값이 없는 함수를 테스트할 때, 특정 객체에서 특정 함수가 호출되었는지 테스트할 때 사용한다. Stub 특정 객체에서 특정 함수를 호출할 때, 특정한 값이 반환되라고 더미 데이터를 지정할 때 사용한다. Spy 특정 함수만 실제 함수를 호출하게 하고 싶을 때 사용한다. mocking을 사용할 때, 세가지의 역할이 구분되지 않아 마구 섞어쓰게된다. 그런데 각자 용도가 다르기 때문에 한번 생각해보고 쓰자.
gradle build와 Jenkins gradle java plugin을 사용하면, build 명령문 실행 시, gradle에서 task check 함수를 실행한다. 그래서 단순히 gradlew build 명령문으로 build를 하는 경우, 테스트에 실패해도 젠킨스에는 build 실패로 뜨게 된다. 이렇게 build / test 단계를 나눠서 구성하는 경우, build 단계에 check 명령문을 제외 (-x)하겠다는 옵션을 추가해줘야한다. 그러면 Build 단계에서 테스트를 실행하지 않는다. gradlew build -x check 참고 https://proandroiddev.com/understanding-gradle-the-build-lifecycle-5118c1da613f https://www.testmo.com/guides/jenki..
개발자를 위한 최소한의 네트워크 지식 방화벽 방화벽은 미리 정의해둔 보안 규칙에 의해서 들어오고 나가는 네트워크 트래픽을 모니터링하고 제어하는 역할을 한다. VIP 가상 IP (Virtual IP)의 약자이다. NAT 사설 네트워크에 속한 여러 호스트가 하나의 공인 IP으로 인터넷에 접속하기 위해 사용하는 기술을 말한다. NAT은 제한된 공인 IP을 여러 호스트가 공유해서 사용하기 위해 나온 기술이다. 그래서 공인 IP를 NAT IP이라고 부르기도 한다. 인바운드 트래픽 인바운드 트래픽은 외부에서 서버 내부로 들어오는 요청을 말한다. 인바운드 트래픽 IP 제한은 서버를 호출할 수 있는 외부 서버 IP를 관리하는 것을 말한다. 아웃바운드 트래픽 아웃바운드 트래픽은 서버에서 외부로 나가는 요청을 말한다. 즉, 서버에서 다른 외부 서버를 호출하는..