전체 글 523

[Real MySQL] 7-2. 데이터 암호화: 테이블 & 로그

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다.1. 테이블 암호화일반적인 테이블 생성 구문과 동일 암호화테이블 생성 ENCRYPTION 옵션 추가하기default_table_encrtyption 시스템 변수 활성화하기 응용 프로그램 암호화버퍼 풀에 데이터가 암호화되어 적재됨인덱스를 사용할 수 없음평문의 내용을 바로 확인할 수 없음 테이블스페이스 이동테이블의 데이터 파일만 백업했다가 복구 Flush 명령어FLUSH TABLES source_table FOR EXPORT;source_table 구조를 source_table.cfg에 저장source_table.ibd와 source_table.cfg를 목적지 서버로 복사UNLOCK TABLES 명령어를 수행하여 잠금 풀기 2. 언두 로..

Database/Mysql 2025.03.09

[Real MySQL] 7-1. 데이터 암호화: MySQL 서버

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다.1. MySQL 서버의 데이터 암호화TDE스토리지 엔진의 I/O 레이어와 디스크 사이에서 암호화/복호화 수행즉, 데이터 파일이 디스크에 저장될 떄 암호화되고 읽을 떄 복호화됨MySQL 서버에서는 테이블의 데이터가 암호화되있는지 여부를 파악할 필요 없음 2단계 키 관리master key데이터베이스 전체의 키를 관리하는 최상위 키 (데이터를 암호화는 것이 아니라, tablespace key를 암호화)파일에 의해 관리되므로 보안상 주기적으로 변경해야 함키 변경) ALTER INSTANCE ROTATE INNODB MASTER KEY; tablespace key (private key)각 테이블마다 개별적으로 존재하는 키마스터 키에 의해 암..

Database/Mysql 2025.03.09

[Real MySQL] 6. 데이터 압축

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 페이지 압축디스크에 저장하는 시점에 페이지가 압축되어 저장됨디스크에서 페이지를 읽어올 때 압축이 해제됨 압축 크기한 페이지가 어느 정도로 압축될지는 모름단, 특정 테이블의 페이지 크기는 모두 동일함 펀치홀운영체제의 파일 압축 기능MySQL에서는 16KB를 유지하면서 압축 후, 남은 공간은 운영체제에 반납하여 공간을 절약함 (실제로는 압축된 페이지만 사용)여러 문제점으로 인해 잘 사용되지 않음 문제점운영체제 뿐만 아니라, 하드웨어 자체에서도 지원해야 함파일 시스템 관련 명령어가 펀지 홀을 지원하지 못함 (복구하는 과정에서 남은 공간까지 가져올 수 있음) 설정CREATE TABLE t1 (c1 INT) COMPRESSION="zl..

Database/Mysql 2025.03.08

[단위 테스트] 9. 목 처리에 대한 모범 사례

