๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Spring-study๐ŸŒฑ/Spring-Basic60

Section 1-5. ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์™€ ์Šคํ”„๋ง ๋‹ค์‹œ ์Šคํ”„๋ง์œผ๋กœ - ์Šคํ”„๋ง ์ด์•ผ๊ธฐ์— ์™œ ๊ฐ์ฒด ์ง€ํ–ฅ ์ด์•ผ๊ธฐ๊ฐ€ ๋‚˜์˜ค๋Š”๊ฐ€? ์Šคํ”„๋ง์€ ๋‹ค์Œ ๊ธฐ์ˆ ๋กœ ๋‹คํ˜•์„ฑ + OCP / DIP๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์ง€์› DI(Dependency Injection) : ์˜์กด๊ด€๊ณ„, ์˜์กด์„ฑ ์ฃผ์ž… DI ์ปจํ…Œ์ด๋„ˆ ์ œ๊ณต ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ ์—†์ด ๊ธฐ๋Šฅ ํ™•์žฅ ์‰ฝ๊ฒŒ ๋ถ€ํ’ˆ์„ ๊ต์ฒดํ•˜๋“ฏ์ด ๊ฐœ๋ฐœ ์Šคํ”„๋ง์ด ์—†๋˜ ์‹œ์ ˆ ์˜›๋‚  ์–ด๋–ค ๊ฐœ๋ฐœ์ž๊ฐ€ ์ข‹์€ ๊ฐ์ฒด ์ง€ํ–ฅ ๊ฐœ๋ฐœ์„ ํ•˜๋ ค๊ณ  OCP, DIP ์›์น™์„ ์ง€ํ‚ค๋ฉด์„œ ๊ฐœ๋ฐœ์„ ํ•ด๋ณด๋‹ˆ, ๋„ˆ๋ฌด ํ• ์ผ์ด ๋งŽ์•˜๋‹ค. ๋ฐฐ๋ณด๋‹ค ๋ฐฐ๊ผฝ์ด ํฌ๋‹ค. ๊ทธ๋ž˜์„œ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๋งŒ๋“ค์–ด๋ฒ„๋ฆผ ์ˆœ์ˆ˜ํ•˜๊ฒŒ ์ž๋ฐ”๋กœ OCP, DIP ์›์น™๋“ค์„ ์ง€ํ‚ค๋ฉด์„œ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด, ๊ฒฐ๊ตญ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค. (๋” ์ •ํ™•ํžˆ๋Š” DI ์ปจํ…Œ์ด๋„ˆ) DI ๊ฐœ๋…์€ ๋ง๋กœ ์„ค๋ช…ํ•ด๋„ ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ๋œ๋‹ค. ์ฝ”๋“œ๋กœ ์งœ๋ด์•ผ ํ•„์š”์„ฑ์„ ์•Œ๊ฒŒ๋œ๋‹ค! ์ •๋ฆฌ ๋ชจ.. 2022. 3. 31.
Section 1-4. ์ข‹์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์˜ 5๊ฐ€์ง€ ์›์น™(SOLID) ํด๋ฆฐ์ฝ”๋“œ๋กœ ์œ ๋ช…ํ•œ ๋กœ๋จธํŠธ ๋งˆํ‹ด์ด ์ข‹์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์˜ 5๊ฐ€์ง€ ์›์น™์„ ์ •๋ฆฌ SRP : ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ (single responsibility principle) OCP : ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™ (Open/closed principle) LSP : ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™ (Liskov substitution principle) ISP : ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™ (Interface segregation principle) DIP : ์˜์กด๊ด€๊ณ„ ์—ญ์ „ ์›์น™ (Dependency inversion principle) 1. SRP : ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ ํ•œ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค. ํ•˜๋‚˜์˜ ์ฑ…์ž„์ด๋ผ๋Š” ๊ฒƒ์€ ๋ชจํ˜ธํ•˜๋‹ค. ํด ์ˆ˜๋„, ์ž‘์„ ์ˆ˜๋„ ์žˆ๋‹ค. ๋ฌธ๋งฅ๊ณผ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค. ๋„ˆ๋ฌด ํฌ๊ฒŒํ•˜๊ฑฐ๋‚˜, ์ž‘๊ฒŒํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ .. 2022. 3. 31.
Section 1-3. ์ข‹์€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€? ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ์„ ๋ช…๋ ์–ด์˜ ๋ชฉ๋ก์œผ๋กœ ๋ณด๋Š” ์‹œ๊ฐ์—์„œ ๋ฒ—์–ด๋‚˜ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…๋ฆฝ๋œ ๋‹จ์œ„, ์ฆ‰ "๊ฐ์ฒด"๋“ค์˜ ๋ชจ์ž„์œผ๋กœ ํŒŒ์•…ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ฐ๊ฐ์˜ ๊ฐ์ฒด๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.(ํ˜‘๋ ฅ) ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํ”„๋กœ๊ทธ๋žจ์„ ์œ ์—ฐํ•˜๊ณ  ๋ณ€๊ฒฝ์ด ์šฉ์ดํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๊ทœ๋ชจ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์— ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ ํŠน์ง• ์ถ”์ƒํ™” ์บก์Аํ™” ์ƒ์† ๋‹คํ˜•์„ฑ ์œ ์—ฐํ•˜๊ณ , ๋ณ€๊ฒฝ์ด ์šฉ์ด?? ๋ ˆ๊ณ  ๋ธ”๋Ÿญ ์กฐ๋ฆฝํ•˜๋“ฏ์ด ํ‚ค๋ณด๋“œ, ๋งˆ์šฐ์Šค ๊ฐˆ์•„ ๋ผ์šฐ๋“ฏ์ด ์ปดํ“จํ„ฐ ๋ถ€ํ’ˆ ๊ฐˆ์•„ ๋ผ์šฐ๋“ฏ์ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‰ฝ๊ณ  ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•˜๋ฉด์„œ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ ๋‹คํ˜•์„ฑ(Polymorphism) ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํƒ€์ž…์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๋‹คํ˜•์„ฑ์„ ํ†ตํ•ด์„œ ๋ฌดํ•œํ•œ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค... 2022. 3. 31.
Section 1-2. ์Šคํ”„๋ง์ด๋ž€? ์Šคํ”„๋ง ์ƒํƒœ๊ณ„ ํ•„์ˆ˜ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„ ์›Œํฌ(์Šคํ”„๋ง์˜ ๊ฐ€์žฅ ํ•ต์‹ฌ) ์Šคํ”„๋ง ๋ถ€ํŠธ(์—ฌ๋Ÿฌ ์Šคํ”„๋ง ๊ธฐ์ˆ ๋“ค์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๊ฒŒ ํ•จ) ์„ ํƒ ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ CRUD๋ฅผ ๋„์™€์ฃผ๋Š” ๊ธฐ์ˆ  ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๊ฐ€ ์žˆ๋‹ค. ์Šคํ”„๋ง ์„ธ์…˜ ์„ธ์…˜๊ธฐ๋Šฅ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค. ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ ๋ณด์™„๊ด€๋ จ ์Šคํ”„๋ง Rest Docs API ๋ฌธ์„œ๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋„์™€์ค€๋‹ค. ์Šคํ”„๋ง ๋ฐฐ์น˜ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ(๋ฐ์ดํ„ฐ ์ €์žฅ ๊ด€๋ จ)์— ํŠนํ™”๋œ ๊ธฐ์ˆ  ์Šคํ”„๋ง ํด๋ผ์šฐ๋“œ(ํด๋ผ์šฐ๋“œ ๊ธฐ์ˆ ) https://spring.io/projects Spring | Projects Spring Framework Provides core support for dependency injection, transaction management, web apps,.. 2022. 3. 31.
Section 1-1. ์Šคํ”„๋ง์˜ ํƒ„์ƒ๋ฐฐ๊ฒฝ ์ž๋ฐ”์ง„์˜์˜ ํ‘œ์ค€๊ธฐ์ˆ ์—๋Š” 'EJB'๊ฐ€ ์žˆ์—ˆ๋‹ค. ์ด์— ์—ฌ๋Ÿฌ ๊ธฐ์—…๋“ค์ด EJB๋ฅผ ์ด์šฉํ•ด ์—ฌ๋Ÿฌ ๋กœ์ง ๋ฐ ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•˜๋Š” ์‹œ๋„๋ฅผ ํ–ˆ์—ˆ๋‹ค. ๋ฐฐํฌ๋„ ์ž˜๋˜๊ณ  ์—ฌ๋Ÿฌ๊ฐ€์ง€๋กœ ์˜์—…์ด ์ž˜๋˜์—ˆ๋‹ค. - ์ž๋ฐ”์ง„์˜์˜ ํ‘œ์ค€ ๊ธฐ์ˆ  ๊ฑฐ์˜ ์ข…ํ•ฉ์„ ๋ฌผ์„ธํŠธ๋ผ๊ณ  ๋ณด๋ฉด๋œ๋‹ค. - ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ , ์„ค์ •์— ์˜ํ•œ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ, ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ๊ธฐ์ˆ  ๋“ฑ ๊ณ ๊ธ‰๊ธฐ์ˆ ์— ๋Œ€ํ•œ ์ง€์›์ด ์ž˜๋˜์—ˆ๋‹ค. - ๋‹น์‹œ entity bean(ORM๊ธฐ์ˆ ๋กœ์„œ ์ฟผ๋ฆฌ๋ฅผ ์“ฐ์ง€์•Š๊ณ  ์ž๋ฐ”๊ฐ์ฒด๋ฅผ DB์— ๋„ฃ๋Š” ๊ธฐ์ˆ )๋„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋‹ค. - ๊ฐ€๊ฒฉ์ด ๋งค์šฐ ๋น„์ŒŒ๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ์œ„ํ•ด ์ˆ˜์ฒœ๋งŒ์›์ด ๋“ค์—ˆ๋‹ค.(ํ˜„์žฌ๋Š” spring boot, tomcat๋กœ ๋ฌด๋ฃŒ ๊ตฌ์ถ•๊ฐ€๋Šฅ) EJB ์ง€์˜ฅ - ์ด๋ก ์ ์œผ๋กœ๋Š” ์ •๋ง ์ข‹์ง€๋งŒ ์—„์ฒญ ์–ด๋ ต๊ณ  ๋ณต์žกํ•˜๊ณ  ๋А๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ๋Š” ๊ณ ํ†ต์ด์˜€๋‹ค. - interface๋ฅผ ๋ชจ๋‘ ๊ตฌํ˜„ํ•ด์•ผํ–ˆ.. 2022. 3. 31.