본문 바로가기
반응형

전체 글242

[클린아키텍처] 19장 정책과 수준, 20장 업무 규칙 수준 Level : 입력과 출력까지의 거리 시스템의 입려과 출력 모두로부터 멀리 위치할수록 정책의 수준은 높아진다. 입력과 출력을 다루는 정책이라면 시스템에서 최하위 수준에 위치한다. 간단한 암호화 프로그램 입력장치에서 문자를 읽기 -> 테이블을 참조하여 번역 -> 번역된 문자를 출력장치로 기록 번역 컴포넌트는 최고수준의 컴포넌트 (입력과 출력에서 가장 멀리떨어져있기 때문) 소스코드 의존성과 데이터흐름은 같은 방향이 아니다. 업무 규칙 Critical Business Data 애플리케이션을 업무 규칙과 플러그인으로 구분하려면 업무 규칙을 잘 이해해야한다. 업무 규칙은 사업적으로 수익을 얻거나 비용을 줄일 수 있어야 한다. 핵심 업무 데이터 : 핵심 업무 규칙에서 요구하는 데이터 엔티티 Entity : 컴.. 2022. 3. 11.
[클린아키텍처] 17장 경계: 선긋기, 18장 경계 해부학 경계 Boundary 소프트 웨어 아키텍처는 경계 Boundary 를 긋는 기술이다. 소프트웨어 요소를 서로 분리하고, 경계 한편에 있는 요소가 반대편에 있는 요소를 알지 못하도록 막는다. 프로젝트 초기 또는 매우 나중에 생길 수 있다. 결합 coupling 경계와 반대되는 기술 인적자원 효율을 떨어뜨리는 요인 유스케이스와 관련없는 프레임워크, DB, 웹서버, 라이브러리 등 너무 일찍 내려진 결정에 따른 결합 좋은 아키텍처는 이러한 결정이 부수적이며, 결정을 나중에 내려도 큰 영향이 없어야한다. 어떻게 선을 그을까? 언제 그을까? 1 GUI와 업무 규칙은 선이 있어야한다. O 2 데이터베이스와 GUI도 선이 있어야한다. O 3 데이터베이스와 업무규칙도 선이 있어야한다 O -> ??? 데이터베이스가 업무 .. 2022. 3. 10.
[도커/쿠버네티스] 9장 퍼시스턴트 볼륨(PV)과 퍼시스턴트 볼륨 클레임(PVC) DB처럼 포드 내부에 특정 데이터를 보유해야 하는 상태가 있는(Stateful) 애플리케이션에서는 데이터를 어떻게 관리할까? 디플로이먼트를 삭제하면 포드가 삭제되며 포드의 데이터가 함께 삭제된다 -> 해결법: 퍼시스턴트 볼륨, 퍼시스턴트 볼륨 클레임 로컬볼륨 1) hostPath : 호스트의 디렉터리를 포드와 공유해 데이터를 저장하는 것 목적: 호스트와 볼륨을 공유하기 위해 호스트와 디렉터리를 공유하는 포드를 생성하는 YAML apiVersion: v1 kind: Pod metadata: name: hostpath-pod spec: containers: - name: my-container image: busybox args: [ "tail", "-f", "/dev/null" ] volumeMounts:.. 2022. 3. 8.
[클린아키텍처] 15장 아키텍처란?, 16장 독립성 소프트웨어 시스템 아키텍처 : 시스템을 구축했던 사람들이 만들어낸 시스템의 형태 목적: 시스템의 생명주기를 지원하는 것 궁극적인 목표: 시스템의 수명과 관련된 비용은 최소화, 프로그래머의 생산성은 최대화 소프트웨어 시스템이 쉽게 개발, 배포, 운영 유지보수되게 만드려면 가능한 많은 선택지를, 가능한 오래 남겨두는 전략을 따라야한다. 개발 배포 운영 유지보수 아키텍트의 목표는 시스템에서 정책을 가장 핵심적인 요소로 식별하고, 동시에 세부사항은 정책에 무관하게 만들 수 있는 형태의 시스템을 구축하는 것 개발 초기에는 데이터베이스 시스템을 선택할 필요가 없다 개발 초기에는 웹서버를 선택할 필요가 없다. 개발 초기에는 REST를 적용할 필요가 없다. 개발 초기에는 의존성 주입 프레임워크를 적용할 필요가 없다. .. 2022. 3. 6.
[클린아키텍처] 12장~14장 컴포넌트 원칙 SOLID 원칙이 벽과 방에 벽돌을 배치하는 방법을 알려준다면 컴포넌트 원칙은 빌딩에 방을 배치하는 방법을 알려준다. 컴포넌트 : 시스템의 구성 요소로 배포할 수 있는 가장 작은 단위 ex) 자바의 컴포넌트 = jar 파일, 루비의 컴포넌트 = gem 파일. 닷넷의 컴포넌트 = DLL 파일 잘 설계된 컴포넌트는 독립적으로 배포 가능해야한다 컴포넌트 응집도 - 어떤 클래스를 어떤 컴포넌트에 포함시켜야할까? 1. REP (Reuse/Release Equivalence Principle) : 재사용/릴리스 등가 원칙 : 재사용 단위는 릴리스 단위와 같다 릴리스 절차에는 적절한 공지와 함께 문서 작성도 포함되어야 한다. -> 단일 컴포넌트는 응집성 높은 클래스와 모듈들로 구성돼야한다. -> 하나의 컴포넌트로 묶.. 2022. 3. 6.
[도커/쿠버네티스] 8장 인그레스 인그레스(Ingress) : 외부에서 서버로 유입되는 트래픽 : 외부 요청을 어떻게 처리할 것인지 네트워크 7계층 레벨에서 정의하는 쿠버네티스 오브젝트 인그레스 네트워크: 인그레스 트래픽을 처리하기 위한 네트워크 인그레스 기본 기능 외부 요청의 라우팅: 특정 경로로 들어온 요청을 어떠한 서비스로 전달할지 정의하는 라우팅 규칙 설정 가능 가상 호스트 기반의 요청 처리: 같은 IP에 대해 다른 도메인 이름으로 요청이 도착했을 때 어떻게 처리할 것인지 정의 SSL/TLS보안 연결 처리: 여러 개의 서비스로 요청을 라우팅할 때 보안연결을 위한 인증서를 쉽게 적용 가능 인그레스의 요청을 처리할 서버로 뭇엇을 선택하느냐에 따라 기능이 달라진다. 인그레스를 사용하는 이유? 애플리케이션이 3개의 디플로이먼트로 생성돼있.. 2022. 2. 28.
[클린아키텍처] 7장~11장 설계원칙 - SOLID 원칙 객체지향의 5가지 설계 원칙이 있다. SRP OCP LSP ISP DIP SRP (Single-responsibility principle) 단일 책임 원칙 : 하나의 모듈은 하나의 액터에 대해서만 책임져야 한다. : 클래스는 단 하나의 기능만 갖고, 제공하는 서비스는 그 기능을 수행한다. 응집성 : 단일 액터를 책임지는 코드를 함께 묶어주는 힘 응집성을 위반하는 징후 1: 우발적 중복 응집성을 위반하는 징후 2: 병합 SRP 예제 참고 [SRP] 객체지향 설계 5 원칙 (1) 학습목표 : SRP[Single responsibility principle] 단일 책임 원칙 을 이해하고, 예제로 설명할 수 있다. SRP[Single responsibility principle] 단일 책임 원칙 - 한 클래스.. 2022. 2. 27.
[클린아키텍처] 3장~6장 프로그래밍 패러다임 - 구조적 프로그래밍, 객체 지향 프로그래밍, 함수형 프로그래밍 구조적 프로그래밍, 객체 지향 프로그래밍, 함수형 프로그래밍 이 세가지 패러다임은 무엇을 해서는 안되는지를 말해준다. 1. goto문 2. 함수 포인터 3. 할당문 구조적 프로그래밍 : 제어프흠의 직접적인 전환에 대해 규칙을 부과한다. goto문의 좋은 사용방식은 if/then/else 와 do/while 같은 분기와 반복이라는 단순한 제어구조이다. 객체 지향 프로그래밍 (OO) : 제어흐름의 간접적인 전환에 대해 규칙을 부과한다. 좋은 아키텍처를 만드는 일은 객체지향 설계 원칙을 이해하고 응용하는 데서 출발한다. 객체지향은 캡슐화, 상속, 다형성을 반드시 지원해야한다. 캡슐화 : 데이터와 함수가 응집력있게 구성된 집단을 서로 구분 짓는다. -> 구분선 바깥에서 데이터는 은닉되고, 일부 함수만이 외부에 .. 2022. 2. 27.
[클린아키텍처] 1장 설계와 아키텍처란? 2장 두가지 가치에 대한 이야기 설계와 아키텍처의 구분은 무의미하다. 고수준에서 저수준으로 향하는 의사결정의 연속성만 있을 뿐이다. 소프트웨어 아키텍처의 목표는 필요한 시스템을 만들고 유지보수하는 데 투입되는 인력을 최소화하는 데 있다. "코드는 나중에 정리하면 돼, 당장은 시장에 출시하는 게 먼저야!" 라는 거짓말에 속는다. 이렇게 속아 넘어간 개발자라면 나중에 코드를 정리하는 경우는 한 번도 없는데, 시장의 압박은 절대로 수그러들지 않기 때문이다. -> 공감하며 반성하게 되는 말! 다음에 만들어야 할 기능은 계속 나를 기다리고 있다... 빨리가는 유일한 방법은 제대로 가는것이다. 자신을 과신한다면 재설계하더라도 원래의 프로젝트와 똑같이 엉망으로 내몰린다. 비용을 최소화하고 생산성은 최대화할 수 있는 설계와 아키텍처를 가진 시스템을 .. 2022. 2. 27.
728x90
반응형