https://www.youtube.com/watch?v=g6Tg6_qpIVc
정리
소프트웨어가 제공하는 가치 : 기능, 구조
보통 기능>구조라고들 생각하지만 로버트 C 마틴은 "구조 > 기능"이라고 함
기능은 구조에 의지함
- 소프트웨어 아키텍처의 목표
시스템을 만들고 유지보수하는 인력을 최소화하는 것
- 좋은 아키텍처
= 수정 쉬움
= 수정하는 비용 적음
- 좋은 아키텍처 만드는 방법
패러다임
설계원칙(SOLID)
컴포넌트 응집성 원칙
컴포넌트 결합 원칙
- 아키텍처 패턴
계층형, 클린, 헥사고날 등
- 패키지 구조
- 클린 아키텍처는 애매하다
하나의 다이어그램으로 정의되지 않음
수많은 원칙, 실천법으로 구성됨
클린 아키텍처를 구성하기 위한 핵심 규칙은 2개뿐
1. 중요도에 따라 계층을 나눈다.
2. 의존성은 내부, 고수준을 향한다.
- 클린 아키텍처 적용 판단 기준
1. 인력 최소화에 유리한가
2. 의존성이 안쪽, 고수준 향하는가
3. 세부사항이 변경해도 도메인에 변화 없는가
4. 테스트하기 쉬운가
5. 각각 아키텍처 원칙을 지키는가
비추천 : 소규모 / 개발자 모두가 클린 아키텍처에 대해 이해하고 있지 않은 경우 / 모두가 합의 안 한 경우
※ 적용 시 패키지 수가 많이 증가하긴 한다 (약 4배)
- 헥사고날 아키텍처
느낀 점
최근 느꼈던 것들이 이번 강연을 통해 구체화되고 확실해졌다. 개발에서는 구조 잡는 것이 제일 중요한 것 같다. 메소드 구조, 클래스 구조, 디자인 패턴, 패키지 구조, 소프트웨어 아키텍처, 인프라 아키텍처 등등..
그리고 구조에서의 핵심 개념은 응집도와 결합도다. 하나의 관심사를 가진 코드들로 구성된 모듈을 만들고, 모듈 간 의존성을 줄여 유지보수와 확장을 쉽게 하자는 것이 코드에서부터 인프라 구조에까지 일관되게 권장되고 있다.
처음 Java를 배우기 시작했을 때에는 메소드 분리를 하고 SRP 원칙을 지키며 코드 구조에 집중했다면 지금은 유틸 모듈, 디자인 패턴, 패키징 등 조금 더 넓은 구조에도 신경을 쓰고 있다. 또 회사에서는 인프라 관련 업무도 접하면서 서버 분리(web-was-db), 컨테이너에도 관심이 생기고 있다. 어느 정도 넓고 얕은 지식은 생긴 것 같아서 조금씩 깊이 공부해봐야 할 것 같다.
지금까지는 계층형 아키텍처, 기능 기반 패키지만 경험해봐서 헥사고날 아키텍처는 대강 개념적으로만 알고 있었다. 시각 자료로 패키지 구조를 보고 나니 훨씬 이해하기 쉬워졌다. 여유가 되면 사이드 프로젝트에서 스터디 목적으로 한번 헥사고날 아키텍처를 직접 구현해보면서 이해해봐야겠다.
'Programming > 컨퍼런스' 카테고리의 다른 글
[인프콘 2022] 나도 내 코드의 문제를 찾고 싶다구요?! - 테스트 할 때 기억할 7가지 (0) | 2024.09.29 |
---|---|
[goorm COMMIT] 더 나은 코드를 위한 켄트 벡의 Tidy First? (0) | 2024.06.23 |
[당근 ML 밋업] LLM을 프로덕션에 적용하며 배운 것들 (0) | 2024.06.14 |
[2023 클라우드 컨퍼런스] Cloud Native 성공 전략 (0) | 2024.06.02 |
[DDC 2023] dev day 컨퍼런스 후기 (0) | 2023.02.03 |