전체 글
클린 아키텍처 15장, 16장 리뷰
15장 아키텍처란? 소프트웨어 아키텍트는 최고의 프로그래머이며, 코드와 동떨어져서는 안된다. 동시에,나머지 팀원들이 생산성을 극대화 할 수 있는 설계를 하도록 이끈다. 아키텍처의 주된 목적은 시스템의 생명주기를 지원하는 것이다. 좋은 아키텍처는 시스템을 쉽게 이해하고, 쉽게 개발하며, 쉽게 유지보수하고, 쉽게 배포하게 해준다. 아키텍처의 궁극적인 목표는 시스템의 수명과 관련된 비용은 최소화하고, 프로그래머의 생산성은 최대화하는데 있다. 개발 개발하기 힘든 시스템이라면 수명이 길지도 않고 건강하지도 않을 것이다. 시스템 아키텍처는 개발팀이 시스템을 쉽게 개발할 수 있도록 만들어야 한다.배포소프트웨어 시스템이 사용될 수 있으려면 반드시 배포할 수 있어야 한다. 배포 비용이 높을수록 시스템의 유용성은 떨어진다..
클린 아키텍처 12장, 13장, 14장 리뷰
12장 컴포넌트 컴포넌트 : 시스템의 구성 요소로 배포할 수 있는 가장 작은 단위 컴파일러형 언어 : 바이너리 파일의 결합체 인터프리터형 언어 : 소스 파일의 결합체 ex) java - .jar , ruby - .gem , .net -> .dll 컴포넌트가 마지막으로 어떤 형태로 배포되든, 잘 설계된 컴포넌트라면 반드시 독립적으로 배포가 가능해야 하며 독립적으로 개발 가능한 능력을 갖춰야 한다. 컴포넌트의 간략한 역사 소프트웨어 개발 초창기 : 프로그램이 로드될 주소 직접 제어 구시대의 라이브러리 함수 접근 : 라이브러리 함수의 소스 코드를 application 코드에 직접 포함시켜 단일 프로그램으로 컴파일 이 때문에, 컴파일 과정 오래 걸리고, 메모리는 한정적 컴파일 시간 단축을 위해 함수 라이브러리를..
클린 아키텍처 8장, 9장, 10장, 11장 리뷰
8장 OCP : 개방폐쇄 원칙 소프트웨어 개채(artifact)는 확장에 열려 있어야 하며, 변경에는 닫혀 있어야 한다. 개체의 행위는 확장할 수 있어야 하지만, 이 때 산출물을 변경해서는 안된다. 사고 실험 A기능을 이용해 B형태로 보여주는 기능이 있다 이 때, B 형태에 추가적인 사항이 생겨 새로운 C 형태로 보여주는 기능이 추가 되어야 할 때 이상적인 코드 변경량 : 0 (변경되는 코드의 양을 최소화해야한다.) 위 그림에서 FinancialDataMapper은 구현관계를 통해, FinancialDataGateway를 알고 있지만, FinancialDataGateway는 FinancialDataMapper를 알지 못한다. : 인터페이스 : 데이터 구조 -> : 호출 관계 -ᐅ : 구현 / 상속 관계 ..
2022 존민 회고록
늘 그렇듯, 회고록을 작성하는 현재, 연말이 될 때마다 이번 해는 더 빨리 갔다는 느낌을 받는다. 지난 2021 회고록은 월별로 작성하였지만 주제별로 끄적여보며 2022년엔 더욱 많은 분들에게 도움을 줄 수 있는 개발자로서, 운동인으로서, 그리고 사람으로서 성장해야겠다. 2021년에 다짐한 이 말을 얼마나, 2022년에 어떻게 지켰나 돌이켜보자. (생각나는 대로 끄적일 것이라 두서가 없을 수 있다..) 취준, 네이버 인턴 그리고 정규직 지난 회고록에도 작성했듯, 지원서를 몰아치듯이 제출했다. 코테와 면접을 거치고 시간이 흘러 12월 말, 결국 네이버 전환형 인턴과 다른 서비스 기업의 정규직을 선택해야 했다. 대학생 신입, 입대 전, 전역 후에 "졸업 전 IT 공룡에 취업하기라는 꿈"을 꾸었기에 정규직의 ..
클린 아키텍처 6장, 7장 리뷰
6장 함수형 프로그래밍(FP) FP 패러다임의 람다(lambda)계산법으로 1930년 발명 정수를 제곱하기 리스프에서 파생한 클로저(Clojure)는 함수형 언어 Java는 가변 변수(Mutable Variable) 사용 - 가변 변수는 프로그램 실행중에 상태가 변할 수 있다. 클로저는 이러한 가변 변수 존재 X 함수형 언어에서는 변수는 한 번 초기화되면 절대로 변하지 않는다. 불변성(Immutable)과 아키텍처 가변 변수에 의해 아키텍처에서 발생하는 문제 Race Condition DeadLock 동시 업데이트(Concurrent Update) 아키텍트는 동시성(Concurrency) 문제에 대해 고려할 줄 알아야한다. 가변성의 분리 불변성과 관련하여 가변 컴포넌트와 불변 컴포넌트를 분리하는 것이 중..
클린 아키텍처 1장, 2장, 3장, 4장, 5장 리뷰
클린 아키텍처 1장. 설계와 아키텍처 설계(design) vs 아키텍처(architecture) 전체 설계의 구성요소 관점에서는 설계와 아키텍처를 구분지을 필요 X 아키텍처는 고수준, 설계는 저수준의 세부사항이라고 하지만 건축/SW 설계에서는 개별적으로 존재할 수 없다. 좋은 SW 설계의 목표 필요한 시스템을 만들고 유지보수하는데 투입되는 리소스를 최소화 새로운 feature 때마다 비용이 증가한다면 나쁜 설계 나쁜 신호 직원이 많아지지만, 코드 생산성(LoC)가 그대로라면 생산성은 떨어지는 것 시스템 급하게 개발, 코드와 설계의 구조를 클린하게 하고자하지 않으면 생산성은 떨어짐 토끼 개발자와 거북이 개발자 토끼 개발자 : 일만 계속하지만, 설계의 중요성을 알고서도 실천하지않음. 생산성 유지할 수 있을 ..
2PC[Two-Phase-Commit]과 SAGA 패턴
데이터중심 애플리케이션 설계 9장을 읽은 후, 스터디 자료용 및 공부자료로 찾아보게 되어 기록 현재 배경: MSA에서는 각 서비스별로 DB 인스턴스와 애플리케이션이 분리 관계형으로 맺어진 Entity들은 서로가 다른 인스턴스로 운영되고, 그들의 리소스를 받기 때문에 데이터 일관성 깨짐 이를 위해 개발자들은 MSA에서 분산 트랜잭션 기술을 이용 → 일관성(Concurrency)을 지킬 수 있도록 2PC [Two-Phase Commit] 2단계에 거쳐서 영속하는 작업 (JPA에 있는 영속성 컨텍스트와는 다름) 분산 DB 환경 : 주 DB / 보조 DB 로 분산되어있는 경우가 많음 실제 모놀리틱에서 연결된 메인 DB = Primary DB 이중화된 DB 형태를 가지려면 DB들은 동기화 형태로 되어야 함 Coo..
@Transactional Propagation와 Spring Transaction Proxy Pattern
@Transactional Propagation(전파) propagation의 옵션 옵션 REQUIRED Default - 부모 트랜잭션이 존재한다면 부모 트랜잭션 내에서 실행, 없다면 새로운 트랜잭션 생성 중간에 자식 / 부모에서 rollback 발생 시, 부모, 자식 모두 rollback REQUIRES_NEW 무조건 새로운 트랜잭션 생성(시작) 만약 호출한 곳에 이미 트랜잭션이 있다면 기존의 트랜잭션은 메서드가 종료할 때까지 잠시 대기, 본인의 트랜잭션 실행 rollback은 각각 이루어짐 MANDATORY 무조건 부모 트랜잭션에 합류, 이 때 부모 트랜잭션이 없다면 예외 발생 SUPPORTS 메소드가 트랜잭션을 필요로 하지는 않지만,진행 중인 트랜잭션이 존재하면 트랜잭션을 사용한다는 것을 의미진행..