day79 πŸŒ•

μž₯λ―ΈΒ·2022λ…„ 9μ›” 1일
0

였늘의 μ„±κ³Ό

λͺ©λ‘ 보기
79/129

μŠ€ν”„λ§ DB 2편 - 데이터 μ ‘κ·Ό ν™œμš© 기술 μ„Ήμ…˜ 0, 1 μˆ˜κ°•

+) 22. 09. 02. 정리 μΆ”κ°€

μ„Ήμ…˜ 0. κ°•μ˜ μ†Œκ°œ
μ„Ήμ…˜ 1. 데이터 μ ‘κ·Ό 기술 - μ‹œμž‘ μˆ˜κ°• μ™„λ£Œ!!

적용 데이터 μ ‘κ·Ό 기술

  • SQL Mapper

    • JdbcTemplate
    • MyBatis
  • ORM κ΄€λ ¨ 기술

    • JPA, Hibernate
    • μŠ€ν”„λ§ 데이터 JPA
    • Querydsl

SQL Mapper μ£Όμš” κΈ°λŠ₯

  • κ°œλ°œμžκ°€ SQL만 μž‘μ„±ν•˜λ©΄ ν•΄λ‹Ή SQL의 κ²°κ³Όλ₯Ό 객체둜 맀핑해쀀닀.
  • JDBCλ₯Ό 직접 μ‚¬μš©ν•  λ•Œ λ°œμƒν•˜λŠ” μ—¬λŸ¬ 쀑볡을 μ œκ±°ν•΄μ£Όκ³ , 기타 νŽΈλ¦¬ν•œ κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€.

ORM μ£Όμš” κΈ°λŠ₯

  • SQL Mapper κΈ°μˆ μ€ κ°œλ°œμžκ°€ 직접 SQL을 μž‘μ„±ν•΄μ•Ό ν•˜μ§€λ§Œ, JPAλ₯Ό μ‚¬μš©ν•˜λ©΄ 기본적인 SQL은 JPAκ°€ λŒ€μ‹  μž‘μ„±ν•˜κ³  μ²˜λ¦¬ν•΄μ€€λ‹€. κ°œλ°œμžλŠ” μ €μž₯ν•˜κ³  싢은 객체λ₯Ό μžλ°” μ»¬λ ‰μ…˜μ— λ„£κ³  μ‘°νšŒν•˜λ“―μ΄ μ‚¬μš©ν•˜λ©΄ λœλ‹€. ORM 기술이 λ°μ΄ν„°λ² μ΄μŠ€μ— ν•΄λ‹Ή 객체λ₯Ό μ €μž₯ν•˜κ³  μ‘°νšŒν•΄μ€€λ‹€.
  • μžλ°”μ—μ„œ ORM을 μ‚¬μš©ν•  λ•ŒλŠ” JPA μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜κ³ , κ·Έ κ΅¬ν˜„μ²΄λ‘œ ν•˜μ΄λ²„λ„€μ΄νŠΈλ₯Ό μ‚¬μš©ν•œλ‹€κ³  μƒκ°ν•˜λ©΄ λœλ‹€.

DTO(Data Transfer Object)

  • 데이터 전솑 객체
  • DTOλŠ” κΈ°λŠ₯은 μ—†κ³ , 데이터λ₯Ό 전달할 μš©λ„λ‘œ μ‚¬μš©λ˜λŠ” 객체λ₯Ό λœ»ν•œλ‹€.

@EventListener(ApplicationReadyEvent.class): μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆκ°€ μ™„μ „νžˆ μ΄ˆκΈ°ν™”λ₯Ό λ‹€ 끝내고, μ‹€ν–‰ μ€€λΉ„κ°€ λ˜μ—ˆμ„ λ•Œ λ°œμƒν•˜λŠ” μ΄λ²€νŠΈμ΄λ‹€. μŠ€ν”„λ§μ΄ 이 μ‹œμ μ— ν•΄λ‹Ή μ• λ…Έν…Œμ΄μ…˜μ΄ 뢙은 initData() λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•΄μ€€λ‹€.

