좋은 아키텍처란

이도현·2023년 8월 19일
0

호기심 천국

목록 보기
7/13

0. 개요

클린 아키텍처에 대해서 공부하다가 애매해서 검색을 여러번하던 도중 좋은 영상을 발견했다.
https://www.youtube.com/watch?v=g6Tg6_qpIVc&list=LL&index=4
간단히 내용을 요약해보고 좋은 아키텍처에 대해 고찰해보고자 한다.

1. 소프트웨어 아키텍처란?

1) 소프트웨어가 제공하는 가치

  • 스프트웨어의 기능과 구조
  • 구조는 아키텍처를 의미
  • 보통 기능에 집중하지만 구조가 더 중요하다 by. 엉클밥

2) 코딩

  • 코드를 작성하는 행위
  • 목적: 컴퓨터에게 원하는 일(기능)을 시키기 위해
  • 행위: 신규 프로젝트 생성, 코드 작성
  • 코딩이란 컴퓨터에게 원하는 일(기능)을 (버그 수정, 성능 개선, 기능 추가) 시키기 위해 코드를 읽고, 이해하고, 코드 수정 추가
  • 위의 과정은 구조로부터 시작된다.

3) 소프트웨어 아키텍처의 목표

  • 필요한 시스템을 만들고 유지보수하는 데 투입되는 인력을 최소화 하는 것

4) 좋은 아키텍처의 중요성

  • 기능 잘 동작 + 구조 엉망: 지금은 좋지만 개선의 여지가 거의 없음, 곧 버려질 프로그램
  • 기능 부족 + 구조 좋음: 지금은 부족하지만 개선의 여지가 있음, 앞으로 잘 될 프로그램

5) 아키테처 원칙

  • 패러다임: 특정 문제를 이해하고 해결하기 위한 기본적인 관점이나 접근 방식을 의미합니다. 프로그래밍에 있어서는 "프로그래밍 패러다임"이라는 용어로 자주 사용되며, 명령형, 선언형, 객체 지향, 함수형 등 다양한 프로그래밍 패러다임이 존재
  • 설계원칙(SOLID):
    SOLID는 객체 지향 설계의 다섯 가지 기본 원칙을 나타내는 약어
    S - SRP (Single Responsibility Principle): 한 클래스는 하나의 책임만 가져야 한다.
    O - OCP (Open/Closed Principle): 클래스는 확장에 대해서는 열려 있어야 하며, 수정에 대해서는 닫혀 있어야 한다.
    L - LSP (Liskov Substitution Principle): 자식 클래스는 부모 클래스의 자리를 대체할 수 있어야 한다.
    I - ISP (Interface Segregation Principle): 사용하지 않는 인터페이스는 구현하지 않아야 한다.
    D - DIP (Dependency Inversion Principle): 고차원 모듈은 저차원 모듈에 의존해서는 안 되며, 둘 다 추상화에 의존해야 한다.
  • 컴포넌트 응집성 원칙: 컴포넌트 설계에 있어서 응집성을 높이기 위한 원칙, 응집성이 높은 컴포넌트는 재사용성과 유지 보수성이 높아집니다. 대표적인 원칙으로는 REP (Reuse/Release Equivalence Principle), CCP (Common Closure Principle), CRP (Common Reuse Principle) 등
  • 컴포넌트 결합 원칙: 컴포넌트 간의 결합도를 낮추기 위한 원칙입니다. 결합도가 낮은 설계는 변경에 더 유연하며, 각 컴포넌트가 독립적으로 발전할 수 있게 합니다. 대표적인 원칙으로는 ADP (Acyclic Dependencies Principle), SDP (Stable Dependencies Principle), SAP (Stable Abstractions Principle) 등이 있습니다.

6) 계층형 아키텍처

  • 웹 -> 도메인 -> 영속성
  • 특징: 전통적인 수평적 계층화
  • 장점
    - 구조 단순
    • 처음 시작할 때 적합
    • 보편적이라서 모두가 익숙
  • 단점
    - 업무 도메인에 대해 아무 것도 말해주지 않음
    • 소프트웨어가 커지고 복잡해지면 조직화에 도움 안 됨
    • 데이터베이스 주도 설계 구조

7) 클린아키텍처

  • 웹 -> 도메인 <- 영속성
  • 특징: 도메인 중심(의존성 역전을 이용)
  • 장점
    - 규칙 단순
    • 도메인이 세부 사항에 의존하지 않는다.(DDD 적용 용이, 비지니스 규칙에 집중 쉽다.)
  • 단점
    - 패키지 구조가 계층형보다 복잡
    • 래퍼런스가 적다.

8) 헥사고날 아키텍처

  • 클린 아키텍처 기본다이어그램과 가장 비슷
  • 다라할 수 있는 쿡북이나 레퍼런스가 가장 많음.

9) 클린아키텍처 적용 시 애매할 때

  • 필요한 시스템을 만들고 유지보수하는 데 투입되는 인력 최소화에 유리한가?
  • 소스 코드 의존성이 안쪽으로, 고수준의 정책을 향하고 있는가?
  • 세부사항이 변경되어도 도메인(핵심 규칙)에 변경이 없을 것인가?
  • 테스트하기 쉬운가?
  • 각각의 아키텍처 원칙들을 잘 지키고 있는가?

2. 좋은 아키텍처란?

좋은 아키텍처란 클린 아키텍처에 귀결된다. 좋은 아키텍처란 결국 유지보수가 용이하고, 테스트하기 좋은 그러므로 사용자에게 어떤 서버스를 제공하던 문제가 생겼을 때 빠르게 대처할 수 있고, 성능 개선을 위해 많은 비용을 들일 필요가 없게하는 것이다.

profile
좋은 지식 나누어요

0개의 댓글