λ‚˜μ˜ λͺ¨μ–‘

043 | Layer interconnect & Class Mapping λ³Έλ¬Έ

SEB/TIL

043 | Layer interconnect & Class Mapping

kexon 2022. 8. 23. 20:24

🎈 DIλ₯Ό ν†΅ν•œ μ„œλΉ„μŠ€ 계측 ←→ API 계측 연동

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ Service: 도메인 업무 μ˜μ—­μ„ κ΅¬ν˜„ν•˜λŠ” λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μ²˜λ¦¬ν•˜λŠ” 것이닀.
  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ μ„œλΉ„μŠ€ 계측은 λŒ€λΆ€λΆ„ 도메인 λͺ¨λΈμ„ ν¬ν•¨ν•˜κ³  μžˆλ‹€.
  • Spring Bean으둜 등둝
    • Controller ν΄λž˜μŠ€μ— @RestController μΆ”κ°€
    • Service ν΄λž˜μŠ€μ— @Service μΆ”κ°€
  • μƒμ„±μž λ°©μ‹μ˜ DIλŠ” μƒμ„±μžκ°€ ν•˜λ‚˜μΌ κ²½μš°μ—λŠ” @Autowired μ• λ„ˆν…Œμ΄μ…˜μ„ μΆ”κ°€ν•˜μ§€ μ•Šμ•„λ„ DIκ°€ μ μš©λœλ‹€.
  • μ„œλΉ„μŠ€ 계측과 API 계측을 μ—°κ²°ν•œλ‹€λŠ” 것은 API κ³„μΈ΅μ—μ„œ κ΅¬ν˜„ν•œ Controller ν΄λž˜μŠ€κ°€ μ„œλΉ„μŠ€ κ³„μΈ΅μ˜ Service ν΄λž˜μŠ€μ™€ λ©”μ„œλ“œ ν˜ΈμΆœμ„ 톡해 μƒν˜Έμž‘μš©ν•˜λŠ” 것이닀.

🎈 맀퍼(Mapper)λ₯Ό μ΄μš©ν•œ DTO 클래슀 ←→ Entity 클래슀 맀핑

  • Mapperλ₯Ό μ‚¬μš©ν•΄μ„œ DTO ν΄λž˜μŠ€μ™€ Entity 클래슀 κ°„μ˜ 관심사λ₯Ό 뢄리할 수 μžˆλ‹€.
  • MapperλŠ” 직접 κ΅¬ν˜„ν•  μˆ˜λ„ μžˆμ§€λ§Œ MapStruct 같은 맀핑 라이브러리λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.
  • μ‚¬μš©ν•˜κΈ°
    • @Mapper: Mapper μΈν„°νŽ˜μ΄μŠ€
    • componentModel = "spring": SpringBean으둜 등둝
@Mapper(componentModel = "spring")
public interface Mapper {
	MappedType methodMapper(MappedType parameter);
}

🧩 MapStruct

  • 맀퍼(Mapper) κ΅¬ν˜„ 클래슀λ₯Ό μžλ™μœΌλ‘œ 생성해쀀닀.
  • 의쑴 라이브러리 μ„€μ •
dependencies {
	implementation 'org.mapstruct:mapstruct:1.5.2.Final'
	annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.2.Final'
}

🎈 DTO ν΄λž˜μŠ€μ™€ Entity 클래슀의 μ—­ν•  뢄리가 ν•„μš”ν•œ 이유

  • 계측별 κ΄€μ‹¬μ‚¬μ˜ 뢄리
    • μ„œλ‘œ μ‚¬μš©λ˜λŠ” 계측이 λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— κΈ°λŠ₯에 λŒ€ν•œ 관심사가 λ‹€λ₯΄λ‹€.
      • DTO 클래슀 λͺ©μ : API κ³„μΈ΅μ—μ„œ μš”μ²­ 데이터λ₯Ό 전달 λ°›κ³ , 응닡 데이터λ₯Ό μ „μ†‘ν•˜λŠ”κ²ƒ
      • Entity 클래슀 λͺ©μ : μ„œλΉ„μŠ€ κ³„μΈ΅μ—μ„œ 데이터 μ•‘μ„ΈμŠ€ 계측과 μ—°λ™ν•˜μ—¬ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직의 결과둜 μƒμ„±λœ 데이터λ₯Ό λ‹€λ£¨λŠ” 것
    • Java의 Object Mapping κ΄€μ μœΌλ‘œ μƒκ°ν•˜μ§€ μ•Šμ•„λ„ ν•˜λ‚˜μ˜ ν΄λž˜μŠ€λ‚˜ λ©”μ„œλ“œ λ‚΄μ—μ„œ μ—¬λŸ¬ 개의 κΈ°λŠ₯듀을 κ΅¬ν˜„ν•˜κ³  μžˆλŠ” 것은 객체 지ν–₯ μ½”λ“œ κ΄€μ μ—μ„œλ„ λ¦¬νŒ©ν† λ§ λŒ€μƒμ΄ λœλ‹€.
  • μ½”λ“œ κ΅¬μ„±μ˜ λ‹¨μˆœν™”
  • REST API μŠ€νŽ™μ˜ 독립성 확보
    • 데이터 μ•‘μ„ΈμŠ€ κ³„μΈ΅μ—μ„œ 전달 받은 λ°μ΄ν„°λ‘œ μ±„μ›Œμ§„ Entity 클래슀λ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ˜ μ‘λ‹΅μœΌλ‘œ κ·ΈλŒ€λ‘œ μ „λ‹¬ν•˜κ²Œλ˜λ©΄ μ›μΉ˜ μ•ŠλŠ” λ°μ΄ν„°κΉŒμ§€ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 전솑될 수 μžˆλŠ”λ°, 이 λ•Œ DTO 클래슀λ₯Ό μ‚¬μš©ν•˜λ©΄ μ€‘μš”ν•œ 정보λ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λ…ΈμΆœν•˜μ§€ μ•Šκ³ , μ›ν•˜λŠ” μ •λ³΄λ§Œ μ œκ³΅ν•  수 μžˆλ‹€.

'SEB > TIL' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

045 | Checked / Unchecked / Customised Exception  (0) 2022.08.25
044 | Exception Handling in Spring MVC  (0) 2022.08.24
042 | DTO μœ νš¨μ„± 검증  (0) 2022.08.23
042 | DTO with HTTP Request & Response  (0) 2022.08.22
031 | RDBMS, SQL, ACID  (0) 2022.08.04
Comments