@Profile("local"): νŠΉμ • ν”„λ‘œν•„(localμ΄λΌλŠ” μ΄λ¦„μ˜ ν”„λ‘œν•„)의 κ²½μš°μ—λ§Œ ν•΄λ‹Ή μŠ€ν”„λ§ λΉˆμ„ λ“±λ‘ν•œλ‹€.

ν”„λ‘œν•„
μŠ€ν”„λ§μ€ λ‘œλ”© μ‹œμ μ— application.properties의 spring.profiles.active 속성을 μ½μ–΄μ„œ ν”„λ‘œν•„λ‘œ μ‚¬μš©ν•œλ‹€. 이 ν”„λ‘œν•„μ€ 둜컬(λ‚˜μ˜ PC), 운영 ν™˜κ²½, ν…ŒμŠ€νŠΈ μ‹€ν–‰ λ“± λ‹€μ–‘ν•œ ν™˜κ²½μ— 따라 λ‹€λ₯Έ 섀정을 ν•΄μ•Ό ν•  λ•Œ μ‚¬μš©ν•˜λŠ” 정보이닀.

generated by default as identity

  • κΈ°λ³Έ ν‚€ 생성을 λ°μ΄ν„°λ² μ΄μŠ€μ— μœ„μž„ν•œλ‹€. MySQL의 Auto Increment와 같은 방법이닀.
  • PK둜 μ‚¬μš©λ˜λŠ” idλŠ” κ°œλ°œμžκ°€ 직접 μ§€μ •ν•˜λŠ” 것이 μ•„λ‹ˆλΌ, λΉ„μ›Œλ‘κ³  μ €μž₯ν•˜λ©΄ λœλ‹€. λ°μ΄ν„°λ² μ΄μŠ€κ°€ μˆœμ„œλŒ€λ‘œ μ¦κ°€ν•˜λŠ” 값을 μ‚¬μš©ν•΄μ„œ λ„£μ–΄μ€€λ‹€.

μ°Έκ³ 
λ°μ΄ν„°λ² μ΄μŠ€ κΈ°λ³Έ ν‚€λŠ” λ‹€μŒ 3가지 쑰건을 λͺ¨λ‘ λ§Œμ‘±ν•΄μ•Ό ν•œλ‹€.

  1. null 값은 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€.
  2. μœ μΌν•΄μ•Ό ν•œλ‹€.
  3. λ³€ν•˜λ©΄ μ•ˆ λœλ‹€.

ν…Œμ΄λΈ”μ˜ κΈ°λ³Έ ν‚€λ₯Ό μ„ νƒν•˜λŠ” μ „λž΅μ€ 크게 2가지가 μžˆλ‹€.

  1. μžμ—° ν‚€(natural key)
  • λΉ„μ¦ˆλ‹ˆμŠ€μ— μ˜λ―Έκ°€ μžˆλŠ” ν‚€
  • 예: μ£Όλ―Όλ“±λ‘λ²ˆν˜Έ, 이메일, μ „ν™”λ²ˆν˜Έ λ“±
  1. λŒ€λ¦¬ ν‚€(λŒ€μ²΄ ν‚€, surrogate key)
  • λΉ„μ¦ˆλ‹ˆμŠ€μ™€ κ΄€λ ¨ μ—†λŠ” μž„μ˜λ‘œ λ§Œλ“€μ–΄μ§„ ν‚€
  • 예: 였라클 μ‹œν€€μŠ€, auto_increment, ν‚€ 생성 ν…Œμ΄λΈ” μ‚¬μš©

