2017년 6월 24일 토요일

MSA가 뭐죠?

오랜만에 글을 남깁니닷.

일단 최근에 MSA로 구축할 프로젝트가 생겨서 MSA에 대해서 조금 알아보게 되었습니다.
기초나 기본을 튼튼히 하지 않고
이미 튼튼하신 분들이 공부하고 해야할 일을 대충 처리하는건 아닐까 하는 막연한 두려움과 불안감에 휩쌓여 있기도 합니다.

그래도 얻게된 것
1. 어렴풋이 SOA와 MSA의 차이를 알게 되었다.
2. yml 파일을 좀 더 잘 쓸수 있게 되었다.
3. MSA 구성 품들을 알게 되었다.
4. 도커가 뭔지 찌끄려봤다.
5. 실제 API 게이트웨이를 생성해보고 있다(물론 있어야 하는지 없어야 하는지 의견은 많이 나뉨).
6. 클라우드 환경 위에서 구축하는 MSA(이론) / 물리 서버(+ 1대의 디비)에 구축하는 실전형 MSA(라고 쓰고 아직 이론 공부만 하는중 이라 읽음)

2번의 경우 메이븐에서 설정하던 관성이 있어
폴더별 프로파일 구분하던가 application-profile.yml 하던것을
application.yml에 통합한다거나 spring:profiles: 로 처리한다거나 다양한 방법을 접해보게 되었습니다.

3번은 6번에서도 마찬가진데 MSA는 서비스를 쪼개는 것이다. 그리고 이를 합쳐서 서비스 한다.
누구나 할 수 있는 말이고 말만으로는 너무나 쉽습니다. 실제로 구현하는건 다른 이야기 같습니다.
화두가 되는 API 게이트웨이와 트랜젝션 처리인데요.
API 게이트웨이는 큰 서비스 아니면 잘 안둔다. 그냥 있으면 편하다. 관리하기 힘들다. 등등등...
트랜젝션은 글로벌/로컬 트랜젝션을 관리한다. 보상 트랜젝션으로 퉁친다? 이벤트(메시지) 핸들링 한다?(사실 잘 몰라요 ㅠㅠ) 등 방법이 알려져 있습니다.
물론 저도 말은 할 수 있는 정도는 되었는데, 구현하라고 하면 당연히 손빨고 있어야 합니다.
그래서 지금 손빨고 있습니다... ㅠㅠ 사수가 필요합니다.......

4번은 도커를 사용하거나 도커간의 통신 도커 내의 작업 이미지 생성등 어떤 것들이 있는지 알아가고 있는 중입니다. 의외로 도커 부분은 잘 풀렸으면 하는 부분이기도 합니다.

5번은 이제 여기저기 많은 예제를 실행해보고 있는데(난 왜 안되냐...)
많은 선택지 중 넷플릭스(만 믿고 간다!)의 Zuul을 사용하기로 마음(저 혼자)먹었습니다.
그래서 예제를 작성(따라서 코딩)하고 있고 너무나 쉬운 라우팅에 멘붕이 터진 후에 라우팅 리소스를 Spring Cloud Config Server/Client로 처리하는 것을 방금 마친것 같습니다... 마친걸꺼에요... 될껄요?
이제 남은건 Zuul 필터 다루기와 LB 기능들 그리고 그 왜에 우리 프로젝트가 원하는 것들을 구성해 나가야겠지요.

6번은 저도 잘 모르니 이견이 많습니다. MSA를 설명하는 대부분은 서비스가 분리되어 독립된 DB를 갖는다고 하는데(각각은 아니더라도) 저희는 제약이 서버 1대로 퉁친다입니다.
아키텍트라는게 귀에걸면 귀걸이인가? 싶기도 하고... 사수가 필요합니다...
서버는 몇대가 되어야 하는지 나눠야 하는 서비스는 몇갠지 등등 아무런 정보가 읎습니다. 읎어....ㅠㅠ

함께 일하시는 분들이 관성이 괭장히 굉장하셔서 저같이 옛날 방법이나 기술을 모르는 사람은 어리둥절하게 만들어 주시는데 사실 그분들의 그 방법보다 제가 아는 방법(은 없지만)으로 똑같이 해낼 자신도 없습니다... 그래서 역시나 사수가 필요합니다....

그나저나 MSA인데 한 프로젝트 안에 서브모듈로 서비스를 나눠도 되는건지 이게 MSA인건지 뭐 아리까리한게 너무나 많습니다.
어휴 조만간 풀 예제를 장착해서 돌아도로록 하겠습니다.

MSA(트랜젝션 및 구성) + 도커 + CI/CD
아... 어렵다....



사수가 필요합니다.