쏘카 개발 팀장 지두현님
- Modern = 활용할 수 있는
개발자로서 성장하기 위해서는
- endpoint 설계를 더 잘 집중해라. MSA에 대한 공부보다는
- 특히 주니어의 경우에는. 성장하려고 하는 의지, 배우려고 하는 의지. 클린 코드를 짜고 싶은, 관리 가능한 코드를 짜려고 노력하는 개발자
Architect
- Fundamental knowledges
- Proficient programming languages(2~3가지 프로그래밍 언어 알고)
- Software engineer as a developer
- Manageable coding capabilities
- Leadership and coaching
- Infrastructure knowledge and understanding
- Experiences in developing/releasing/managing production softwares for more than 7 ~ 10 years
주어진 환경에서 가장 좋은 소프트웨어를 만들기 위해서 잘 어우러지도록 하는 일을 함
Modern Architecture
- Standalone - 컴퓨터의 힘 만으로
- Distributed over network - 나누어진 컴퓨팅 자원을 이용해서 수행을 하는 것
- Monolithic
- Microservices(MSA) - Monolithic을 쪼개어서 나누어서 사용하는 것
- Event-driven(EDA) - Event 중심, Data 중심
무엇이 아키텍처의 변화를 이끄는가?
Needs
- Required resources and capacities
- Scale and stability
- Role and responsibility
- Autonomy
ENVs
- 향상된 컴퓨팅 파워
- unix, pc, linux, and intel
- Network
- UDP/TCP
- Internet → HTTP
- Machine friendly protocols
- SOAP (XML 기반)
- RESTful
- R&R을 나누고
- 서비스를 맡아서 개발을 진행하게 됨으로써 → MSA 대두됨
- 분산된 환경이다 보니 어느 쪽에서 변경이 되어서 문제가 생길 수 있음

- ⇒ EDA 대두. 다른 것 신경 쓸 필요 없이 데이터만 신경 씀. 서로가 서로를 알 필요 없이 데이터만 보면 됨
List of Available Architectures
- Monolithic
- MSA
- EDA
- Serverless
MSA

- Decentralized Governance : 각각의 서비스들은 각각의 지배만 함. 하나의 서비스는 노드로, 다른 건 자바로, 다른건 go로...
- Decentralized Data : db 는 각각의 서비스 별로
- Infrastructrue Automation : 인프라 자동화
- Design for failure : 여러 프로덕트를 한번에 transaction 할 수가 없어서, 끝에 하나 실패하면 앞에 두 개는 변경사항이 반영된다... 이러한 실패에 대한 방지책이 있어야 함
⇒ 자유도가 높아짐.
- 그러나 잘게 나누어져 있는 것들을 한번에 파악하는 것이 정말 중요함. Decentralize R&R but centralize managements!
EDA
- Loosely coupling among services by data/event driven.

Architect를 자질을 쌓기 위해서는?
- 코드를 잘, 많이 짜 봐야함
- 어플리케이션을 내 손을 가지고 처음부터 끝까지 해보아야 함. 맨 아래에 있는 스크래치부터 시작해서 빌드 업 할 수 있어야 함
- 마이크로서비스라는 부분을 동료들과의 협업, 리딩 경험 → 이러한 전반적인 과정을 5~6년 정도 해보아야 함
- 소프트웨어 설계를 직접 그려보고 서로 평가해주고 하면서 아키텍트로 성장하게 되는 것임