λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
CS/Database

μ‚¬μš©μžκ°€ κ²Œμ‹œλ¬Όμ„ μž‘μ„±ν•  λ•Œμ˜ νŠΈλžœμž­μ…˜ 처리

by 주발2 2021. 8. 5.
λ°˜μ‘ν˜•

πŸ“Ž  κΈ€λ˜ 6κΈ° ν¬μŠ€νŒ…

1. λ―ΈμΉ˜λ„λ‘ λ”μ› λ˜ 7μ›”μ˜ 회고

 

2. μ‚¬μš©μžκ°€ κ²Œμ‹œλ¬Όμ„ μž‘μ„±ν•  λ•Œμ˜ νŠΈλžœμž­μ…˜ 처리

 

3. Spring AOP - (1) ν”„λ‘μ‹œ νŒ¨ν„΄, λ°μ½”λ ˆμ΄ν„° νŒ¨ν„΄

 

4. [MySQL] - νŠΈλžœμž­μ…˜μ˜ κ²©λ¦¬ μˆ˜μ€€(Isolation level)

 

5. Spring AOP - (2) AOP κ°œλ… 및 μ‹€μŠ΅

 

6. μΈν…”λ¦¬μ œμ΄(IntelliJ) - 디버깅(Debugging) ν•˜κΈ°

 

7. [Java, λ””μžμΈνŒ¨ν„΄] - μ‹±κΈ€ν„΄ νŒ¨ν„΄(Singleton Pattern)

 

8. μ›”κ°„ μ½”λ“œλ¦¬λ·° Ver_0.1: 컀리어 μ„±μž₯ CODE μ„Έλ―Έλ‚˜ 정리

 

9. 포슀트맨(API ν…ŒμŠ€νŠΈ) ν™œμš©ν•˜κΈ°

 

10. λœ»κΉŠμ€ 2021λ…„ 회고

 


 

μ•ˆλ…•ν•˜μ„Έμš”, μ–Όλ§ˆ μ „ λ©΄μ ‘μ—μ„œ λ‹€μŒκ³Ό 같은 μ§ˆλ¬Έμ„ 받은 적이 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

 

"μ‚¬μš©μžκ°€ κ²Œμ‹œλ¬Όμ„ μž‘μ„±ν•˜κ³ , 파일 μ—…λ‘œλ“œλ₯Ό ν•œ ν›„ μ €μž₯을 ν•  λ•Œ νŠΈλžœμž­μ…˜μ„ μ–΄λ–»κ²Œ μ²˜λ¦¬ν•΄ μ£ΌλŠ” 것이 μ’‹μ„κΉŒμš”?"

 

μœ„μ™€ 같은 μ§ˆλ¬Έμ— λŒ€ν•΄ 무엇이 쒋은 λ°©λ²•μΌκΉŒ? λΌλŠ” 고민은 ν•΄ λ³Έ 적이 μ—†μ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€.

그러던 쀑 Real MySQL λ„μ„œμ˜ νŠΈλžœμž­μ…˜ 뢀뢄을 읽게 λ˜μ—ˆκ³ , ν•΄λ‹Ή μ±•ν„°μ—μ„œ μœ„ μ§ˆλ¬Έμ— λŒ€ν•œ 닡을 μ•Œ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

 

λ”°λΌμ„œ ν•΄λ‹Ή ν¬μŠ€νŒ…μ€ λ„μ„œμ˜ λ‚΄μš©μ„ λ°”νƒ•μœΌλ‘œ μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€ πŸ˜ƒ

 

 

πŸ“Ž  νŠΈλžœμž­μ…˜

νŠΈλžœμž­μ…˜μ€ μž‘μ—…μ˜ 완전성을 보μž₯ν•΄μ£ΌλŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

즉, 논리적인 μž‘μ—…μ…‹μ„ λͺ¨λ‘ μ™„λ²½ν•˜κ²Œ μ²˜λ¦¬ν•˜κ±°λ‚˜ λ˜λŠ” μ²˜λ¦¬ν•˜μ§€ λͺ»ν•  κ²½μš°μ—λŠ” 원 μƒνƒœλ‘œ λ³΅κ΅¬ν•΄μ„œ