μžμ—° ν‚€λ³΄λ‹€λŠ” λŒ€λ¦¬ ν‚€ μ‚¬μš©μ„ ꢌμž₯ν•œλ‹€.
λŒ€λ¦¬ ν‚€λŠ” λΉ„μ¦ˆλ‹ˆμŠ€μ™€ λ¬΄κ΄€ν•œ μž„μ˜μ˜ κ°’μ΄λ―€λ‘œ μš”κ΅¬μ‚¬ν•­μ΄ λ³€κ²½λ˜μ–΄λ„ κΈ°λ³Έ ν‚€κ°€ λ³€κ²½λ˜λŠ” 일은 λ“œλ¬Όλ‹€. λŒ€λ¦¬ ν‚€λ₯Ό 기본으둜 μ‚¬μš©ν•˜λ˜ μ£Όλ―Όλ“±λ‘λ²ˆν˜Έμ²˜λŸΌ μžμ—° ν‚€μ˜ 후보가 λ˜λŠ” μ»¬λŸΌλ“€μ€ ν•„μš”μ— 따라 μœ λ‹ˆν¬ 인덱슀λ₯Ό μ„€μ •ν•΄μ„œ μ‚¬μš©ν•˜λŠ” 것을 ꢌμž₯ν•œλ‹€.


κ°•μ˜ 듀은 κ±° 정리!!


ν† ν”½ 1개 - cast (broadcast, unicast, multicast λ“±..)

λ„€νŠΈμ›Œν¬μ—μ„œ μΆœλ°œμ§€ β†’ λͺ©μ μ§€λ‘œ 데이터λ₯Ό 전솑할 λ•Œ μ‚¬μš©ν•˜λŠ” 톡신 λ°©μ‹μ—λŠ” μœ λ‹ˆμΊμŠ€νŠΈ, λΈŒλ‘œλ“œμΊμŠ€νŠΈ, λ©€ν‹°μΊμŠ€νŠΈ, μ• λ‹ˆμΊμŠ€νŠΈκ°€ μžˆλ‹€.

Unicast

  • 1:1 톡신
  • μΆœλ°œμ§€μ™€ λͺ©μ μ§€κ°€ 1:1둜 톡신

μœ λ‹ˆμΊμŠ€νŠΈ

μœ λ‹ˆμΊμŠ€νŠΈλŠ” μΆœλ°œμ§€μ™€ λͺ©μ μ§€κ°€ λͺ…ν™•νžˆ ν•˜λ‚˜λ‘œ μ •ν•΄μ Έ μžˆλŠ” 1:1 톡신 방식이닀.
μ‹€μ œλ‘œ μ‚¬μš©ν•˜λŠ” λŒ€λΆ€λΆ„μ˜ 톡신은 μœ λ‹ˆμΊμŠ€νŠΈ 방식을 μ‚¬μš©ν•œλ‹€.

Broadcast

  • 1:λͺ¨λ“  톡신
  • 동일 λ„€νŠΈμ›Œν¬μ— μ‘΄μž¬ν•˜λŠ” λͺ¨μŠ¨ ν˜ΈμŠ€νŠΈκ°€ λͺ©μ μ§€

λΈŒλ‘œλ“œμΊμŠ€νŠΈ

λΈŒλ‘œλ“œμΊμŠ€νŠΈλŠ” λͺ©μ μ§€ μ£Όμ†Œκ°€ β€˜λͺ¨λ“ β€™μœΌλ‘œ ν‘œκΈ°λ˜μ–΄ μžˆλŠ” 톡신 방식이닀.
μœ λ‹ˆμΊμŠ€νŠΈλ‘œ ν†΅μ‹ ν•˜κΈ° μ „, 주둜 μƒλŒ€λ°©μ˜ μ •ν™•ν•œ μœ„μΉ˜λ₯Ό μ•ŒκΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€.
μ£Όμ†Œ 체계에 따라 λΈŒλ‘œλ“œμΊμŠ€νŠΈλ₯Ό λ‹€μ–‘ν•˜κ²Œ λΆ„λ₯˜ν•  수 μžˆμ§€λ§Œ, κΈ°λ³Έ λ™μž‘μ€ 둜컬 λ„€νŠΈμ›Œν¬ λ‚΄μ—μ„œ λͺ¨λ“  ν˜ΈμŠ€νŠΈμ— νŒ¨ν‚·μ„ 전달해야 ν•  λ•Œ μ‚¬μš©ν•œλ‹€.

