Home > Spring > πŸƒ[Spring] 일반적인 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 계측 ꡬ쑰와 클래슀 μ˜μ‘΄κ΄€κ³„.

πŸƒ[Spring] 일반적인 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 계측 ꡬ쑰와 클래슀 μ˜μ‘΄κ΄€κ³„.
Spring Framework

πŸƒ[Spring] 일반적인 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 계측 ꡬ쑰와 클래슀 μ˜μ‘΄κ΄€κ³„.

1️⃣ 일반적인 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 계측 ꡬ쑰.

  • Controller : μ›Ή MVC의 Controller μ—­ν• .
    • μ‚¬μš©μžμ˜ μš”μ²­μ„ λ°›μ•„ 이λ₯Ό μ²˜λ¦¬ν•  λΉ„μ¦ˆλ‹ˆμŠ€ 둜직(μ„œλΉ„μŠ€ λ ˆμ΄μ–΄)에 μ „λ‹¬ν•˜κ³ , κ·Έ κ²°κ³Όλ₯Ό λ‹€μ‹œ μ‚¬μš©μžμ—κ²Œ μ‘λ‹΅ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.
      • 주둜 HTTP μš”μ²­μ„ μ²˜λ¦¬ν•˜κ³ , μ˜¬λ°”λ₯Έ 응닡을 μƒμ„±ν•©λ‹ˆλ‹€.
    • μ»¨νŠΈλ‘€λŸ¬λŠ” μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯을 λ°›μ•„ ν•΄λ‹Ή μž…λ ₯을 μ„œλΉ„μŠ€ λ ˆμ΄μ–΄λ‘œ μ „λ‹¬ν•˜κ³ , μ„œλΉ„μŠ€ λ ˆμ΄μ–΄μ—μ„œ 처리된 κ²°κ³Όλ₯Ό μ‚¬μš©μžμ—κ²Œ λ°˜ν™˜ν•©λ‹ˆλ‹€.
      • μ΄λŠ” 주둜 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ—”νŠΈν¬μΈνŠΈ(예: '/login', '/signup' 와 같은 URL)에 λŒ€μ‘λ©λ‹ˆλ‹€.
  • Service : 핡심 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 κ΅¬ν˜„.
    • λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μ²˜λ¦¬ν•˜λŠ” κ³„μΈ΅μž…λ‹ˆλ‹€.
    • μ»¨νŠΈλ‘€λŸ¬μ™€ 리포지토리 μ‚¬μ΄μ—μ„œ 쀑간 역할을 ν•˜λ©°, μ—¬λŸ¬ λ¦¬ν¬μ§€ν† λ¦¬λ‘œλΆ€ν„° 데이터λ₯Ό κ°€μ Έμ˜€κ±°λ‚˜ κ°€κ³΅ν•˜κ³ , 이λ₯Ό λ‹€μ‹œ μ»¨νŠΈλ‘€λŸ¬μ— μ „λ‹¬ν•©λ‹ˆλ‹€.
    • μ„œλΉ„μŠ€ 계측은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 핡심 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직이 μœ„μΉ˜ν•˜λŠ” κ³³μž…λ‹ˆλ‹€.
      • 예λ₯Ό λ“€μ–΄, μ‚¬μš©μž 인증, 결제 처리, 이메일 전솑 λ“±μ˜ μ£Όμš” κΈ°λŠ₯이 이 κ³„μΈ΅μ—μ„œ μ²˜λ¦¬λ©λ‹ˆλ‹€.
  • Repository: λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘κ·Ό, 도메인 객체λ₯Ό DB에 μ €μž₯ν•˜κ³  관리.
    • λ°μ΄ν„°λ² μ΄μŠ€μ™€ μƒν˜Έμž‘μš©ν•˜λŠ” κ³„μΈ΅μž…λ‹ˆλ‹€.
    • λ°μ΄ν„°μ˜ μ €μž₯, 검색, κ°±μ‹ , μ‚­μ œ λ“±μ˜ μž‘μ—…μ„ μ²˜λ¦¬ν•˜λ©°, λ°μ΄ν„°λ² μ΄μŠ€μ™€μ˜ 직접적인 톡신을 λ‹΄λ‹Ήν•©λ‹ˆλ‹€.
    • λ¦¬ν¬μ§€ν† λ¦¬λŠ” 데이터λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ SQL μΏΌλ¦¬λ‚˜ ORM(Object-Relational Mapping) μž‘μ—…μ„ λ‹΄λ‹Ήν•©λ‹ˆλ‹€.
    • 이 계측은 μ„œλΉ„μŠ€ κ³„μΈ΅μ—μ„œ ν•„μš”ν•œ 데이터λ₯Ό κ°€μ Έμ˜€κ±°λ‚˜, μƒˆ 데이터λ₯Ό μ €μž₯ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.
  • Domain: λΉ„μ¦ˆλ‹ˆμŠ€ 도메인 객체.
    • 예λ₯Ό λ“€μ–΄ νšŒμ›, μ£Όλ¬Έ 쿠폰 λ“±λ“± 주둜 λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯ν•˜κ³  관리됨.
    • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 핡심 μ—”ν‹°ν‹°(Entity)와 λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™μ„ μ •μ˜ν•˜λŠ” κ³„μΈ΅μž…λ‹ˆλ‹€.
      • 보톡 객체둜 ν‘œν˜„λ˜λ©°, λΉ„μ¦ˆλ‹ˆμŠ€ 둜직의 일뢀λ₯Ό μΊ‘μŠν™”ν•©λ‹ˆλ‹€.
    • 도메인 계측은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ€‘μš”ν•œ 객체듀(예: 'User', 'Product', 'Order' λ“±)을 μ •μ˜ν•˜κ³ , 이 객체듀이 μ–΄λ–€ λ°©μ‹μœΌλ‘œ μƒν˜Έμž‘μš©ν•˜λŠ”μ§€λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
      • μ΄λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ–΄λ–€ λΉ„μ¦ˆλ‹ˆμŠ€ 문제λ₯Ό ν•΄κ²°ν•˜λŠ”μ§€μ— λŒ€ν•œ λͺ¨λΈμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

