2023/11 34

[자바 ORM 표준 JPA 프로그래밍] 2. JPA 시작

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. 컴포넌트컴포넌트역할특징주의사항 및 사용 방식EntityManagerFactory- Connection Pool 생성 및 관리- EntityManager 인스턴스 생성- 생성 비용 높음 (Singleton으로 관리)- 앱 실행 시 한 번만 생성- 전역으로 공유EntityManager- DB 통신- 쿼리 실행 (JPQL 사용)- 커넥션 획득 (DataSource 사용)- 스레드 안전하지 않음- 요청마다 생성 또는 주입- 스레드 간 공유 금지EntityTransaction- 트랜잭션 처리 담당- EntityManager를 통해 획득- 트랜잭션 범위 안에서만 DB 작업 가능- begin() → 작업 → commit() or r..

[자바 ORM 표준 JPA 프로그래밍] 1. JPA 소개

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. SQL을 직접 다룰 때 발생하는 문제점문제점내용SQL 의존 개발- 강한 의존 관계 (SQL 쿼리 ↔️ Java 객체)- 유지 보수 어려움 (쿼리 결과 ↔️ 엔티티 필드 일치 필수)- 계층 분리 어려움SQL Mapper 개발- 개발 효율성 저하 (반복되는 보일러플레이트 코드: JDBC API) 예제) SQL Mapper 개발더보기// JDBC 연결 정보String url = "jdbc:mysql://localhost:3306/mydatabase";String username = "root";String password = "password";// 데이터베이스 연결 및 쿼리 실행try (Connection connectio..

[Java의 정석] 13-2. 스레드: 우선순위, 그룹, 데몬 스레드

남궁성 님의 "Java의 정석" 책을 정리한 포스팅 입니다. 5. 우선순위Thread 클래스는 우선순위라는 속성을 가지고 있습니다.우선순위 값에 따라 스레드의 실행순서가 달라집니다.사용자에게 빠르게 반응해야 하는 작업에 우선순위를 높게 부여합니다. 우선순위 지정하기1~10이며, 숫자가 높을수록 우선순위가 높습니다.부모 스레드로부터 상속받습니다. 6. 스레드 그룹// 스레드 그룹 생성ThreadGroup group = new ThreadGroup("CustomGroup");// 그룹에 속한 스레드 생성Thread t1 = new Thread(group, () -> { System.out.println("Thread 1 is running");});Thread t2 = new Thread(group, ..

Java 2023.11.27

[Java의 정석] 13-1. 스레드: 프로세스와 스레드

남궁성 님의 "Java의 정석" 책을 정리한 포스팅 입니다. 1. 프로세스와 스레드프로세스실행중인 프로그램을 의미합니다. 자원OS로부터 실행에 필요한 자원을 할당받아 실행 스레드자원을 이용하여 실제 작업을 수행하는 실행 단위모든 프로세스에는 하나 이상의 스레드가 할당됨 멀티태스킹여러 프로세스가 동시에 실행될 수 있습니다.프로세스 생성비용과 컨텍스트 스위칭 비용이 스레드보다 많이 들많은 수의 사용자 요청을 서비스하기 어렵습니다. 멀티스레딩하나의 프로세스 내에서 여러 스레드가 동시에 작업을 수행하는 것입니다.짧은 시간동안 여러 작업을 번갈아 수행하면서 동시에 수행하는 것처럼 보이게 합니다.CPU 코어 당 하나의 작업을 수행할 수 있습니다. 장점자원을 효율적으로 사용할 수 있습니다. (CPU 사용률 향상)사..

Java 2023.11.27

[Real MySQL] 15-4. 데이터 타입: JSON

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. JSON이진 형태일반적인 문자열 저장 방식보다 빠른 검색 및 업데이트 가능 BSON (Binary JSON)NoSQL에서 사용하는 JSON의 바이너리 표현내부적으로 JSON 데이터를 BSON 형식으로 변환하여 읽고 씀 BLOB데이터가 작을 경우, 하나의 페이지에 저장됨데이터가 클 경우, 여러 페이지로 나뉘어 저장됨 (최대 4GB까지) 구조JSON 정보JSON 타입, 애트리뷰트 수, 총 데이터 길이 Key - Value주소(offset), 길이, 값, (타입) 2. 명령어생성CREATE TABLE employees ( id INT AUTO_INCREMENT PRIMARY KEY, info JSON NOT NULL); ..

Database/Mysql 2023.11.26