Multicast

  • 1:κ·Έλ£Ή(λ©€ν‹°μΊμŠ€νŠΈ ꡬ독 호슀트) 톡신
  • ν•˜λ‚˜μ˜ μΆœλ°œμ§€μ—μ„œ λ‹€μˆ˜μ˜ νŠΉμ • λͺ©μ μ§€λ‘œ 데이터 전솑

λ©€ν‹°μΊμŠ€νŠΈ

λ©€ν‹°μΊμŠ€νŠΈλŠ” λ©€ν‹°μΊμŠ€νŠΈ κ·Έλ£Ή μ£Όμ†Œλ₯Ό μ΄μš©ν•΄ ν•΄λ‹Ή 그룹에 μ†ν•œ λ‹€μˆ˜μ˜ 호슀트둜 νŒ¨ν‚·μ„ μ „μ†‘ν•˜κΈ° μœ„ν•œ 톡신 방식이닀.
IPTV와 같은 μ‹€μ‹œκ°„ 방솑을 λ³Ό λ•Œ 이 방식을 μ‚¬μš©ν•œλ‹€. λ˜ν•œ, 사내 λ°©μ†‘μ΄λ‚˜ 증ꢌ μ‹œμ„Έ 전솑과 같이 단방ν–₯으둜 λ‹€μˆ˜μ—κ²Œ λ™μ‹œμ— 같은 λ‚΄μš©μ„ 전달해야 ν•  λ•Œ μ‚¬μš©ν•œλ‹€.

Anicast

  • 1:1톡신(λͺ©μ μ§€λŠ” 동일 κ·Έλ£Ή λ‚΄μ˜ 1개 호슀트)
  • λ‹€μˆ˜μ˜ 동일 κ·Έλ£Ή 쀑 κ°€μž₯ κ°€κΉŒμš΄ ν˜ΈμŠ€νŠΈμ—μ„œ 응닡
  • IPv4μ—μ„œλŠ” 일뢀 κΈ°λŠ₯ κ΅¬ν˜„, IPv6λŠ” λͺ¨λ‘ κ΅¬ν˜„ κ°€λŠ₯

μ• λ‹ˆμΊμŠ€νŠΈ

μ• λ‹ˆμΊμŠ€νŠΈλŠ” μ• λ‹ˆμΊμŠ€νŠΈ μ£Όμ†Œκ°€ 같은 ν˜ΈμŠ€νŠΈλ“€ μ€‘μ—μ„œ κ°€μž₯ κ°€κΉκ±°λ‚˜ κ°€μž₯ 효율적으둜 μ„œλΉ„μŠ€ν•  수 μžˆλŠ” ν˜ΈμŠ€νŠΈμ™€ ν†΅μ‹ ν•˜λŠ” 방식이닀.
κ°€μž₯ κ°€κΉŒμš΄ DNS μ„œλ²„λ₯Ό 찾을 λ•Œ μ‚¬μš©ν•˜κ±°λ‚˜, κ°€μž₯ κ°€κΉŒμš΄ κ²Œμ΄νŠΈμ›¨μ΄λ₯Ό μ°ΎλŠ” μ• λ‹ˆμΊμŠ€νŠΈ κ²Œμ΄νŠΈμ›¨μ΄ κΈ°λŠ₯에 μ‚¬μš©ν•˜κΈ°λ„ ν•œλ‹€.
μ΅œμ’… 톡신은 1:1둜 μœ λ‹ˆμΊμŠ€νŠΈμ™€ μ• λ‹ˆμΊμŠ€νŠΈκ°€ λ™μΌν•˜μ§€λ§Œ 톡신할 수 μžˆλŠ” ν›„λ³΄μžλŠ” λ‹€λ₯΄λ‹€. μœ λ‹ˆμΊμŠ€νŠΈλŠ” μΆœλ°œμ§€μ™€ λͺ©μ μ§€κ°€ λͺ¨λ‘ ν•œ λŒ€μ”©μ΄μ§€λ§Œ, μ• λ‹ˆμΊμŠ€νŠΈλŠ” 같은 λͺ©μ μ§€ μ£Όμ†Œλ₯Ό 가진 μ„œλ²„κ°€ μ—¬λŸ¬ λŒ€μ—¬μ„œ 톡신 κ°€λŠ₯ν•œ λ‹€μˆ˜μ˜ 후보ꡰ이 μžˆλ‹€.