μž‘μ—…μ˜ μΌλΆ€λ§Œ μ μš©λ˜λŠ” ν˜„μƒ(Partial Update)이 λ°œμƒν•˜μ§€ μ•Šκ²Œ λ§Œλ“€μ–΄μ£ΌλŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€.

 

νŠΈλžœμž­μ…˜μ΄λž€ κ°œλ…μ˜ 예제둜 은행 μž…μΆœκΈˆ 문제둜 많이 λΉ„μœ λ₯Ό ν•˜κ³€ ν•©λ‹ˆλ‹€.

 

예λ₯Ό λ“€λ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

은행 μž…μΆœκΈˆ

1. AλΌλŠ” μ€ν–‰μ—μ„œ BλΌλŠ” μ€ν–‰μœΌλ‘œ μ†‘κΈˆμ„ ν•˜λŠ” μƒν™©μž…λ‹ˆλ‹€.

2. A -> B둜 μ†‘κΈˆν•˜λŠ” 도쀑 였λ₯˜κ°€ λ°œμƒν•˜μ—¬ A은행 κ³„μ’Œμ—μ„œλŠ” 좜금이 λ˜μ—ˆμ§€λ§Œ, B은행 κ³„μ’Œμ—λŠ” μž…κΈˆμ΄ λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

3. μ΄λ•Œ ν•΄κ²°ν•  수 μžˆλŠ” 방법은 A은행 κ³„μ’Œμ˜ μΆœκΈˆμ„ μ·¨μ†Œν•˜κ±°λ‚˜, 좜금된 κΈˆμ•‘λ§ŒνΌ B은행 κ³„μ’Œμ— μž…κΈˆμ„ μ‹œμΌœμ£Όλ©΄ λ©λ‹ˆλ‹€.

4. ν•˜μ§€λ§Œ, 3번의 방법은 더 번거둜울 λΏλ”λŸ¬ λ§Œμ•½ λ˜λ‹€μ‹œ 였λ₯˜κ°€ λ°œμƒν•œλ‹€λ©΄? 더 μ‹¬ν•œ 였λ₯˜λ₯Ό μ•ΌκΈ°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

5. λ”°λΌμ„œ, μœ„μ™€ 같이 A은행 κ³„μ’Œμ˜ 좜금과 B은행 κ³„μ’Œμ˜ μž…κΈˆ λͺ¨λ“  κ±°λž˜κ°€ μ„±κ³΅μ μœΌλ‘œ λλ‚˜μ•Ό

이λ₯Ό μ™„μ „ν•œ 거래둜 μΈμ •ν•˜κ³ (μž‘μ—…μ˜ μ™„μ „μ„±), 거래λ₯Ό ν•˜λŠ” 도쀑 였λ₯˜κ°€ λ°œμƒν–ˆλ‹€λ©΄ ν•΄λ‹Ή 거래λ₯Ό ν•˜κΈ° μ „μœΌλ‘œ λ˜λŒλ¦½λ‹ˆλ‹€.

6. 5번과 같이 거래(μž‘μ—…)의 μ•ˆμ •μ„±μ„ 보μž₯ν•΄μ£ΌλŠ” 방법이 νŠΈλžœμž­μ…˜μž…λ‹ˆλ‹€.

7. λ°μ΄ν„°λ² μ΄μŠ€μ˜ κ΄€μ μ—μ„œλŠ” 데이터λ₯Ό μž…λ ₯, κ°±μ‹ , μ‚­μ œ λ“±μ˜ CRUD μž‘μ—…μ„ ν•˜λŠ” 도쀑

였λ₯˜κ°€ λ°œμƒν•˜λ©΄ μž‘μ—… μ „μ˜ μ›μƒνƒœλ‘œ λ˜λŒλ¦½λ‹ˆλ‹€.

8. λ°μ΄ν„°λ² μ΄μŠ€μ˜ 처리 과정이 μ™„μ „νžˆ 보μž₯λ˜μ—ˆμ„ λ•Œλ§Œ μ΅œμ’…μ μœΌλ‘œ λ°μ΄ν„°λ² μ΄μŠ€μ— λ°˜μ˜μ„ ν•©λ‹ˆλ‹€.

