Spring

Spring/Spring DB

[μŠ€ν”„λ§ DB 1편] - 6. DB 락

DB 락 - κ°œλ… 이해 μ„Έμ…˜1이 νŠΈλžœμž­μ…˜μ„ μ‹œμž‘ν•˜κ³  데이터λ₯Ό μˆ˜μ •ν•˜λŠ” λ™μ•ˆ 아직 컀밋을 μˆ˜ν–‰ν•˜μ§€ μ•Šμ•˜λŠ”λ°, μ„Έμ…˜2μ—μ„œ λ™μ‹œμ— 같은 데이터λ₯Ό μˆ˜μ •ν•˜κ²Œ 되면 μ—¬λŸ¬κ°€μ§€ λ¬Έμ œκ°€ λ°œμƒν•œλ‹€. λ°”λ‘œ νŠΈλžœμž­μ…˜μ˜ μ›μžμ„±μ΄ κΉ¨μ§€λŠ” 것이닀. 여기에 λ”ν•΄μ„œ μ„Έμ…˜1이 쀑간에 둀백을 ν•˜κ²Œ 되면 μ„Έμ…˜2λŠ” 잘λͺ»λœ 데이터λ₯Ό μˆ˜μ •ν•˜λŠ” λ¬Έμ œκ°€ λ°œμƒν•œλ‹€. 이런 문제λ₯Ό λ°©μ§€ν•˜λ €λ©΄, μ„Έμ…˜μ΄ νŠΈλžœμž­μ…˜μ„ μ‹œμž‘ν•˜κ³  데이터λ₯Ό μˆ˜μ •ν•˜λŠ” λ™μ•ˆμ—λŠ” μ»€λ°‹μ΄λ‚˜ λ‘€λ°± μ „κΉŒμ§€ λ‹€λ₯Έ μ„Έμ…˜μ—μ„œ ν•΄λ‹Ή 데이터λ₯Ό μˆ˜μ •ν•  수 μ—†κ²Œ 막아야 ν•œλ‹€. DB 락 - λ³€κ²½ λ‹€μŒ μ˜ˆμ‹œλ₯Ό 톡해 λ™μ‹œμ— 데이터λ₯Ό μˆ˜μ •ν•˜λŠ” 문제λ₯Ό 락으둜 μ–΄λ–»κ²Œ ν•΄κ²°ν•˜λŠ”μ§€ μžμ„Ένžˆ μ•Œμ•„λ³΄μž. 1. μ„Έμ…˜1은 νŠΈλžœμž­μ…˜μ„ μ‹œμž‘ν•œλ‹€. 2. μ„Έμ…˜1은 memberA 의 money λ₯Ό 500으둜 변경을 μ‹œλ„ν•œλ‹€. μ΄λ•Œ ν•΄λ‹Ή..

Spring/Spring DB

[μŠ€ν”„λ§ DB 1편] - 5. λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° ꡬ쑰와 DB μ„Έμ…˜

λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° ꡬ쑰 μ‚¬μš©μžλŠ” μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„(WAS)λ‚˜ DB μ ‘κ·Ό 툴 같은 ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μ‚¬μš©ν•΄μ„œ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ— μ ‘κ·Όν•  수 μžˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈλŠ” λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ— 연결을 μš”μ²­ν•˜κ³  컀λ„₯μ…˜μ„ 맺게 λœλ‹€. μ΄λ•Œ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„λŠ” 내뢀에 μ„Έμ…˜μ΄λΌλŠ” 것을 λ§Œλ“ λ‹€. 그리고 μ•žμœΌλ‘œ ν•΄λ‹Ή 컀λ„₯μ…˜μ„ ν†΅ν•œ λͺ¨λ“  μš”μ²­μ€ 이 μ„Έμ…˜μ„ ν†΅ν•΄μ„œ μ‹€ν–‰ν•˜κ²Œ λœλ‹€. Database Session λ°μ΄ν„°λ² μ΄μŠ€ 접속을 μ‹œμž‘μœΌλ‘œ, μ—¬λŸ¬ μž‘μ—…μ„ μˆ˜ν–‰ν•œ ν›„ 접속 μ’…λ£ŒκΉŒμ§€μ˜ 전체 기간을 μ˜λ―Έν•œλ‹€. μ„Έμ…˜ μ•ˆμ—λŠ” μ—¬λŸ¬κ°œμ˜ νŠΈλžœμž­μ…˜μ΄ μ‘΄μž¬ν• μˆ˜ 있으며(ν•˜λ‚˜ μ΄μƒμ˜), 일반적으둜 λ°μ΄ν„°λ² μ΄μŠ€λŠ” μ—¬λŸ¬ κ³³μ—μ„œ λ™μ‹œμ— 접근이 κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— λ§Žμ€ μ„Έμ…˜μ΄ λ™μ‹œμ— μ—°κ²°λ μˆ˜ μžˆλ‹€. μ„Έμ…˜μ€ 데이터가 λ³€κ²½, μ‚­μ œκ°€ ν™•μ •λ λ•ŒκΉŒμ§€ ν•΄λ‹Ή 데이터 μ‘°μž‘μ„ λΆ„λ¦¬μ²˜λ¦¬..