2️⃣ 클래슀 μ˜μ‘΄κ΄€κ³„.

  • νšŒμ› λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ—λŠ” νšŒμ› μ„œλΉ„μŠ€κ°€ μžˆλ‹€.
    • νšŒμ›μ„ μ €μž₯ν•˜λŠ” 것은 μΈν„°νŽ˜μ΄μŠ€λ‘œ 섀계 λ˜μ–΄μžˆλ‹€.
      • κ·Έ μ΄μœ λŠ” 아직 데이터 μ €μž₯μ†Œκ°€ μ„ μ •λ˜μ§€ μ•Šμ•˜μŒμ„ κ°€μ •ν•˜κ³  μ„€κ³„ν–ˆκΈ° λ•Œλ¬Έμ΄λ‹€.
      • 그리고 κ΅¬ν˜„μ²΄λ₯Ό μš°μ„ μ€ λ©”λͺ¨λ¦¬ κ΅¬ν˜„μ²΄λ‘œ λ§Œλ“€κ²ƒμ΄λ‹€.
        • κ·Έ μ΄μœ λŠ” 일단 κ°œλ°œμ€ ν•΄μ•Όν•˜λ―€λ‘œ ꡉμž₯히 λ‹¨μˆœν•œ λ©”λͺ¨λ¦¬ 기반의 데이터 μ €μž₯μ†Œλ₯Ό μ‚¬μš©ν•˜μ—¬ λ©”λͺ¨λ¦¬ κ΅¬ν˜„μ²΄λ‘œ λ§Œλ“ λ‹€.
          • ν–₯후에 λ©”λͺ¨λ¦¬ κ΅¬ν˜„μ²΄λ₯Ό ꡬ체적인 기술이 선정이 되면(RDB, NoSQL λ“±) ꡐ체할 것이닀.
            • κ΅μ²΄ν•˜λ €λ©΄ Interfaceκ°€ ν•„μš”ν•˜λ―€λ‘œ Interfaceλ₯Ό μ •μ˜ν•œ 것이닀.
  • 아직 데이터 μ €μž₯μ†Œκ°€ μ„ μ •λ˜μ§€ μ•Šμ•„μ„œ, μš°μ„  μΈν„°νŽ˜μ΄μŠ€λ‘œ κ΅¬ν˜„ 클래슀λ₯Ό λ³€κ²½ν•  수 μžˆλ„λ‘ 섀계
  • 데이터 μ €μž₯μ†ŒλŠ” RDB, NoSQL λ“±λ“± λ‹€μ–‘ν•œ μ €μž₯μ†Œλ₯Ό 고민쀑인 μƒν™©μœΌλ‘œ κ°€μ •
  • κ°œλ°œμ„ μ§„ν–‰ν•˜κΈ° μœ„ν•΄μ„œ 초기 개발 λ‹¨κ³„μ—μ„œλŠ” κ΅¬ν˜„μ²΄λ‘œ κ°€λ²Όμš΄ λ©”λͺ¨λ¦¬ 기반의 데이터 μ €μž₯μ†Œ μ‚¬μš©