🐳Spring

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λž€?

μžλ°” μ—”ν„°ν”„λΌμ΄μ¦ˆ κ°œλ°œμ„ μœ„ν•œ μ˜€ν”ˆ μ†ŒμŠ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν”„λ ˆμž„μ›Œν¬μž…λ‹ˆλ‹€.

κ°„λ‹¨νžˆ μŠ€ν”„λ§μ΄λΌκ³  뢈리며 동적인 μ›Ή μ‚¬μ΄νŠΈλ₯Ό κ°œλ°œν•˜κΈ° μœ„ν•œ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

​

-μ—”ν„°ν”„λΌμ΄μ¦ˆ: κ°œλ³„ μ‚¬μš©μžκ°€ μ•„λ‹Œ 기업을 λŒ€μƒμœΌλ‘œ ν•˜λŠ” 개발, μˆ˜λ§Žμ€ λ°μ΄ν„°μ²˜λ¦¬μ™€ νŠΈλžœμž­μ…˜μ΄ λ™μ‹œμ— μ—¬λŸ¬ μ‚¬μš©μžλ‘œλΆ€ν„° ν–‰ν•΄μ§€λŠ” 큰 규λͺ¨μ˜ ν™˜κ²½μ„ λ§ν•©λ‹ˆλ‹€

​

-μ˜€ν”ˆ μ†ŒμŠ€: λˆ„κ΅¬λ‚˜ 자유둭게 μ†ŒμŠ€μ½”λ“œλ₯Ό μˆ˜μ •ν•˜κ³  κ³΅μœ ν•˜λ©° 진행 쀑인 ν”„λ‘œμ„ΈμŠ€μ— κΈ°μ—¬ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€

​

-ν”„λ ˆμž„μ›Œν¬: 개발 μ„€κ³„μ˜ 기본이 λ˜λŠ” λΌˆλŒ€λ‚˜ κ΅¬μ‘°μž…λ‹ˆλ‹€

κ°œλ°œμžλŠ” 각 개개인의 λŠ₯λ ₯차이가 크고, λ”°λΌμ„œ 개발자 ꡬ성에 λ”°λΌμ„œ ν”„λ‘œμ νŠΈμ˜ κ²°κ³Ό 차이가 ν½λ‹ˆλ‹€.

=> μ΄λŸ¬ν•œ 상황을 κ·Ήλ³΅ν•˜κΈ° μœ„ν•œ μ½”λ“œμ˜ 결과물이 'ν”„λ ˆμž„μ›Œν¬' μž…λ‹ˆλ‹€.

ν”„λ ˆμž„μ›Œν¬ 이용 ν•œλ‹€λŠ” 의미 : ν”„λ‘œκ·Έλž¨μ˜ κΈ°λ³Έ νλ¦„μ΄λ‚˜ ꡬ쑰λ₯Ό μ •ν•˜κ³ , λͺ¨λ“  νŒ€μ›μ΄ 이 ꡬ쑰에 μžμ‹ μ˜ μ½”λ“œλ₯Ό μΆ”κ°€ν•˜λŠ” λ°©μ‹μœΌλ‘œ 개발 ν•œλ‹€.

​

ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•˜λ©΄ 크게 λ‹€μŒ 3κ°€μ§€μ˜ μž₯점이 μžˆμŠ΅λ‹ˆλ‹€.

1. μ–΄λŠμ •λ„ μ™„μ„±ν•œ μƒνƒœμ—μ„œ ν•„μš”ν•œ 뢀뢄을 μ‘°λ¦½ν•˜λŠ” ν˜•νƒœμ˜ 개발이 κ°€λŠ₯ν•˜λ‹€.

2. μΌμ •ν•œ ν’ˆμ§ˆμ΄ 보μž₯된 결과물을 얻을 수 μžˆλ‹€.

3. 개발 μ‹œκ°„μ„ 단좕할 수 μžˆλ‹€.

​

ν”„λ ˆμž„μ›Œ μ›Œν¬ μ’…λ₯˜ :

SpringMVC(Java의 μ›Ή ν”„λ ˆμž„μ›Œν¬),

Django(Python의 μ›Ή ν”„λ ˆμž„μ›Œν¬),

Flask(Python의 마이크둜 μ›Ή ν”„λ ˆμž„μ›Œν¬),

Ruby on rails(Ruby의 μ›Ή ν”„λ ˆμž„μ›Œν¬),

