λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

λ„μ„œ/개발

[회고] 2024λ…„ ν•œ ν•΄λ™μ•ˆ 읽은 μ±…

였브젝트

객체지ν–₯을 κ³΅λΆ€ν•œλ‹€λ©΄ 빠질 수 μ—†λŠ” μ±…, γ€Šμ˜€λΈŒμ νŠΈγ€‹λ₯Ό μ½μ—ˆλ‹€.

 

"μ—­ν• ,μ±…μž„,ν˜‘λ ₯" 을 μ–΄λ–»κ²Œ κ΅¬ν˜„ν•˜μ§€?

처음 읽을 λ•ŒλŠ” Spring을 μ‚¬μš©ν•΄ λ³Έ 적이 μ—†μ–΄ 예제쑰차 μ΄ν•΄ν•˜κΈ° μ–΄λ €μ› λ‹€. μ—­ν• , μ±…μž„, ν˜‘λ ₯에 λŒ€ν•œ κ°œλ…μ„ κΈ€λ‘œλ§Œ μ½μ—ˆμ„ 뿐, μ‹€μ œ μ½”λ“œλ‘œ κ΅¬ν˜„ν•˜λŠ” 것은 감이 μ˜€μ§€ μ•Šμ•˜λ‹€.

 

두 번째 읽을 λ•ŒλŠ” μ—­ν• , μ±…μž„, ν˜‘λ ₯의 κ°œλ…μ„ 이해할 수 μžˆμ—ˆμ§€λ§Œ, "λ©”μ‹œμ§€λ₯Ό λˆ„κ°€ μš”μ²­ν•˜κ³ , μ–΄λ””λ‘œ 보내야 ν• κΉŒ?" 같은 κ΅¬ν˜„ 레벨의 고민이 λ‚¨μ•˜λ‹€. λ‹€ν–‰νžˆ μ±…μ—μ„œλŠ” 정보 μ „λ¬Έκ°€ νŒ¨ν„΄μ„ ν™œμš©ν•΄ μ‰½κ²Œ κ΅¬ν˜„ν•˜λŠ” 방법을 μ†Œκ°œν•œλ‹€. 덕뢄에 κ΅¬ν˜„μ— λŒ€ν•œ 감각을 μ‘°κΈˆμ”© 읡힐 수 μžˆμ—ˆλ‹€.

 

섀계와 κ΅¬ν˜„κ°„μ˜ 이해 간극을 쒁히기 μœ„ν•΄ 책을 λ°˜λ³΅ν•΄μ„œ μ½μ„μˆ˜λ‘, ν˜‘λ ₯이 μ•„λ‹Œ λ©”μ‹œμ§€λΆ€ν„° κ΅¬ν˜„ν•˜λŠ” 것이 νŽΈν•˜λ‹¨ 것을 느끼게 λ˜μ—ˆλ‹€. 그리고, λ‹€μŒκ³Ό 같이 μ •λ¦¬ν•˜κ²Œ λ˜μ—ˆλ‹€. 

  • 섀계: μ—­ν• , μ±…μž„, ν˜‘λ ₯을 μƒκ°ν•˜λ©° λ©”μ‹œμ§€λ₯Ό λ³΄λ‚΄λŠ” 것뢀터 μ‹œμž‘ν•˜λŠ” Top-Down 방식
  • κ΅¬ν˜„: λ©”μ‹œμ§€λ₯Ό μˆ˜ν–‰ν•  μ΅œμ†Œ λ‹¨μœ„λΆ€ν„° μž‘μ„±ν•˜λŠ” Bottom-Up 방식

λ˜ν•œ, 이 방식은 μš°μ•„ν•œ ATDD(1μ‹œκ°„ 5λΆ„ 30초~ 1μ‹œκ°„ 9λΆ„)μ—μ„œλ„ μ†Œκ°œλœ 것을 λ°œκ²¬ν–ˆλ‹€.

 

그리고, κΈ°μ–΅ν•˜κ³  싢은 λ‚΄μš©λ“€μ€ λ”°λ‘œ λ…Έμ…˜μ— μ •λ¦¬ν•˜κΈ°λ„ ν–ˆλ‹€.

였브젝트λ₯Ό 읽으며 μ •λ¦¬ν•œ λ‚΄μš©

