Skip to content

Latest commit

Β 

History

History
124 lines (59 loc) Β· 7.05 KB

1weekSpring.md

File metadata and controls

124 lines (59 loc) Β· 7.05 KB

⭐️ 1μ£Όμ°¨ λ°±μ—”λ“œ κ°œλ…κ³Ό Springκ°œλ… πŸ“š


λ°±μ—”λ“œ

μ‹œμŠ€ν…œμ˜ ꡬ좕, λ‚΄λΆ€λ‘œμ§, λ°μ΄ν„°λ² μ΄μŠ€μ„€κ³„, λ°μ΄ν„°μ˜ 처리 등을 λ‹΄λ‹Ή



  • ν”„λ‘ νŠΈμ—”λ“œμ™€ λ°±μ—”λ“œμ˜ 차이

ν”„λ‘ νŠΈμ—”λ“œ ν”„λ‘œκ·Έλž¨ => μ‚¬μš©μžμ™€ 직접 μƒν˜Έμž‘μš©μ„ ν•˜λŠ” ν”„λ‘œκ·Έλž¨

λ°±μ—”λ“œ ν”„λ‘œκ·Έλž¨ => μš”κ΅¬λ˜λŠ” μžμ›λ“€μ— κ°€κΉκ²Œ μžˆκ±°λ‚˜, λ˜λŠ” μš”κ΅¬λ˜λŠ” μžμ›λ“€κ³Ό ꡐ신할 수 μžˆλŠ” λŠ₯λ ₯을 κ°€μ§€λŠ” 등을 톡해 ν”„λ‘ νŠΈμ—”λ“œ μ„œλΉ„μŠ€λ₯Ό κ°„μ ‘μ μœΌλ‘œ 지원함.




  • λ°±μ—”λ“œ κ°œλ°œμžλž€?

    λˆˆμ— 보이지 μ•ŠλŠ” κ°œλ°œμ„ ν•˜λŠ” 개발자

    넀이버 메인을 톡해 λ“€μ–΄κ°€ λ³Ό 수 μžˆλŠ” 각쒅 κΈ°μ‚¬λ‚˜, μ›Ήνˆ°, 이메일, 카페 κ²Œμ‹œλ¬Ό 등은 'μ„œλ²„'λΌλŠ” 곳에 μ €μž₯이 λ˜μ–΄ μžˆλŠ”λ°, 이 μ„œλ²„μ— 정보λ₯Ό μ €μž₯ν•˜κ³  κΊΌλ‚΄μ˜€λŠ” 논리λ₯Ό λ§Œλ“œλŠ” 개발자λ₯Ό 'λ°±μ—”λ“œ 개발자'라고 λΆ€λ₯Έλ‹€.