IPv6μ—μ„œλŠ” λΈŒλ‘œλ“œμΊμŠ€νŠΈκ°€ μ‘΄μž¬ν•˜μ§€ μ•Šκ³  링크 둜컬 λ©€ν‹°μΊμŠ€νŠΈλ‘œ λŒ€μ²΄λ˜μ–΄ μ‚¬μš©ν•œλ‹€.

정리

νƒ€μž…ν†΅μ‹  λŒ€μƒλ²”μœ„IPv4IPv6예
μœ λ‹ˆμΊμŠ€νŠΈ1:1전체 λ„€νŠΈμ›Œν¬OOHTTP
λΈŒλ‘œλ“œμΊμŠ€νŠΈ1:λͺ¨λ“ μ„œλΈŒλ„·(둜컬 λ„€νŠΈμ›Œν¬)OXARP
λ©€ν‹°μΊμŠ€νŠΈ1:κ·Έλ£Ήμ •μ˜λœ ꡬ간OO방솑
μ• λ‹ˆμΊμŠ€νŠΈ1:1전체 λ„€νŠΈμ›Œν¬β–΅O6 to 4 DNS

이런 톡신 방식을 ꡬ뢄할 λ•Œ μ€‘μš”ν•œ 점은 μ‹€μ œ 데이터λ₯Ό μ „λ‹¬ν•˜λ €λŠ” μΆœλ°œμ§€κ°€ 기쀀이 μ•„λ‹ˆλΌ, λͺ©μ μ§€ μ£Όμ†Œλ₯Ό κΈ°μ€€μœΌλ‘œ κ΅¬λΆ„ν•œλ‹€λŠ” 것이닀.

μ°Έκ³ 

Unknown UnicastλŠ” μœ λ‹ˆμΊμŠ€νŠΈμ—¬μ„œ λͺ©μ μ§€ μ£Όμ†ŒλŠ” μ •ν™•νžˆ λͺ…μ‹œλ˜μ–΄ μžˆλ‹€. ν•˜μ§€λ§Œ μŠ€μœ„μΉ˜κ°€ λͺ©μ μ§€μ— λŒ€ν•œ μ£Όμ†Œλ₯Ό ν•™μŠ΅ν•˜μ§€ λͺ»ν•œ 상황(μŠ€μœ„μΉ˜ μž…μž₯μ—μ„œ Unknown)μ΄μ–΄μ„œ νŒ¨ν‚·μ„ λͺ¨λ“  포트둜 ν”ŒλŸ¬λ”©(전솑)ν•˜λŠ”λ°, 이런 μœ λ‹ˆμΊμŠ€νŠΈλ₯Ό μ–Έλ…Έμš΄ μœ λ‹ˆμΊμŠ€νŠΈλΌκ³  ν•œλ‹€.

μ–Έλ…Έμš΄ μœ λ‹ˆμΊμŠ€νŠΈ


참고 자료

κ³ μž¬μ„±, μ΄μƒν›ˆ, IT μ—”μ§€λ‹ˆμ–΄λ₯Ό μœ„ν•œ λ„€νŠΈμ›Œν¬ μž…λ¬Έ


ν”„λ‘œμ νŠΈ κ΄€λ ¨ 회의

profile
김뉴비

0개의 λŒ“κΈ€

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