인곡 FACTORY λ₯Ό ν™œμš©ν•΄ μ˜μ‘΄μ„± κ΄€λ¦¬ν•˜κΈ°

인곡 FACTORY λ₯Ό ν™œμš©ν•΄ μ½”λ“œμŠ€μΏΌλ“œ HTTP μ›Ήμ„œλ²„ λ―Έμ…˜μ„  μˆ˜ν–‰ν–ˆλ‹€. ν˜‘λ ₯ν•˜λŠ” κ°μ²΄λ“€λΌλ¦¬λŠ” 직접 객체λ₯Ό μƒμ„±ν•˜λŠ” 것이 μ•„λ‹ˆλΌ "객체λ₯Ό μ‚¬μš©"만 ν•  수 μžˆλ„λ‘ μ„€κ³„ν–ˆλ‹€.

κ·Έλ ‡κ²Œ, κ΅¬μ²΄ν΄λž˜μŠ€λŠ” 좔상적인 κ²ƒμ—κ²Œλ§Œ μ˜μ‘΄ν•˜κ²Œ λ˜μ—ˆκ³ , ꡬ체클래슀 생성을 λ‹΄λ‹Ήν•˜λŠ” 역할을 인곡 FACTORYμ—κ²Œ λ„˜κΈ°κ²Œ λ˜μ—ˆλ‹€.

 

ν•˜μ§€λ§Œ, νŒ¨ν‚€μ§€ κ΅¬μ‘°κΉŒμ§€ κ³ λ €ν•œ μ˜μ‘΄μ„± 관리가 쉽지 μ•Šμ•˜κ³ , μ—¬μ „νžˆ λΆ€μ‘±ν•œ 점이 μžˆμŒμ„ λŠκΌˆλ‹€.

HTTPμ›Ή μ„œλ²„ λ―Έμ…˜ Class 섀계도

κ·Έλ ‡μ§€λ§Œ, 이 κ΅¬ν˜„μ„ 톡해 Spring Contextκ°€ DIλ₯Ό 톡해 DIPλ₯Ό μ‰½κ²Œ μ§€μ›ν•΄μ£ΌλŠ” 것을 μ΄ν•΄ν•˜λŠ” 데도 큰 도움이 됐닀. 그리고, 인곡 FACTORYλ₯Ό μ μš©ν•˜λ©° Spring Contextκ°€ γ€Šμ˜€λΈŒμ νŠΈγ€‹μ—μ„œ λ§ν•˜λŠ” 인곡 FACTORY 와 μœ μ‚¬ν•˜λ‹€κ³  λŠκΌˆλ‹€.

 

μΆ”κ°€λ‘œ, OOPλ₯Ό μœ„ν•΄ μ˜€λΈŒμ νŠΈμ™€ ν•¨κ»˜ μ‘°μ˜ν˜Έλ‹˜ μ„Έλ―Έλ‚˜ λ₯Ό λ³΄λŠ” 것을 μΆ”μ²œλ“œλ¦°λ‹€.

μ΄λ ‡κ²Œ λ…Έλ ₯ν•˜λ‹€ 보면 νŠΈλžœμž­μ…˜ 슀크립트 νŒ¨ν„΄μ΄ μ•„λ‹Œ 도메인 λͺ¨λΈ νŒ¨ν„΄μ— ν•œ κ±ΈμŒμ”© λ‹€κ°€κ°ˆ 수 μžˆμ§€ μ•Šμ„κΉŒ? 생각해본닀.

 

λ‚΄ μ½”λ“œκ°€ κ·Έλ ‡κ²Œ μ΄μƒν•œκ°€μš”?

이 μ±… μ—­μ‹œ 2024λ…„ μ½”λ“œμŠ€μΏΌλ“œλ₯Ό λ‹€λ‹ˆλ©΄μ„œ 객체지ν–₯ 섀계λ₯Ό κ³΅λΆ€ν•˜κΈ° μœ„ν•΄ μ½μ—ˆλ‹€. 마침 μš°μ•„ν•œν˜•μ œλ“€μ˜ μŠ€ν„°λ”” λͺ©λ‘μ—λ„ ν¬ν•¨λ˜μ–΄ μžˆμ–΄ μžμ—°μŠ€λŸ½κ²Œ μ„ νƒν•˜κ²Œ λ˜μ—ˆλ‹€. μ½μœΌλ©΄μ„œ κ°€μž₯ 인상 κΉŠμ—ˆλ˜ 두 가지가 μžˆλ‹€.

 

