DATABASE
데이터 스토어 관련 학습 기록. 관계형·검색엔진·캐시를 모두 포함한다.
[초안] JPA N+1과 커머스 조회 모델: 주문/메뉴/쿠폰 도메인에서 살아남기
커머스 백엔드에서 가장 많이 깨지는 지점은 의외로 결제도, 동시성도 아닌 조회 쿼리다. 주문 한 건을 화면에 띄우려면 다음 57개 테이블이 엮인다. - 주문 헤더 - 주문 라인 - 메뉴 - 메뉴 옵션 - 쿠폰 - 매장 - 회원 JPA를 쓰는 팀이라면 이 시점에서 거의 반드시 N+1 쿼리 문제를 만난다. 더 나쁜 점은 N+1이 단위 테스트에서는 안 보인다는...
[초안] MyBatis 기본기 — XML Mapper, resultMap, 동적 SQL, 운영 패턴 정리
JPA 위주로 작업해 왔더라도, 레거시 비중이 큰 SI/유통 도메인에서는 MyBatis 코드를 읽고 고치는 능력이 곧 합류 첫 달의 생산성을 결정한다. CJ푸드빌처럼 메뉴/매장/가격/영양 같은 도메인 데이터가 다양한 외부 시스템과 맞물리는 환경에서는 단순 CRUD보다 동적 조건 검색, 다중 RESULT 매핑, 대량 INSERT/UPDATE, 통계 집계 쿼리...
[초안] MyBatis와 JPA/Hibernate 트레이드오프 — 레거시 백엔드를 다루는 시니어 관점
한국 SI/엔터프라이즈 도메인, 특히 외식·유통·리테일 도메인의 백엔드는 여전히 MyBatis 기반 레거시가 다수다. 신규 프로젝트는 JPA/Hibernate로 출발하더라도, 실제 운영에서 마주치는 코드의 절반 이상은 XML Mapper, 동적 SQL, 수십 줄짜리 JOIN 쿼리로 구성된 MyBatis 코드일 가능성이 높다. CJ푸드빌처럼 디지털 채널(주문...
데이터 베이스 정규화
- https://3months.tistory.com/193 - 정규화 : 데이터베이스의 설계를 재구성하는 테크닉 - 정규화를 통해 불필요한 데이터(redundancy)를 없앨 수 있다 - 또한 삽입/갱신/삭제 시 발생할 수 있는 각종 이상현상(Anamolies)들을 방지할 수 있다 - 정규화의 목적 1. 불필요한 데이터 제거 2. 데이터 저장을 "논리적"...
역정규화 (Denormalization)
정규화된 테이블 구조를 의도적으로 되돌려 조회 성능을 개선하는 기법. 데이터 중복을 감수하고 JOIN을 줄이거나 집계 연산을 미리 계산해두는 방식이다. --- 정규화는 데이터 무결성과 저장 공간 효율을 위한 것이다. 하지만 정규화가 높을수록 조회 시 여러 테이블을 JOIN해야 한다. 데이터가 많아지면 이 JOIN 비용이 성능 병목이 된다. 정규화 우선: 쓰...
인덱스 - DB 성능 최적화의 핵심
- 인덱스와 실행 계획은 DB 성능의 80%를 결정짓는 핵심 분야 - 인덱스의 가장 기본이 되는 B+Tree 구조부터 시작해보자. - B+Tree는 이진 트리(Binary Tree)를 확장하여 하다의 노드가 가질 수 있는 자식 노드의 개수를 늘린 B-Tree의 변형 구조이다 - 핵심 특징: - 모든 키 값은 Leaf Node에만 존재: - Root와 Int...
커넥션 풀 크기는 얼마나 조정해야 할까?
직관과 반대다. 동시 사용자가 많아지면 풀을 키워야 할 것 같지만, 실제로는 작게 유지하는 쪽이 더 빠르다. 커넥션은 결국 DB 측 자원(워커 프로세스/스레드, 디스크 I/O)을 점유하는데, 그 자원의 수가 한정되어 있기 때문이다. > 다른 변경 없이 커넥션 풀 크기만 줄였더니 애플리케이션 응답 시간이 약 100ms에서 약 2ms로, 50배 이상 단축됐다...