2021-04-20(Tue)

ν•­λͺ©

λ‚΄μš©

ν•™μŠ΅ λ‚ μ§œ

2021-04-20(ν™”)

ν•™μŠ΅ μ‹œκ°„

09:00~23:00

ν•™μŠ΅ λ²”μœ„ 및 주제

Active model serializer, params.fetch, DTO

ν•™μŠ΅ λͺ©ν‘œ

μ–΄μ œ λ°œκ²¬ν•œ ν‚€μ›Œλ“œλ“€μ„ 파보자.

λ™λ£Œ ν•™μŠ΅ 방법

-

상세 ν•™μŠ΅ λ‚΄μš©

Active model serializer

https://api.rubyonrails.org/classes/ActiveModel/Serialization.html

μ• μ΄ˆμ— λ ˆμΌμ¦ˆμ—μ„œλŠ” ActiveModel 객체의 직렬화λ₯Ό μ§€μ›ν•˜λŠ” λ©”μ„œλ“œλ₯Ό μ§€μ›ν•œλ‹€.

막 map λ“±μœΌλ‘œ 값을 μ •μ˜ν•  ν•„μš”μ—†μ΄, attribute ν‚€λ₯Ό μ‹¬λ³Όλ‘œ λ„˜κ²¨μ£Όλ©΄ JSON ν˜•μ‹μœΌλ‘œ μžμ—°μŠ€λ ˆ 직렬화할 수 μžˆλ‹€.

params.fetch λ©”μ„œλ“œ

https://api.rubyonrails.org/classes/ActionController/Parameters.html#method-i-fetch

paramater의 λ””ν΄νŠΈ 값을 μ„€μ •ν•΄μ£ΌλŠ” λ©”μ„œλ“œ.

DTO λ…ΌμŸ

https://blog.daum.net/question0921/829

DTO νŒ¨ν„΄μ΄ 뭘까?

DTO νŒ¨ν„΄μ€ 속성과 getter/setter λ©”μ„œλ“œλ‘œ κ΅¬μ„±λœ μžλ°” 클래슀 νŒ¨ν„΄μ„ λ§ν•œλ‹€. κ°μ²΄λŠ” μƒνƒœ(state)와 ν–‰μœ„(behavior)둜 ꡬ성됨이 κΈ°λ³Έ μ›μΉ™μ΄μ§€λ§Œ λ°μ΄ν„°λ§Œμ„ κ°€μ§€λŠ” 데이터 ν™€λ”μ˜ κ°œλ…κ³Ό λ‹¨μˆœ 였브젝트둜 κ΅¬μ„±λœ 도메인 λͺ¨λΈ 객체이닀.

각 κ³„μΈ΅κ°„μ˜ 데이터 전달을 μœ„ν•œ μ΅œμ„ μ˜ μ„ νƒμœΌλ‘œ μΆ”μ²œλ˜κ³  μžˆλ‹€.

DTO νŒ¨ν„΄μ˜ 문제점

데이터λ₯Ό 전달할 λ•Œ 데이터가 μœ μ‹€λ˜κ³ , 이 λ•Œ λ°œμƒν•˜λŠ” μ—λŸ¬λ₯Ό λ””λ²„κΉ…ν•˜λŠ”λ° μƒλ‹Ήνžˆ λ§Žμ€ μ‹œκ°„μ΄ μ†Œμš”λ  수 μžˆλ‹€. λ˜ν•œ 도메인 λͺ¨λΈμ„ DTO λͺ¨λΈλ‘œ, DTO λͺ¨λΈμ„ 도메인 λͺ¨λΈλ‘œ μ „λ‹¬ν•˜λŠ” 좔가적인 μž‘μ—… λΉ„μš©μ΄ λ°œμƒν•œλ‹€.

ꡳ이 μ‚¬μš©ν•  ν•„μš”κ°€ μ—†λŠ”λ° λ‚¨μš©λ˜λŠ” κ²½ν–₯이 μžˆλ‹€.

DTO의 λΉˆμ•½ν•œ 도메인 λͺ¨λΈ(Anemic Domain Model)에 λŒ€ν•œ λ…ΌμŸ

객체에 μƒνƒœμ™€ ν–‰μœ„κ°€ λ“€μ–΄κ°€λŠ” 것이 μ•„λ‹Œ, μ˜€λ‘œμ§€ μƒνƒœλ§Œ λ“€μ–΄κ°€λ―€λ‘œ ꡬ쑰적으둜 λΆˆν•©λ¦¬ν•œ ν˜•νƒœμ˜ μ½”λ“œλ₯Ό μƒμ‚°ν•˜κ²Œ ν•œλ‹€κ³  ν•œλ‹€. λͺ¨λ“  도메인은 ν–‰μœ„μ— ν•΄λ‹Ήν•˜λŠ” λ‘œμ§μ„ 가지고 있고, κ·Έ λ‘œμ§μ„ μ–΄λ– ν•œ ν˜•νƒœλ‘œλ“  λ‚˜νƒ€λ‚΄μ•Ό ν•˜λŠ”λ° 그것이 λ„λ©”μΈμ˜ μƒνƒœ μ •λ³΄λ§Œ 가지고 μžˆλŠ” λΉˆμ•½ν•œ 도메인 λͺ¨λΈμ—μ„œ λͺ¨λ‘ λΉ μ Έλ‚˜μ˜€μ™€ λ‹€λ₯Έ ν˜•νƒœλ‘œ κ΅¬μ„±λ˜κΈ° λ•Œλ¬Έ.

λ•Œλ¬Έμ— 도메인 객체의 데이터홀더(Data holder)화와 μ„œλΉ„μŠ€ λ ˆμ΄μ–΄μ˜ λΉ„λŒ€λ₯Ό μ΄ˆλž˜ν•  수 μžˆλ‹€.

ν•™μŠ΅ λ‚΄μš©μ— λŒ€ν•œ 개인적인 총평

μ–΄μ œ 늦게 μžλŠ” λ°”λžŒμ— 3μ‹œκ°„ μˆ˜λ©΄ν•œ μƒνƒœμ—μ„œ 라이브 μ½”λ”© 회고λ₯Ό μ§„ν–‰ν•˜κ³ , λ©˜ν† λ‹˜ 2λΆ„ λ§Œλ‚˜κ³  인터뷰λ₯Ό λ”°λ‘œ μ§„ν–‰ν•˜λŠ” λ“± λ°”μ˜κ²Œ λŒμ•„λ‹€λ…”λ”λ‹ˆ λ„ˆλ¬΄ ν”Όκ³€ν•˜λ‹€.

μž¬λ°Œκ²Œλ„ λ©˜ν† λ‹˜λ“€ λͺ¨λ‘ 의견이 λ‹€λ₯΄λ‹€. μ§€κΈˆ μ˜€νΌκ°€ 온 곳에 μ·¨μ—…ν•  것인가 μ•„λ‹ˆλ©΄ μžλ°” μŠ€ν”„λ§μ„ νŒŒμ„œ 더 쒋은 기회λ₯Ό λ…Έλ €λ³΄λŠ”κ°€. ν›„νšŒ μ—†λŠ” 선택에 집착할 것이 μ•„λ‹ˆλΌ, λ‚΄ 선택을 ν›„νšŒμ—†λ„λ‘ λ§Œλ“€μ–΄λ²„λ¦¬μž.

λ‹€μŒ ν•™μŠ΅ κ³„νš

  • Spring

Last updated