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

Java19

Spring - DIP, OCP๋ฅผ ์ง€ํ‚ค๋Š” ๋„๋ฉ”์ธ ์„œ๋น„์Šค ๊ธฐ์กด ์ฝ”๋“œ๋Š” ์ด๋ ‡๊ฒŒ ์ถ”์ƒํ™”์™€ ๊ตฌํ˜„์ฒด์— ๋ชจ๋‘ ์˜์กดํ•˜๊ณ  ์žˆ์ง€๋งŒ ์ด๋ฅผ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด์„œ ๋ถ„๋ฆฌํ•ด์ฃผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ๋˜๋ฉด์„œ MemberServiceImpl์—์„œ๋Š” MemoryMemberRepository()์ธ ๊ตฌํ˜„์ฒด์— ๋Œ€ํ•ด์„œ๋Š” ์˜์กดํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, DIP๋ฅผ ์œ„๋ฐ˜ํ•˜์ง€ ์•Š๊ฒŒ๋œ๋‹ค. ๋Œ€์‹  AppConfig์—์„œ MemberService์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ทธ์˜ ๊ตฌํ˜„์ฒด์ธ MemberServiceImpl์„ ๋ถ€๋ฅด๊ณ , ๊ตฌํ˜„์ฒด๋ฅผ ๋ถ€๋ฅผ๋•Œ ์ธ์ˆ˜๋ฅผ ํ†ตํ•ด MemoryMemberRepository๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋„ฃ์–ด์ฃผ๊ฒŒ ๋œ๋‹ค. (์ƒ์„ฑ์ž ์ฃผ์ž…) ์„ค๊ณ„ ๋ณ€๊ฒฝ์œผ๋กœ MemberServiceImpl ์€ MemoryMemberRepository ๋ฅผ ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค! ๋‹จ์ง€ MemberRepository ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์˜์กดํ•œ๋‹ค. MemberServiceImpl ์ž…์žฅ.. 2023. 7. 7.
Spring - ์Šคํ”„๋ง์ด๋ž€? ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋ž€? ํ•ต์‹ฌ ๊ธฐ์ˆ  : ์Šคํ”„๋ง DI ์ปจํ…Œ์ด๋„ˆ, AOP, ์ด๋ฒคํŠธ, ๊ธฐํƒ€ ์›น ๊ธฐ์ˆ  : ์Šคํ”„๋ง MVC, ์Šคํ”„๋ง WebFlux ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ธฐ์ˆ  : ํŠธ๋žœ์žญ์…˜, JDBC, ORM ์ง€์›, XML ์ง€์› ๊ธฐ์ˆ  ํ†ตํ•ฉ : ์บ์‹œ, ์ด๋ฉ”์ผ, ์›๊ฒฉ ์ ‘๊ทผ, ์Šค์ผ€์ค„๋ง ํ…Œ์ŠคํŠธ : ์Šคํ”„๋ง ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ ์ง€์› ์–ธ์–ด : ์ฝ”ํ‹€๋ฆฐ, ๊ทธ๋ฃจ๋น„ ์ตœ๊ทผ์—๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ๋ฅผ ํ†ตํ•ด์„œ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ธฐ์ˆ ๋“ค์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉ ์Šคํ”„๋ง ๋ถ€ํŠธ๋ž€? ์Šคํ”„๋ง์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›, ์ตœ๊ทผ์—๋Š” ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉ ๋‹จ๋…์œผ๋กœ ์‹œํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ฒŒ ์ƒ์„ฑ tomcat ๊ฐ™์€ ์›น ์„œ๋ฒ„๋ฅผ ๋‚ด์žฅํ•ด์„œ ๋ณ„๋„์˜ ์›น ์„œ๋ฒ„๋ฅผ ์„ค์น˜ํ•˜์ง€ ์•Š์•„๋„ ๋จ ์†์‰ฌ์šด ๋นŒ๋“œ ๊ตฌ์„ฑ์„ ์œ„ํ•œ starter ์ข…์†์„ฑ ์ œ๊ณต ์Šคํ”„๋ง๊ณผ 3rd party(์™ธ๋ถ€) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž๋™ ๊ตฌ์„ฑ ๋ฉ”.. 2023. 7. 5.
Spring - AOP AOP๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ ๋ชจ๋“  ๋ฉ”์†Œ๋“œ์˜ ํ˜ธ์ถœ ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด? ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ(cross-cutting concern) vs ํ•ต์‹ฌ ๊ด€์‹ฌ ์‚ฌํ•ญ(core concern) ํšŒ์› ๊ฐ€์ž… ์‹œ๊ฐ„, ํšŒ์› ์กฐํšŒ ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด? MemberService์—์„œ ์ด์™€๊ฐ™์ด ๋กœ์งํ•˜๋‚˜ํ•˜๋‚˜ ์‹œ๊ฐ„ ์ธก์ • ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋กœ์ง์ด ๋ช‡๋ฐฑ๊ฐœ๊ฐ€ ๋œ๋‹ค๋ฉด.. ๋น„ํšจ์œจ์ ์ด๊ณ  ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ๋งŽ์ด ๊ฑธ๋ฆฐ๋‹ค. ๐Ÿ”ป ๋ฌธ์ œ ํšŒ์›๊ฐ€์ž…, ํšŒ์› ์กฐํšŒ์— ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์€ ํ•ต์‹ฌ ๊ด€์‹ฌ ์‚ฌํ•ญ์ด ์•„๋‹ˆ๋‹ค. ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๋Š” ๋กœ์ง์€ ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ์ด๋‹ค. ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๋Š” ๋กœ์ง๊ณผ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค์˜ ๋กœ์ง์ด ์„ž์—ฌ์„œ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ต๋‹ค. ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๋Š” ๋กœ์ง์„ ๋ณ„๋„์˜ ๊ณตํ†ต ๋กœ์ง์œผ๋กœ ๋งŒ๋“ค๊ธฐ ๋งค์šฐ ์–ด๋ ต๋‹ค. ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๋Š” ๋กœ์ง์„ ๋ณ€๊ฒฝํ•  ๋•Œ ๋ชจ๋“  ๋กœ์ง์„ ์ฐพ์•„๊ฐ€๋ฉด์„œ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค.. 2023. 7. 5.
Spring - DB์ ‘๊ทผ5 (JPA) JPA๋Š” ๊ธฐ์กด์˜ ๋ฐ˜๋ณต ์ฝ”๋“œ๋Š” ๋ฌผ๋ก ์ด๊ณ , ๊ธฐ๋ณธ์ ์ธ SQL๋„ JPA๊ฐ€ ์ง์ ‘ ๋งŒ๋“ค์–ด์„œ ์‹คํ–‰ํ•ด์ค€๋‹ค. JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, SQL๊ณผ ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ์˜ ์„ค๊ณ„์—์„œ ๊ฐ์ฒด ์ค‘์‹ฌ์˜ ์„ค๊ณ„๋กœ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ์ „ํ™˜์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ํฌ๊ฒŒ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค. JPA๋Š” ์ž๋ฐ” ์ง„์˜์—์„œ ORM(Object-Relational Mapping) ๊ธฐ์ˆ  ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ์Œ์ด๋‹ค. ๊ทธ ๋ง์€ ์ฆ‰, ์‹ค์ œ์ ์œผ๋กœ ๊ตฌํ˜„๋œ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ตฌํ˜„๋œ ํด๋ž˜์Šค์™€ ๋งคํ•‘์„ ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. JPA๋ฅผ ๊ตฌํ˜„ํ•œ ๋Œ€ํ‘œ์ ์ธ ์˜คํ”ˆ์†Œ์Šค๋กœ๋Š” Hibernate๊ฐ€ ์žˆ๋‹ค. ORM(Object-Relational Mapping) ์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜ ์ ์œผ๋กœ ์•Œ๊ณ  ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ Class์™€ RDB(Relational DataBase)์˜ ํ…Œ์ด๋ธ”์„ ๋งค.. 2023. 7. 4.