👨💻 프로그래밍/Architecture 10 ☁️ AWS에서 무중단 배포 구현하기 ☁️ AWS에서 무중단 배포 구현하기 목표Cloud의 편리함은 최대한 누리면서 AWS에는 종속되지 않게무중단 배포를 구현한다 사실 무중단 배포를 구현하는 거 자체는 간단합니다. 새로운 버전의 서버를 미리 띄워 두고, Health Check를 해서 괜찮으면 트래픽을 전환한다... 하지만 이걸 구현하기 위해 내려야 할 여러 기술적인 결정은 단순하지 않습니다.오늘은 진작에 접었어야 했지만 접지 못 해 계속 하고 있는 제 포트폴리오 사이트 책잇아웃의 무중단 배포를 AWS와 Github Actions로 구현하는 과정에서 했던 여러 기술적인 결정들과 배운 것들을 기록해 보겠습니다.현재상황 (시작점)🐜 AWS 구조현재 상황은 ELB (Elastic Load Balancing)가 가장 앞단에 있어 트래픽을 받는 구조입니다. ELB에는 Public IP .. 2024. 11. 22. 도메인 모델 풍부하게 만들기 도메인 모델 풍부하게 만들기 문제의 근원 : Fat Service애초에 왜 도메인 모델을 풍부하게 만들어야 할까요? 도메인 모델을 풍부하게 만든다가 절대선이라는 생각은 일단 내려놓고 생각하면, 프로그래밍 설계에서 대부분 무언가를 해야 한다면 2가지 이유가 있습니다.더 이해하기 쉽게 만들기 위해변경에 유연하게 하기 위해 그렇다면 도메인 모델을 풍부하게 만들어야 하는 이유는 왜 때문일까요? 🤔 이건 도메인 모델이 풍부하지 않은 경우 그 로직이 어디에 가는지 생각해 보면 됩니다. 요구사항을 만족시키는 로직은 결국 어딘가에는 있어야 합니다. 보통 도메인 모델에 로직이 없다면, 서비스 계층에 있겠죠? 사실 처음에는 서비스 계층이 통통해도 괜찮습니다. 괜히 이해하기 어려운 패턴이나 아키텍처를 도입하면 이해하기만 어렵고 이득보다 손해가 많습니.. 2024. 5. 4. 핵사고날? 클린 아키텍처? DDD? 핵사고날? 클린 아키텍처? DDD? 🐜 취준생들의 단골멘트 취준생들의 이력서에 단골로 등장하는 단어가 있습니다. 이름도 멋진 헥사고날 Architecture입니다. 처음 헥사고날 Architecture류의 용어들 (헥사고날 Architecture, DDD, Clean Architecture)를 접했을 때 저는 쓸데없이 복잡하고 혼란스러운 이것들을 왜 써야 하는지 도저히 이해할 수가 없었습니다. 그도 그럴게, 헥사고날 Architecture가 왜 좋은지 알려면 Business Logic이 꽤 복잡한 애플리케이션을 다뤄야 하기 때문입니다. 간단한 CRUD 애플리케이션에 핵사고날 아키텍처를 써 봤자 쓸데없이 복잡할 뿐이죠. 그럼 헥사고날 Architecture가 왜 태어났고 왜 유용한지 여태까지 이해하고 경험한 내용들을 써 보겠습니다. 🐜 용어.. 2024. 1. 28. CQRS (Command Query Responsibility Segregation) 알아보기 CQRS (Command Query Responsibility Segregation) 알아보기 CQRS(Command Query Responsibility Segregation)가 뭔데 CQRS는 영어 줄임말 그대로 Command와 Query를 분리한다는 개념입니다. Command가 뭐고, Query는 또 뭐고, 왜 분리해야 할까요? Query - 읽는 동작입니다. 읽기만 할 뿐 데이터나 상태를 절대 변경시키면 안 됩니다. Command - 변경하는 동작입니다. 보통 내부 상태나 데이터를 구체적으로 어떻게 변경할지는 명시하지 않고 도메인에 맞는 동작을 전해주는 경우가 많습니다. 여기서 Command에 대해 자세히 알아봅시다! Command가 상태를 변경한다고 해도 이를 명시적으로 하면 결국 어떤 동작을 해야 할지 각각의 도메인에 가서 다 확인해야 합니다. 예를들어 배송 시스템이 있다고 하고 유저가.. 2023. 12. 8. Redis, RabbitMQ, Kafka를 각각 Message Queue로 사용할 때의 장단점 Redis, RabbitMQ, Kafka를 각각 Message Queue로 사용할 때의 장단점 Message Queue를 신중히 선택해야 하는 이유 MSA 환경에서 비동기로 무언가를 처리하거나, Transaction을 처리하기 위해 많이 쓰이는 방식이 바로 Message Queue를 사용하는 방법입니다. Message Queue, 그거 아무거나 대충 쓰면 되지 왜 신중히 선택해야 할까요? 모든 SW 기술들이 그렇지만, 결국 장단점이 있기 때문입니다. 속도-비용-정합성 사이의 아찔한 줄타기를 이어간 결과, 크게 3가지 선택지가 주어지게 됐는데요. 이 3가지를 비교해 보고 어떤걸 선택해야 할지 알아보겠습니다. Redis의 장단점 아무튼 빠름. 근데 잃어도 알빠? Redis하면 보통 Cache를 떠올리시겠지만, Message Queue의 기능도 지원하기 때문에 Message Queue로도 사용할 수 있.. 2023. 9. 30. 🔒 분산 Architecture에서 Redlock으로 Lock 걸기 🔒 분산 Architecture에서 Redlock으로 Lock 걸기 분산 Architecture에서 Lock 걸기의 어려움 Monolithic Architecture에서도 성능을 고려하면 Lock 걸기가 복잡했습니다. 여러 Transaction Level을 고려하고, 재시도 매커니즘을 고안하고, Deadlock 상황에서 어떻게 해야할지 고려하고.. 근데 여기에 더해 MSA 같은 분산 Architecture에서 Lock을 걸어야 한다면 어떨까요? 성능을 더욱 고려해야 하고, Transaction 거는 것도 훨씬 복잡하고, Deadlock은 밥 먹듯이 있지 않을까요? Redis Instance가 1개일 경우 만약 Redis 1개를 공유하면 Lock을 구현하는건 비교적 간단합니다. Lock 별로 고유한 Key를 정의한 후, setNX를 사용해서 있을 경우 set하고, 없을 경.. 2023. 9. 28. MSA 환경에서 Circuit Breaker를 쓰는 이유, 그럼에도 발생하는 문제 Bulkhead로 해결하기 MSA 환경에서 Circuit Breaker를 쓰는 이유, 그럼에도 발생하는 문제 Bulkhead로 해결하기 Circuit Breaker가 뭘까? Circuit Breaker는 회로 차단기입니다. 말 그대로 내리면 정전이 되는 그 회로 차단기를 의미하는 건 아니고, 일종의 비유입니다. MSA 환경에서는 개별 Application의 복잡도는 내려가지만, 인프라 레벨에서의 복잡도는 늘어납니다. Client에게는 1개의 요청으로 보여도, 그 안에는 여러 MS 끼리 네트워크를 통해 요청을 주고 받습니다. 당연히 이 과정에서 실패 확률이 올라갑니다. 만약, 전기를 내리는 회로 차단기처럼 이런 오류를 방지하는 패턴이 없다면 한 MS의 오류가 다른 MS에게 번지기 때문에 이를 예방하기 위해 Circuit Breaker 패턴을 쓰게 됩니다. Circuit Breaker의 작동 방법 Circuit Breaker는 지속적으로 상.. 2023. 9. 24. Spring Cloud Config로 Config 서버 구성하기 Spring Cloud Config로 Config 서버 구성하기 Spring Cloud Cloud란? Spring에서는 흔히 설정과 관련된 정보를 application.properties나 application.yml에서 관리합니다. 설정에는 API Secret이나 암호키 같은 민감한 정보가 있을 수 있기 때문에 보통 환경변수나 jar 실행 시의 argument로 이런 값을 받게 해서 유출을 방지합니다. 하지만 이런 방식은 같은 instance 여러개가 다른 시간에 배포되는 MSA 같은 환경에서는 관리가 너무 어려워 비현실적입니다. 이를 해결하기 위한게 Spring Cloud Config입니다. Spring Cloud Config를 쓰면... Backend(Git, Vault 등)에서 설정 파일들을 버전 관리 가능 instance의 재시작 없이 주기적으로 새로운 설정.. 2023. 5. 2. 로드 밸런서(Load Balancer)에 쓰이는 알고리즘 로드 밸런서(Load Balancer)에 쓰이는 알고리즘 Load Balancer란? 서버의 트래픽(요청)을 분산시키는 장치 우리가 컴퓨터에 너무 많은 프로그램을 켜 놓으면 느려지고, 최악의 경우 블루스크린이 뜨며 작동을 중지하듯, 서버 또한 너무 많은 요청을 받으면 부담이 됩니다. Load Balancer는 부하(Load)를 밸런싱(Balance)해 주는 장치를 말합니다. 네이버 홈페이지를 생각해 보면, 하루에 네이버를 찾는 사람이 1000만명은 될 겁니다. 이 모든 요청은 1개의 서버가 받는다면 네이버 홈페이지는 터지는게 일상일테지만, 로드 밸런서가 한 요청은 춘전의 데이터센터에 보내고, 한 요청을 서울로 보내는 식으로 분산시킨다면 터지지 않을 것입니다. 그렇다면 로드 밸런서는 어떤 식으로 트래픽을 분산시킬까요? 흔히 쓰이는 알고리즘 Round Robin .. 2023. 4. 1. 마이크로서비스(MSA)를 쓰는 이유 마이크로서비스(MSA)를 쓰는 이유 초반에 프로그래밍을 공부하면서 틈틈히 IT 기업들의 발표회를 보곤 했는데, 거의 알아들을 수 없어서 충격을 받았던 적이 있습니다. 아직 갈 길이 멀구나 좌절하고, 반년 정도 열심히 공부한 후 다시 봤는데, 놀랍게도 똑같이 거의 알아들을 수 없었습니다. 나중에 알고 보니, 제가 알아듣지 못한 내용은 모두 MSA 관련 내용이였습니다. MSA(마이크로서비스 아키텍처), 말 그대로 서비스를 작게(마이크로하게) 만든다는 것입니다. 대기업들은 굳이 왜 MSA를 사용할까요? MSA를 배워 보면 그 이유가 명확해 집니다. MSA에 관한 공부를 앞두고 계신다면, 그 전에 MSA가 정말 왜 필요한지 알려드리겠습니다. 크면 클 수록, 관리가 힘들고 예상치 못한 오류들이 많이 나온다 구글이나 마이크로소프트 같은 실리콘벨리의 .. 2023. 3. 28. 이전 1 다음 반응형