일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 객체지향solid
- 스프링핵심요소
- 프로그래머스가장큰수
- 팀프로젝트
- webrtc
- 도둑질자바
- 자바filter
- 자바foreach
- 자바스크립트filter
- 자바 가비지컬렉션
- 자바스크립트map
- 프로젝트회고
- Programmers도둑질
- 자바리스트정렬
- 객체지향다형성
- 자바스크립트reduce
- node의존성주입
- 자바stream
- 클라우드타입
- Programmers가장큰수
- 프로그래머스도둑질
- 자바Comparator
- 자바스크립트foreach
- openvidu
- 자바배열정렬
- 우선순위큐자바
- 자바Comparable
- 객체지향추상화
- 자바reduce
- 모놀리틱 아키텍처
- Today
- Total
I'm pine thank you and you?
[아키텍처] MSA / 멀티모듈 단일프로젝트? 단일모듈 멀티프로젝트? 본문
TIL(Today I Learned) 느낌으로 적는 글,,
우선 Monolithic Architecture(모놀리틱 아키텍처)가 무엇인지 알아보자!
하나의 서비스에서 API, ADMIN, BATCH, WEB, DB이 관리되는 구조
모놀리틱 아키텍처는 이 두 개로 나뉜다.
- 단일 모듈 멀티 프로젝트
- 멀티 모듈 단일 프로젝트
그럼 MSA는?
Micro Service Architecture
서비스를 도메인 단위로 상세하게(micro) 분리하고 그 서비스들을 모놀리틱 하게 구상한 방식
각각의 서비스는 독립적이고 느슨하게 결합되어 있다.
MSA와 멀티 모듈의 관계
의존성의 분리(독립성)를 통해 시스템의 분리&통합을 유연하게 만들 수 있기 때문
여기서 잠깐,
애플리케이션? 서비스? 헷갈리는 용어 정의🤯
라이브러리(프레임워크): 사용성, 기능 제공
모듈: 구성요소, 독립적으로 운영될 수 있는 구성요소
서비스: 독립적으로 실행 가능한 애플리케이션, 라이브러리를 이용해 서비스를 만듦
애플리케이션: 서비스를 제공하는 플랫폼
시스템: 1개 이상의 서비스와 공유 인프라가 모여 하나의 시스템을 구성한다.
단일 모듈 멀티 프로젝트
3개의 IDE를 띄어둔 상태로 개발을 하는 형태
Member 클래스(단일 모듈)를 여러 프로젝트에서 공유하고 있다.
이말인 즉, 모듈이 중복되어 쓰이고 있으므로 잘못하면 장애로 이어진다.
그래서 중간에 Repository를 두어 공유되고 있는 모듈을 여기서 관리
시스템적으로는 일관성을 보장 받지만, 개발 사이클이 번거롭다. (api를 수정해서 Nexus에 배포하고 domain에서 Nexus에 배포된 내용을 다운로드하고..)
멀티 모듈 단일 프로젝트
프로젝트는 하나
즉, IDE를 1개만 사용하고 그 안에서 여러 개의 모듈을 관리
일관성과 빠른 개발 사이클을 확보할 수 있지만, 멀티 모듈을 확립해 가는 과정에서 문제점이 생길 수 있다.
무슨 문제점?
⚠️ '공통되는 코드를 제거할 수 있겠다~' 라는 안일한 생각
- 공통 로직을 분리해서 Common이라는 모듈을 만듦
- 공통되는 코드를 Common모듈에 싹 다 넣음
- Common이 커지면 Common안에서 비즈니스가 흐르기 시작함
- 결국 다른 모듈들은 날씬해지고, Common만 굉장히 큰 프로젝트로 구성됨
⚠️ 스파게티 코드
- 200~300개가 넘는 클래스가 서로를 의존하는 스파게티 코드
⚠️ 의존성 덩어리
- Common에서 애플리케이션이 사용할 수 있는 의존성을 모두 품게 된다.
- 사용하지 않는 것에 대해서도 의존을 하고 있다.
- 의도하지 않은 설정 값이 트리거로 발동되어서 예기치 못한 에러가 발생할 수 있다.
⚠️ 공통 설정
- 각 모듈이 DB커넥션을 필요로 하는 수가 다르다.
- 어떤 모듈은 DB커넥션이 적게 필요하고, 어떤 모듈은 DB커넥션이 많이 필요하다.
- Common모듈에 공통 설정을 해놨다면, 모든 모듈이 그 설정을 따라가 DB가 커넥션을 더 이상 제공해 줄 수 없어서 장애가 발생
좋은 아키텍처란?!
모놀리틱 구조로 시작해서, 독립적으로 배포 가능한 단위들의 집합으로 성장하고, 이 집합이 독립적인 서비스, 마이크로 서비스 수준까지 성장할 수 있어야 한다.
또한 나중에 상황이 바뀌었을 때 이 진행 방향을 거꾸로 돌려 원래 형태인 모놀리틱 구조로 되돌릴 수도 있어야 한다. (시스템의 분리&통합)
👉 클린 아키텍처!
MSA / 멀티모듈
이 둘은 성격이 비슷하다.
- MSA: 기능별 API 서버 분할
- 멀티모듈: 여러개의 모듈로 나누어 하나의 프로젝트를 구성
앞서 설명했듯
MSA는 모놀리틱한 서비스가 모인 하나의 시스템이고
멀티모듈 단일프로젝트는 모놀리틱 아키텍처의 한 종류이다.
좋은 아키텍처의 정의에 따라 모놀리틱 ↔️ MSA이 수월하게 되기 위해선 멀티모듈 구조가 필요하다는 것을 알 수 있다.
💁♀️아래 글을 참고하였습니다.
'CS' 카테고리의 다른 글
[DB] Redis 개념, 특징 (0) | 2023.03.22 |
---|---|
WebRTC가 무엇일까? (용어, 샘플, openvidu) (0) | 2023.03.04 |
[디자인 패턴, JAVA] Singleton Pattern(싱글톤 패턴) 정의, 목적, 용도 (0) | 2023.02.09 |
[클라우드 컴퓨팅] IaaS, PaaS, SaaS (0) | 2023.02.06 |
[JAVA, JS] map, filter, reduce, forEach (0) | 2023.01.20 |