CI CI는 Connecting Information의 약자로 우리말로 '연계정보'라고 부릅니다. 본인 확인기관 등에서 개인별로 고유하게 부여하는 개인 식별정보로 어느 업체에서 발급해도 유일하게 발급되므로 이 값이 같으면 동일인으로 판단할 수 있습니다. 주민등록번호 수집이 금지되면서 인터넷 서비스업체에서는 휴대폰본인인증, 공인인증, 신용카드 인증을 통해 CI를 제공받고 있으며 주민등록번호를 대신해 고객을 구별하는 데이터로 사용하고 있습니다. CI값 예시 CI는 88byte로 영어 대소문자와 특수문자의 조합으로 표현되며 실제 CI는 아래와 같이 생겼습니다. wEi9oYSuekQGxT9MV4rKHG4CO+Zrp+onhLIIuembI8jx/0PLF5Ne3oMBxvUFlN4UmsgjeNErZfmpCVUFHsv8..
서비스에 모든 비즈니스 로직을 작성할 수도 있습니다. 그러나 다음과 같은 단점이 있습니다. 1. 서비스 로직의 복잡도가 높아지게 된다. 2. 로직(메서드)이 중복되면, Service Layer 가 너무 비대해진다. 3. 이로 인해 유지보수와 테스트가 힘든 상황이 발생할 수 있고, 유연하지 못한 소프트웨어가 될 수 있다. 위와 같은 이유로 서비스의 로직을 도메인으로 옮기는 중에 AbstractAggregateRoot를 알게 됐습니다. AbstractAggregateRoot는 DDD(Domain Driven Design)를 구현하기 편리하게 해주는 클래스입니다. 좀 더 정확히 말하면 도메인 이벤트를 등록, 삭제 등 관리하는 것을 도와주는 클래스입니다. 예시 '계좌'라는 도메인이 있습니다. 1. A 유저가 B..
Clustered Index Clustered Index는 row의 물리적 정렬 순서를 설정하는 index입니다. PK를 설정하면 위와 같이 clustered Index가 없이 정렬되지 않은 테이블이 있습니다. 이 테이블은 내부적으로 아래와 같이 Data Page 단위로 저장됩니다. 이때 학생 번호 6에 해당하는 학생 데이터를 조회하려 합니다. 데이터가 정렬되어 있지 않기 때문에 어떤 Data Page에 6번 학생이 존재하는지 모릅니다. 따라서 모든 Data Page를 순서대로 조회합니다. 최악의 경우 마지막에 존재하는 데이터를 찾기 위해 모든 Data Page의 학생 데이터를 탐색하게 됩니다. 이를 테이블 스캔이라고 합니다. Clustered Index 생성 위의 그림에서 학생번호를 PK로 설정하면 자..
용어 정리 Garbage Collector (이하 GC) C언어는 유효하지 않은 메모리인 가비지를 개발자가 직접 해제해 준다고 합니다. Java는 개발자가 가비지를 직접 해제해 주는 일이 없습니다. JVM의 가비지 컬렉터가 불필요한 메모리를 알아서 정리해 주기 때문입니다. 가비지 컬렉터는 주기적으로 JVM의 heap 메모리를 점검하여 스택에서 참조되지 않는 객체를 메모리에서 해제하는 장치입니다. Stop The World (이하 STW) 가비지 컬렉션을 실행하기 위해 JVM이 애플리케이션의 실행을 멈추는 작업입니다. GC가 실행될 때는 GC를 실행하는 쓰레드를 제외한 모든 쓰레드들의 작업이 중단되고, GC가 완료되면 작업이 재개됩니다. 모든 GC는 STW를 발생시키는데 Minor GC는 객체의 수명이 짧..