분류 전체보기(81)
-
Ch01. 동적 파라미터화 코드 전달
배경소프트웨어 개발에서 요구사항은 항상 변한다.이러한 요구사항을 반영하면서도 엔지니어링적인 비용이 가장 최소화될 수 있으면 좋다.그뿐 아니라 새로 추가한 기능은 쉽게 구현할 수 있어야하며 장기적인 관점에서 유지보수가 쉬워야한다.변화하는 요구사항에 대응하기첫번째 시도 - 녹색사과만 필터링기존의 농장 재고목록 애플리케이션 리스트에서 녹색 사과만 필터링하는 기능을 추가한다고 가정하자.enum Color { RED, GREEN } public List filterGreenApples(List inventory) { final var result = new ArrayList(); for (final var apple : inventory) { if (GREEN.equals(apple.col..
2024.06.12 -
캐싱 (로컬캐싱, 글로벌 캐싱 trade-off)
Cache 캐시는 나중에 요청할 결과를 미리 저장해 둔 후 빠르게 서비스해주는 것을 의미한다. 즉, 결과를 미리 저장하고 나중에 요청이 오면, 이 요청에 대해서 DB를 참조하지 않고 캐시에 접근하여 요청을 처리하는 기법이다. 그렇다면 어떤 데이터를 캐싱해야할까? 자주 조회되면서 쓰기가 거의 일어나지 않는 데이터에 대해서 캐싱해야한다. 캐싱을 할때 로컬캐싱 vs 글로벌 캐싱 캐싱할 데이터를 선정했다면, 이 데이터를 "어디"에 저장할지 고민해야한다. 일반적으로 로컬메모리에 저장하거나, Redis와 같은 별도 서버에 저장할 수 있다. 로컬캐싱 애플리케이션 서버의 메모리에 캐싱할 데이터를 저장하는 방법이며 일반적으로 Guava cache나 Caffeine cache를 많이 사용한다. 장점 애플리케이션 로직을 수..
2024.03.07 -
Offset기반의 페이지네이션 성능 개선(feat. Cursor Pagination, Covering Index)
Offset pagination SELECT * FROM items WHERE 조건문 ORDER BY id DESC OFFSET 페이지번호 LIMIT 페이지사이즈 offset(몇번째부터 가져올 것인가?)과 limit(몇개를 가져올 것인가?)예약어를 통하여 select전체 결과 중 일부만 가져오는 방법이다. 단점 페이지 요청 시, 데이터 변화가 있는 경우 중복 데이터 발생 예를 들어, 1페이지에서 20개의 row를 불러와서 유저에게 1페이지를 띄워주었다. 고객이 1페이지의 상품을 보고 있는 사이, 상품 운영팀에서 5개의 상품을 새로 올렸다면? 유저가 1페이지 상품을 다 둘러보고 2페이지를 눌렀을 때, 1페이지에서 보았던 상품 20개중 마지막 5개를 다시 2페이지에서 보게 된다. 대부분이 RDBMS에서 OF..
2024.03.07 -
키(Key) (슈퍼키, 후보키, 기본키, 대체키, 외래키) / 무결성 제약조건 (도메인 무결성, 개체무결성, 참조무결성)
키(Key) (슈퍼키, 후보키, 기본키, 대체키, 외래키) Key라는 것은 무엇인가를 식별하는 고유한 식별자를 의미한다. Key의 종류 슈퍼키 각 행을 유일하게 식별할 수 있는 하나 혹은 그 이상이 속성들의 집합 유일성만 만족하면 된다. 다중 컬럼이어도 상관없음. 후보키 각 행을 유일하게 식별할 수 있는 최소한의 속성들의 집합으로, 유일성과 최소성이 만족해야한다. 기본키 후보키들 중에 하나를 선택한 키로, 최소성과 유일성을 만족하는 속성으로 테이블의 PK는 오직 1개만 지정가능하다. 대체키 후보키가 2개이상일 경우, 후보키 중 기본키를 제외한 나머지 키를 대체키라고 한다. 외래키 다른 테이블의 데이터를 참조할 때, 없는 값을 참조할 수 없도록 제약을 두는 것이다. 이때, 참조될 열의 값은 참조될 테이블에..
2024.03.04 -
릴레이션 스키마와 릴레이션 인스턴스 개념
릴레이션 스키마와 릴레이션 인스턴스 개념 릴레이션은 스키마와 인스턴스로 이루어진다. 릴레이션 스키마 릴레이션에 어떤 정보가 담길지를 정의한다. 도서 릴레이션은 도서번호, 도서이름, 출판사, 가격이라는 정보를 정의하고 있는데, 각 열을 속성이라고 한다. 릴레이션 인스턴스 릴레이션 스키마에 실제로 저장된 데이터의 집합이다. 도서 릴레이션을 보면 도서 번호가 1부터 5까지 총 다섯 권의 데이터가 저장된 것을 알 수 있다. 릴레이션에서 각 행을 튜플이라고 한다. 릴레이션의 차수와 카디널리티 차수 : 속성의 개수 카디널리티 : 튜플의 개수
2024.03.04 -
데이터 독립성과 RDBMS
데이터 독립성 논리적 데이터 독립성 외부스키마와 개념스키마 사이의 독립성 개념스키마가 변경되어도 외부스키마에는 영향을 미치지 않도록 지원한다. 예를 들어, 우리가 카카오톡에서 친구들 목록을 본다고 가정하자. 이때 카카오 선물의 빼빼로 가격이 1000원 올랐다고 하여도 우리가 직접 다루고 있는 테이블이 아니기 때문에 영향을 주지 않는다. 이렇듯, 우리가 보는 외부스키마와 개념스키마가 서로 영향을 주지 않게 분리해 놓은 것을 논리적 데이터 독립성이라고 한다. 물리적 데이터 독립성 개념스키마와 내부 스키마 사이의 독립성 내부스키마가 변경되어도 개념 스키마에 영향을 미치지 않도록 지원한다. 예를 들어, 우리가 공간 효율성을 위해 VARCHAR(100)의 주소라는 속성을 VARCHAR(50)으로 바꾼다고 가정할때..
2024.03.04