8.1 트랜잭션 소개 트랜잭션은 읽기나 쓰기 작업이 가능한 데이터베이스 작업을 하나 이상 포함하는 데이터베이스의 논리적 처리 단위 작업이 성공하든 실패하든 부분적으로는 완료되지 않음 8.1.1 ACID 정의 Atomicity 원자성 트랜잭션 내 모든 작업이 적용되거나 아무 작업도 적용되지 않도록 한다 커밋 되거나 중단된다 Consistency 일관성 트랜잭션이 성공하면 DB가 하나의 일관성 있는 상태에서 다음 일관성 있는 상태로 이동 Isolation 고립성 여러 트랜잭션이 DB에서 동시에 실행되도록 허용하는 속성 트랜잭션이 다른 트랜잭션의 부분 결과를 보지 않도록 보장 Durability 영속성 트랜잭션이 커밋될 때 시스템 오류가 발생하더라도 모든 데이터가 유지 8.2 트랜잭션 사용법 코어 API 대부..
동작 파라미터화 메서드가 다양한 동작(전략)을 받아서 내부적으로 다양한 동작을 수행할 수 있다. 코드/동작(전략)을 메서드 인수로 전달, 한 개의 파라미터로 다양한 동작 변화하는 요구사항에 더 잘 대응할 수 있는 코드를 구현 //As-Is public static List filterGreenApples(List inventory) { List result = new ArrayList(); for (Apple apple : inventory) { if (GREEN.equals(apple.getColor())) { //색으로 필터링 result.add(apple); } } return result; } //Step1 public static List filterGreenApplesByColor(List i..
9.1 스키마 설계 고려 사항 제약 사항 도큐먼트 최대 크기 16Mbyte 디스크에서 전체 도큐먼트를 읽고 쓴다 갱신은 전체 도큐먼트를 다시 쓰며, 원자성 갱신은 도큐먼트 단위로 실행 쿼리 및 쓰기의 접근 패턴 쿼리 수를 최소화하고, 함께 쿼리되는 데이터가 동일한 도큐먼트에 저장되도록 설계 쿼리에 사용되지 않는 데이터는 다른 컬렉션에 넣어야 한다. 자주 사용하지 않는 데이터도 다른 컬렉션으로 넣는다. 관계 유형 요구 사항 측면과 도큐먼트 간 관계 측면 고려하여 도큐먼트를 내장하거나 참조할 방법을 결정 쿼리하지 않고 도큐먼트를 참조하는 방법을 파악해야 하며, 관계가 변경될 때 갱신되는 도큐먼트 개수를 알아야함. 카디널리티 일대일, 일대다, 다대다 인지 고려 도큐먼트 간에 데이터를 비정규화해야 할지, 도큐먼..
현상 Spring Boot 2.5.* 내장 Tomcat 에서는 URL parameter에 특수문자가 있으면 400 error 발생 조치 원칙상 클라이언트에서 특수문자를 인코딩하여 호출해야하지만, 허용이 필요한 특수문자가 있을 수 있음. Tomcat에 relaxedQueryChars 옵션으로 특수문자 허용 설정 @Component public class TomcatWebServerConfig implements WebServerFactoryCustomizer { @Override public void customize(TomcatServletWebServerFactory factory) { factory.addConnectorCustomizers(connector -> connector.setPropert..

메소드에서 알고리즘의 골격을 정의함. 알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있음. 알고리즘의 구조는 유지하면서 서브클래스의 특정 단계를 재정의 가능. public abstract class CaffeineBeverage { //전체적인 처리 과정을 관리 final void prepareRecipe() { //템플릿 메소드. 아무렇게나 음료를 만들지 못하도록 final 선언 boilWater(); brew(); pourInCup(); addCondiments(); } abstract void brew(); //서로 다른 방식으로 처리되는 메소드를 추상화 abstract void addCondiments(); //메소드를 일반화시켜서 베이스 클래스에 등록 void boilWater() {..

7.1 파이프라인, 단계 및 조정 가능 항목 집계 프레임워크는 파이프라인 개념을 기반 단계마다 해당 입력에 다른 작업을 수행 모든 단계의 입력과 출력은 도큐먼트(도큐먼트 스트림) 집계 파이프라인의 개별 단계는 데이터 처리 단위 한 번에 입력 도큐먼트 스트림을 하나씩 가져와서, 각 도큐먼트를 하나씩 처리하고, 출력 도큐먼트 스트림을 하나씩 생성 각 단계는 knobs 또는 tunables 셋을 제공 이 항목들을 조정해 각 단계를 매개변수로 지정함으로써 원하는 작업을 수행 가능 tuables은 필드를 수정, 산술 연산, 도큐먼트 재구성, 누산 작업 등 연산자 형태 동일한 유형의 단계를 단일 파이프라인의 여러 번 포함 가능 7.2 단계 시작하기 aggregate는 집계 쿼리를 실행할 때 호출하는 메서드 일치 단..

어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공 퍼사드에서 고수준 인터페이스를 정의하기 때문에 서브시스템을 더 쉽게 사용 가능 인터페이스를 단순화 시키고 클라이언트와 구성요소들로 이루어진 서브시스템을 분리 public class HomeTheaterTestDrive { public static void main(String[] args) { Amplifier amp = new Amplifier("Top-O-Line Amplifier"); Tuner tuner = new Tuner("Top-O-Line AM/FM Tuner", amp); DvdPlayer dvd = new DvdPlayer("Top-O-Line DVD Player", amp); CdPlayer cd = new CdPla..

한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 사용 가능 호환되지 않는 인터페이스를 사용하는 클라이언트를 그대로 활용 가능 클라이언트와 구현된 인터페이스를 분리 인터페이스가 바뀌더라도 변경 내역은 어댑터에서 캡슐화되기 때문에 클라이언트는 바뀔 필요 없음 public interface Duck { void quack(); void fly(); } public interface Turkey { void gobble(); void fly(); } public class WildTurkey implements Turkey{ @Override public void gobble() { System...
GeoJSON Object 몽고DB에서 GeoJSON Objects는 지리적 위치 정보를 나타내는 JSON 형식의 데이터입니다. GeoJSON은 다양한 지리 정보 데이터 유형을 포함하는 오픈 소스 데이터 형식으로, 지리적 위치 정보를 다루는 많은 애플리케이션에서 사용됩니다. 몽고DB는 GeoJSON Objects를 지원하며, GeoJSON 형식의 데이터를 저장하고 쿼리하기 위한 강력한 기능을 제공합니다. 모든 GeoJSON 객체는 몽고DB의 지리 공간 인덱스(Spatial Index)를 사용하여 쿼리할 수 있습니다. type 필드 : GeoJSON Object 타입 "Point", "LineString", "Polygon", "MultiPoint", "MultiLineString", "MultiPolyg..