Spring/Spring DB

[μŠ€ν”„λ§ DB 1편] - 4. νŠΈλžœμž­μ…˜

데이터λ₯Ό μ €μž₯ν•  λ•Œ λ‹¨μˆœνžˆ νŒŒμΌμ— μ €μž₯해도 λ˜λŠ”λ°, λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒ? μ—¬λŸ¬κ°€μ§€ μ΄μœ κ°€ μžˆμ§€λ§Œ, κ°€μž₯ λŒ€ν‘œμ μΈ μ΄μœ λŠ” λ°”λ‘œ λ°μ΄ν„°λ² μ΄μŠ€λŠ” νŠΈλžœμž­μ…˜μ΄λΌλŠ” κ°œλ…μ„ μ§€μ›ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. νŠΈλžœμž­μ…˜ νŠΈλžœμž­μ…˜μ€ ν•˜λ‚˜μ˜ 거래λ₯Ό μ•ˆμ „ν•˜κ²Œ μ²˜λ¦¬ν•˜λ„λ‘ 보μž₯ν•΄μ£ΌλŠ” 것을 λœ»ν•œλ‹€. μ˜ˆμ‹œ ) 5000원 κ³„μ’Œμ΄μ²΄ 1. A의 μž”κ³ λ₯Ό 5000원 κ°μ†Œ 2. B의 μž”κ³ λ₯Ό 5000원 증가 κ³„μ’Œμ΄μ²΄λΌλŠ” κ±°λž˜λŠ” μ΄λ ‡κ²Œ 2가지 μž‘μ—…μ΄ ν•©μ³μ Έμ„œ ν•˜λ‚˜μ˜ μž‘μ—…μ²˜λŸΌ λ™μž‘ν•΄μ•Ό ν•œλ‹€. λ§Œμ•½ 1λ²ˆμ€ μ„±κ³΅ν–ˆλŠ”λ° 2λ²ˆμ—μ„œ μ‹œμŠ€ν…œμ— λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄ κ³„μ’Œμ΄μ²΄λŠ” μ‹€νŒ¨ν•˜κ³ , A의 μž”κ³ λ§Œ 5000원 κ°μ†Œν•˜λŠ” μ‹¬κ°ν•œ λ¬Έμ œκ°€ λ°œμƒν•œλ‹€. λ°μ΄ν„°λ² μ΄μŠ€κ°€ μ œκ³΅ν•˜λŠ” νŠΈλžœμž­μ…˜ κΈ°λŠ₯을 μ‚¬μš©ν•˜λ©΄ 1,2 λ‘˜λ‹€ ν•¨κ»˜ 성곡해야 μ €μž₯ν•˜κ³ , 쀑간에 ν•˜λ‚˜λΌλ„ μ‹€νŒ¨ν•˜λ©΄ 거래 μ „..

Spring/Spring DB

[μŠ€ν”„λ§ DB 1편] - 3. DataSource 이해

DataSource 이해 컀λ„₯μ…˜μ„ μ–»λŠ” 방법은 μ•žμ„œ ν•™μŠ΅ν•œ JDBC DriverManager λ₯Ό 직접 μ‚¬μš©ν•˜κ±°λ‚˜, 컀λ„₯μ…˜ 풀을 μ‚¬μš©ν•˜λŠ” λ“± λ‹€μ–‘ν•œ 방법이 μ‘΄μž¬ν•œλ‹€. DriverManagerλ₯Ό 톡해 컀λ„₯μ…˜ νšλ“ν•˜λ‹€κ°€ 컀λ„₯μ…˜ ν’€λ‘œ λ³€κ²½μ‹œ 문제 μš°λ¦¬κ°€ μ•žμ„œ JDBC둜 κ°œλ°œν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 처럼 DriverManager λ₯Ό ν†΅ν•΄μ„œ 컀λ„₯μ…˜μ„ νšλ“ν•˜λ‹€κ°€, 컀λ„₯μ…˜ 풀을 μ‚¬μš©ν•˜λŠ” λ°©λ²•μœΌλ‘œ λ³€κ²½ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Όν• κΉŒ? 예λ₯Ό λ“€μ–΄μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‘œμ§μ—μ„œ DriverManager λ₯Ό μ‚¬μš©ν•΄μ„œ 컀λ„₯μ…˜μ„ νšλ“ν•˜λ‹€κ°€ HikariCP 같은 컀λ„₯μ…˜ 풀을 μ‚¬μš©ν•˜λ„λ‘ λ³€κ²½ν•˜λ©΄ 컀λ„₯μ…˜μ„ νšλ“ν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œλ„ ν•¨κ»˜ λ³€κ²½ν•΄μ•Ό ν•œλ‹€. μ˜μ‘΄κ΄€κ³„κ°€ DriverManager μ—μ„œ HikariCP 둜 λ³€κ²½λ˜κΈ° λ•Œλ¬Έμ΄λ‹€. λ¬Όλ‘  λ‘˜μ˜ μ‚¬μš©λ²•λ„ 쑰금..

