일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Python
- oracle
- 명령어
- 트랜잭션
- spring
- c#특징
- mysql
- 4요소
- 각데이터베이스별
- rebase vs merge
- SQL
- group by
- java
- 자바
- JPA
- 티스토리챌린지
- 차이점
- DBMS
- network
- 뷰테이블
- PostgreSQL
- 오블완
- IntelliJ
- git
- docker
- Javascript
- mssql
- analytics4
- API
- Today
- Total
hanker
마이크로 서비스 아키텍처(Microservices Architecture) 란? 본문
마이크로서비스란 무엇인가?
마이크로서비스 아키텍처(Microservices Architecture)
애플리케이션을 작은 독립된 서비스들로 나누어 설계하는 소프트웨어 개발 방식이다.
이 서비스들은 각각 고유한 기능을 수행하며, 독립적으로 배포되고 확장 가능하다.
특징
1. 모듈화: 애플리케이션을 작은 서비스로 분리.
2. 독립 배포: 각 서비스는 별도로 배포 및 관리 가능.
3. 다양한 기술 스택: 각 서비스는 서로 다른 기술 스택을 사용할 수 있음.
4. 경량 프로토콜: 서비스 간 통신은 주로 REST API 또는 메시지 큐를 사용.
예시
전자상거래 애플리케이션에서 마이크로서비스의 역할
- 사용자 관리 서비스
- 상품 카탈로그 서비스
- 결제 서비스
- 배송 서비스
1. 왜 마이크로서비스라고 불릴까?
1) 유연성과 확장성
- 특정 서비스만 독립적으로 확장 가능
- 예: 블랙 프라이데이 기간에 결제 서비스만 확장
2) 독립적인 배포
- 애플리케이션 전체를 중단하지 않고 개별 서비스만 업데이트 가능
3) 장애 격리
- 한 서비스에서 오류가 발생해도 다른 서비스에는 영향을 주지 않음
4) 팀 단위 개발 효율성
- 각 서비스는 독립된 팀이 개발, 배포, 운영할 수 있어 개발 속도가 향상
2. 마이크로서비스의 주요 구성 요소
1) API 게이트웨이
역할: 외부 요청을 각 마이크로서비스로 라우팅
예시 도구: Naver Cloud API Gateway, AWS API Gateway, Tmax Tibero API Gateway
2) 서비스 디스커버리
역할: 각 서비스의 위치(IP, 포트)를 동적으로 관리.
예시 도구: Netflix Eureka, ProSync, NHN Cloud Service Discovery
3) 데이터베이스 분리
각 서비스는 독립된 데이터베이스를 보유하여 서비스 간 결합도를 낮춤
4) 메시지 브로커
비동기 통신을 위해 메시지 큐를 사용.
예시 도구: RabbitMQ, Apache Kafka, Naver Cloud MQ
3. 마이크로서비스의 장점
1) 애플리케이션 확장성
필요에 따라 특정 서비스만 확장 가능
2) 빠른 배포 사이클
서비스 단위로 배포하므로 개발 및 배포 속도가 빨라짐
3) 다양한 기술 사용 가능
각 서비스는 독립적이므로 Java, Python, Go 등 적합한 기술 스택을 선택 가능
4) 장애 격리
특정 서비스에 문제가 생겨도 전체 애플리케이션에는 영향 없음
4. 마이크로서비스의 도전 과제
1) 복잡한 관리
- 서비스 수가 많아지면 모니터링, 로깅, 디버깅이 어려워짐
해결책: 중앙 집중식 모니터링 도구 사용 (예: Prometheus, Grafana)
2) 네트워크 지연 및 통신 오버헤드
- 서비스 간 통신이 잦아지면서 성능 저하 발생 가능
해결책: 경량화된 통신 프로토콜 사용 (예: gRPC)
3) 데이터 관리 복잡성
- 서비스별 데이터베이스를 사용하면 트랜잭션 관리가 어려워질 수 있음
해결책: 분산 트랜잭션 및 이벤트 소싱 적용
4) 분산 시스템의 복잡성
- 분산 시스템 특성상 장애 복구 및 테스트가 어려움
해결책: Chaos Engineering으로 복구 능력을 테스트
5. 도구 및 프레임워크
1) 컨테이너화 및 오케스트레이션
도구: Docker, Kubernetes
역할: 각 마이크로서비스를 컨테이너로 배포하고 관리
2) 모니터링 및 로깅
모니터링 도구: Prometheus, Grafana
로깅 도구: ELK Stack (Elasticsearch, Logstash, Kibana)
3) 마이크로서비스 프레임워크
Spring Boot (Java)
Express.js (Node.js)
Flask (Python)
4) 분산 추적
도구: Zipkin, Jaeger
역할: 요청이 각 서비스에서 어떻게 처리되는지 추적.
6. 마이크로서비스와 모놀리식 아키텍처 비교
특성 | 모놀리식 아키텍처 | 마이크로서비스 아키텍처 |
구조 | 모든 기능이 하나의 코드베이스로 통합 | 각 기능이 독립된 서비스로 분리 |
배포 | 전체 애플리케이션을 한 번에 배포 | 서비스 단위로 개별 배포 가능 |
확장성 | 전체 애플리케이션을 수평적으로 확장 | 특정 서비스만 선택적으로 확장 |
복잡성 관리 | 단순 | 서비스가 많아질수록 복잡성 증가 |
장애 영향 | 장애가 전체 시스템에 영향을 미침 | 장애가 특정 서비스에 국한 |
7. 성공적인 마이크로서비스 전환 전략
1) 도입 목표 설정
마이크로서비스로 전환이 필요한 이유를 명확히 정의
예: 확장성 문제 해결, 배포 속도 향상
2) 점진적 전환
기존 애플리케이션의 일부 기능부터 마이크로서비스로 전환
3) 적절한 도구 선택
도구와 프레임워크를 조직의 기술 스택과 요구에 맞게 선택
4) 팀 구조 조정
서비스별 팀을 구성하여 독립적으로 작업 가능하도록 설정
마이크로서비스 아키텍처는 복잡한 현대 애플리케이션의 요구를 충족시키는 데 적합한 설계 방식이다.
하지만 도입 초기에는 관리 복잡성과 기술적 도전 과제가 따른다.
이를 극복하려면 체계적인 전략과 적절한 도구 활용이 필수적인것 같다.
'DEVELOPER INFO' 카테고리의 다른 글
데브옵스(DevOps)가 뭘까? (0) | 2025.01.08 |
---|---|
스마트홈의 미래, 모든 것이 연결되는 삶 (2) | 2024.12.24 |
온라인 자바 컴파일러 사이트 (0) | 2024.11.27 |
2024년 11월 - 가장 많이 사용되는 DBMS Top10 (1) | 2024.11.22 |
소프트웨어 아키텍처 : Antifragile 에 대해서 (0) | 2024.11.15 |