Spring Framework

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λŠ” μžλ°” ν”Œλž«νΌμ„ μœ„ν•œ μ˜€ν”ˆ μ†ŒμŠ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν”„λ ˆμž„μ›Œν¬λ‘œμ„œ κ°„λ‹¨νžˆ μŠ€ν”„λ§μ΄λΌκ³ λ„ ν•œλ‹€. 동적인 μ›Ήμ‚¬μ΄νŠΈλ₯Ό κ°œλ°œν•˜κΈ° μœ„ν•œ μ—¬λŸ¬ 가지 μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜κ³  μžˆλ‹€. λŒ€ν•œλ―Όκ΅­ κ³΅κ³΅κΈ°κ΄€μ˜ μ›Ή μ„œλΉ„μŠ€ 개발 μ‹œ μ‚¬μš©μ„ ꢌμž₯ν•˜κ³  μžˆλŠ” μ „μžμ •λΆ€ ν‘œμ€€ν”„λ ˆμž„μ›Œν¬μ˜ 기반 κΈ°μˆ λ‘œμ„œ 쓰이고 μžˆλ‹€.

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λŠ” μ–΄λ–€ ν”Œλž«νΌμ—μ„œλ„ 쒅합적인 ν”„λ‘œκ·Έλž˜λ°κ³Ό μžλ°” 기반의 ν˜„λŒ€ μ—”ν„°ν”„λΌμ΄μ¦ˆ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ Configuration Model을 μ œκ³΅ν•œλ‹€. μŠ€ν”„λ§μ˜ ν•΅μ‹¬μš”μ†ŒλŠ” μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ λ‹¨μœ„μ˜ 인프라λ₯Ό μ œκ³΅ν•œλ‹€λŠ” 것. μŠ€ν”„λ§μ€ κΈ°μ—…μš© μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ plumbing에 μ΄ˆμ μ„ λ§žμΆ”κ³  μžˆλ‹€. κ·Έλž˜μ„œ κ°œλ°œνŒ€μ€ νŠΉμ • 배포 ν™˜κ²½μ—μ„œ λΆˆν•„μš”ν•œ μ‹œλ„μ—†μ΄ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λΉ„μ§€λ‹ˆμŠ€ λ‘œμ§μ— μ΄ˆμ μ„ 맞좜 수 μžˆλ‹€.



  • Spring Framework μ •μ˜

    • JAVA ν”Œλž«νΌμ„ μœ„ν•œ μ˜€ν”ˆμ†ŒμŠ€ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ ν”„λ ˆμž„μ›Œν¬
    • μžλ°” μ—”ν„°ν”„λΌμ΄μ¦ˆ κ°œλ°œμ„ νŽΈν•˜κ²Œ ν•΄μ£ΌλŠ” μ˜€ν”ˆ μ†ŒμŠ€ κ²½λŸ‰κΈ‰ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν”„λ ˆμž„μ›Œν¬
    • μžλ°” κ°œλ°œμ„ μœ„ν•œ ν”„λ ˆμž„μ›Œν¬λ‘œ 쒅속 객체λ₯Ό 생성해주고, μ‘°λ¦½ν•΄μ£ΌλŠ” 도ꡬ
    • POJO(Plain Old Java Object) BEAN CONTAINNER


  • Spring Framework νŠΉμ§•

    • 크기와 λΆ€ν•˜μ˜ μΈ‘λ©΄μ—μ„œ κ²½λŸ‰

    • μ œμ–΄ μ—­ν–‰(IoC)λ₯Ό ν†΅ν•˜μ—¬ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λŠμŠ¨ν•œ 결합을 도λͺ¨

      : 컨트둀의 μ œμ–΄κΆŒμ΄ μ‚¬μš©μžκ°€ μ•„λ‹ˆλΌ ν”„λ ˆμž„μ›Œν¬μ— μžˆμ–΄μ„œ ν•„μš”μ— 따라 μŠ€ν”„λ§μ—μ„œ μ‚¬μš©μžμ˜ μ½”λ“œλ₯Ό 호좜

    • 관점지ν–₯(AOP) ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•œ ν’λΆ€ν•œ 지원을 함

      : νŠΈλžœμž­μ…˜μ΄λ‚˜ λ‘œκΉ…, λ³΄μ•ˆκ³Ό 같이 μ—¬λŸ¬ λͺ¨λ“ˆμ—μ„œ κ³΅ν†΅μ μœΌλ‘œ μ‚¬μš©ν•˜λŠ” κΈ°λŠ₯의 경우 ν•΄λ‹Ή κΈ°λŠ₯을 λΆ„λ¦¬ν•˜μ—¬ 관리할 수 있음

    • μ˜μ‘΄μ„± μ£Όμž… (DI : Dependency Injection)을 지원함

    : 각각의 κ³„μΈ΅μ΄λ‚˜ μ„œλΉ„μŠ€λ“€ 간에 μ˜μ‘΄μ„±μ΄ μ‘΄μž¬ν•  경우 ν”„λ ˆμž„μ›Œν¬κ°€ μ„œλ‘œ μ—°κ²°μ‹œμΌœμ€€λ‹€.

    • PSA(Portable Service Abstraction)

      : μŠ€ν”„λ§μ€ λ‹€λ₯Έ μ—¬λŸ¬ λͺ¨λ“ˆμ„ μ‚¬μš©ν•¨μ— μžˆμ–΄μ„œ λ³„λ„μ˜ 좔상화 λ ˆμ΄μ–΄λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ JPAλ₯Ό μ‚¬μš©ν•  λ•Œμ—μ„œ Spring JPAλ₯Ό μ‚¬μš©ν•˜μ—¬ 좔상화 ν•˜λ―€λ‘œ μ‹€μ œ κ΅¬ν˜„μ— μžˆμ–΄μ„œ Hibernateλ₯Ό μ‚¬μš©ν•˜λ“  EclipseLinkλ₯Ό μ‚¬μš©ν•˜λ“  μ‚¬μš©μžλŠ” 이 λͺ¨λ“ˆμ˜ 의쑴 없이 ν”„λ‘œκ·Έλž¨μ— 집쀑할 수 μžˆμŠ΅λ‹ˆλ‹€.

    • Plain Object Java Object λ°©μ‹μ˜ ν”„λ ˆμž„μ›Œν¬

      : 기본적으둜 μ‚¬μš©μžκ°€ λ§Œλ“€μ–΄λ‚Έ 객체λ₯Ό μ˜λ―Έν•¨. μŠ€ν”„λ§μ€ μ‚¬μš©μžκ°€ λ§Œλ“€ 객체듀에 λŒ€ν•΄μ„œλ„ 라이프사이클 관리λ₯Ό μœ„μž„ν•΄μ„œ μˆ˜ν–‰ν•˜λ©°, μ΄λ“€μ˜ μ‘°ν•©μœΌλ‘œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“€ 수 있음. 일반적인 J2EE ν”„λ ˆμž„μ›Œν¬μ— λΉ„ν•΄ κ΅¬ν˜„μ„ μœ„ν•΄ νŠΉμ •ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜κ±°λ‚˜ 상속을 받을 ν•„μš”κ°€ μ—†μ–΄ 기쑴에 μ‘΄μž¬ν•˜λŠ” 라이브러리 등을 μ§€μ›ν•˜κΈ°μ— μš©μ΄ν•˜κ³  객체가 가볍닀.

    • κ°„λ‹¨ν•œ μ»΄ν¬λ„ŒνŠΈλ‘œ λ³΅μž‘ν•œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΅¬μ„±ν•˜κ³  μ„€μ •ν•  수 있음

    • μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ 객체의 생λͺ…주기와 섀정을 ν¬ν•¨ν•˜κ³  κ΄€λ¦¬ν•œλ‹€λŠ” μ μ—μ„œ μΌμ’…μ˜ μ»¨ν…Œμ΄λ„ˆλΌκ³  ν•  수 있음



  • Spring Framework μ£Όμš” λͺ¨λ“ˆ

    • μ œμ–΄ λ°˜μ „ (IoC : Inversion of Control) μ»¨ν…Œμ΄λ„ˆ

      : μŠ€ν”„λ§μ˜ κ°€μž₯ μ€‘μš”ν•˜κ³  핡심적인 κΈ°λŠ₯μœΌλ‘œμ„œ μžλ°”μ˜ 반영(reflection)을 μ΄μš©ν•΄μ„œ 객체의 생λͺ…μ£ΌκΈ°λ₯Ό κ΄€λ¦¬ν•˜κ³  μ˜μ‘΄μ„± μ£Όμž…(Dependency Injection)을 톡해 각 κ³„μΈ΅μ΄λ‚˜ μ„œλΉ„μŠ€λ“€κ°„μ˜ μ˜μ‘΄μ„±μ„ λ§žμΆ°μ€€λ‹€. μ΄λŸ¬ν•œ κΈ°λŠ₯듀은 주둜 ν™˜κ²½μ„€μ •μ„ λ‹΄λ‹Ήν•˜λŠ” XML νŒŒμΌμ— μ˜ν•΄ μ„€μ •λ˜κ³  μˆ˜ν–‰λœλ‹€.

    • 관점 지ν–₯ ν”„λ‘œκ·Έλž˜λ° ν”„λ ˆμž„μ›Œν¬ (AOP)

      : 관점지ν–₯ν˜• ν”„λ‘œκ·Έλž¨μœΌλ‘œ μ‚¬μš©μžλ“€μ΄ νŠΈλžœμ μ…˜ 처리/λ‘œκΉ…/μ˜ˆμ™Έ μ²˜λ¦¬λ“€μ˜ λ‘œμ§μ„ κ³΅ν†΅μœΌλ‘œ μ²˜λ¦¬ν•  수 μžˆλŠ” κΈ°λŠ₯을 지원함. ν•΄λ‹Ή κΈ°λŠ₯을 잘 μ‚¬μš©ν•˜λ©΄ λΉ„μ§€λ‹ˆμŠ€λ‘œμ§μ™€ 기타 곡톡λͺ¨λ“ˆμ΄ μ„žμ΄λŠ” 것을 λ°©μ§€ν•˜μ—¬ λΉ„μ§€λ‹ˆμŠ€ λ‘œμ§μ— 집쀑할 수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.

    • 데이터 μ•‘μ„ΈμŠ€ ν”„λ ˆμž„μ›Œν¬

      : μŠ€ν”„λ§μ€ λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘μ†ν•˜κ³  자료λ₯Ό μ €μž₯ 및 μ½μ–΄μ˜€κΈ° μœ„ν•œ μ—¬λŸ¬ 가지 유λͺ…ν•œ 라이브러리, 즉 JDBC, iBATIS(MyBatis), ν•˜μ΄λ²„λ„€μ΄νŠΈ 등에 λŒ€ν•œ 지원 κΈ°λŠ₯을 μ œκ³΅ν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€ ν”„λ‘œκ·Έλž˜λ°μ„ μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€.

    • νŠΈλžœμž­μ…˜ 관리 ν”„λ ˆμž„μ›Œν¬

      : μŠ€ν”„λ§μ€ μΆ”μƒν™”λœ νŠΈλžœμž­μ…˜ 관리λ₯Ό μ§€μ›ν•˜λ©° XML μ„€μ •νŒŒμΌ 등을 μ΄μš©ν•œ 선언적인 방식 및 ν”„λ‘œκ·Έλž˜λ°μ„ ν†΅ν•œ 방식을 λͺ¨λ‘ μ§€μ›ν•œλ‹€.

    • λͺ¨λΈ-λ·°-컨트둀러 νŒ¨ν„΄

      : μŠ€ν”„λ§μ€ μ›Ή ν”„λ‘œκ·Έλž¨λ° 개발 μ‹œ 거의 ν‘œμ€€μ μΈ 방식인 Spring MVC라 λΆˆλ¦¬λŠ” λͺ¨λΈ-λ·°-컨트둀러(MVC) νŒ¨ν„΄μ„ μ‚¬μš©ν•œλ‹€. DispatcherServlet이 Controller 역할을 λ‹΄λ‹Ήν•˜μ—¬ 각쒅 μš”μ²­μ„ μ μ ˆν•œ μ„œλΉ„μŠ€μ— λΆ„μ‚°μ‹œμΌœμ£Όλ©° 이λ₯Ό 각 μ„œλΉ„μŠ€λ“€μ΄ 처리λ₯Ό ν•˜μ—¬ κ²°κ³Όλ₯Ό μƒμ„±ν•˜κ³  κ·Έ κ²°κ³ΌλŠ” λ‹€μ–‘ν•œ ν˜•μ‹μ˜ View μ„œλΉ„μŠ€λ“€λ‘œ 화면에 ν‘œμ‹œλ  수 μžˆλ‹€.

    • 배치 ν”„λ ˆμž„μ›Œν¬

      : μŠ€ν”„λ§μ€ νŠΉμ • μ‹œκ°„λŒ€μ— μ‹€ν–‰ν•˜κ±°λ‚˜ λŒ€μš©λŸ‰μ˜ 자료λ₯Ό μ²˜λ¦¬ν•˜λŠ”λ° μ“°μ΄λŠ” 일괄 처리(Batch Processing)을 μ§€μ›ν•˜λŠ” 배치 ν”„λ ˆμž„μ›Œν¬λ₯Ό μ œκ³΅ν•œλ‹€. 기본적으둜 μŠ€ν”„λ§ λ°°μΉ˜λŠ” Quartz 기반으둜 λ™μž‘ν•œλ‹€.