본문 바로가기

전체 글333

아키텍처 - 프로젝트 패키지 구조 - 이 글은 로버트 C.마틴의 Clean Architecture를 기반으로 작성되었습니다. (가능하면 책을 읽어보는것을 추천한다.) - 개요 각 프로젝트 마다 규모나 설계자의 생각에 따라 패키지 구조를 정한다. 패키지 구조는 프로그램이 단순히 동작하게 하는데에는 크게 중요하지 않을수도 있지만, 프로그램을 파악하는데 도움이 되며 설계의 사상을 반영한다. - 계층 기반 패키지 가장 단순하고 전통적인 아키텍처다. 기술적인 관점의 계층에 기반하여 코드를 분할한다. 위의 다이어그램은 스프링 MVC 를 처음 시작하거나, 웹 프로그래밍에 경력이 좀 있다면 꽤 익숙할만한 패키지 구조이다. 각 클래스와 인터페이스는 다음과 같은 역할을 한다. OrdersController: 웹 컨트롤러, 웹 요청 처리 OrdersServ.. 2021. 2. 10.
아키텍처 - 서비스와 아키텍처 - 이 글은 로버트 C.마틴의 Clean Architecture를 기반으로 작성되었습니다. (가능하면 책을 읽어보는것을 추천한다.) - 개요 서비스 지향 아키텍처(SOA - Service Oriented Architecture)나 마이크로 서비스 아키텍처(MSA - Micro Service Architecture)라는 말을 들어봤을것이다. 단어만 언급해도 뭔가 전문가가 된것 같고, 심지어 단어 자체도 멋있다. 흔히 이런 아키텍처들의 장점으로 상호 결합을 완벽하게 분리한다거나, 개발 및 배포 독립성을 보장해준다는 문구를 본적이 있을것이다. 하지만 이 역시 진리의 케이스 바이 케이스이다. - 서비스 아키텍처 서비스를 분리한다는건 아키텍처측면에서 무엇인가를 하는것일까? 먼저 우리가 여태까지 "아키텍처"를 언급.. 2021. 2. 10.
아키텍처 - 부분적인 경계 - 이 글은 로버트 C.마틴의 Clean Architecture를 기반으로 작성되었습니다. (가능하면 책을 읽어보는것을 추천한다.) - 개요 아키텍처 경계를 완벽하게 하는데에는 비용이 많이 든다. 양방향으로 인터페이스를 정의하고, 입력과 출력에 대한 데이터 구조를 만들며, 독립적으로 컴파일 및 배포를 할 수 있도록 컴포넌트를 설계하고 의존성을 관리해야 한다. 이런 이유로 어떤 사람들은 경계를 완벽하게 만드는것이 과도하게 선행적인 설계라고 생각한다. 너무 완벽한 경계를 구현하는데 과도한 비용이 들어간다면 경계를 부분적으로 구현하는것을 고려해볼 수 있다. - 단일배포 첫번째 방법으로는 소스는 완벽한 경계를 구현하지만, 단일 컴포넌트로 컴파일해서 배포하는것이다. 이렇게 되면 코드는 간단해지지 않지만 의존성이나.. 2021. 2. 10.
아키텍처 - 프레젠터와 험블객체 - 이 글은 로버트 C.마틴의 Clean Architecture를 기반으로 작성되었습니다. (가능하면 책을 읽어보는것을 추천한다.) - 험블 객체: https://martinfowler.com/bliki/HumbleObject.html - 험블 객체 패턴 프레젠터는 험블 객체 패턴을 따른다. 험블(humble)이란 사전적으로 보잘것없다는 의미를 지니고 있다. 험블 객체 패턴은 디자인 패턴으로 테스트하기 어려운 행위와 쉬운 행위를 분리하는 패턴이다. 뷰와 엮인 경우 테스트 하기 어려운 부분이 존재하는데, 테스트하기 쉬운 영역과 어려운 영역으로 나누면 프레젠터와 뷰라는 클래스로 나뉘게 된다. - 프레젠터와 뷰 사전적인 의미로 생각해보면 프레젠터와 뷰는 비슷한 느낌이 든다. 하지만 설계 관점에서 이 두 가지를.. 2021. 2. 10.
아키텍처 - 클린 아키텍처 - 이 글은 로버트 C.마틴의 Clean Architecture를 기반으로 작성되었습니다. (가능하면 책을 읽어보는것을 추천한다.) - 개요 지난 수십년간 많은 시스템 아키텍처가 있었다. 이런 아키텍처들은 공통된 목표가 있는데 바로 관심사의 분리이다. 이들은 모두 소프트웨어를 계층으로 분리하였다. 업무규칙에 대한 계층과, 사용자 및 인터페이스를 위한 계층등이 있다. 또한 업무규칙이 아닌 다른 요소와의 독립성도 강조한다. 프레임워크 독립성: 아키텍처는 프레임워크의 존재 여부에 의존하지 않는다. 테스트 용이성: 업무규칙은 외부요소없이도 테스트가 가능해야 한다. UI 독립성: 업무규칙을 변경하지 않고도, UI를 쉽게 변경할 수 있어야 한다. 데이터베이스 독립성: 업무규칙에 영향을 주지 않고, 데이터베이스를 변.. 2021. 2. 10.
아키텍처 - 아키텍처의 오해 - 이 글은 로버트 C.마틴의 Clean Architecture를 기반으로 작성되었습니다. (가능하면 책을 읽어보는것을 추천한다.) - 개요 만약 어떤 건물에 대한 설계도를 본다고 해보자. 해당 설계도에 독서 공간, 회의실, 책장을 배치한 많은 진열장이 있다면 정확히는 몰라도 도서관이라고 추측할것이다. 어플리케이션을 만들기 위해 패키지 구조를 잡았다고 하자. 좋은 아키텍처라면 어떤 사람이 해당 패키지 구조를 보았을 때 "이 어플리케이션은 헬스 케어 시스템이다" 라고 생각하게 만들어야 한다. 만약 패키지구조를 보고나서 드는 생각이 스프링으로 구현했나? ASP인가? 하이버네이트를 사용했나? MySQL인가? 라는 생각이 들도록 만들었다면 제대로된 아키텍처인지 다시 한번 생각해볼 필요가 있다. - 목적 나를 포.. 2021. 2. 10.