day23 πŸŒ•

μž₯λ―ΈΒ·2022λ…„ 7μ›” 6일
0

였늘의 μ„±κ³Ό

λͺ©λ‘ 보기
23/129

[μŠ€ν”„λ§ 핡심 원리 - 기본편] μ„Ήμ…˜ 9 μˆ˜κ°•

μ„Ήμ…˜ 9. 빈 μŠ€μ½”ν”„ μˆ˜κ°• μ™„λ£Œ!!

빈 μŠ€μ½”ν”„λŠ” 빈이 μ‘΄μž¬ν•  수 μžˆλŠ” λ²”μœ„λ₯Ό λœ»ν•œλ‹€.

  • 싱글톀 μŠ€μ½”ν”„: κΈ°λ³Έ μŠ€μ½”ν”„. μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ˜ μ‹œμž‘λΆ€ν„° μ’…λ£Œλ  λ•ŒκΉŒμ§€ μœ μ§€λœλ‹€.
  • ν”„λ‘œν† νƒ€μž… μŠ€μ½”ν”„: μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆκ°€ ν”„λ‘œν† νƒ€μž… 빈의 생성과 μ˜μ‘΄κ΄€κ³„ μ£Όμž…κΉŒμ§€λ§Œ κ΄€μ—¬ν•˜κ³  λ”λŠ” κ΄€λ¦¬ν•˜μ§€ μ•ŠλŠ”λ‹€.

싱글톀 μŠ€μ½”ν”„μ˜ λΉˆμ„ μ‘°νšŒν•˜λ©΄ μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλŠ” 항상 같은 μΈμŠ€ν„΄μŠ€μ˜ μŠ€ν”„λ§ λΉˆμ„ λ°˜ν™˜ν•œλ‹€.
λ°˜λ©΄μ— ν”„λ‘œν† νƒ€μž… μŠ€μ½”ν”„λ₯Ό μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— μ‘°νšŒν•˜λ©΄ μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλŠ” 항상 μƒˆλ‘œμš΄ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•΄μ„œ λ°˜ν™˜ν•œλ‹€.

ν”„λ‘œν† νƒ€μž… λΉˆμ„ 관리할 μ±…μž„μ€ ν”„λ‘œν† νƒ€μž… λΉˆμ„ 받은 ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μžˆλ‹€.

싱글톀 λΉˆμ€ μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆ 생성 μ‹œμ μ— μ΄ˆκΈ°ν™” λ©”μ„œλ“œκ°€ μ‹€ν–‰λ˜μ§€λ§Œ, ν”„λ‘œν† νƒ€μž… μŠ€μ½”ν”„μ˜ λΉˆμ€ μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ—μ„œ λΉˆμ„ μ‘°νšŒν•  λ•Œ μƒμ„±λ˜κ³  μ΄ˆκΈ°ν™” λ©”μ„œλ“œλ„ μ‹€ν–‰λœλ‹€.

μ§€μ •ν•œ λΉˆμ„ μ»¨ν…Œμ΄λ„ˆμ—μ„œ λŒ€μ‹  μ°Ύμ•„μ£ΌλŠ” DL(Dependency Lookup) μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜λŠ” 것이 λ°”λ‘œ ObjectProvider와 javax.inject.Provider이닀.

ObjectProviderλŠ” μŠ€ν”„λ§μ΄ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯이고, javax.inject.ProviderλŠ” μžλ°” ν‘œμ€€ κΈ°λŠ₯이닀.


μ›Ή μŠ€μ½”ν”„

ν”„λ‘œν† νƒ€μž…κ³Ό λ‹€λ₯΄κ²Œ μŠ€ν”„λ§μ΄ ν•΄λ‹Ή μŠ€μ½”ν”„μ˜ μ’…λ£Œ μ‹œμ κΉŒμ§€ κ΄€λ¦¬ν•œλ‹€.
λ”°λΌμ„œ μ’…λ£Œ λ©”μ„œλ“œκ°€ ν˜ΈμΆœλœλ‹€.