1. 클래슀 λͺ…은 "쑴재"κ°€ μ•„λ‹ˆλΌ "λͺ©μ "을 기반으둜 μ§“κΈ°μ˜€λ‹€. μ•„λž˜ ν‘œμ²˜λŸΌ 말이닀.

쑴재 기반 λͺ©μ  기반
μ£Όμ†Œ λ°œμ†‘μ§€, 배솑지, 업무지
κΈˆμ•‘ 청ꡬ κΈˆμ•‘, μ†ŒλΉ„μ„Έμ•‘, 캠페인 할인 κΈˆμ•‘
μ‚¬μš©μž 계정, 개인 ν”„λ‘œν•„, 직무
μƒν’ˆ μ˜ˆμ•½ μƒν’ˆ, μž…κ³  μƒν’ˆ, μ£Όλ¬Έ μƒν’ˆ

이처럼 좔상적인 μ΄λ¦„λ³΄λ‹€λŠ”, λ„λ©”μΈμ—μ„œ ν•΄λ‹Ή 객체가 μˆ˜ν–‰ν•˜λŠ” 역할을 λͺ…ν™•ν•˜κ²Œ ν‘œν˜„ν•˜λŠ” 것이 더 직관적인 μ„€κ³„λ‘œ 이어진닀.

 

2. "λͺ©μ μ–΄" κ°œλ…μ„ λ‚˜νƒ€λ‚΄λŠ” 클래슀λ₯Ό λ”°λ‘œ λ§Œλ“€κΈ°"

예λ₯Ό λ“€μ–΄, addItemToParty( ) λΌλŠ” λ©”μ„œλ“œκ°€ μžˆλ‹€λ©΄ PartyItems λΌλŠ” 클래슀λ₯Ό λ§Œλ“€κ³ , add λ©”μ„œλ“œ μ •μ˜λ₯Ό ν•˜λ©΄ λœλ‹€.

 

이 책은 클래슀λͺ…κ³Ό λ©”μ„œλ“œλͺ…을 μ–΄λ–»κ²Œ μ§“λŠ” 것이 쒋은지, 그리고 '읽기 쒋은 μ½”λ“œ'λž€ 무엇인지 κ³ λ―Όν•˜λŠ” 과정을 μ†Œκ°œν•œλ‹€. λΆ„λŸ‰λ„ λ§Žμ§€ μ•Šκ³  μ„€λͺ…도 직관적이라 κ°€λ³κ²Œ 읽기에 μ’‹μ•˜κ³ , μ‹€μ œλ‘œ μ½”λ“œμ— μ μš©ν•΄λ³΄λ©° λ§Žμ€ 도움이 λ˜μ—ˆλ‹€

 

λͺ¨λ˜ μžλ°” 인 μ•‘μ…˜

 

λžŒλ‹€, 슀트림, ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€μ™€ μΉœν•΄μ§€κΈ° μœ„ν•΄ μ½”λ“œμŠ€μΏΌλ“œ λ―Έμ…˜μ„ μˆ˜ν–‰ν•  λ•Œλ§ˆλ‹€ μΌλΆ€λŸ¬ λžŒλ‹€, 슀트림, ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λ§Œμ„ μ‚¬μš©ν•΄ λ―Έμ…˜μ„ ν•΄κ²°ν•˜λ € λ…Έλ ₯ν–ˆλ‹€. κ·Έ κ³Όμ •μ—μ„œ κ°€μž₯ 많이 μ°Έκ³ ν•œ 책이 λ°”λ‘œ 이 μ±…μ΄μ—ˆλ‹€.

뿐만 μ•„λ‹ˆλΌ, μ‹œκ°„/λ‚ μ§œ 라이브러리, CompletableFuture , Optional κ³Ό μΉœμˆ™ν•΄μ§ˆ 수 μžˆμ—ˆκ³ , Java ν™œμš©λ„λ₯Ό 크게 올릴 수 있게 λ§Žμ€ 도움을 μ€€ 책이닀.

 

Real MySQL 1.2ꢌ

MySQL을 깊이 ν•™μŠ΅ν•˜κ³  μ‹Άμ–΄μ„œ μ„ νƒν•œ μ±…. μ½”λ“œμŠ€μΏΌλ“œ 멀버듀과 ν•¨κ»˜ μŠ€ν„°λ””λ₯Ό μ§„ν–‰ν•˜λ©° μ½μ—ˆλ‹€.

