프로그래밍
-
DB 분리 스키마 vs 테이블프로그래밍/MSA 2024. 11. 28. 16:53
MSA 환경에서 데이터베이스를 어떻게 할 지 고민 도커컴포즈로 mysql과 레디스를 묶어 사용하려 했다. 이 경우 레디스는 key-space를 도메인 별로 나누면 된다. 하지만 mysql은 각 도메인마다 독립적인 데이터베이스를 가져야하는데 어떻게 구현해야하나 고민이 되었다. 방식은 두가지가 있다. 1. 각 도메인이 다른 스키마를 사용2. 같은 스키마를 공유하되, 도메인 별로 테이블을 분리 1. 각 도메인이 다른 스키마를 사용Order는 order_db, Product는 product_db, Auth는 auth_db 로 스키마를 분리할 수 있다. 이 경우 각 도메인은 url이 분리되어 각자 독립적인 db를 보유한 것처럼 사용할 수 있다.jdbc:mysql://mysql:3306/product_db..
-
마이크로서비스 깃허브 관리방식프로그래밍/MSA 2024. 11. 28. 02:18
MSA 프로젝트를 하며 깃허브 레포지토리를 어떻게 관리해야할지많은 고민이 생겨 이것저것 알아보았다. 깃허브 관리 방식에는 3가지를 찾을 수 있었다. 1. 모노레포 (Monorepo)2. 서브모듈 (Submodule)3. 다중 레포지토리 (Multi-repo) 각 방식에 대해 간략히 설명해보자면 1. 모노레포 (Monorepo)모노레포란 하나의 깃 레포지토리에서 여러 프로젝트 또는 서비스를 통합 관리하는 방식모든 서비스와 코드를 하나의 레포지토리에서 관리하는 것이 특징 장점1. CICD 파이프라인 설정과 코드 공유가 쉽다.2. 서비스 간 의존성 문제를 해결하기 쉽다.3. 같은 레포지토리에서 작업하므로 변경사항 추적이 쉬우며, 협업이 쉽다.4. 관련된 모든 변경사항을 한번의 커밋으로 관리할 수 있기 때문에 ..
-
Hystrix와 Resilience4j "제공"과 "실행"의 차이프로그래밍/MSA 2024. 11. 20. 16:50
Hystrix : Fallback "제공" 실패 시 미리 정의된 Fallback 메서드를 Hystrix가 자동으로 호출개발자는 로직을 제공. 실행은 Hystrix가 관리 장점 : 간단하고, 구조적이며, 작성할 코드가 적음 Resilience4j : Fallback "실행" Fallback 로직을 명시적으로 작성하고, 실패 발생 시 직접 실행하도록 구현개발자가 Fallback 실행을 제어할 수 있어서 유연성이 높음 장점: 유연함단점: 코드작성량이 많음 "제공" 과 "실행" 의 차이제공 -> Fallback 로직을 미리 정의하면 실패 시 알아서 호출실행 -> Fallback 로직을 개발자가 직접 작성하고 제어 선택 기준Hystrix : 단순한 기본값 반환이 메인일 경우Resilience4j..
-
도커 열번째 - 도커 컴포즈프로그래밍/Docker 2024. 1. 18. 05:19
Docker Compose 이 명령어들은 docker-compose.yaml 파일이 있는 디렉토리에서만 동작한다. - 도커컴포즈는 여러번의 도커CLI를 실행하지 않고, 한번에 관련 어플리케이션을 yaml 파일로 구성하여 내부환경 구성과 속성을 실행할 수 있다. - 도커컴포즈는 설정값을 캐싱하기 때문에 재시작시 변경이 없다면 캐싱된 정보를 그대로 사용하여 빠른 서비스 실행을 보장 - yaml 코드에 포함된 어플리케이션들은 동일 네트워크에 포함되기 때문에 복잡한 연결 구성 없이도 쉽게 API 통신이 가능 - 도커컴포즈는 쿠버네티스와 같이 컨테이너 오케스트레이션 및 컨테이너화된 어플리케이션 관리에 널리 사용되는 도구 - 도커컴포즈는 다중 컨테이너 도커 어플리케이션을 정의*하고 실행하기 위한 도구 yaml파일을..
-
도커 아홉번째프로그래밍/Docker 2024. 1. 16. 21:48
Dockerfile 최적화 - 고려요소 1. 빌드시간 2. 이미지 크기 3. 재사용성 4. 보안 5. 유지보수성 기타 등등 - 경량의 컨테이너 서비스 제공이 목적 최적화방안 1. 컨테이너 이미지에서 불필요한 바이너리를 모두 제거하여 이미지 경량화 - 설치된 패키지파일 autoremonve, clean 등으로 제거 - apt install -y --no-install-recommencs 을 사용하여 패키지 설치 시 불필요한 패키지 설치 방지 - 이미지 내부에 빌드와 관련없는 불필요한 파일을 포함하지 않기 위해 dockerignore 사용 2. 베이스 이미지를 alpine Linux 또는 scratch 사용 3. multi-stage build 를 사용하여 최종 이미지 크기를 최소화한다. - multi-st..
-
도커 여덟번째프로그래밍/Docker 2024. 1. 16. 15:51
도커는 컨테이너의 rootfs(/) 영역의 개별 공간 할당 제한을 위해 --storage-opt 옵션을 제공한다. 하지만 이 옵션을 사용하기 위해서는 해당 디스크 파티션이 xfs로 지정되어있어야 하며, 추가기능에서 pquota (project quota) 가 설정되어 있어야한다. /etc/default/grub 에서 rootflags=uquota,pquota 추가 /etc/fstab 에서 default,pquota 추가 후 reboot 모든 컨테이너의 rootfs (/) 용량 제한을 하기 위해선 docker daemon에 제한설정을 하면 된다. sudo vi /etc/docker/daemon.json { "insecure~~:": [~~], "log-driver": "~~", "log-opts": { "..
-
도커 일곱번째프로그래밍/Docker 2024. 1. 15. 21:19
docker volume 에 대한 이해 - 도커에서 제공하는 볼륨은 컨테이너 어플리케이션에서 생성되고 사용되는 데이터를 유지, 보존하기 위한 매커니즘 제공 컨테이너가 삭제되더라도 볼륨은 독립적으로 운영되기 때문에 데이터를 유지함 - 볼륨 기술은 도커 호스트OS와 컨테이너에서 직접 접근이 가능 - 컨테이너 내부의 데이터는 컨테이너 생명주기와 연관되어 컨테이너 종료 시 삭제되지만, 이를 계속 보존하기 위한 방법으로 볼륨 기술을 사용 도커에서 제공하는 3가지 볼륨 기술 1. bind mount 2. docker volume 3. tmpfs mount 1. bind mount - 특정 디렉토리를 연결하는 방법 (파일도 가능) - "호스트 파일 시스템 절대경로" : "컨테이너 내부경로" 로 직접 마운트하여 사용 ..
-
도커 여섯번째프로그래밍/Docker 2024. 1. 15. 02:55
사용자 정의 도커 네트워크 - 도커는 기본적으로 호스트OS와 브리지 연결. --net 옵션을 통해 네트워크 설정 가능 - docker network create로 사용자 정의 브리지 네트워크 생성 - 사용자 정의 네트워크에 연결하면 컨테이너는 컨테이너 이름이나 IP로 서로 통신가능 docker network host를 쓸 경우 기존에 -p로 포트를 연결한 경우에는 도커-프록시를 이용했지만, 이경우에는 호스트 OS에 직접 PID를 할당받아 서비스하기 때문에 포트포워딩이 없고, 도커0를 사용하지 않음. 그래서 컨테이너에 별도의 IP가 부여되지 않는다. docker netwrok create 사용자 정의 네트워크 구성을 통해 컨테이너 이름으로 통신이 가능 docker DNS에 의한 Service Discove..