블라디미르 코리코프 님의 "단위 테스트" 책을 정리한 포스팅입니다.목에 대해 리팩터링 내성과 회귀 방지를 최대화해서 최대 가치의 통합 테스트 개발하기 1. 목의 가치를 극대화하기예제더보기public class UserController { private final Database database; private final EventDispatcher eventDispatcher; public UserController(Database database, IMessageBus messageBus, IDomainLogger domainLogger) { this.database = database; this.eventDispatcher = new EventDispatch..

Code/Test 2025.03.01

[단위 테스트] 8-2. 통합 테스트를 하는 이유: 인터페이스

블라디미르 코리코프 님의 "단위 테스트" 책을 정리한 포스팅입니다. 4. 의존성 추상화를 위한 인터페이스 사용인터페이스와 느슨한 결합인터페이스 사용의 잘못된 인식프로세스 외부 의존성을 추상화하여 느슨한 결합을 달성단일 구현일 경우, 추상화가 아니게 됨진정한 추상화는 발견하는 것이지 발명하는 것이 아님 (적어도 구현이 두가지 이상 있어야 함)YAGNI 위반 프로세스 외부 의존성에 인터페이스를 사용하는 이유는?목을 사용하기 위함인터페이스가 없으면 테스트 대역을 만들 수 없음즉, 비관리 의존성만 인터페이스를 두기 5. 통합 테스트 모범 사례항목장점단점권장 사항도메인 모델 경계 명시단위 테스트와 통합 테스트 구분 쉬움- 계층 수 줄이기단순화, 탐색 쉬움계층 많을수록 책임 모호테스트 어려움도메인 모델, 애플리케이..

Code/Test 2025.03.01

[단위 테스트] 8-1. 통합 테스트를 하는 이유: 통합 테스트

블라디미르 코리코프 님의 "단위 테스트" 책을 정리한 포스팅입니다. 1. 통합 테스트는 무엇인가?단위 테스트만으로 전체 시스템이 잘 동작하는지 확신할 수 없음각 부분이 외부 시스템과 어떻게 통합되는지 확인해야 함비즈니스 로직을 격리된 상태로 확인하는 것만으로는 충분하지 않음 통합 테스트단위 테스트의 요구사항을 일부 충족하지 못하는 테스트.외부 시스템과 통합된 상태에서 작동 여부를 검증함.구분설명대상외부 시스템과 상호작용하는 코드 (컨트롤러, 애플리케이션 서비스 등)목적시스템이 외부 의존성(DB, 메시지 버스 등) 과 통합된 상태에서 올바르게 작동하는지 검증검증 범위단일 동작 단위를 검증 (예: 하나의 API 요청 처리 흐름)속도단위 테스트보다 느릴 수 있음 (상대적으로 빠른 수행을 목표로 함)테스트 격리..

Code/Test 2025.02.28

[단위 테스트] 7-2. 가치 있는 단위 테스트를 위한 리팩터링: 감사 시스템

블라디미르 코리코프 님의 "단위 테스트" 책을 정리한 포스팅입니다. 2. 가치 있는 단위 테스트를 위한 리팩터링하기고객 관리 시스템이메일 변경사용자 이메일이 회사 도메인에 속한 경우, 해당 사용자는 직원으로 표시됨 (그렇지 않으면 고객으로 간주)시스템은 회사의 직원 수를 추적해야 함이메일이 변경되면 시스템은 메시지 버스로 메시지를 보내 외부 시스템에 알려야 함 초기 구현항목설명도메인 유의성사용자 식별- UserType을 통해 사용자가 직원인지 고객인지 구별 (이메일 도메인에 따라 결정)복잡도직원 수 업데이트- 이메일 도메인에 따라 사용자 유형을 변경하고, 직원 수를 업데이트하는 로직 포함협력자명시적: userId, newEmail (값 전달 방식으로 협력, 협력자 수에 포함되지 않음)암시적: Databa..

Code/Test 2025.02.28

[단위 테스트] 7-1. 가치 있는 단위 테스트를 위한 리팩터링: 코드 유형

블라디미르 코리코프 님의 "단위 테스트" 책을 정리한 포스팅입니다.1. 리팩터링할 코드 식별하기코드 유형항목설명복잡도코드 내 의사 결정 지점 수로 정의도메인 유의성코드가 프로젝트의 도메인에 대해 얼마나 의미 있는가협력자 수코드가 의존하는 객체의 수- 가변 의존성외부 의존성이 얼마나 자주 바뀌는지- 외부 의존성외부 시스템에 대한 의존성 험블 객체 패턴을 사용해 지나치게 복잡한 코드 분할하기지나치게 복잡한 코드복잡도 및 도메인 유의성도 높고 협력자 수도 많은 코드테스트가 어렵고, 변경하기도 어려우며, 버그가 생기기 쉬움 예시) 프레임워크 의존성 (비동기)더보기@Servicepublic class NotificationService { @Async public void sendEmail(String..

Code/Test 2025.02.27

[단위 테스트] 6-2. 단위 테스트 스타일: 함수형 아키텍처

블라디미르 코리코프 님의 "단위 테스트" 책을 정리한 포스팅입니다.1. 함수형 아키텍처 이해함수형 프로그래밍구분설명예시 / 비고정의수학적 함수를 사용한 프로그래밍 방식숨은 입출력이 없음핵심 특성- 메서드 시그니처에 모든 입출력이 명시됨- 동일 입력 → 동일 출력 (호출 횟수 상관 ❌)- 상태 변화 ❌순수 함수참조 투명성어떤 표현식이 항상 같은 값으로 대체될 수 있는 성질예측 가능성디버깅 용이테스트 용이장점테스트가 간결하고 유지보수 용이출력 기반 테스트에 가장 적합함상태가 없는 만큼 예측이 쉬움리팩토링 내성 강함 예시) 순수 함수더보기// 순수 함수 - 함수형 프로그래밍의 핵심public int add(int a, int b) { return a + b;} 숨은 입출력 메서드 외부에서 발생하지만 시..

Code/Test 2025.01.29

[단위 테스트] 6-1. 단위 테스트 스타일: 단위 테스트 스타일

블라디미르 코리코프 님의 "단위 테스트" 책을 정리한 포스팅입니다.1. 단위 테스트의 세 가지 스타일설명출력 기반 테스트상태 기반 테스트통신 기반 테스트검증 항목시스템의 반환 값만 검증시스템의 상태나 의존성의 상태 변경 검증협력자와의 상호작용, 통신 여부 검증예시함수형 프로그래밍- 함수가 주어진 입력에 대해 정확한 반환 값을 내는지 검증. - 부작용 ❌- 결제 후 주문 상태가 "완료"로 변경되었는지 검증- 주문 서비스가 결제 서비스에 호출을 했는지 검증- 호출된 파라미터가 맞는지 검증 예시) 출력 기반 테스트더보기더보기public class Calculator { public int add(int a, int b) { return a + b; }}public class Calcul..

Code/Test 2025.01.25