μ’…λ₯˜

  • request: HTTP μš”μ²­ ν•˜λ‚˜κ°€ λ“€μ–΄μ˜€κ³  λ‚˜κ°ˆ λ•ŒκΉŒμ§€ μœ μ§€λ˜λŠ” μŠ€μ½”ν”„. 각각의 HTTP μš”μ²­λ§ˆλ‹€ λ³„λ„μ˜ 빈 μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λ˜κ³  κ΄€λ¦¬λœλ‹€.

  • session: HTTP Sessionκ³Ό λ™μΌν•œ 생λͺ…μ£ΌκΈ°λ₯Ό κ°€μ§€λŠ” μŠ€μ½”ν”„.

  • application: μ„œλΈ”λ¦Ώ μ»¨ν…μŠ€νŠΈ(ServletContext)와 λ™μΌν•œ 생λͺ…μ£ΌκΈ°λ₯Ό κ°€μ§€λŠ” μŠ€μ½”ν”„.

λ™μ‹œμ— μ—¬λŸ¬ HTTP μš”μ²­μ΄ 였면 μ–΄λ–€ μš”μ²­μ΄ 남긴 λ‘œκ·ΈμΈμ§€ κ΅¬λΆ„ν•˜κΈ° μ–΄λ ΅λ‹€.
이럴 λ•Œ μ‚¬μš©ν•˜κΈ° 쒋은 것이 request μŠ€μ½”ν”„λ‹€.


μŠ€μ½”ν”„μ™€ ν”„λ‘μ‹œ

@Scope의 proxyMode = ScopedProxyMode.TARGET_CLASSλ₯Ό μ„€μ •ν•˜λ©΄, μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλŠ” CGLIBλΌλŠ” λ°”μ΄νŠΈ μ½”λ“œλ₯Ό μ‘°μž‘ν•˜λŠ” 라이브러리λ₯Ό μ‚¬μš©ν•˜μ—¬ 상속 받은 κ°€μ§œ ν”„λ‘μ‹œ 객체λ₯Ό μƒμ„±ν•œλ‹€.

κ°€μ§œ ν”„λ‘μ‹œ κ°μ²΄μ—λŠ” μš”μ²­μ΄ 였면 κ·Έ λ•Œ λ‚΄λΆ€μ—μ„œ μ§„μ§œ λΉˆμ„ μš”μ²­ν•˜λŠ” μœ„μž„ 둜직이 λ“€μ–΄μžˆλ‹€.
κ°€μ§œ ν”„λ‘μ‹œ κ°μ²΄λŠ” 원본 클래슀λ₯Ό 상속 λ°›μ•„ λ§Œλ“€μ–΄μ‘ŒκΈ° λ•Œλ¬Έμ—, 이 객체λ₯Ό μ‚¬μš©ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈ μž…μž₯μ—μ„œλŠ” 이게 원본인지 μ•„λ‹Œμ§€ λͺ°λΌλ„ λ™μΌν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€. ➑️ λ‹€ν˜•μ„±


μ„Ήμ…˜ 10. λ‹€μŒμœΌλ‘œ μˆ˜κ°• μ™„λ£Œ!!


μ •μ²˜κΈ°


운영체제 6챕터 반


DTO

+) 22. 07. 09. μΆ”κ°€

Data Transfer Object
계측 κ°„ 데이터 κ΅ν™˜(전달)을 μœ„ν•œ 객체λ₯Ό μ˜λ―Έν•œλ‹€.

이미지 좜처: μ–΄λΌμš΄λ“œν—ˆλΈŒ μŠ€νŠœλ””μ˜€

DTOλŠ” λ©”μ„œλ“œ 호좜 수λ₯Ό 쀄이기 μœ„ν•΄ μ‚¬μš©ν•œλ‹€.
ν•œ 번의 호좜둜 μ—¬λŸ¬ 개의 νŒŒλΌλ―Έν„°λ₯Ό 일괄 μ²˜λ¦¬ν•˜μ—¬ μ„œλ²„λ‘œμ˜ 왕볡 이동을 쀄이면, 원격 μž‘μ—…μ—μ„œ λ„€νŠΈμ›Œν¬μ˜ μ˜€λ²„ν—€λ“œκ°€ 쀄어듀기 λ•Œλ¬Έμ΄λ‹€.