νŠΈλžœμž­μ…˜μ— λŒ€ν•œ μ„€λͺ…은 κ°„λ‹¨νžˆ ν•˜κ³  λ‹€μŒμœΌλ‘œ λ„˜μ–΄κ°€κ² μŠ΅λ‹ˆλ‹€ πŸ˜‚

 

νŠΈλžœμž­μ…˜μ— λŒ€ν•œ μΆ”κ°€ μ„€λͺ…은 μ•„λž˜ λΈ”λ‘œκ·Έλ₯Ό μ°Έκ³ ν•΄μ£Όμ„Έμš” :)

 

 

 

 

πŸ“Ž  μ‚¬μš©μžκ°€ κ²Œμ‹œλ¬Όμ„ μž‘μ„±ν•  λ•Œμ˜ νŠΈλžœμž­μ…˜ μ²˜λ¦¬

ν¬μŠ€νŒ…μ˜ 제λͺ©μ— λŒ€ν•΄ 정리λ₯Ό ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. 상황은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.
'μ‚¬μš©μžκ°€ κ²Œμ‹œνŒμ— κ²Œμ‹œλ¬Όμ„ μž‘μ„±(μ²¨λΆ€νŒŒμΌ μ—…λ‘œλ“œ)ν•œ ν›„ μ €μž₯ λ²„νŠΌμ„ ν΄λ¦­ν–ˆμ„ λ•Œ μ„œλ²„μ—μ„œ μ²˜λ¦¬ν•˜λŠ” λ‚΄μš©'

(μ‹€μ œλ‘œλŠ” μ•„λž˜ λ‚΄μš©λ³΄λ‹€ 훨씬 λ³΅μž‘ν•˜κ² μ§€λ§Œ, λ‹¨μˆœν™”ν•œ κ³Όμ •μž…λ‹ˆλ‹€.)

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

1) 처리 μ‹œμž‘

  - λ°μ΄ν„°λ² μ΄μŠ€ 컀λ„₯μ…˜ 생성

  - νŠΈλžœμž­μ…˜ μ‹œμž‘

2) μ‚¬μš©μžμ˜ 둜그인 μ—¬λΆ€ 확인

3) μ‚¬μš©μžμ˜ κΈ€μ“°κΈ° λ‚΄μš©μ˜ 였λ₯˜ μ—¬λΆ€ 확인

4) μ²¨λΆ€λ‘œ μ—…λ‘œλ“œλœ 파일 확인 및 μ €μž₯

5) μ‚¬μš©μžμ˜ μž…λ ₯ λ‚΄μš©μ„ DBMS에 μ €μž₯

6) 첨뢀 파일 정보λ₯Ό DBMS에 μ €μž₯

7) μ €μž₯된 λ‚΄μš© λ˜λŠ” 기타 정보λ₯Ό DBMS에 쑰회

8) κ²Œμ‹œλ¬Ό 등둝에 λŒ€ν•œ μ•Œλ¦Ό 메일 λ°œμ†‘

9) μ•Œλ¦Ό 메일 λ°œμ†‘ 이λ ₯을 DBMS에 μ €μž₯

  - νŠΈλžœμž­μ…˜ μ’…λ£Œ(COMMIT)

  - λ°μ΄ν„°λ² μ΄μŠ€ 컀λ„₯μ…˜ λ°˜λ‚©

10) 처리 μ™„λ£Œ