Spring/Spring DB

[μŠ€ν”„λ§ DB 1편] - 2. 컀λ„₯μ…˜ν’€(Connection Pool)

λ°μ΄ν„°λ² μ΄μŠ€ 컀λ„₯μ…˜μ„ 맀번 νšλ“(λ³΅μž‘ν•œ κ³Όμ •) λ°μ΄ν„°λ² μ΄μŠ€ 컀λ„₯μ…˜μ„ νšλ“ν•  λ•ŒλŠ” λ‹€μŒκ³Ό 같은 λ³΅μž‘ν•œ 과정을 κ±°μΉœλ‹€. 0. μ‚¬μš©μž μš”μ²­ 1. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‘œμ§μ€ DB λ“œλΌμ΄λ²„λ₯Ό 톡해 컀λ„₯μ…˜μ„ μ‘°νšŒν•œλ‹€. 2. DB λ“œλΌμ΄λ²„λŠ” DB 와 TCP/IP 컀λ„₯μ…˜μ„ μ—°κ²°ν•œλ‹€. λ¬Όλ‘  μ΄κ³Όμ •μ—μ„œ 3 way handshake 같은 TCP/IP 연결을 μœ„ν•œ λ„€νŠΈμ›Œν¬ λ™μž‘μ΄ λ°œμƒν•œλ‹€. 3. DB λ“œλΌμ΄λ²„λŠ” TCP/IP 컀λ„₯μ…˜μ΄ μ—°κ²°λ˜λ©΄, ID/PW와 기타 뢀가정보λ₯Ό DB에 μ „λ‹¬ν•œλ‹€. 4. DBλŠ” ID,PWλ₯Ό 톡해 λ‚΄λΆ€ 인증을 μ™„λ£Œν•˜κ³ , 내뢀에 DB μ„Έμ…˜μ„ μƒμ„±ν•œλ‹€. 5. DBλŠ” 컀λ„₯μ…˜ 생성이 μ™„λ£Œλ˜μ—ˆλ‹€λŠ” 응닡을 보낸닀. 6. DB λ“œλΌμ΄λ²„λŠ” 컀λ„₯μ…˜ 객체λ₯Ό μƒμ„±ν•΄μ„œ ν΄λΌμ΄μ–ΈνŠΈμ— λ°˜ν™˜ν•œλ‹€. μ΄λ ‡κ²Œ 컀λ„₯μ…˜μ„ μƒˆλ‘œ λ§Œλ“œλŠ” 것은 과정도..

Spring/Spring DB

[μŠ€ν”„λ§ DB 1편] - 1. JDBC 이해

문제점 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ‹€λ₯Έ μ’…λ₯˜μ˜ λ°μ΄ν„°λ² μ΄μŠ€λ‘œ λ³€κ²½ν•˜λ©΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„μ— 개발된 λ°μ΄ν„°λ² μ΄μŠ€ μ‚¬μš© μ½”λ“œλ„ ν•¨κ»˜ λ³€κ²½ν•΄μ•Ό ν•œλ‹€. κ°œλ°œμžκ°€ 각각의 λ°μ΄ν„°λ² μ΄μŠ€λ§ˆλ‹€ 컀λ„₯μ…˜ μ—°κ²°, SQL 전달, 그리고 κ·Έ κ²°κ³Όλ₯Ό 응닡 λ°›λŠ” 방법을 μƒˆλ‘œ ν•™μŠ΅ν•΄μ•Ό ν•œλ‹€. 이런 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ JDBCλΌλŠ” μžλ°” ν‘œμ€€μ΄ λ“±μž₯ν•œλ‹€. JDBC 이해 JDBC(Java Database Connectivity)λŠ” μžλ°”μ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€μ— 접속할 수 μžˆλ„λ‘ ν•˜λŠ” μžλ°” APIλ‹€. JDBCλŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 자료λ₯Ό μΏΌλ¦¬ν•˜κ±°λ‚˜ μ—…λ°μ΄νŠΈν•˜λŠ” 방법을 μ œκ³΅ν•œλ‹€. JDBCλ₯Ό 직접 μ‚¬μš©ν•˜μ§€λŠ” μ•Šλ”λΌλ„, JDBCκ°€ μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€ κΈ°λ³Έ 원리λ₯Ό μ•Œμ•„λ‘μ–΄μ•Ό ν•œλ‹€. κ·Έλž˜μ•Ό ν•΄λ‹Ή κΈ°μˆ λ“€μ„ 더 깊이있게 이해할 수 있고, 무엇보닀 λ¬Έμ œκ°€ λ°œμƒν–ˆμ„ λ•Œ 근본적인 λ¬Έ..

