컨테이너 runtime
·
Backend
컨테이너 런타임은 컨테이너의 생성, 실행, 관리에 대한 기능을 담당하는 소프트웨어를 의미한다.가장 대표적으로는 docker가 있다. 요즘은 docker뿐만 아니라, containerd, CRI-O 의 런타임도 사용되는데 몇번 실무에서 일을 하거나 공부를 하다 보면 들을 수 있는 런타임이다. 오늘은 그 특징과 사용 사례를 정리해보았다.DockerDocker는 컨테이너의 개념을 대중화한 플랫폼이고, 컨테이너 빌드에서부터 배포 및 실행까지 커버하는 올인원 컨테이너 엔진이다.Docker는 클라이언트-서버 구조로 이뤄져 있다. dockerDemon(dockerd)에 개발자가 CLI를 통해 명령을 전달하고, dockerd는 컨테이너 생성/시작/중지, 이미지 관리 작업을 수행한다.내부적으로 Docker 엔진은 con..
컨테이너와 VM은 뭐가 다를까?
·
Backend
컨테이너와 VM, 둘의 차이를 간단하고 명확하게 설명하기는 쉽지 않다.이 두 차이를 간단하게 정리하고, 학습한 기록이다.  Container와 VM(Virtual machine)은 모두 애플리케이션을 격리하여 실행하는 기술이지만, 격리하는 구성 요소가 다르다는 점이 근본적인 차이다. 가상머신은 하이퍼바이저를 통하여 하드웨어 수준에서 전체 OS를 격리하지만, 컨테이너는 단일 OS 커널에서 프로세스를 격리한다.사실 그림 하나로 설명할 수 있다.VM하이퍼바이저가 실제 컴퓨터의 하드웨어를 가상화한다. 그리고 그 위에 독립된 guest os를 설치한다. 그래서 vm은 자기만의 커너과 시스템을 갖고 있다.컨테이너하이퍼바이저가 필요 없고, 기존 OS의 커널을 공유한다. 대신에 컨테이너는 각자의 실행 환경만 갖고 있어..
토스증권이 이중화 된 데이터센터에서 kafka를 안정적으로 사용하는 노하우
·
Backend
본 게시글은 토스증권 기술 블로그 중 토스증권 Apache Kafka 데이터센터 이중화 구성 #1,2,3을 읽고, 그 개념을 정리하고 느낀 점을 정리한 글입니다. 정말 창의적이고 잘 정리된 기술 인사이트를 공유해 준 토스증권에 감사인사 드립니다. 토스증권 Apache Kafka 데이터센터 이중화 구성 #1토스증권은 데이터센터 장애 상황에도 유저에게 정상적으로 서비스를 제공하기 위해 대부분의 시스템을 이중화했습니다. Kafka 이중화 구성에 대한 개요를 소개드려요.toss.tech 토스증권 Apache Kafka 데이터센터 이중화 구성 #2: 데이터 미러링토스증권은 현재 Active-Active 구성으로 Kafka를 운영하고 있는데요. 오늘은 Active-Active를 유지하기 위해 필요한 양방향 데이터 ..
도메인 Entity와 DB Entity는 구분되어야 할까?
·
Backend
최근, 개발 스터디원 중 한 분께서 질문을 하셨다.여러분께서는 도메인 객체를 순수하게 유지하시는 편인가요? 아니면 특정한 의존성이 들어가더라도 허용하시는 편인가요?JPA 엔티티를 그대로 활용하는 편이었는데 이번에 분리하려고 시도하고 있어요. 근데 순수하게 분리한다구 마냥 좋은 것만은 아닌 것 같구, 장단이 있는 것 같아요.그래서 다른 분들께선 JPA 엔티티를 그대로 활용하시는지, 순수한 도메인 객체를 활용하시는 편인지 궁금해서 질문드려요.필자는 이 질문의 방향을 두 갈래로 생각했다.도메인 객체는 순수하게 유지되어야 하는가?도메인 entity와 DB entity는 같아야 하는가?첫 번째 질문에 대한 생각은 명확하다. 도메인 객체는 순수하게 유지되어야 한다고 생각하기 때문이다.외부 라이브러리에 종속을 받는 ..
AWS lambda python 패키징 오류 타파
·
Backend
AWS Labmda에 대한 실습 및 공부를 진행하면서 발생했던 오류와 해결 방법에 대해 논하고자 한다.   프로젝트 구조Amazon API Gateway를 통해 post 요청을 하면 그 값을 lambda를 통해 처리하고 최종적으로는 Dynamo DB에 저장하는 로직이다.런타임 : Python3.13아키텍쳐 : x86_64 python3.13을 통해 lambda function을 작성했고import boto3from textblob import TextBlobimport datetimeimport jsondef lambda_handler(fEvent, context): event = json.loads(fEvent['body']) user_name = event["user_name"] re..
전략 패턴을 사용하여 test에 적용하기
·
Backend
지난 글에 전략 패턴과 DIP를 사용하여 구현하는 법을 알아보았다.오늘은 실제 전략 패턴의 사용 예시와, test를 구현하면 어떤 점이 용이한지 알아보고자 한다. 전략 패턴을 사용하여 구현하기 이 예시에서는 EventFactory안에서 ChristmasDiscountable의 구현체를 ChristmasEvent에 주입한다.ChristmasDiscountable은 ChristmasEvent의 할인 금액 로직을 제공하는 인터페이스이다.EventFactory 안에서 ChristmasDiscountable 인터페이스를 주입한다.주입 과정은 아래와 같다.public class EventFactory { private final ChristmasDiscountable christmasDiscount; ..
Interface를 테스트 하라?
·
Backend
우아한 테크코스 프리코스를 진행하면서,인터페이스를 분리하여 쉽게 테스트 할 수 있는 코드를 만들자. 라는 요구사항이 있었다.오늘은 이에 대해 알아보고자 한다.인터페이스를 테스트쉽게 이야기 하면 테스트 코드를 작성할 때 특정 변수에 의존하지 말자는 이야기이다.인터페이스에 의존하고, 인터페이스의 다형성을 통하여 테스트를 수행하자.예를 들어public Order createOrder(List orderItems, OrderRequest orderRequest) { OrderItems orderItems = new OrderItems(orderItems); return Order.of(orderItems, orderRequest.getDate());}라는 코드가 있다.이 코드를 테스트 할 때는 상위로..
맨땅에 머리부터 박아보는 DDD 도전기 - 1
·
Backend
우아한테크코스 프리코스 미션을 해결하면서 도메인 주도 설계를 도전해 봤다.어떤 문제상황이 있었고, 어떤 해결 방법을 사용했는지 정리했다.1. 도메인 설계하기 프리코스의 마지막 미션은 편의점을 설계하고 구현하는 것이였다.https://github.com/woowacourse-precourse/java-convenience-store-7 GitHub - woowacourse-precourse/java-convenience-store-7Contribute to woowacourse-precourse/java-convenience-store-7 development by creating an account on GitHub.github.com 미션의 요구사항을 한 줄로 요약하자면,상품 정보를 바탕으로 각종 할인..