μœ„ 처리 κ³Όμ •μ—μ„œ DBMS의 νŠΈλžœμž­μ…˜ μ²˜λ¦¬μ— 쒋지 μ•Šμ€ 영ν–₯을 λΌμΉ˜λŠ” 뢀뢄을 λ‚˜λˆ μ„œ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

  • λ°μ΄ν„°λ² μ΄μŠ€μ˜ 컀λ„₯μ…˜μ„ μƒμ„±ν•˜λŠ” μ½”λ“œλ₯Ό 1번과 2번 사이에 κ΅¬ν˜„ν•©λ‹ˆλ‹€. 그리고 9번과 10번 μ‚¬μ΄μ—μ„œ νŠΈλžœμž­μ…˜μ„ COMMITν•˜κ³  컀λ„₯μ…˜μ„ μ’…λ£Œ(λ˜λŠ” 컀λ„₯μ…˜ ν’€λ‘œ λ°˜λ‚©)ν•©λ‹ˆλ‹€. μ‹€μ œ DBMS에 데이터λ₯Ό μ €μž₯ν•˜λŠ” μž‘μ—…(νŠΈλžœμž­μ…˜)은 5번(μ‚¬μš©μžμ˜ μž…λ ₯ λ‚΄μš©μ„ DBMS에 μ €μž₯)λΆ€ν„° μ‹œμž‘μ΄ λ©λ‹ˆλ‹€. λ”°λΌμ„œ 2번과 3번의 과정이 아무리 빨리 μ²˜λ¦¬κ°€ λœλ‹€κ³  ν•˜λ”λΌλ„ DBMS의 νŠΈλžœμž­μ…˜μœΌλ‘œ ν¬ν•¨μ‹œν‚¬ ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€. 보톡 λ°μ΄ν„°λ² μ΄μŠ€ 컀λ„₯μ…˜μ€ κ°œμˆ˜κ°€ μ œν•œμ μ΄κΈ° λ•Œλ¬Έμ— 각 λ‹¨μœ„μ˜ ν”„λ‘œκ·Έλž¨μ΄ 컀λ„₯μ…˜μ„ μ†Œμœ ν•˜λŠ” μ‹œκ°„μ΄ κΈΈμ–΄μ§ˆμˆ˜λ‘ μ‚¬μš© κ°€λŠ₯ν•œ μ—¬μœ  컀λ„₯μ…˜μ˜ κ°œμˆ˜λ˜ν•œ 쀄어듀 κ²ƒμž…λ‹ˆλ‹€. 그리고 μ–΄λŠ μˆœκ°„μ—λŠ” 각 λ‹¨μœ„μ˜ ν”„λ‘œκ·Έλž¨μ—μ„œ 컀λ„₯μ…˜μ„ κ°€μ Έκ°€κΈ° μœ„ν•΄ κΈ°λ‹€λ €μ•Ό ν•˜λŠ” 상황이 λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

  • μœ„ κ³Όμ •μ—μ„œ 더 μœ„ν—˜ν•œ 뢀뢄은 8번 μž‘μ—…μΈ 'κ²Œμ‹œλ¬Ό 등둝에 λŒ€ν•œ μ•Œλ¦Ό 메일 λ°œμ†‘' μž…λ‹ˆλ‹€. 메일 μ „μ†‘μ΄λ‚˜ FTP 파일 전솑 μž‘μ—… 및 λ„€νŠΈμ›Œν¬λ₯Ό 톡해 원격 μ„œλ²„μ™€ ν†΅μ‹ ν•˜λŠ” μž‘μ—…μ€ DBMS의 νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œ μ œκ±°ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λŠ” λ™μ•ˆ λ©”일 μ„œλ²„μ™€ 톡신할 수 μ—†λŠ” 상황이 λ°œμƒν•œλ‹€λ©΄ μ›Ή μ„œλ²„λΏλ§Œ μ•„λ‹ˆλΌ DBMS μ„œλ²„κΉŒμ§€ μœ„ν—˜ν•΄μ§€λŠ” 상황이 λ°œμƒν•  수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

 

 

λ”°λΌμ„œ μœ„ 처리 κ³Όμ •μ—μ„œ ν•„μš”ν•œ DBMS의 μž‘μ—…μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  • μ‚¬μš©μžκ°€ μž…λ ₯ν•œ 정보λ₯Ό μ €μž₯ν•˜λŠ” 5번과 6번 μž‘μ—…μ€ λ°˜λ“œμ‹œ ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜μœΌλ‘œ λ¬ΆμŠ΅λ‹ˆλ‹€.
  • 7번 μž‘μ—…μ€ λ‹¨μˆœ λ°μ΄ν„°μ˜ 확인 및 μ‘°νšŒμ΄λ―€λ‘œ νŠΈλžœμž­μ…˜μ— 포함할 ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€.
  • 9번 μž‘μ—…μ˜ 경우 쑰금 성격이 λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— 이전 νŠΈλžœμž­μ…˜(5번, 6번)κ³Ό 묢지 μ•Šκ³  λ³„λ„μ˜ νŠΈλžœμž­μ…˜μœΌλ‘œ λΆ„λ¦¬ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

 

 

