분류 전체보기 38

아키텍처 개요

1. 네 개의 영역 '표현', '응용', '도메인', '인프라스트럭처'는 아키텍처를 설계할 때 출현하는 전형적인 네 가지 영역이다. 네 영역 중 표현 영역은 사용자의 요청을 받아 응용 영역에 전달하고 응용 영역의 처리 결과를 다시 사용자에게 보여주는 역할을 한다. 웹 애플리케이션에서 표현 영역의 사용자는 웹 브라우저를 사용하는 사람일 수도 있고, REST API를 호출하는 외부 시스템일 수도 있다. 웹 애플리케이션에서 표현 영역은 HTTP 요청을 응용 영역이 필요로 하는 형식으로 변환해서 응용 영역으로 전달하고, 그 응답을 HTTP 응답으로 변환하여 전송한다. 예를들어 웹 브라우저가 HTTP 요청 파라미터로 전송한 데이터를 응용 서비스가 요구하는 형식의 객체 타입으로 변환해서 전달하고, 응용 서비스가 리..

DDD 2022.11.08

상속과 코드 재사용

객체지향 프로그래밍의 장점 중 하나는 코드를 재사용하기가 용이하다는 것이다. 객체지향에서 코드는 일반적으로 클래스 안에 작성되기 때문에 클래스를 재사용하는 전통적인 방법은 새로운 클래스를 추가하는 것이다. 클래스를 재사용하는 가장 대표적인 기법인 상속은 클래스 안에 정의된 인스턴스 변수와 메서드를 자동으로 새로운 클래스에 추가하는 구현 기법이다. 또 상속외에는 코드를 효과적으로 재사용할 수 있는 방법이 있다. 새로운 클래스의 인스턴스 안에 기존 클래스의 인스턴스를 포함시키는 방법으로 합성이라고 부른다. * DRY(Don't Refeat Yourself) 원칙모든 지식은 시스템 내에서 단일하고, 애매하지 않고, 정말로 믿을 만한 표현 양식을 가져야 한다. 이 원칙의 핵심은 코드 안에 중복이 존재해서는 안된..

DDD/오브젝트 2022.11.06

도메인 모델 시작하기

1. 도메인이란? 현실에서 온라인 서점을 이용해 보면 어떤 책이 나왔는지 검색하고, 읽고 싶은 책이 있으면 나중에 사기 위해 장바구니에 담기도 하고, 결제 및 배송 추적 기능등 여러가지 기능이 있는 걸 알 수 있다. 개발자 입장에서 바라보면 온라인 서점은 구현해야 할 소프트웨어의 대상이 된다. 온라인 서점 소프트웨어는 온라인으로 책을 판매하는데 필요한 상품 조회, 구매, 결제, 배송 추적 등의 기능을 제공해야 한다. 이때 온라인 서점은 도메인에 해당한다. 한 도메인은 다시 하위 도메인으로 나눌 수 있다. 카탈로그 하위 도메인은 고객에게 구매할 수 있는 상품 목록을 제공하고, 주문 하위 도메인은 고객의 주문을 처리한다. 혜택 하위 도메인은 쿠폰이나 특별 할인과 같은 서비스를 제공하는 일을 한다. 한 하위 ..

DDD 2022.10.31

오라클 에러 메시지 모음

1.1 ORA-00001 : 유일성 제약조건에 위배됩니다. 테이블에 PK가 있거나 UNIQUE INDEX가 있을 때, 중복되게 INSERT 하면 발생한다. 1.2 ORA-00942 : 테이블 또는 뷰가 존재하지 않습니다. 개발자의 오타에 의한 경우도 있고, 실제로 테이블이 생성됐는지 확인도 필요하다. 오라클은 테이블 생성 시 대소문자 구분은 없으며며 자동으로 대문자로 생성된다. 하지만 따옴표로 감싸서 소문자로 생성 시 테이블명은 소문자로 생성된다. (CREATE TABLE 'aaa' -> 소문자 테이블 생성 aaa) 1.3 ORA-00904 : 열명이 부족합니다. 존재하지 않는 컬럼명을 쿼리 구문에 사용할 경우 발생하는 에러 메시지 간혹 컬럼은 실제로 존재하나 SELECT 절에 없는 컬럼을 ORDER B..

DB 2022.08.28

오라클 힌트절과 NULL

1. 놓치면 후회할 오라클 힌트절 7가지 1.1 힌트절로 옵티마이저의 실수 차단 CBO(Cost Based Optimizer) 방식에서 옵티마이저는 주어진 환경(통계정보, SQL문) 아래서 최적의 실행계획을 제공한다. 하지만 잘못된 SQL문이나 통계정보로 인해 엉뚱한 실행계획을 제공할 때도 있다. 이때 힌트절을 통해서 잘못된 실행계획을 바로 잡을 수 있다. 옵티마이저는 개발자가 사용하는 힌트절을 무조건 사용하지는 않는다. SELECT /*+ [힌트절] */ ~ 힌트절은 주석문 안에 표시한다. 오라클이 제공하는 힌트절은 매우 많지만 핵심적인 7가지만 알아도 쿼리 튜닝에 부족함이 없다. 1.1.1 접근 순서를 결정하는 힌트절 - ORDERED : FROM 절에 나열된 테이블 순서대로 접근한다. (SQL 문에..

DB 2022.08.09

오라클의 조인 방식

관계형 데이터베이스에서 쿼리는 조인없이 단독으로 사용하는 경우가 많이 없고, 대부분의 쿼리는 여러 테이블 간에 관계를 맺는 경우이다. 조인 방식은 아래와 같이 크게 3가지 경우로 나뉘어진다. 1.1 Nested Loop Join 두 개의 테이블을 조인할 때 사용되는 가장 간단한 조인 알고리즘 중 하나로, 먼저 더 작은 테이블(Inner Table)을 순차적으로 읽어들이면서 각각의 행이 다른 테이블(Outer Table)과 매칭되는지 확인하는 과정을 반복한다. 이때 다른 테이블은 인덱스를 사용해서 검색할 수도 있다. 소량의 데이터 처리에 적합한 조인 방식으로, 흔하게 접할 수 있는 오라클 조인 방식이다. 테이블의 크기가 커질수록 성능이 급격하게 저하될 수 있으며, Inner Table에서 읽어들인 각각의 ..

DB 2022.08.01

공정쿼리

공정쿼리란 ? 공정쿼리란 무엇을 조회할지에 대한 결과뿐 아니라 어떻게 조회할지에 대한 쿼리 과정까지 염두에 두고 접근하는 방식을 말한다. 무엇을 어떻게 조회할지에 대한 내용을 모두 포함해서 쿼리를 작성하므로 공정쿼리로 작성한 쿼리에서는 쿼리 결과뿐 아니라, 생성해야 할 인덱스 정보와 접근되어야 하는 실행계획 정보까지 모두 알 수 있다. 1.2 오라클 CBO 방식과 통계정보 오라클 CBO(Cost Based Optimizer) 방식은 통계정보를 이용해서 비용을 계산한 후 SQL을 수행한다. 통계정보가 정확하다면 오라클은 대부분의 쿼리에서 올바르고 적절한 실행계획을 우리에게 보여주지만, 존재하지 않다면 정확한 실행계획을 제공할 수 없다. 오라클 CBO 방식에서 비용이란 물리적인 비용이 아니라 논리적인 비용을..

DB 2022.07.31

인덱스 작성 노하우와 인덱스 생성도

1. 분류 본능을 활용하라 테이블은 분류 대상을 갖고 있고, 인덱스는 분류 정보를 갖고 있고, 우리가 필요로 하는 분류 정보가 하나만 있어도 된다면 굳이 테이블과 인덱스를 분리돼 따로 존재할 필요가 없지만 다양한 분류 정보가 필요로 하기 때문에 대부분의 DB에서는 테이블과 인덱스는 분리돼 관리되고 있다. 1.1 인덱스 수는 적정해야 한다. 오라클에서 테이블은 분류 대상만을 가지게 됐고, 인덱스는 분류 정보만을 가지게 됐다. 테이블과 인덱스는 1:N 관계에 있으며 인덱스는 테이블에 종속적이다. 테이블이 삭제되면 인덱스는 자동으로 삭제된다. 그렇다면 하나의 테이블에 종속적인 인덱스의 개수가 많으면 많을수록 처리에서 많은 부하가 발생할 것이다. 대신 조회에서는 빠른 결과를 얻을 수 있다. 인덱스의 개수는 테이..

DB 2022.07.26