읽은 지 4κ°œμ›”μ΄ μ§€λ‚œ μ§€κΈˆλ„ λ‚΄μš©μ΄ μ–΄λ ΅λ‹€κ³  느껴질 μ •λ„λ‘œ 깊이 μžˆλŠ” 책이닀. λͺ¨λ“  파트λ₯Ό μ½μ§€λŠ” λͺ»ν•˜κ³ , λ‹€μŒκ³Ό 같은 파트λ₯Ό μ§‘μ€‘μ μœΌλ‘œ κ³΅λΆ€ν–ˆλ‹€.

  • 4μž₯: μ•„ν‚€ν…μ²˜
  • 5μž₯: νŠΈλžœμž­μ…˜κ³Ό 잠금
  • 8μž₯: 인덱슀
  • 10μž₯: μ‹€ν–‰ κ³„νš
  • 11μž₯: 쿼리 μž‘μ„± 및 μ΅œμ ν™”
  • 15μž₯: 데이터 νƒ€μž…

μ–΄λ €μš΄ 만큼 λ°˜λ³΅ν•΄μ„œ 보고, ν—·κ°ˆλ¦¬λŠ” λ‚΄μš©μ€ λ…Έμ…˜μ— λ”°λ‘œ μ •λ¦¬ν•΄λ‘μ—ˆλ‹€. 25년에도 κΎΈμ€€νžˆ 읽어야 ν•  책이닀.

 

개발자 원칙

이 책은 더 λ‚˜μ€ κ°œλ°œμžκ°€ 되기 μœ„ν•œ 9λͺ…μ˜ ν…Œν¬ λ¦¬λ”λ“€μ˜ 원칙을 λ‹΄κ³  μžˆλ‹€. μžλ°”λ₯Ό 배운 지 6κ°œμ›”μ―€ λ˜μ—ˆμ„ λ•Œ μ½μ—ˆλŠ”λ°, 마치 백지 μƒνƒœμ—μ„œ 이 μ±…μ˜ λ‚΄μš©μ„ κ·ΈλŒ€λ‘œ ν‘μˆ˜ν•˜λŠ” λŠλ‚Œμ΄μ—ˆλ‹€. 덕뢄에 μ§€κΈˆμ˜ 개발 μŠ΅κ΄€μ΄ 잘 μž‘ν˜”λ‹€κ³  μƒκ°ν•œλ‹€.

μ§€κΈˆμ€ "2년이 μ§€λ‚œ ν›„ λ‹€μ‹œ 읽어보면 μ–΄λ–€ λŠλ‚ŒμΌκΉŒ?" ν•˜λŠ” ꢁ금증이 λ“€κ²Œ ν•˜λŠ” 책이닀. μ‹œκ°„μ΄ μ§€λ‚˜ 더 κ²½ν—˜μ΄ μŒ“μΈ ν›„ λ‹€μ‹œ 읽으면, μ§€κΈˆκ³ΌλŠ” 또 λ‹€λ₯Έ 배움을 얻을 수 μžˆμ„ 것 κ°™λ‹€.

 

이 책을 읽을 λ‹Ήμ‹œ, 9λͺ…μ˜ ν…Œν¬ 리더 쀑 μ•„λŠ” 뢄이 아무도 μ—†μ—ˆλ‹€. 그런데 μ½”λ“œμŠ€μΏΌλ“œμ—μ„œ ꡐ윑의 λ§ˆμŠ€ν„°μΈ JKκ°€ 이 μ±…μ˜ μ €μž 쀑 ν•œ λͺ…μ΄λΌλŠ” 사싀을 μ•Œκ²Œ λ˜μ—ˆλ‹€. 그리고, 일뢀 μˆ˜μ—…λ„ μ±…μ˜ λ‚΄μš©μ„ ν™œμš©ν•΄ μ„€λͺ…ν•΄ μ£Όμ…¨λ‹€. λ‹€μŒμ— μ½”λ“œμŠ€μΏΌλ“œλ₯Ό λ°©λ¬Έν•  일이 생긴닀면, JK께 싸인 λ°›μ•„μ•Όκ² λ‹€πŸ˜€

 

SQL 첫걸음

