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

2023. 3. 15. 16:04Β·Spring/Spring DB

 

 

데이터λ₯Ό μ €μž₯ν•  λ•Œ λ‹¨μˆœνžˆ νŒŒμΌμ— μ €μž₯해도 λ˜λŠ”λ°, λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒ?

 

μ—¬λŸ¬κ°€μ§€ μ΄μœ κ°€ μžˆμ§€λ§Œ, κ°€μž₯ λŒ€ν‘œμ μΈ μ΄μœ λŠ” λ°”λ‘œ λ°μ΄ν„°λ² μ΄μŠ€λŠ” νŠΈλžœμž­μ…˜μ΄λΌλŠ” κ°œλ…μ„ μ§€μ›ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

 

 

νŠΈλžœμž­μ…˜ 

 

 νŠΈλžœμž­μ…˜μ€ ν•˜λ‚˜μ˜ 거래λ₯Ό μ•ˆμ „ν•˜κ²Œ μ²˜λ¦¬ν•˜λ„λ‘ 보μž₯ν•΄μ£ΌλŠ” 것을 λœ»ν•œλ‹€.

 

μ˜ˆμ‹œ ) 5000원  κ³„μ’Œμ΄μ²΄ 

1. A의 μž”κ³ λ₯Ό 5000원 κ°μ†Œ

2. B의 μž”κ³ λ₯Ό 5000원 증가 

 

 

κ³„μ’Œμ΄μ²΄λΌλŠ” κ±°λž˜λŠ” μ΄λ ‡κ²Œ 2κ°€μ§€ μž‘μ—…μ΄ ν•©μ³μ Έμ„œ ν•˜λ‚˜μ˜ μž‘μ—…μ²˜λŸΌ λ™μž‘ν•΄μ•Ό ν•œλ‹€.

 

λ§Œμ•½ 1λ²ˆμ€ μ„±κ³΅ν–ˆλŠ”λ° 2λ²ˆμ—μ„œ μ‹œμŠ€ν…œμ— λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄ κ³„μ’Œμ΄μ²΄λŠ” μ‹€νŒ¨ν•˜κ³ , A의 μž”κ³ λ§Œ 5000원 κ°μ†Œν•˜λŠ” μ‹¬κ°ν•œ λ¬Έμ œκ°€ λ°œμƒν•œλ‹€.

 


λ°μ΄ν„°λ² μ΄μŠ€κ°€ μ œκ³΅ν•˜λŠ” νŠΈλžœμž­μ…˜ κΈ°λŠ₯을 μ‚¬μš©ν•˜λ©΄ 1,2 λ‘˜λ‹€ ν•¨κ»˜ 성곡해야 μ €μž₯ν•˜κ³ ,

 

쀑간에 ν•˜λ‚˜λΌλ„ μ‹€νŒ¨ν•˜λ©΄ 거래 μ „μ˜ μƒνƒœλ‘œ λŒμ•„κ°ˆ 수 μžˆλ‹€.

 

 

λͺ¨λ“  μž‘μ—…μ΄ μ„±κ³΅ν•΄μ„œ λ°μ΄ν„°λ² μ΄μŠ€μ— 정상 λ°˜μ˜ν•˜λŠ” 것을 컀밋( Commit )이라 ν•˜κ³ ,

 

μž‘μ—… 쀑 ν•˜λ‚˜λΌλ„ μ‹€νŒ¨ν•΄μ„œ 거래 μ΄μ „μœΌλ‘œ λ˜λŒλ¦¬λŠ” 것을 λ‘€λ°±( Rollback )이라 ν•œλ‹€.

 

 

 

μžλ™ 컀밋

 

νŠΈλžœμž­μ…˜μ„ μ‚¬μš©ν•˜λ €λ©΄ λ¨Όμ € μžλ™ 컀밋과 μˆ˜λ™ 컀밋을 이해해야 ν•œλ‹€.


μžλ™ μ»€λ°‹μœΌλ‘œ μ„€μ •ν•˜λ©΄ 각각의 쿼리 μ‹€ν–‰ 직후에 μžλ™μœΌλ‘œ 컀밋을 ν˜ΈμΆœν•œλ‹€.

 

λ”°λΌμ„œ μ»€λ°‹μ΄λ‚˜ 둀백을 직접 ν˜ΈμΆœν•˜μ§€ μ•Šμ•„λ„ λ˜λŠ” νŽΈλ¦¬ν•¨μ΄ μžˆλ‹€.

 

