-
11/22 TIL | N-tier와 Layered Architecture. 그리고 TIL 작성방식🧭📝 기록/매일의 기록 2022. 11. 22. 13:21
우선 어제 TIL로, TIL 작성에 대한 고민을 늘어놓았었는데, 홀맨님이 이렇게 코멘트를 달아주셨다.
그렇다.. TIL은 결국 오늘 내가 무엇을 배웠는지에 대해서만 말하면 되는 건데, 나는 무슨 소논문 급으로 정리를 해버리려고 하니 어디서부터 풀어내야 할지 확 힘들었던 것...^^;; 우선 완벽하게 개념을 독파하여 양질의 블로그를 작성하겠다는 완벽주의의 마인드는 잠시 내려두고, 오늘 무엇을 배웠는지를 간결하게 정리하고 그에 따른 나의 회고를 작성하는 방식으로 TIL의 방향성을 설정하였다!
TDD를 접하게 되면서 작게 단계 별로 쪼개 나아가는 방식이 효율적이라 코딩할 때는 그렇게 하면서 막상 또 이런 다른 문제(TIL 작성 등..)가 닥치면 왜 이런 본질적인 생각을 적용하지 못하는 것인가..... 무튼 길을 잃었다고 생각이 들 땐 잠시 한 발자국 물러나서 내가 어떤 본질적인 문제를 놓치고 있는지 살펴보도록 하자..!
그렇다면 오늘 나는 무엇을 배웠는지 정리해보자. 오늘 배운 개념은 N-tier Architecture와 Layered Architecture이다. 이번 주 풀스택 강의에서 전반적인 아키텍처를 어떻게 가져갈지 설명해주시면서 등장한 개념인데, 소프트웨어 공학 전반에 걸쳐 중요한 아키텍처이니 한번 정리해보려고 한다!
N-tier Architecture란?
먼저 N-tier Architecture는 Multi-tier Architecture라고도 하며, 한국어로는 다층 구조라고 해석할 수 있다. N-tier Architecture는 비즈니스 로직을 완전히 분리하여 데이터베이스 시스템과 클라이언트의 사이에 배치한 클라이언트 서버 시스템의 일종이다. 예를 들어 사용자와 데이터베이스간의 데이터 요구 서비스에 미들웨어를 이용하는 것을 들 수 있는데, 일반적으로는 3-Tier Architecture(3층 구조)가 널리 쓰인다.
여기서 3개 층은 사용자 인터페이스, 비즈니스 로직, 데이터베이스를 말하며, 이들을 각각 독립된 모듈로 개발하고 유지하는 구조로, 일반적으로 이들은 각각 다른 플랫폼 상에서 구동된다.
1. Presentatin Tier(프레젠테이션 계층)
프레젠테이션 계층은 가장 유저와 가깝게 맞닿아 있는 계층으로 유저가 이해할 수 있는 형태로 유저와 인터페이싱한다.
2. Logic Tier(논리 계층)
논리 계층은 유저가 입력한 상호작용을 데이터 처리와 명령어 실행을 위해 동작하며, 상위계층인 표현 계층과 데이터 계층 사이의 데이터 교환도 담당한다.
3. Data Tier(데이터 계층)
실제 데이터베이스나 파일 시스템에 저장되는 데이터가 있는 계층이다.
Layered Architecture란?
8주차 주간 회고에서도 정리했었지만, 다시 한번 정리해보자면!
전통적인 Layered Architecture는 앞서 설명한 3-tier Architecture와 동일하게 Presentation, Domain, Data 이렇게 세 계층을 사용했으나 DDD의 등장 이후로는 4계층으로 나눠져 아래와 같다.
- UI Layer
- Application Layer
- Domain Layer
- Infrastructure Layer
비즈니스 로직은 Domain Layer에 두고, Application Layer에선 UI Layer와 Domain Layer를 연결/조정한다. 즉, Application Layer에선 어떤 기능이 있는지 드러낼 뿐, 그 기능을 직접 다루진 않는다는 것이다.
만약 Application Layer에 비즈니스 로직이 있게 된다면 테스트를 하기 힘들어지는데(= 구조에 문제가 있다는 증거!) 더 큰 문제는 이렇게 되면 일관성을 책임지는 Domain Layer가 빈약해지고, 중복 또는 모순이 늘어난다는 것. 하여 Application Layer에서는 모든 기능 목록을 드러내고, Domain 객체가 협력할 수 있는 진입점을 마련하는 것이다.
Layered Architecture의 궁극적인 목표는 각 레이어들이 특정 관심사와 관련된 개체만을 포함하도록 만듦으로써 전체적인 시스템의 결합도를 낮추고, 개발자의 인지 과부하를 방지하며 재사용성을 높이고 유지보수성을 향상시키는 것이다.
Tier vs Layer
근데 정리를 하다가 문득 계층을 의미하는 단어인 Tier와 Layer가 어떻게 구분되는지 궁금해졌다. 어떤 경우에 Tier, 어떤 경우에 Layer를 사용해야 할까?🤔
Tier는 물리적인 영역 분리를 할 때, Layer는 논리적인 영역의 분리를 할 때 사용된다. 위의 사진처럼 Tier는 실제로 1단 위에 2단이 얹어지면 그걸 Tier라고 하고, Layer는 하나의 시트에 겹겹이 쌓이는 경우를 의미한다. 즉, Tier는 물리적으로 물리적인 서버가 구분되는 경우에 사용하고, Layer는 논리적으로 역할을 구분하고자 할 때 사용한다.
결국 이 모든 아키텍처가 지향하는 것은 '관심사의 분리'이다! 관심사의 분리를 잘해서 온전히 한 기능에만 집중해서 개발할 수 있도록 하자.
이렇게 작성하니 한결 부담이 덜어진 TIL 작성. 내가 이렇게 방향을 잘못 설정하고 있을 때마다 멘토님들이 코멘트를 해주시니 그것 참 감사한 일이다. 이렇게 좋은 환경에서 내가 부족하다 싶은 부분들을 채울 수 있게 노력하고, 잘 하는 것들은 더 보강해서 똑부러지는 주니어가 될 수 있게 노력하자.
참고
https://en.wikipedia.org/wiki/Multitier_architecture
https://github.com/ahastudio/til/blob/main/architecture/layered-architecture.md
http://taewan.kim/tip/tier_layer/'📝 기록 > 매일의 기록' 카테고리의 다른 글
11/24 TIL | 매일 쓰는 어노테이션 @SpringBootTest, @ActiveProfiles, @Autowired (2) 2022.11.24 11/23 TIL | 테스트 고치기! (0) 2022.11.23 11/21 TIL | 나의 자그마한(?) 딜레마(feat. 창작의 고통) (0) 2022.11.21 11/20 TIL | 이쯤에서 다시 보기! (feat. FEConf 2020 & BDD) (0) 2022.11.20 11/19 TIL | 뽀모도로 타이머 '오늘의 명언' 한글 명언으로 리팩터링! (1) 2022.11.19