.NET Framework(C#),

Express.js, Next.js (Node.js μžλ°”μŠ€ν¬λ¦½νŠΈ μ›Ή ν”„λ ˆμž„μ›Œν¬) λ“±λ“±.

μ „μžμ •λΆ€ ( μŠ€ν”„λ§ν”„λ ˆμž„μ›Œν¬ )

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ˜ νŠΉμ§•

Β·κ²½λŸ‰ μ»¨ν…Œμ΄λ„ˆ

μžλ°” 객체λ₯Ό 직접 κ΄€λ¦¬ν•©λ‹ˆλ‹€.

각각의 객체 생성, μ†Œλ©Έκ³Ό 같은 생λͺ…μ£ΌκΈ°λ₯Ό κ΄€λ¦¬ν•˜λ©° μŠ€ν”„λ§μœΌλ‘œλΆ€ν„° ν•„μš”ν•œ 객체λ₯Ό μ–»μ–΄μ˜΅λ‹ˆλ‹€

​

Β·μ œμ–΄μ˜ μ—­μ „ IOC(Inversion of control)

일반적으둜 μ‚¬μš©μžκ°€ μ½”λ“œμ˜ 흐름을 μ£Όλ„ν•˜λ©° 객체λ₯Ό κ΅¬μ„±ν•˜κ³  λͺ¨λ“  μž‘μ—…μ„ μ œμ–΄ν–ˆλ‹€λ©΄,

IOCλŠ” μ‚¬μš©μžκ°€ μ•„λ‹Œ νŠΉλ³„ν•œ 객체가 μ œμ–΄ κΆŒν•œμ„ μœ„μž„λ°›μ•„ 각 객체와 흐름을 μ œμ–΄ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

β†’μ½”λ“œ κ°„μ˜ 쀑볡을 쀄여 무거운 μ„œλ²„ 배치의 뢀담을 쀄이며, μœ μ—°ν•œ μ½”λ“œ μž‘μ„±κ³Ό μœ μ§€ 보수 등을 νŽΈν•˜κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€

​

IOCλ₯Ό κ΅¬μ„±ν•˜λŠ” μš”μ†Œμ—λŠ” DI와 DL이 μžˆμŠ΅λ‹ˆλ‹€.

*DI(Dependency Injection) : μ˜μ‘΄μ„± μ£Όμž…

각 객체가 μ„œλ‘œ μ˜μ‘΄ν•˜λŠ” 관계가 될 수 μžˆλ„λ‘ μ˜μ‘΄μ„±μ„ μ£Όμž…ν•©λ‹ˆλ‹€. 각각의 κ³„μΈ΅μ΄λ‚˜ μ„œλΉ„μŠ€λ“€ 간에 μ˜μ‘΄μ„±μ΄ μ‘΄μž¬ν•  경우 빈(Bean) μ„€μ • 정보λ₯Ό λ°”νƒ•μœΌλ‘œ μ»¨ν…Œμ΄λ„ˆκ°€ μžλ™μœΌλ‘œ μ—°κ²°ν•΄ μ€λ‹ˆλ‹€

​

*DL(Dependency Lookup) : μ˜μ‘΄μ„± 검색

μ»¨ν…Œμ΄λ„ˆμ—μ„œ 객체λ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ λ³„λ„μ˜ μ €μž₯μ†Œμ— 빈(bean)을 μ €μž₯ν•˜κ³  κ°œλ°œμžλ“€μ€ μ»¨ν…Œμ΄λ„ˆμ—μ„œ μ œκ³΅ν•˜λŠ” APIλ₯Ό μ΄μš©ν•˜μ—¬ μ‚¬μš©ν•˜κ³ μž ν•˜λŠ” 빈(bean)을 κ²€μƒ‰ν•©λ‹ˆλ‹€

​*Bean : μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆκ°€ κ΄€λ¦¬ν•˜λŠ” μžλ°” 객체

Β· POJO(Plain Old Java Object)

λ‹¨μˆœ μžλ°” 였브젝트(ν‰λ²”ν•œ μžλ°” 객체)μž…λ‹ˆλ‹€. μ˜μ‘΄μ„±μ΄ μ—†μœΌλ©° κ°„κ²°ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.

νŠΉλ³„ν•œ ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜μ§€ μ•Šμ•„λ„ 되기 λ•Œλ¬Έμ— 자유둭게 μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆλŠ”λ°μš”,

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ—μ„œ POJOλ₯Ό μ‚¬μš©ν•˜λ©΄ λ‹€λ₯Έ 기술과의 μ˜μ‘΄μ„±μ΄ 쀄어듀어 ν…ŒμŠ€νŠΈ 및 μœ μ§€ λ³΄μˆ˜κ°€ νŽΈλ¦¬ν•œ μœ μ—°μ„±μ„ κ°€μ§‘λ‹ˆλ‹€.

(μš°λ¦¬κ°€ λ§Œλ“€μ—ˆλ˜ DTO도 POJO λ°©μ‹μœΌλ‘œ μž‘μ„±λ¨)

"POJOλž€ 객체지ν–₯적인 원리에 μΆ©μ‹€ν•˜λ©΄μ„œ, ν™˜κ²½κ³Ό κΈ°μˆ μ— μ’…μ†λ˜μ§€ μ•Šκ³  ν•„μš”μ— 따라

μž¬ν™œμš©λ  수 μžˆλŠ” λ°©μ‹μœΌλ‘œ μ„€κ³„λœ μ˜€λΈŒμ νŠΈμ΄λ‹€"

Β· AOP(Aspect-Oriented Programming)

관점 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ„ μ˜λ―Έν•©λ‹ˆλ‹€

λ‘œν‚Ή, νŠΈλžœμž­μ…˜, λ³΄μ•ˆ λ“± 닀루기 μ–΄λ €μš΄ κΈ°λŠ₯을 ν”„λ‘œκ·Έλž¨μ˜ 핡심 둜직과 λΆ„λ¦¬ν•˜μ—¬ κ΄€λ¦¬ν•˜λŠ” 방법을 μ œκ³΅ν•©λ‹ˆλ‹€

λ”°λΌμ„œ 핡심 λ‘œμ§μ„ λ³€κ²½ν•˜μ§€ μ•Šκ³  λΆ€κ°€κΈ°λŠ₯을 μΆ”κ°€ν•  수 있기 λ•Œλ¬Έμ— 개발 및 μœ μ§€ λ³΄μˆ˜κ°€ μš©μ΄ν•΄μ§€λ©° μ½”λ“œμ˜ μž¬μ‚¬μš© μ„±κ³Ό 가독성도 높이고 전체적인 ꡬ쑰의 κ°œμ„ μ΄ κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€.

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬ μ‚¬μš©μ΄μœ (μž₯점)

β€‹μ •ν˜•ν™” λ˜μ–΄ 있기 λ•Œλ¬Έμ— μΌμ •μˆ˜μ€€μ˜ ν’ˆμ§ˆμ„ κΈ°λŒ€ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

개발 ν›„ μœ μ§€λ³΄μˆ˜ 및 κΈ°λŠ₯의 ν™•μž₯μ„±μ—μ„œλ„ ν’ˆμ§ˆμ„ 보μž₯ν•©λ‹ˆλ‹€.

'μ „μžν‘œμ€€ ν”„λ ˆμž„μ›Œν¬'κΈ° λ•Œλ¬Έμ— ν•΄λ‹Ή ν”„λ ˆμž„μ›Œν¬μ˜ μˆ˜μš”κ°€ ν½λ‹ˆλ‹€.(ꡭ내상황)

​

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬ 단점

β€‹μ²˜μŒ 섀정이 λ³΅μž‘ν•˜λ‹€.( μŠ€ν”„λ§λΆ€νŠΈλŠ” 간단 )

λΆ„λͺ… λ§Žμ€ κΈ°λŠ₯을 μ œκ³΅ν•΄μ„œ νŽΈλ¦¬ν•˜μ§€λ§Œ, 이 κΈ°λŠ₯듀을 μŠ΅λ“ν•˜κΈ°μœ„ν•΄ μƒλ‹Ήν•œ λ…Έλ ₯κ³Ό μ‹œκ°„μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

​

μš°λ¦¬λŠ” λ‹¨κ³„λ³„λ‘œ Spring legacy λ₯Ό 톡해 기본적인 μŠ€ν”„λ§μ— λŒ€ν•΄μ„œ 배우고

Spring Bootλ₯Ό ν™œμš©ν•΄ κ°„λ‹¨ν•œ μ›Ή MVC κ°œλ°œμ„ ν•΄λ³Ό μ˜ˆμ •

μŠ€ν”„λ§ 기술 μžμ²΄μ— 맀λͺ°λ˜κΈ° λ³΄λ‹€λŠ” μ‚¬μš©λ²•μ— μ΄ˆμ μ„ λ§žμΆ°μ„œ

였래된 μŠ€ν”„λ§ 기술, λ§ˆμ΄λ„ˆν•œ μŠ€ν”„λ§ κΈ°μˆ μ— λŒ€ν•œ 뢀뢄은 닀루지 μ•Šμ„ μ˜ˆμ •

Last updated