all 125

# 마이크로 서비스 통신 설계

마이크로서비스에서 각 서비스들을 호출하기 위한 여러가지 통신 방법이과 고려해야 될 사항들이 있다. RPC 선택시 고려 사항 API에 대한 RPC 메커니즘을 선택하기 전에 서비스와 클라이언트 간의 상호 작용 스타일을 고려하는 것이 좋다. 상호 작용이 일대일인지 일대다인지 여부 상호 작용이 동기식인지 비동기식인지 여부 One-way notifications: 클라이언트가 서비스에 요청을 보내지만 응답을 기대하지 않는 방식 메시지 형식 1. 텍스트 형식 JSON or XML은 가장 많이 사용되는 텍스트 기반 형식이다. 👍장점 사람이 읽을 수 있다. 👎단점 메시지가 장황하다. 텍스트 구문 분석과 관련된 오버헤드가 존재한다. 2. 바이너리 형식 Thrift, Protocol Buffers(Protobuf) 및 A..

Microservice/Design 2022.05.19

# 마이크로 서비스 데이터 설계

서비스당 데이터베이스 이점 각 서비스 간 느슨한 결합으로 의존성을 낮추고 서비스 특성에 맞는 데이터베이스를 자유롭게 선택 가능하다. 문제점 및 해결방법 여러 데이터베이스를 통해 조인해야 하는 쿼리 이벤트 소싱 API 구성 CQRS(명령/조회 책임 분리) 여러 데이터베이스에 걸친 트랜잭션 사가현 패턴 1-1. 이벤트 소싱 (Event Sourcing) 이벤트 소싱이란, 이벤트를 위주로 비즈니스 로직을 구현하고, 애그리거트를 event store에 저장하는 것을 의미한다. ✅ 애그리거트: DDD에 기반한 설계에서 하나의 도메인에서 필요한 객체들을 하나의 군집으로 묶은 것 데이터를 가진 서비스가 직접 데이터를 조작하게 하지 않고, 서비스는 이벤트를 발생시키고 해당 이벤트는 event store에 저장만 한다...

Microservice/Design 2022.05.19

# 마이크로 서비스 설계 원칙

1. 비즈니스 도메인을 중심으로 모델링 도메인 기반 설계를 통해 더욱 안정된 서비스를 구축하고 다양한 사용자 인터페이스에 대해 보다 쉽게 각 서비스들을 재결합 할 수 있다. 2. 자동화 문화 많은 수의 마이크로서비스의 복잡성을 관리하려면 자동화가 필수적이다. CI/CD 빌드 파이프라인 단계에서의 SIT(System Integration Testing) & UAT(User Acceptance Testing) 테스트 프로비저닝, OS 구성, 서비스 이미지 생성 등 3. 구현 세부 정보 숨기기 서비스가 독립적으로 변경되고 진화할 수 있도록 각 서비스의 구현 세부 정보를 숨겨야 한다. 필요한 정보는 DB에 직접 접근하는 것이 아닌 각 서비스 API를 통해서 얻어야 한다. 4. 모든 것을 분권화하기 각 서비스는 ..

Microservice/Design 2022.05.19

EFFECTIVE JAVA3 - 3장. 모든 객체의 공통 메서드

아이템 10. equals는 일반 규약을 지켜 재정의하라 일반적으로 equals를 재정의하지 않는 것이 가장 좋다. 🔸 equals를 재정의 하지 않아도 될 때 각 인스턴스가 본질적으로 고유할 때 - Thread 싱글톤 인스턴스 Enum 🔸 equals를 재정의 할 때 지켜야 할 규약 (null이 아닌 참조 값) 반사성 : x.equals(x)는 true이다. 대칭성 : x.equals(y)는 true이다. 추이성 : x.equals(y)가 true이고, y.equals(z)가 true이면, x.equals(z)는 true이다. 일관성 : x.equals(y)를 반복해서 호출하면 항상 같은 값을 반환한다. null-아님 : x.equals(null)은 false이다. 구체 클래스를 확장해 새로운 값을 추..

기술서적 2022.04.15

EFFECTIVE JAVA3 - 2장. 객체 생성과 파괴