[Real MySQL] 15-3. 데이터 타입: 날짜와 시간

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 날짜와 시간타입설명저장 크기 (byte)YEAR연도만 저장 (YYYY)1 byteDATE날짜 (YYYY-MM-DD)3 byteTIME시간 (HH:MM:SS)3 ~ 5 byteTIMESTAMP날짜 + 시간 (UTC 기준)4 ~ 7 byteDATETIME날짜 + 시간 (로컬 시간 기준)5 ~ 8 byte 2. 밀리초 저장괄호괄호안의 숫자는 밀리초 자리 수를 의미함최대 6자리까지 표현할 수 있습니다.2자리당 1바이트씩 공간이 필요합니다. 예더보기DATETIME(6) 3. 타임존날짜 타입타임존 정보가 포함되지 않음클라이언트로부터 입력된 값을 그대로 저장하고 조회합니다. 시간 타입항목TIMESTAMPDATETIME타임존 처리✅❌저장 기..

Database/Mysql 2023.11.26

[Real MySQL] 15-2. 데이터 타입: 숫자

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 정확도구분설명대표 타입참값입력한 값을 정확히 그대로 저장하고 조회INTEGER, DECIMAL근삿값 (부동소수점)저장된 값이 입력값과 유사하지만 정확하지 않을 수 있음FLOAT, DOUBLE 2. 포맷포맷 종류설명대표 타입이진 표기법숫자를 2진수(binary)로 변환하여 저장메모리 효율 높음INTEGER, FLOAT, DOUBLE십진 표기법숫자의 각 자릿값을 4비트(BCD) 또는 1바이트 단위로 저장정밀도 높음DECIMAL 3. 정수타입크기 (byte)최솟값최댓값TINYINT1–128127SMALLINT2–32,76832,767MEDIUMINT3–8,388,6088,388,607INT4–2,147,483,6482,147,483..

Database/Mysql 2023.11.26

[Real MySQL] 15-1. 데이터 타입: 문자열

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 저장 공간타입항목CHARVARCHAR저장 방식고정 길이가변 길이 (입력한 데이터 길이 + 길이 접두사 저장)남는 공간 처리부족한 공간은 공백으로 채움남는 공간 없음검색 속도빠름느림 (길이 접두사로 인한 오버헤드)길이 접두사없음있음 (255B 이하: 1바이트, 256B 이상: 2바이트)저장 공간 제한최대 255자row 최대 크기내에서 가능 (길이 접두사 포함)전체 Row 크기 제한상대적으로 영향 적음다른 컬럼 사용량에 따라 제한됨 (여유 공간 내에서 사용 가능) 2. 대용량64KB 이상의 데이터를 저장할 때 사용가변 길이 타입별도의 공간에 저장됨 타입항목TEXTBLOB데이터 용도문자열 데이터이진 데이터 (이미지, 파일 등)문자 ..

Database/Mysql 2023.11.26

[Real MySQL] 8-3. 인덱스: 알고리즘 - B-Tree Index

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. B-Tree Index가장 기본적인 인덱스 타입원래 값을 변형시키지 않는 인덱스 구성 요소항목설명트리 구조- 하나의 인덱스 = 하나의 B+ Tree- 루트 → 중간 노드 → 리프 노드- 깊이는 데이터 양과 키 크기에 따라 증가페이지 (Page)- InnoDB의 읽기/쓰기 최소 단위- 기본 크기: 16KB (innodb_page_size)- 하나의 노드 = 하나의 페이지노드 (Node)- B+ Tree를 구성하는 단위- (인덱스 키 값 : 자식 노드 주소) 형태로 저장됨- 리프 노드는 실제 데이터 주소를 가짐- 리프 노드- Primary Key Index: key → record 주소- Secondary Key Index: ke..

Database/Mysql 2023.11.25

[Real MySQL] 8-2. 인덱스

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 인덱스데이터를 빠르게 찾을 수 있도록 도와주는 자료구조항목설명형식key-value 형식정렬 방식특정 컬럼 값을 기준으로 정렬하여 저장 (항상 정렬 유지) 알고리즘알고리즘설명B-Tree- 기본 인덱싱 방식- 범위 검색 효율적Hash Index- 컬럼 값을 해시 계산하여 인덱싱- 매우 빠름 (주로 인메모리 기반의 데이터베이스에서 사용)- 정확히 일치하는 검색만 가능 (범위/부분 검색 불가) 2. 구분Key종류설명Primary Key- 행을 대표하는 컬럼- 유일성 보장- Not Null- "키 값 - 레코드 주소"로 구성Secondary Key- 보조 검색용 인덱스- 유일성 보장 ❌- Nullable- "키 값 - PK 값"으로 구..

Database/Mysql 2023.11.25