본문 바로가기

전체 글132

클린 아키텍처 5부. 아키텍처 - 1 15장. 아키텍처란?소프트웨어 시스템의 아키텍처는 시스템을 구축했던 사람들이 만들어낸 시스템의 형태다.모양은 컴포넌트로 분할하는 방법, 분할된 컴포넌트를 배치하는 방법, 컴포넌트가 서로 의소통 하는 방식에 따라 정해짐형태는 아키텍처 안에 담긴 소프트웨어 시스템이 쉽게 개발, 배포, 운영, 유지보수되도록 만들어짐이러한 일을 용이하게 만들기 위해서는 가능한 한 많은 선택지를, 가능한 한 오래 남겨두는 전략을 따라야 한다.아키텍처의 주된 목적은 시스템의 생명주기를 지원하는 것좋은 아키텍처는 시스템을 쉽게 이해, 개발, 유지보수, 배포할 수 있게 해준다.아키텍처의 궁극적인 목표는 시스템의 수명과 관련된 비용은 최소화하고, 프로그래머의 생산성은 최대화하는 데 있음. 개발부터 유지보수까지개발팀 규모가 적다면 아키텍.. 2024. 7. 24.
클린 아키텍처 4부. 컴포넌트 원칙 SOLID 원칙이 벽과 방에 벽돌을 배치하는 방법을 알려준다면, 컴포넌트 원칙은 빌딩에 방을 배치하는 방법이다.큰 빌딩과 마찬가지로 대규모 소프트웨어 시스템은 작은 컴포넌트들로 만들어진다. 12장. 컴포넌트컴포넌트는 시스템의 구성 요소로 배포할 수 있는 가장 작은 단위이다.(jar, gem, DLL)컴포넌트는 다양한 형태로 만들어질 수 있다.여러 컴포넌트를 서로 링크하여 실행 가능한 단일 파일로 생성할 수 있다.여러 컴포넌트를 묶어서 war 파일과 같은 단일 아카이브로 만들 수 있다.컴포넌트 각각을 jar와 같이 동적으로 로드할 수 있는 플러그인이나 실행 가능한 파일로 만들어 독립적으로 배포할 수도 있다.컴포넌트가 최종적으로 어떤 형태로 배포되든, 잘 설계된 컴포넌트라면 반드시 독립적으로 개발 가능해야 .. 2024. 7. 21.
클린 아키텍처 3부. 설계 원칙 7장. SRP: 단일 책임 원칙단일 모듈의 변경의 이유가 하나, 오직 하나뿐이어야 한다.SOLID 원칙 중 의미가 가장 잘 전달되지 못한 원칙은 단일 책임 원칙으로, 모듈이 단 하나의 일만 해야 한다는 의미가 아니다.SRP는 함수는 반드시 단 하나의 일만 해야 한다는 원칙이다.여기서 변경의 이유는 변경을 요청하는 한 명 이상의 사람들(액터)에 해당한다.즉, 하나의 모듈(소스 코드)은 하나의, 오직 하나의 액터에 대해서만 책임져야 한다.모듈은 단순히 함수와 데이터 구조로 구성된 응집된 집합이다. ‘응집된(cohesive)’ 이라는 단어가 SPR를 암시한다.단일 액터를 책임지는 코드를 함께 묶어주는 힘이 바로 응집성(cohesion)이다. 징후 1: 우발적 중복코드의 중복을 피하기 위해 각기 다른 액터들이 .. 2024. 7. 19.
클린 아키텍처 2부. 벽돌부터 시작하기: 프로그래밍 패러다임 3장. 패러다임 개요구조적 프로그래밍최초로 적용된 패러다임으로 1968년 데이크스트라가 발견했다.데이크스트라는 무분별한 점프는 프로그램 구조에 해롭다는 사실을 제시했다.이러한 점프를 if/then/else와 do/while/until과 같이 더 익숙한 구조로 대체했다.구조적 프로그래밍은 제어흐름의 직접적인 전환에 대해 규칙을 부과한다. 객체 지향 프로그래밍1966년 요한 달과 크리스텐 니가드에 의해 발견됐다.함수 호출 스택 프레임을 힙으로 옮기면, 함수 호출이 반환된 이후에도 함수에서 선언된 지역 변수가 오랫동안 유지될 수 있음을 발견했다.이러한 함수가 클래스의 생성자가 되었고, 지역 변수는 인스턴스 변수, 중첩 함수는 메서드가 되었다.함수 포인터를 특정 규칙에 따라 사용하는 과정을 통해 필연적으로 다형.. 2024. 7. 19.
클린 아키텍처 1부. 소개 1장. 설계와 아키텍처란?설계와 아키텍처아키텍처는 저수준의 세부사항과는 분리된 고수준의 무언가를 말한다.(ex. 집의 구조)설계는 저수준의 구조 또는 결정사항 등을 의미한다.(ex. 집 내부의 전등, 콘센트, 가구, 공간이나 방의 배치)아키텍처와 설계는 모두 소프트웨어 전체 설계의 구성요소다.이 둘은 단절 없이 이어지며, 이를 통해 대상 시스템의 구조를 정의한다.개별로 존재할 수 없고 두 실제로 구분 짓는 경계는 뚜렷하지 않다.고수준에서 저수준으로 향하는 의사결정의 연속성만이 있을 뿐임 좋은 소프트웨어 설계의 목표는?소프트웨어 아키턱처의 목표는 필요한 시스템을 만들고 유지보수하는 데 투입되는 인력을 최소화 하는 것설계 품질을 재는 척도는 고객의 요구를 만족시키는 데 드는 비용을 재는 척도와 다름없다.이 .. 2024. 7. 19.
스프링+코틀린에서 @Valid이 동작하지 않는 경우 문제 상황스프링으로 구현한 API 서버를 코틀린으로 마이그레이션하는 작업을 진행 중 Controller에 적용된 @Valid 어노테이션이 동작하지 않는 상황이 생겼습니다. 아래는 @Valid 어노테이션을 통해 유효성 검증이 정상 동작하는 자바 소스코드 입니다. 자바 코드@RestController@RequiredArgsConstructorpublic class MemberController extends BaseResource { private final MemberSignupService memberSignupService; @PostMapping(value = "/members", headers = X_API_VERSION) public ResponseEntity> signu.. 2024. 7. 9.