아키텍처

아키텍처란? 시스템 아키텍처는 시스템의 동작 여부와 거의 관련이 없다. (아무런 역할을 하지 않는다는건 아니다.) 형편 없는 아키텍처를 갖춘 시스템도 그런대로 잘 동작한다. 이런 시스템은 운영보다는 배포, 유지보수, 계속되는 개발 과정에서 어려움을 겪는다. 유지보수는 모든 측면에서 봤을 때 비용이 가장 많이 발생한다. 유지보수 중 가장 큰 비용은 탐사와 이로 인한 위험부담에 있다. 탐사? 기존 소프트웨어를 파헤쳐서 어디를 고치는게 최선/최적일지 결정하는 비용 이러한 변경사항을 반영할 때 의도치 않은 결함이 발생할 가능성이 존재하며, 이로 인한 위험부담 비용이 추가됨 시스템을 컴포넌트로 분리하고, 안정된 인터페이스를 두어 서로 격리하면 비용을 줄일 수 있음 선택사항 열어 두기 소프트웨어는 두 가지 가치 행..
SOLID 원칙의 목적은 중간 수준의 소프트웨어 구조가 아래와 같도록 만드는 데 있다. 변경에 유연하다. 이해하기 쉽다. 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트의 기반이 된다. 중간 수준? - 모듈 수준에서 작업할 때 적용할 수 있음. 즉, 코드 수준보다는 조금 상위에서 적용되며 모듈과 컴포넌트 내부에서 사용되는 소프트웨어 구조를 정의하는데 도움을 줌 단일 책임 원칙 (SRP - Single Responsibility Principle) 하나의 모듈(단일 모듈)은 변경의 이유가 오직 하나뿐이어야 한다. 하나의 모듈은 하나의 액터에 대해서만 책임져야 한다. 액터? 해당 변경을 요청하는 집단을 뜻함 모듈이 단 하나의 일만 해야 한다라는 뜻이 아니다. 단 하나의 일만 해야하는 원칙은 함수다. 함수는..
소프트웨어 개발자는 행위(behavior), 구조(structure)이 두 가지 가치를 반드시 높게 유지해야 하는 책임을 가진다. 행위에만 집중하게 된다면 소프트웨어 시스템은 쓸모없게 된다. 행위, 동작(Behavior) 프로그래머는 이해관계자나 기능 명세서나 요구사항 문서를 구체화할 수 있도록 돕는다. 이해관계자의 기계가 이러한 요구사항을 만족하도록 코드를 작성한다. 많은 프로그래머가 이러한 활동이 자신이 해야 할 일의 전부라고 생각하지만(버그 수정 및 기능 개발), 이 것은 틀렸다. 아키텍처(Architecture) 소프트웨어가 가진 본연의 목적을 추구하려면 소프트웨어는 반드시 부드러워야 한다. 다시 말해 변경하기 쉬어야 한다. 이해관계자가 기능에 대한 생각을 바꾸면, 변경사항을 간단하고 쉽게 적용할..
설계(design)와 아키텍처(architecture) 설계와 아키텍처에는 아무런 차이가 없다. 단지.. 아키텍처는 저수준의 세부사항과는 분리된 고수준의 무언가를 가리킬때 흔히 사용되며 설계는 저수준의 구조 또는 결정사항 등을 의미할 때 많이 사용된다. 좋은 소프트웨어 설계의 목표? 소프트웨어 아키텍처의 목표는 필요한 시스템을 만들고 유지보수하는 데 투입되는 인력을 최소화하는데 있다. 좋은 아키텍처? 좋은 소프트웨어? 왜 좋은 소프트웨어를 만들어야 하는가?라는 질문이 거창한 대답을 요구할 것 같지만 결론은 유지보수 비용을 줄이기 위함이다. 아무리 복잡한 프로젝트여도 말이다. 생각해봐야 할 점 소프트웨어 제품이 잘 팔린다 -> 엔지니어링 직원 수를 뽑아 제품을 개발한다 -> 시간이 지날수록 코드 라인당 비..
Application Layer ? Domain Layer ? 앞에서 선택한 아키텍처를 사용하게 되면 응용 영역에서 사용자에게 제공해야할 기능을 구현하게 된다. 주문이란 하위 도메인을 예로 들면 주문 등록, 주문 취소, 상품 상세 조회와 같은 기능을 제공한다. 응용 영역(Application)은 기능을 구현하기 위해 도메인 영역에 존재하는 도메인 모델을 사용한다. class CancelOrderService { @Transactional fun cancelOrder(orderId: String) { val order = findOrderById(orderId) if (order == null) throw new OrderNotFoundException(orderId) order.cancel() // 위임..
DBMS 아키텍처한국에서는 Oracle, Micrisoft SQL Server, DB2, PostgreSQL, MySQL 등 많은 RDB가 존재하고 이러한 제품은 각각의 특징이 있다. 하지만 RDB로써 기능을 제공한다는 목적은 모두 동일하므로, 기본적인 구조 자체는 모두 같다.DBMS 내부에는 어떠한 기능이 있을까 1. 쿼리 평가 엔진사용자로부터 입력받은 SQL 구문을 분석하고, 어떤 순서로 기억장치의 데이터에 접근할지를 결정한다.=> 이때 결정되는 계획을 '실행계획'이라고 함, 데이터에 접근하는 방법을 '접근 메서드(access method)'라고 함한마디로 쿼리 평가 엔진은 계획을 세우고 실행하는 DBMS의 핵심 기능을 담당하는 모듈이다. 2. 버퍼 매니저DBMS는 버퍼라는 특별한 용도로 사용하는 메..
애플리케이션 아키텍처 책임과 성격이 다른 것을 크게 그룹으로 만들어 분리해두는 것을 아키텍처 차원에서는 계층형 아키텍처(layered architrecture)라고 부른다. 또는 계층이라는 의미를 가진 영어 단어인 티어(tier)를 써서 멀티 티어 아키텍처라고도 한다.(보통 3계층 3-tier 혹은 3-layer)애플리케이션이라고도 한다. 3계층 아키텍처와 수직 계층3계층 아키텍처는 백엔드의 DB나 레거시 시트메과 연동하는 인터페이스 역할을 하는 데이터 엑세스(DataAccess)계층비즈니스 로직을 담고있는 서비스 계층주로 웹 기반의 UI를 만들어내고 그 흐름을 관리하는 프레젠테이션 계층으로 구분클라이언트 프레젠테이션 계층 서비스계층 데이터 엑세스 계층 DB/레거시 데이터 엑세스 계층DAO 계층이라고 불..
깡냉쓰
'아키텍처' 태그의 글 목록