2021-05-25(Tue)

Facts (사싀, 객관)

μ½”λ“œμˆ¨ 4μ£Όμ°¨ κ°•μ˜λ₯Ό μˆ˜κ°•ν•˜μ˜€λ‹€.

Feelings (λŠλ‚Œ, μ£Όκ΄€)

이전에 μœ€μ„ νŠΈλ ˆμ΄λ„ˆλ‹˜ 덕에 repository 객체둜 관심을 λΆ„λ¦¬ν•˜λŠ” μˆ˜μ€€μœΌλ‘œ μ½”λ“œλ₯Ό λ°œμ „ μ‹œμΌ°λŠ”λ°, μ•„μƒ¬λ‹˜μ΄ κ°•μ˜μ—μ„œ 같은 νλ¦„μœΌλ‘œ κ΅¬ν˜„ν•˜μ‹œλŠ”κ±Έ 보고 괜히 λΏŒλ“―ν–ˆλ‹€.

ν•œνŽΈ λ‚΄κ°€ 아직 상속과 κ΅¬ν˜„μ— λŒ€ν•œ κ°œλ…μ΄ λΆ€μ‘±ν•œ 것을 λŠκΌˆλ‹€. CrudRepository와 TaskRepositoryλ₯Ό λͺ¨λ‘ μƒμ†ν•œ JpaTaskRepositoryλ₯Ό InMemoryTaskRepository에 κ΅¬ν˜„ν•˜λŠ” λΆ€λΆ„μ—μ„œ ν˜Όλž€μ΄ μ°Ύμ•„μ™”λ‹€.

두 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒμ†ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” κ²ƒμ΄λ‹ˆ, 두 μΈν„°νŽ˜μ΄μŠ€μ— μ†ν•œ λͺ¨λ“  λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•΄μ•Όν•  것 같은데, κ°•μ˜μ—μ„œλŠ” μΌλΆ€λ§Œ κ΅¬ν˜„ν•œ κ²ƒμ²˜λŸΌ λ³΄μ˜€κΈ° λ•Œλ¬Έμ΄λ‹€. 흠 μ•„λ§ˆ λ‚΄κ°€ μ°©κ°ν•œ 것 같은데, 내일 λ³΅μŠ΅ν•΄λ΄μ•Όκ² λ‹€.

JPAκ°€ λŠ₯μˆ™ν•˜μ§€ μ•Šμ€λ°, 이번 주에 많이 λ°°μ›Œμ•Όκ² λ‹€.

Findings (배운 점)

μ˜€λ²„λΌμ΄λ”©μ— λŒ€ν•œ μ˜€ν•΄

μ•„μƒ¬λ‹˜μ΄ Iterable을 λ¦¬ν„΄ν•˜λŠ” λ©”μ†Œλ“œλ₯Ό Listλ₯Ό λ¦¬ν„΄ν•˜λŠ” λ©”μ†Œλ“œλ‘œ μ˜€λ²„λΌμ΄λ”©ν•˜λŠ” 것을 보며 λ‚΄κ°€ μ˜€λ²„λΌμ΄λ”©μ„ μ œλŒ€λ‘œ λͺ¨λ₯΄λŠ” 것을 λŠκ»΄μ„œ λ‹€μ‹œ ν›‘μ–΄λ³΄μ•˜λ‹€.

결과적으둜 μ˜€λ²„λΌμ΄λ”©μ— λŒ€ν•΄μ„œ μ˜€ν•΄ν•˜κ³  μžˆμ—ˆλ‹€.

λ‚΄κ°€ μ•Œκ³  μžˆλ˜μ˜€λ²„λΌμ΄λ”©μ˜ 쑰건은 λ‹€μŒκ³Ό κ°™μ•˜λ‹€.

μžμ† ν΄λž˜μŠ€μ—μ„œ μ˜€λ²„λΌμ΄λ”©ν•˜λŠ” λ©”μ„œλ“œλŠ” 쑰상 클래슀의 λ©”μ„œλ“œμ™€

  • 이름이 κ°™μ•„μ•Ό ν•œλ‹€.

  • λ§€κ°œλ³€μˆ˜κ°€ κ°™μ•„μ•Ό ν•œλ‹€.

  • λ°˜ν™˜νƒ€μž…μ΄ κ°™μ•„μ•Ό ν•œλ‹€.

