728x90
반응형
모놀리틱 아키텍처
모놀리틱 아키텍처는 전통적인 소프트웨어 개발 모델로, 전체 애플리케이션을 하나의 통합된 패키지로 개발, 배포하는 방식이다. 모든 시스템은 하나로 연결돼 관리된다.
장점
- 손쉬운 배포
- 실행 파일 또는 디렉터리가 하나여서 배포가 더 쉽다.
- 개발
- 하나의 코드 베이스로 애플리케이션을 구축하여 개발이 더 쉽다.
- 성능
- 중앙 집중식 코드 베이스 및 레포지토리에서는 대부분 하나의 API만으로 마이크로서비스에서 여러 API가 수행하는 것과 동일한 기능을 수행할 수 있다.
- 테스트 간소화
- 하나의 중앙 집중식 장치이므로 분산된 애플리케이션보다 end-to-end 테스트를 더 빠르게 수행할 수 있다.
- 간편한 디버깅
- 모든 코드가 한 곳에 있으므로 요청을 따라가서 문제를 찾기가 더 쉽다.
단점
- 느린 개발 속도
- 대규모 모놀리식 애플리케이션에서는 개발이 더욱 복잡해지고 속도가 느려진다.
- 확장성
- 개별 컴포넌트를 확장할 수 없다.
- 서비스 중 하나의 파트에서 리소스가 모자라 확장을 하고 싶어도 서비스 전체를 확장할 수밖에 없으며, 이는 곧 리소스 낭비로 이어질 수 있다.
- 안정성
- 모듈에 오류가 있으면 애플리케이션 전체의 가용성에 영향을 줄 수 있다.
- 기술 채택의 장벽
- 프레임워크 또는 언어를 변경하면 애플리케이션 전체에 영향을 미치므로 변경 시 비용과 시간이 많이 소요되는 경우가 있다.
- 유연성 부족
- 모놀리스에서 이미 사용한 기술로 제한되어 대량 트래픽, 복잡한 트랜잭션 등의 요구 사항에도 유연하게 대처하기 힘들다.
- 배포
- 모놀리식 애플리케이션을 약간만 변경하는 경우에도 전체 모놀리스를 다시 배포해야 하고, 서버의 기동과 빌드, 배포에 드는 시간이 길어진다.
마이크로서비스 아키텍처
마이크로서비스는 독립된 각각의 모듈을 조립해 하나의 서비스를 만드는 아키텍처다. 기능별로 작게 나뉘어진 서비스가 독립적으로 동작하는 서비스를 의미한다. 업데이트, 테스트, 배포, 확장은 각 서비스별로 독립적으로 수행될 수 있다.
장점
- 민첩한 대처
- 새로운 기능을 추가해 배포하는 것이 비교적 편리하기 때문에 요구 사항에 민첩하게 대처할 수 있다.
- 유연한 관리
- 하나의 애플리케이션 내의 특정 서비스의 규모가 커져 해당 서비스이 확장이 필요할 때 원하는 서비스의 서버만 쉽게 업그레이드할 수 있다.
- 기술 유연성
- 각 서비스에 맞게 다양한 개발 도구를 자요롭게 선택할 수 있어 기술 발전이 활성화된다.
- 높은 안정성
- 서비스 간의 독립성으로 인해 한 서비스에서의 문제가 다른 서비스에 큰 영향을 주지 않아 운영의 안정성이 향상된다.
단점
- 무분별한 개발 확산
- 여러 팀이 더 많은 장소에서 더 많은 서비스를 만들기 때문에 모놀리스 아키텍처에 비해 더 복잡해진다. 무분별한 개발 확산이 적절하게 관리되지 않으면 개발 속도가 느려지고 운영 성능이 저하되는 결과가 나타난다.
- 기하급수적인 인프라 비용
- 각각의 새 마이크로서비스는 테스트 도구, 배포 플레이북, 호스팅 인프라, 모니터링 도구 등에 대한 자체적인 비용이 발생할 수 있다.
- 조직 오버헤드 추가
- 팀에서 업데이트 및 인터페이스를 조정하기 위해 또 다른 커뮤니케이션과 공동 작업이 이루어져야 한다.
- 표준화 부족
- 공통 플랫폼이 없어 여러 언어, 로깅 표준 및 모니터링이 사용될 수 있다.
데이터 저장소 요구 사항의 변화
그동안 모놀리틱 서비스에서 애플리케이션 개발을 위해 가장 많이 사용된 데이터베이스는 Oracle, SQL Server, MySQL 등의 관계형 데이터 베이스였다. 관계형 데이터베이스는 고정된 스키마를 갖고 있다. 모든 데이터를 행과 열로 구성된 테이블에 저장하며 각 테이블 간의 관계를 정확히 규정한다. 이러한 관계는 특히 애플리케이션이 커질수록 매우 복잡해지며 데이터를 추출하기 위한 쿼리 또한 복잡해진다. 관계 간의 복잡성으로 인해 쿼리의 성능 문제가 발생하며 성능을 향상시키기 위해 쿼리, 인덱스, 테이블 구조를 자주 최적화해야 한다.
관계형 데이터베이스의 특성 : ACID
- 원자성(Atomicity) : 트랜잭션이 완벽하게 실행되거나 아예 실행되지 않음을 보장
- 일관성(Consistency) : 트랜잭션은 실행 전후로도 제약 조건을 만족시킴을 보장
- 독립성(Isolation) : 트랜잭션 실행 시 다른 트랜잭션의 개입이 없음을 보장
- 지속성(Durability) : 성공적으로 수행된 트랜잭션은 영원히 반영돼야 함을 보장
최근 서비스에서는 정해진 형태가 없고, 크기와 구조를 예측할 수 없는 비정형 데이터가 증가하고 있다. 이러한 비정형 데이터는 다차원적이거나 깊은 계층 구조를 가질 수 있어 관계형 데이터베이스의 정형화된 테이블에서는 관리하기가 어렵다. 따라서 NoSQL(Not Only SQL)의 사용이 증가하고 있다.
반응형
'Knowledge > 이론' 카테고리의 다른 글
오라클 데이터베이스 (2) | 2024.07.23 |
---|---|
JWT (Json Web Token) 이란 (0) | 2024.06.30 |
JPA와 Spring Data JPA 차이점 (+Hibernate) (0) | 2024.06.22 |
레디스를 메시지 브로커로 사용하기 (0) | 2024.06.21 |
세션 스토어로서의 레디스 (0) | 2024.06.20 |