μ½”λ“œμŠ€μΏΌλ“œ κ³Όμ • 쀑 JDBC Template을 μ‚¬μš©ν•˜κΈ° μœ„ν•΄ 직접 SQL문을 μž‘μ„±ν•΄μ•Ό ν–ˆλŠ”λ°, 문법이 μ΅μˆ™ν•˜μ§€ μ•Šμ•„ 어렀움을 κ²ͺμ—ˆλ‹€. κ·Έλ•Œ 이 책을 μ°Έκ³ ν•˜λ©° κ³΅λΆ€ν–ˆλ‹€.

이 책을 톡해 SQLκ³Ό μΉœμˆ™ν•΄μ§ˆ 수 μžˆμ—ˆκ³ , 덕뢄에 JPQL을 μž‘μ„±ν•  λ•Œλ„ 훨씬 μˆ˜μ›”ν•˜κ²Œ μ“Έ 수 있게 λ˜μ—ˆλ‹€. SQL 문법이 μ΅μˆ™ν•˜μ§€ μ•Šμ€ λΆ„λ“€μ—κ²Œ κ°•λ ₯ μΆ”μ²œν•˜λŠ” 책이닀.

 

마치며

이 외에도 λ‹€μ–‘ν•œ 책듀을 μ½κ±°λ‚˜ μ°Έκ³ ν–ˆλ‹€.

  • γ€Šκ·Έλ¦ΌμœΌλ‘œ λ°°μš°λŠ” HTTP λ„€νŠΈμ›Œν¬γ€‹
  • CS κ΄€λ ¨ μ±…
  • μžλ°” μ„±λŠ₯ νŠœλ‹ κ΄€λ ¨ μ±…
  • γ€Šμ΄νŽ™ν‹°λΈŒ μžλ°”γ€‹

주둜 μ½”λ“œμŠ€μΏΌλ“œμ˜ μ±…μž₯κ³Ό U-λ„μ„œκ΄€μ„ ν™œμš©ν•΄ μ™„λ…ν•œ 책도 있고, ν•„μš”ν•œ λΆ€λΆ„λ§Œ μ°Έκ³ ν•œ 책도 λ§Žμ•˜λ‹€.

νšŒκ³ ν•΄ λ³΄λ‹ˆ, 1λ…„ λ™μ•ˆ 생각보닀 λ§Žμ€ 책을 μ½μ—ˆμŒμ„ κΉ¨λ‹¬μ•˜λ‹€. μš”μ¦˜μ€ μΈν”„λŸ° 같은 κ°•μ˜ ν”Œλž«νΌμ΄ 잘 λ˜μ–΄ μžˆμ–΄ λΉ λ₯΄κ²Œ 지식을 ν‘μˆ˜ν•  수 μžˆμ§€λ§Œ, μ±…λ§ŒνΌ 깊이 μžˆλŠ” λ‚΄μš©μ„ μžμ„Ένžˆ μ„€λͺ…ν•΄ μ£ΌκΈ°λŠ” μ–΄λ ΅λ‹€κ³  μƒκ°ν•œλ‹€.

 

책은 속도가 느린 만큼, μ½λŠ” κ³Όμ •μ—μ„œ μžμ—°μŠ€λŸ½κ²Œ 깊이 μƒκ°ν•˜κ²Œ 되고, μ΄λŸ¬ν•œ 고민듀이 λ‚˜μ˜ κ°€μΉ˜κ΄€μ„ ν˜•μ„±ν•˜λŠ” 데 도움을 μ£Όλ©° 였래 기얡에 λ‚¨λŠ”λ‹€λŠ” 것을 λŠκΌˆλ‹€.  2025년은 γ€Šκ°€μƒ λ©΄μ ‘ μ‚¬λ‘€λ‘œ λ°°μš°λŠ” λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ μ„€κ³„γ€‹λ‘œ μ‹œμž‘ν•΄λ³΄λ € ν•œλ‹€. μ˜¬ν•΄λ„ κΎΈμ€€νžˆ 책을 읽으며 κ°œλ°œμžλ‘œμ„œ 더 μ„±μž₯ν•  수 μžˆλŠ” μ‹œκ°„μ„ λ§Œλ“€μ–΄κ°€κ³ μž ν•œλ‹€.

'λ„μ„œ > 개발' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

객체지ν–₯의 사싀과 μ˜€ν•΄  (0) 2023.10.06