그런데 JDK1.5λΆ€ν„°λŠ” '곡변 λ°˜ν™˜νƒ€μž…(covariant return type)'이 μΆ”κ°€λ˜μ–΄, λ°˜ν™˜νƒ€μž…μ„ μžμ† 클래슀의 νƒ€μž…μœΌλ‘œ λ³€κ²½ν•˜λŠ” 것이 κ°€λŠ₯ν•˜λ„λ‘ 쑰건이 μ™„ν™” λ˜μ—ˆλ‹€λŠ” 것을 μ•Œκ²Œ λ˜μ—ˆλ‹€.

클린 μ•„ν‚€ν…μ²˜

μœ„ 클린 μ•„ν‚€ν…μ²˜μ—μ„œλŠ” 관심사에 따라 layerλ₯Ό λ‚˜λˆ„μ—ˆλ‹€. μ˜μ‘΄μ„±μ˜ λ°©ν–₯을 관리해야 ν•˜λŠ”λ°, μ˜μ‘΄μ„±μ΄ λ°”κΉ₯ μ›μ—μ„œ μ•ˆμœΌλ‘œ ν–₯ν•˜λ„λ‘ κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€. 도메인 layerλŠ” μœ„ 그림의 엔티티에 ν•΄λ‹Ήν•œλ‹€.

의쑴 λ°©ν–₯을 μ•Œμ•„λ‚΄κΈ° μœ„ν•΄ μ½”λ“œλ₯Ό 고치고 였λ₯˜λ₯Ό ν™•μΈν•˜λŠ” ν…Œν¬λ‹‰μ„ λ°°μ› λ‹€.

μ°Έκ³ 

JPA

Jav의 ORM 기술 ν‘œμ€€μœΌλ‘œ, μΈν„°νŽ˜μ΄μŠ€μ˜ λͺ¨μŒμ΄λ‹€. Spring data ν”„λ‘œμ νŠΈ 쀑 JPAλ₯Ό ν™œμš©ν•œ ν”„λ‘œμ νŠΈμΈ Spring data JPAλ₯Ό ν•™μŠ΅ν–ˆλ‹€. JPA의 μ—”ν‹°ν‹°λŠ” DB의 엔티티와 μœ μ‚¬ν•˜λ‹€. 보톡 ν…Œμ΄λΈ” ν•˜λ‚˜κ°€ 객체 ν•˜λ‚˜μ™€ λŒ€μ‘λ˜λŠ” ν˜•νƒœλ‹€.

μ°Έκ³ 

ν…ŒμŠ€νŠΈλŠ”?

@DataJpaTest 둜 μ‹€μ œ JPA에 μ—°κ²°μ‹œν‚€κ±°λ‚˜, λͺ©ν‚Ήν•˜λ©΄ λœλ‹€.

ν•œνŽΈ μ±…μž„μ„ λΆ„λ¦¬ν–ˆκΈ° λ•Œλ¬Έμ—, saveκ°€ μ„±κ³΅ν–ˆμ„ λ•Œ task의 κ°œμˆ˜κ°€ λ‹¬λΌμ§€λŠ” 것은 TaskServiceκ°€ μ•„λ‹ˆλΌ Respository 클래슀의 ν…ŒμŠ€νŠΈμ—μ„œ κ²€μ¦ν•˜λŠ” 것이 λ°”λžŒμ§ν•œ 것 κ°™λ‹€.

ν•œνŽΈ resources 디렉토리 μ•ˆμ— application.yml νŒŒμΌμ„ λ§Œλ“€μ–΄μ„œ DB 연결을 λͺ…μ‹œν•  수 μžˆλ‹€.

Affimation (자기 μ„ μ–Έ)

  • λ‚˜λŠ” ν•˜λ£¨ν•˜λ£¨ μ„±μž₯ν•˜λŠ” κ°œλ°œμžλ‹€.

Last updated