Spring/Spring JPA κΈ°λ³Έ

[μžλ°” ORM ν‘œμ€€ JPA ν”„λ‘œκ·Έλž˜λ° - 기본편] 15. JPQL - 페치 쑰인(fetch join)

JPQL - 페치 쑰인(fetch join) SQL 쑰인 μ’…λ₯˜κ°€ μ•„λ‹Œ JPQL μ—μ„œ μ„±λŠ₯ μ΅œμ ν™”λ₯Ό μœ„ν•΄ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯이닀. μ—°κ΄€λœ μ—”ν‹°ν‹°λ‚˜ μ»¬λ ‰μ…˜μ„ SQL ν•œλ²ˆμ— ν•¨κ»˜ μ‘°νšŒν•˜λŠ” κΈ°λŠ₯이닀. μ˜ˆμ‹œ) SQL ν•œλ²ˆμ— νšŒμ›μ„ μ‘°νšŒν•˜λ©΄μ„œ μ—°κ΄€λœ νŒ€λ„ ν•¨κ»˜ 쑰회 JPQL select m from Member m join fetch m.team SQL SELECT M.*, T.* FROM MEMBER M INNER JOIN TEAM T ON M.TEAM_ID=T.ID SQL 을 보면 νšŒμ› 뿐만 μ•„λ‹ˆλΌ νŒ€(T.*)도 ν•¨κ»˜ select ν•œλ‹€. 페치 쑰인이 μ•„λ‹Œ κ·Έλƒ₯ μ‘°νšŒν•  λ•Œ String query = "select m from Member m "; List result = em.createQuery(query, Mem..

Spring/Spring JPA κΈ°λ³Έ

[μžλ°” ORM ν‘œμ€€ JPA ν”„λ‘œκ·Έλž˜λ° - 기본편] 14. νŽ˜μ΄μ§• API / 쑰인 / μ„œλΈŒ 쿼리

νŽ˜μ΄μ§• API 더보기 νŽ˜μ΄μ§•μ΄λž€? νŽ˜μ΄μ§•μ΄λž€ ν•œ ν™”λ©΄μ—μ„œ λ³΄μ—¬μ£ΌλŠ” λ°μ΄ν„°μ˜ λ²”μœ„λ₯Ό κ²°μ •ν•˜λŠ” 일련의 방법을 λ§ν•œλ‹€. νŽ˜μ΄μ§•μ€ μ‚¬μš©μžκ°€ μ–΄λ–€ 데이터λ₯Ό ν•„μš”λ‘œ ν•  λ•Œ, 전체 λ°μ΄ν„°μ˜ 일뢀뢄을 λ³΄μ—¬μ£ΌλŠ” 것을 λ§ν•©λ‹ˆλ‹€. μš°λ¦¬κ°€ ν”νžˆ μ ‘ν•˜λŠ” 일반적인 μ›Ή κ²Œμ‹œνŒμ΄λ‚˜ 쑰회 화면을 μƒκ°ν•˜λ©΄ λœλ‹€. 쑰회 λŒ€μƒ 데이터가 10만 건이라면 ν•œ ν™”λ©΄μ—μ„œ λͺ¨λ‘ 보여 쀄 μˆ˜λŠ” μ—†λ‹€. ν•œ ν™”λ©΄μ—μ„œ 보여쀄 수 μžˆλŠ” λ²”μœ„λ₯Ό κ²°μ •ν•˜λŠ” 것이 νŽ˜μ΄μ§•μ΄λ‹€. JPA λŠ” νŽ˜μ΄μ§•μ„ 두 API둜 μΆ”μƒν™”ν•˜μ˜€λ‹€. List result = em.createQuery("select m from Member m order by m.age desc", Member.class) .setFirstResult(0) .setMaxResults(10) .getResult..

hello_u
'Spring' μΉ΄ν…Œκ³ λ¦¬μ˜ κΈ€ λͺ©λ‘ (3 Page)