EFFECTIVE JAVA3를 읽고 내용을 정리해보려고 한다. 이번 장은 객체의 생성과 파괴를 다룬다. 객체를 만들어야 할 때와 만들지 말아야 할 때를 구분하는 법 제때 파괴됨을 보장하고 파괴 전에 수행해야 할 정리 작업을 관리하는 요령 아이템 1. 생성자 대신 정적 팩토리 메서드를 고려하라 여기서 얘기하는 정적 팩터리 메서드는 디자인 패턴의 팩토리 메서드와 다르다. 장점 👍 1. 이름을 가질 수 있다. ❌ Bad BigInteger(int, int, Random) ✅ Good BigInteger.probablePrime(int, int, Random) "값이 소수인 BigInteger를 반환한다" 라는 보다 명확한 의미 전달이 가능하다.2. 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다. 이 덕분..

기술서적 2022.04.15

Clean Code - #3장. 함수

작게 만들어라 얼마나 짧아야 좋을까? 작을 수록 좋다. 중첩 구조가 생길만큼 함수가 커지면 좋지 않다. if/else, while문 등에 들어가는 블록은 한 줄이어야 한다. 다시 말해 블록 안이 두 줄 이상이 된다면 함수로 추출하고 함수 이름을 적절히 짓자. 한가지만 해라 함수는 한가지 일만 해야하며, 함수 내 추상화 수준은 하나로 맞추면 된다. 하지만 추상화 수준이 하나인 함수를 구현하기란 쉽지 않다. 핵심은 짧으면서도 한가지 일만 하는 함수이다. switch 문 다형성을 이용하여 각 switch 문을 저차원 클래스에 숨기고 절대로 반복하지 않는 방법이 있다. 아래 Bad 코드에는 직원 타입 별로 Pay를 계산하는 switch 문이 존재한다. 여기서 많은 문제가 있지만 가장 큰 문제는 아래 switch..

기술서적 2022.04.08

Clean Code - #2장. 의미 있는 이름

clean code 라는 책을 읽고서 일부 내용을 정리하려고 한다. 2장. 의미 있는 이름 의도를 분명히 밝혀라 그릇된 정보를 피하라 실제 컨테이너가 List일지라도 컨테이너 유형을 이름에 넣지 않는 편이 좋다. ❌ Bad List accountList = new ArrayList(); ✅ Good List accounts = new ArrayList(); 변수명을 소문자 l이나 대문자 O를 사용하는 것은 가독성면에서 최악이다. 의미 있게 구분하라 Product라는 클래스가 있다고 가정해보자. 여기에 ProductInfo나 ProductData와 같은 클래스를 추가한다면 개념 구분 없이 이름만 달리한 경우다. -Info, -Data는 아무런 정보도 주지 못한다. Product1, Product2 와 마찬..

기술서적 2022.04.07

# VMware 15 player 에 'Install vmware tools' 설치 안되는 이슈 해결

vmware15 player에서 window10을 설치하고서 vm의 여러 기능(drag and drop / Host-guest간 clipboard 공유 / 전체 화면 등)을 추가 사용하기 위해서 Install vmware tools를 활성화 해줘야한다. 근데 이게 별 짓을 다해도 vm의 Install vmware tools 키가 활성화 되지 않는 것이다. 아래와 같이 버튼은 있는데 클릭할 수가 없었다. 장시간 삽질의 결과, 문제를 해결했다. 문제는 드라이브에 있었다. Install vmware tools 을 설치하려면 처음에 드라이브 형태로 설치가 되는데 vm 기본 설정에서 드라이브를 추가할 수가 없었기 때문이다. 따라서 vm의 설정에서 사용하지 않는 플로피 디스크를 삭제하고 CD/DVD 드라이브를 추가..

OS/Error 2021.01.19

# VM CentOS7에서 yum error [could not resolve host] 발생

vm에 centos 구성 후 yum 실행시 해당 에러로 설치가 안될 때가 있다. 확인사항 1. ping으로 외부 통신 테스트 $ ping 8.8.8.8 확인사항 2. NetworkManager resolve.conf 확인 $ vi /etc/resolv.conf nameserver 192.168.10.1 # 추가 $ systemctl restart NetworkManager # NetworkManager 재실행 $ systemctl status NetworkManager # NetworkManager 기동 확인 다시 yum install 수행하면 정상 수행 될 것이다.

OS/Error 2021.01.18

# VirtualBox에서 CentOS7 고정 IP 설정

기본적으로 Clean OS를 설치했다면 아래 작업은 해주자. yum update yum install epel-release -y Step 1. VirtualBox 네트워크 설정하기 Step 2. 서버의 네트워크 설정 변경 $ vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="dhcp" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy"..

OS 2021.01.12