Presentation Layer의 테스트
·
TDD
Presentation Layer외부 세계 요청을 가장 먼저 받는 계층파라미터에 대한 최소한의 검증을 수행한다. 그런데 Presentation Layer 를 검증하려면 Business Layer가 필요하고 → Business Layer는 또 Persistence Layer가 필요하다. 나는 파라미터 검증 하나만 하려 했는데 준비 해야 할 사항이 너무 많아져 버린다. 이때 사용할 수 있는게 바로 Mock(가짜)이다. MockMockMvcMock(가짜) 객체를 사용해 스프링 MVC 동작을 재현할 수 있는 테스트 프레임워크 CQRSCommand/ Query의 분리 : Command는 CUD , Query는 Read를 의미한다.보통의 경우 Read의 빈도가 훨씬 많다. (90% 이상)그런데 Read에 트래픽이 ..
[데이터베이스] 이상과 정규화
·
Database
이상현상이란?이상 현상(Anomaly)테이블을 설계할 때 잘못 설계하여 데이터 삽입, 삭제, 수정할 때 논리적으로 생기는 오류삽입 이상 : 데이터를 삽입 시 불필요한 정보까지 합께 삽입된다.갱신 이상 : 데이터 갱신시 일부 튜플만 갱신되어 데이터 모순이 발생하는 현상삭제 이상 : 데이터 삭제시, 의도하지 않은 정보까지 삭제되는 현상이러한 현상을 예방하고, 효과적인 연산을 위해 데이터 정규화를 하게된다. 정규화에 알아보기 전에 함수 종속성에 대해서 먼저 알고 가야한다.함수 종속성이란?특정 속성(컬럼) A의 값이 정해지면, 다른 속성(컬럼)B의 값도 정해지는 종속 관계를 의미한다. ex) 이름과 이니셜 T.x → T.y완전 함수 종속예로, (이름, 가격, 카테고리) 라는 판매 릴레이션이 있다. 이름을 알아야..
레이어드 아키텍처(Layered Architecture) 와 테스트
·
TDD
A라는 모듈과 b 라는 모듈이 있다. 결과를 어떻게 예측할까? 단위 테스트로는 커버하기 어려운 부분이 생기게 된다.그래서 통합 테스트가 필요하다.  통합 테스트여러 모듈이 협력하는 기능을 통합적으로 검증하는 테스트일반적으로 작은 범위 단위 테스트만으로는 기능 전체의 신롸성을 보장할 수 없다.풍부한 단위 테스트 & 큰 기능 단위를 검증하는 통합 테스트 레이어드 아키텍처Spring MVC 기반에서 가장 많이 사용되는 아키텍처사용자의 요청이 왔을 때 각 레이어별로 접근한다. 관심사를 분리해서 책임을 나누고 유지보수하기 용이하게 만든다. Persistence LayerData Access 의 역할비즈니스 가공 로직이 포함되어서는 안된다. Data에 대한 CRUD에만 집중한 레이어단위 테스트에 가깝다.  Busi..
테스트는 [문서]다
·
TDD
테스트는 문서이기도 하다. 다양한 테스트 케이스를 통해 프로덕션 코드를 이해하는 시각과 관점을 보완한다. 어느 한 사람이 과거에 경험했던 고민의 결과물을 테스트를 녹여낸다.  이 테스트를 팀 차원으로 승격시켜 모두의 자원으로 사용할 수 있다.  DisplayName을 섬세하게@DisplayName("음료 1개를 추가하면 주문 목록에 담긴다.")명사의 나열보다 문장으로 작성a이면 b이다a이면 b가 아니고 c다.~ 테스트 (X) 테스트 행위의 결과까지 기술하기음료 1개를 추가할 수 있다. (X)음료1개를 추가하면 주문 목록에 담긴다. (O)도메인 용어를 사용하여 한층 추상화된 내용을 담기특정 시간 이전에 주문을 생성하면 실패한다. (X)영업 시작 시간 이전에는 주문을 생성할 수 없다.(o)테스트 현상을 중점..
[데이터베이스] 인덱스
·
Database
인덱스란?인덱스(index)는 데이터베이스에서 검색 성능을 높이기 위해 사용되는 자료구조이다. 인덱스는 책의 목차처럼, 특정 열(column)의 값을 기준으로 데이터를 빠르게 찾을 수 있도록 도와준다. 인덱스가 없을 경우, 데이터베이스는 풀 스캔(full scan)을 수행하게 되며, 이는 테이블의 모든 데이터를 읽어야 하기 때문에 비효율적이다.. 인덱스의 동작 방식인덱스는 키-값 쌍(key-value pair) 구조로 되어 있으며, 다음과 같은 동작 방식을 가진다.인덱스는 정렬된 상태로 유지되며, 검색 시 이진 탐색이 가능해 빠른 조회가 가능하다.데이터를 삽입하거나 삭제할 때, 인덱스도 함께 업데이트된다/인덱스는 일반적으로 B-Tree, B+Tree, Hash Table 등의 자료구조를 사용하여 구현된다..
[데이터베이스] B-Tree 인덱스와 B+Tree 인덱스
·
Database
B-Tree 인덱스와 B+Tree 인덱스B-Tree와 B+Tree는 데이터베이스 인덱스에서 많이 사용되는 자료구조이다. 특히 데이터베이스 시스템에서 빠른 검색, 삽입, 삭제가 가능하도록 설계되어있다. 두 자료구조는 유사하지만, 몇 가지 중요한 차이점이 있다. B-Tree 구조란?인덱스에 대해 알기 위해서는 먼저 B-Tree 자료구조를 알아야 한다.B-Tree는 자식 2개 만을 갖는 이진 트리(Binary Tree)를 확장하여 N개의 자식을 가질 수 있도록 고안된 것이다. 그리고 좌우 자식 간의 균형이 맞지 않을 경우에는 매우 비효율적이라, 항상 균형을 맞춘다는 의미에서 균형 트리(Balanced Tree)라고 불린다. B-Tree의 핵심은 항상 정렬된 구조로 있다는 것이다. B-Tree 인덱스B-Tree..
[데이터베이스] 순차 I/O와 랜덤 I/O
·
Database
HDD, SSD데이터 저장 매체는 대부분 컴퓨터에서 느린 Disk(디스크)이다.때문에 데이터베이스 성능 튜닝은 어떻게 디스크 I/O를 줄이느냐이다.초당 처리 횟수를 분석하였을 때, Flash Memory를 사용하는 SSD는 HDD에 비해 엄청난 속도 차이를 보인다. 이 때문에 SSD는 DBMS로 사용할 서버로 많이 사용된다. HDD의 경우디스크에서 데이터를 읽어올 때, 하드 디스크의 드라이브 플래터(원판)을 돌려서 읽어야 할 데이터가 저장된 위치로 디스크 헤더(disk arm)을 이동 시킨 다음 데이터를 읽어온다. 순차 I/O 의 경우 원판을 돌려 읽어야 할 데이터가 저장된 위치까지 디스크 헤더를 이동시킨 다음 순차적으로 데이터를 읽으면 된다. 하지만 랜점 I/O의 경우 디스크 헤더의 위치, 이동횟수에서..
TDD가 정확히 무엇일까?
·
TDD
- test Driven Development프로덕션 코드보다 테스트 코드를 먼저 작성하여 테스트가 구현 과정을 주도하도록 하는 방법론  1단계 : Red //TDD 1단계 : RED @Test void test(){ //요구사항잉 반영된 test 구문 작성 assertThat(tatalPrice).isEqualTo(8500); } 2단계 : GREEN public int calculateTotalPrice() { return 8500; } 3단계 : REFACTOR//3단계 : 리팩토링 (여러번도 가능)public int calculateTotalPrice() { return beverages.stream() .mapToInt(Beverage::..