전체 글 594

[자바 ORM 표준 JPA 프로그래밍] 4. 엔티티 매핑

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. 엔티티 매핑어노테이션설명주요 속성 및 주의사항@Entity테이블과 매핑할 엔티티 지정- 기본 생성자 필수- final class, inner class 불가- enum, interface 불가@Table엔티티와 매핑할 테이블 지정 (생략 시 클래스명)-- name: 테이블명-- schema, catalog: 스키마/카탈로그-- uniqueConstraints: 유니크 제약조건@IdPK 매핑- 필수 지정- 단독으로 사용할 경우 사용자가 직접 할당해야 함- @GeneratedValuePK 자동 할당- 대리키 사용 (DB 벤더에 위임)GenerationType-- AUTO: 현재 DB에 적합한 키 생성 전략을 자동으로 선택-..

[자바 ORM 표준 JPA 프로그래밍] 3. 영속성 관리

김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다. 1. 영속성 컨텍스트엔티티 객체의 영속화 작업을 관리하는 작업 영역1차 캐시, 해당 엔티티 관련 내부 쿼리 저장소 역할역할설명엔티티 상태 관리엔티티를 데이터베이스와 동기화함 (EntityManager에 의해 관리됨)트랜잭션 범위영속성 컨텍스트는 트랜잭션 단위로 엔티티를 관리- 트랜잭션이 시작되면 활성화되고, 종료 시 커밋 또는 롤백됨캐시 기능이미 로드된 엔티티는 다시 데이터베이스 조회 없이 재사용됨. 동작동작설명자동 플러시트랜잭션 커밋 전에 영속성 컨텍스트에서 변경된 데이터를 자동으로 데이터베이스에 반영.수동 플러시영속성 컨텍스트의 변경 사항을 강제로 데이터베이스에 반영. (entityManager.flush()) 예제) 자..

[자바 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