DTOλŠ” 일반적으둜 POJO둜 μƒμ„±λœλ‹€.
λΉ„μ¦ˆλ‹ˆμŠ€ 둜직이 μ—†λŠ” ν”Œλž« 데이터 ꡬ쑰닀.

DTOλŠ” 였직 getter, setter λ©”μ„œλ“œλ§Œ 가진닀.
μˆœμˆ˜ν•˜κ²Œ 데이터 μ „λ‹¬λ§Œ ν•˜λŠ” 객체이기 λ•Œλ¬Έμ΄λ‹€.
λ³΄λ‚΄λŠ” μͺ½μ—μ„œ setterλ₯Ό μ‚¬μš©ν•΄ 데이터λ₯Ό DTO에 λ‹΄μ•„ 보내고, λ°›λŠ” μͺ½μ—μ„œ getterλ₯Ό μ‚¬μš©ν•΄ 전달 받은 DTOλ‘œλΆ€ν„° 데이터λ₯Ό κΊΌλ‚΄λŠ” 방식이닀.

setter λ©”μ„œλ“œλ₯Ό κ°€μ§ˆ 경우, 이λ₯Ό 톡해 μƒˆλ‘œμš΄ 값을 μ„€μ •ν•  수 μžˆμœΌλ―€λ‘œ ν•΄λ‹Ή DTO의 λ°μ΄ν„°λŠ” 가변적이닀.
λ§Œμ•½ setter λ©”μ„œλ“œλ₯Ό μ‚­μ œν•˜κ³  속성 값듀을 λΆˆλ³€κ°μ²΄λ‘œ λ§Œλ“ λ‹€λ©΄, DTOκ°€ μ „λ‹¬ν•˜λŠ” λ°μ΄ν„°λŠ” 전달 κ³Όμ • 쀑 λ³€μ‘°λ˜μ§€ μ•ŠμŒμ„ 보μž₯ν•  수 μžˆλ‹€.

*VO(Value Object)의 경우 Read Only의 κ°œλ…μ„ 가지고 μžˆλ‹€.

DTO와 VO 비ꡐ

DTOVO
μš©λ„λ ˆμ΄μ–΄ κ°„ 데이터 전달값 자체λ₯Ό ν‘œν˜„
동등 결정속성값이 λͺ¨λ‘ κ°™λ‹€κ³  ν•΄μ„œ 같은 객체가 μ•„λ‹˜μ†μ„±κ°’μ΄ λͺ¨λ‘ κ°™μœΌλ©΄ 같은 객체
κ°€λ³€, λΆˆλ³€setter 쑴재 μ‹œ κ°€λ³€, setter λΉ„μ‘΄μž¬ μ‹œ λΆˆλ³€λΆˆλ³€
둜직getter, setter μ™Έμ˜ λ‘œμ§μ„ 갖지 μ•ŠμŒgetter, setter μ™Έμ˜ λ‘œμ§μ„ κ°€μ§ˆ 수 있음

참고 자료

  1. μš°μ•„ν•œTech, β€œμΈλΉ„μ˜ DTO vs VO”, https://youtu.be/z5fUkck_RZM

  2. μ–΄λΌμš΄λ“œν—ˆλΈŒ μŠ€νŠœλ””μ˜€, β€œMaria DB, Entity, Repository, DAO, DTO”, https://youtu.be/4Pvd0KrTfvE

  3. β€œThe DTO Pattern (Data Transfer Object)”, Baeldung, https://www.baeldung.com/java-dto-pattern


내일 인쀀이 λ§Œλ‚˜μ„œ λ°œν‘œν•  κ±° 정리 (IP, TCP, UDP, HTTP)

profile
김뉴비

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보