μœ„μ˜ λ‚΄μš©λ“€μ„ μ μš©ν•΄μ„œ 처리 과정을 λ‹€μ‹œ 섀계해보면 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

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

1) 처리 μ‹œμž‘

2) μ‚¬μš©μžμ˜ 둜그인 μ—¬λΆ€ 확인

3) μ‚¬μš©μžμ˜ κΈ€μ“°κΈ° λ‚΄μš©μ˜ 였λ₯˜ μ—¬λΆ€ 확인

4) μ²¨λΆ€λ‘œ μ—…λ‘œλ“œλœ 파일 확인 및 μ €μž₯

  - λ°μ΄ν„°λ² μ΄μŠ€ 컀λ„₯μ…˜ 생성(λ˜λŠ” 컀λ„₯μ…˜ ν’€μ—μ„œ κ°€μ Έμ˜€κΈ°)

  - νŠΈλžœμž­μ…˜ μ‹œμž‘

5) μ‚¬μš©μžμ˜ μž…λ ₯ λ‚΄μš©μ„ DBMS에 μ €μž₯

6) 첨뢀 파일 정보λ₯Ό DBMS에 μ €μž₯

  - νŠΈλžœμž­μ…˜ μ’…λ£Œ(COMMIT)

7) μ €μž₯된 λ‚΄μš© λ˜λŠ” 기타 정보λ₯Ό DBMS에 쑰회

8) κ²Œμ‹œλ¬Ό 등둝에 λŒ€ν•œ μ•Œλ¦Ό 메일 λ°œμ†‘

  - νŠΈλžœμž­μ…˜ μ‹œμž‘

9) μ•Œλ¦Ό 메일 λ°œμ†‘ 이λ ₯을 DBMS에 μ €μž₯

  - νŠΈλžœμž­μ…˜ μ’…λ£Œ(COMMIT)

  - λ°μ΄ν„°λ² μ΄μŠ€ 컀λ„₯μ…˜ μ’…λ£Œ λ˜λŠ” 컀λ„₯μ…˜ 풀에 λ°˜λ‚©

10) 처리 μ™„λ£Œ

λ¬Όλ‘  μœ„μ˜ μ˜ˆμ œκ°€ 졜적의 νŠΈλžœμž­μ…˜ μ„€κ³„λŠ” 아닐 수 있으며, 업무 μš”κ±΄μ— 따라 λ‹¬λΌμ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

μœ„μ—μ„œ μ„€λͺ…ν•˜λ €λŠ” λ°”λŠ” ν”„λ‘œκ·Έλž¨μ˜ μ½”λ“œκ°€ λ°μ΄ν„°λ² μ΄μŠ€ 컀λ„₯μ…˜μ„ 가지고 μžˆλŠ” λ²”μœ„μ™€ νŠΈλžœμž­μ…˜μ΄ ν™œμ„±ν™”λ˜μ–΄ μžˆλŠ” ν”„λ‘œκ·Έλž¨μ˜ λ²”μœ„λ₯Ό μ΅œμ†Œν™” ν•΄μ•Ό ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

λ˜ν•œ ν”„λ‘œκ·Έλž¨μ˜ μ½”λ“œ 라인 μˆ˜λŠ” ν•œλ‘ 쀄 이더라도, 메일 μ „μ†‘μ΄λ‚˜ FTP파일 전솑 λ“±μ˜ λ„€νŠΈμ›Œν¬ μž‘μ—…μ΄ μžˆλŠ” 경우 λ°˜λ“œμ‹œ νŠΈλžœμž­μ…˜μ—μ„œ 배제λ₯Ό ν•΄ μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€.

μœ„μ™€ 같은 μ‹€μˆ˜λ‘œ 인해 DBMS μ„œλ²„κ°€ 높은 λΆ€ν•˜ μƒνƒœλ‘œ λΉ μ§€κ±°λ‚˜ μœ„ν—˜ν•œ μƒνƒœμ— λΉ μ§€λŠ” κ²½μš°κ°€ 빈번히 λ‚˜νƒ€λ‚œλ‹€κ³  ν•©λ‹ˆλ‹€.

 

λ°˜μ‘ν˜•

λŒ“κΈ€