디자인패턴, 프로그래밍 패러다임, 아키텍처 6

클린아키텍처: 계층형 아키텍처의 문제를 보완해보자.

1. 다시 보는 계층형 아키텍처 - 계층형 아키텍처는 소프트웨어를 구성하는 소스코드를 관심사에 따라 "계층"으로 분류한 구조이다. - 계층형 아키텍처의 최대 관심사는 "관심사에 따른 계층 분리"이며, 일반적으로 다음과 같은 구조들이 제시된다. presentation -> business(service / domain) -> data access(persistence) -> db - 이러한 계층형 아키텍처는 다음과 같은 장점을 가진다. 계층별 관심사가 분리되기 때문에, 코드가독성과 유지보수성이 높다. 모듈 교체가 용이하다. 예컨대, business 레이어에서만 사용하는 모듈을 교체할 때, 이에 따라 다른 계층에 미칠 사이드 이펙트가 현저히 적을 것이다. 테스트가 용이하다. 각 계층은 관심사에 따라 분리되어..

계층형 아키텍처

1. 아키텍처의 기본 관심사 - 소프트웨어 아키텍처의 가장 기본적인 관심사는 "소프트웨어의 구성요소를 관심사에 따라 분리하는 것"이다. - 관심사에 따라 구성요소를 분리함으로써 얻을 수 있는 가장 큰 이득은 "구성요소의 관심사 축소에 따른 코드 가독성/유지보수의 용이성 개선"이다. => 그도 그럴 것이, 소스코드가 모두 한 파일에 저장된 소프트웨어와 관심사에 따라 분리된 소프트웨어만 비교하더라도, 후자가 코드 가독성도 좋고, 유지 보수도 그에 따라 더 편리할 것이 당연하다. - 부가적으로(?), 수월한 테스트 환경 조성과 같은 이득이 수반될 수 있다. - 이 글에서는 가장 일반적으로 활용되고 있는 아키텍처로 간주되는 "계층형 아키텍처"를 다뤄보고자 한다. 2. 계층형 아키텍처 개요 - 계층형 아키텍처는 ..

도메인, 어플리케이션 서비스, 엔티티

1. 개요: 특정 키워드가 제목인 블로그 글의 배경 - Express에서 NestJS로 스택을 바꾼지 어느덧 몇 달이 흘렀다. - 자유도가 높은 Express와 달리, NestJS는 자체적으로 권장하는 아키택처에 입각하여 어플리케이션을 개발하도록 유도한다. - 이에 따라, NestJS에 익숙해지면서 자연스럽게 소프트웨어 아키텍처 지식에 대한 갈증이 생겼다. - 여러 블로그들을 통해, 일단 필자가 개발 공부를 통해 몇 번 접해본, 또 적용해본 계층형 아키텍처/클린 아키텍처 등에 대해 공부를 해보았다. - 하지만 역시나 "벽"에 부딪혔다. 블로그들에서 서술한 내용들 중 "도메인", "엔티티"와 같은 용어들에 대한 개념정립이 아직 모호했기 떄문이다. 부끄러운 일이다. - 그래서 최근에는 한 키워드를 공부하면서..

SOLID 원칙

0. 개요 - SOLID 원칙이란 객체 지향 프로그래밍(OOP) 설계 5원칙을 의미한다. - OOP는 프로그래밍을 객체 간 상호작용으로 간주한다. 그리고 그 객체는 1) 추상화, 2) 상속, 3) 다형성, 4) 캡슐화라는 특징을 기반으로 설계될 것을 권장한다. - 이를 통해, 개발자는 코드 재사용성, 유지보수의 용이성, 개발 생산성 제고라는 이익을 취할 수 있다. - SOLID 원칙은 그러한 OOP를 통한 이익을 극대화하기 위한 설계 원칙이라고 간주된다. - 그러한 SOLID 원칙은 다음과 같이 5개 원칙으로 구성되어 있다. SRP(단일 책임 원칙) OCP(개방 폐쇠 원칙) LSP(리스코프 치환 원칙) ISP(인터페이스 분리 원칙) DIP(의존 역전 원칙) - 각 원칙이 강조하는 개념은 명확히 구분되는 ..

객체와 OOP의 4가지 특징

1. 객체란? - 객체란 현실 세계에서 실재하는 모든 "대상"을 "변수"(상태/속성)와 "함수"(행동)로 추상화 시킨 개념이다. * 여기서 추상화는 대상의 본질적인 특징을 추출하여 표현한 것이라고 이해하고 있다. 2. OOP란? - OOP란 Object Oriented Programming의 약자이다. 말 그대로, 객체 지향 프로그래밍이다. - 즉, 하나의 소프트웨어가 동작하는 원리를 그것을 구성하는 여러 객체 간의 상호작용으로 정의하고, 이에 따라, 객체를 중심으로 소프트웨어를 설계/개발해야한다는 프로그래밍 패러다임인 것이다. 3. OOP의 4가지 특징 - 이러한 OOP는 크게 1) 추상화, 2) 상속, 3) 다형성, 4) 캡슐화라는 특징에 기반한 프로그래밍 패러다임이다. - 요컨대, 위 4가지 특징에..

카테고리 개요 | 좋은 소프트웨어 설계

1. 카테고리 개설 이유 - 개발 공부를 시작한 지 어느덧 1년째가 되어가고 있다. - 지난 1년 간은 개발에 익숙해지고 재미와 자신감을 붙이는 시간이었다고 생각한다. - 부트캠프를 수료하고, 두 차례 팀 프로젝트를 진행하면서, 내가 구현하고 싶은 기능은 어떻게 해서든 개발해낼 수 있게 되었다. - 그러면서 차차 좋은 설계에 대해 고민하게 되었다. 팀 프로젝트를 진행하면서 종종 프로그램을 리팩토링하게 되는 일이 있었는데, 프로그램의 구조에 대해 깊이 고민할 수 있는 지식이 없었기 때문에, 리팩토링을 할 때마다 생각보다 긴 시간을 할애하게 된 경험이 발단이 되었다. - 이에, 그동안 키워드만 인지하고 있고, 들여다볼 엄두를 감히 내지 못했던 "디자인 패턴/프로그래밍 패러다임"이란 주제에 대해 관심이 가게 ..