ν•˜μ§€λ§Œ 쿼리λ₯Ό ν•˜λ‚˜ν•˜λ‚˜ μ‹€ν–‰ν•  λ•Œ λ§ˆλ‹€ μžλ™μœΌλ‘œ 컀밋이 λ˜μ–΄λ²„λ¦¬κΈ° λ•Œλ¬Έμ— μš°λ¦¬κ°€ μ›ν•˜λŠ” νŠΈλžœμž­μ…˜ κΈ°λŠ₯을 μ œλŒ€λ‘œ μ‚¬μš©ν•  수 μ—†λ‹€.

 

보톡 μžλ™ 컀밋 λͺ¨λ“œκ°€ 기본으둜 μ„€μ •λœ κ²½μš°κ°€ 많기 λ•Œλ¬Έμ—,

 

μˆ˜λ™ 컀밋 λͺ¨λ“œλ‘œ μ„€μ •ν•˜λŠ” 것을 νŠΈλžœμž­μ…˜μ„ μ‹œμž‘ν•œλ‹€κ³  ν‘œν˜„ν•  수 μžˆλ‹€.

 

set autocommit false; //μˆ˜λ™ 컀밋 λͺ¨λ“œ μ„€μ •
    insert into member(member_id, money) values ('data3',10000);
    insert into member(member_id, money) values ('data4',10000); 
    commit; //μˆ˜λ™ 컀밋


μˆ˜λ™ 컀밋 섀정을 ν•˜λ©΄ 이후에 κΌ­ commit , rollback 을 ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€.

 

 

νŠΈλžœμž­μ…˜ ACID

 

μ›μžμ„±: νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œ μ‹€ν–‰ν•œ μž‘μ—…λ“€μ€ 마치 ν•˜λ‚˜μ˜ μž‘μ—…μΈ κ²ƒμ²˜λŸΌ λͺ¨λ‘ 성곡 ν•˜κ±°λ‚˜ λͺ¨λ‘ μ‹€νŒ¨ν•΄μ•Ό ν•œλ‹€.

 


일관성: λͺ¨λ“  νŠΈλžœμž­μ…˜μ€ 일관성 μžˆλŠ” λ°μ΄ν„°λ² μ΄μŠ€ μƒνƒœλ₯Ό μœ μ§€ν•΄μ•Ό ν•œλ‹€.

예λ₯Ό λ“€μ–΄ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ •ν•œ 무결성 μ œμ•½ 쑰건을 항상 λ§Œμ‘±ν•΄μ•Ό ν•œλ‹€.

 

 

격리성: λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” νŠΈλžœμž­μ…˜λ“€μ΄ μ„œλ‘œμ—κ²Œ 영ν–₯을 λ―ΈμΉ˜μ§€ μ•Šλ„λ‘ κ²©λ¦¬ν•œλ‹€.

예λ₯Ό λ“€μ–΄ λ™μ‹œμ— 같은 데이터λ₯Ό μˆ˜μ •ν•˜μ§€ λͺ»ν•˜λ„둝 ν•΄μ•Ό ν•œλ‹€.

격리성은 λ™μ‹œμ„±κ³Ό κ΄€λ ¨λœ μ„±λŠ₯ 이슈둜 인해 νŠΈλžœμž­μ…˜ 격리 μˆ˜μ€€ (Isolation level)을 선택할 수 μžˆλ‹€.

 


지속성: νŠΈλžœμž­μ…˜μ„ μ„±κ³΅μ μœΌλ‘œ 끝내면 κ·Έ κ²°κ³Όκ°€ 항상 κΈ°λ‘λ˜μ–΄μ•Ό ν•œλ‹€.

쀑간에 μ‹œμŠ€ν…œμ— λ¬Έμ œκ°€ λ°œμƒν•΄λ„ λ°μ΄ν„°λ² μ΄μŠ€ 둜그 등을 μ‚¬μš©ν•΄μ„œ μ„±κ³΅ν•œ νŠΈλžœμž­μ…˜ λ‚΄μš©μ„ 볡ꡬ해야 ν•œλ‹€.

 

 

 

νŠΈλžœμž­μ…˜μ€ μ›μžμ„±, 일관성, 지속성을 보μž₯ν•œλ‹€.

 

λ¬Έμ œλŠ” 격리성인데 νŠΈλžœμž­μ…˜ 간에 격리성을 μ™„λ²½νžˆ 보μž₯ν•˜λ €λ©΄ νŠΈλžœμž­μ…˜μ„ 거의 μˆœμ„œλŒ€λ‘œ μ‹€ν–‰ν•΄μ•Ό ν•œλ‹€.

 

μ΄λ ‡κ²Œ ν•˜λ©΄ λ™μ‹œ 처리 μ„±λŠ₯이 맀우 λ‚˜λΉ μ§„λ‹€. 이런 문제둜 인해 ANSI ν‘œμ€€μ€ νŠΈλžœμž­μ…˜μ˜ 격리 μˆ˜μ€€μ„ 4λ‹¨κ³„λ‘œ λ‚˜λˆ„μ–΄ μ •μ˜ν–ˆλ‹€.

 

 

 

νŠΈλžœμž­μ…˜ 격리 μˆ˜μ€€ - Isolation level

 

READ UNCOMMITED(μ»€λ°‹λ˜μ§€ μ•Šμ€ 읽기)

READ COMMITTED(μ»€λ°‹λœ 읽기)

REPEATABLE READ(반볡 κ°€λŠ₯ν•œ 읽기)

SERIALIZABLE(직렬화 κ°€λŠ₯)

 

 

 

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1/dashboard

 

μŠ€ν”„λ§ DB 1편 - 데이터 μ ‘κ·Ό 핡심 원리 - μΈν”„λŸ° | κ°•μ˜

λ°±μ—”λ“œ κ°œλ°œμ— ν•„μš”ν•œ DB 데이터 μ ‘κ·Ό κΈ°μˆ μ„ κΈ°μ΄ˆλΆ€ν„° μ΄ν•΄ν•˜κ³ , μ™„μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μŠ€ν”„λ§ DB μ ‘κ·Ό 기술의 원리와 ꡬ쑰λ₯Ό μ΄ν•΄ν•˜κ³ , 더 κΉŠμ΄μžˆλŠ” λ°±μ—”λ“œ 개발자둜 μ„±μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€., - κ°•μ˜

www.inflearn.com

 

μ €μž‘μžν‘œμ‹œ

'Spring > Spring DB' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[μŠ€ν”„λ§ DB 1편] - 6. DB 락  (0) 2023.03.19
[μŠ€ν”„λ§ DB 1편] - 5. λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° ꡬ쑰와 DB μ„Έμ…˜  (0) 2023.03.15
[μŠ€ν”„λ§ DB 1편] - 3. DataSource 이해  (0) 2023.03.14
[μŠ€ν”„λ§ DB 1편] - 2. 컀λ„₯μ…˜ν’€(Connection Pool)  (0) 2023.03.14
[μŠ€ν”„λ§ DB 1편] - 1. JDBC 이해  (0) 2023.03.13
'Spring/Spring DB' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [μŠ€ν”„λ§ DB 1편] - 6. DB 락
  • [μŠ€ν”„λ§ DB 1편] - 5. λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° ꡬ쑰와 DB μ„Έμ…˜
  • [μŠ€ν”„λ§ DB 1편] - 3. DataSource 이해
  • [μŠ€ν”„λ§ DB 1편] - 2. 컀λ„₯μ…˜ν’€(Connection Pool)
hello_u
hello_u
  • hello_u
    😜
    hello_u
  • 전체
    였늘
    μ–΄μ œ
    • 😜 (345)
      • Hardware (2)
        • BMC (2)
      • Spring (109)
        • Spring μž…λ¬Έ (20)
        • Spring κΈ°λ³Έ (27)
        • Spring MVC (18)
        • Spring DB (22)
        • Spring JPA κΈ°λ³Έ (16)
        • Spring JPA ν™œμš© (6)
      • Develop (27)
        • DB (8)
        • JAVA (4)
        • Web (2)
        • Python (7)
        • OSS (2)
        • Git (2)
        • API (2)
      • Algorithm (155)
        • CodeUp 기초 (44)
        • 파이썬 μ½”λ”©ν…ŒμŠ€νŠΈ (64)
        • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ (4)
        • SWEA (30)
        • Softeer (10)
        • BOJ (2)
      • CS (9)
        • μ»΄ν“¨ν„°μΌλ°˜ (3)
        • 운영체제 (3)
        • λ°μ΄ν„°λ² μ΄μŠ€ (0)
        • 정보톡신 (1)
        • 자료ꡬ쑰 (1)
        • μ†Œν”„νŠΈμ›¨μ–΄ 곡학 (1)
        • ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ (0)
        • μ΅œμ‹  λ””μ§€ν„Έ, μΌλ°˜μƒμ‹ (0)
      • 자격증 (41)
        • μ •λ³΄λ³΄μ•ˆκΈ°μ‚¬ (9)
        • μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬ (22)
        • λ¦¬λˆ…μŠ€λ§ˆμŠ€ν„° 1κΈ‰ (3)
        • SQLD (7)
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
hello_u
[μŠ€ν”„λ§ DB 1편] - 4. νŠΈλžœμž­μ…˜
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”