Spring/Spring ์ž…๋ฌธ

Spring/Spring ์ž…๋ฌธ

์Šคํ”„๋ง ์ž…๋ฌธ - (19) AOP (Aspect Oriented Programming)

AOP (Aspect Oriented Programming)๋ž€? ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ด€์  ์ง€ํ–ฅ์€ ์–ด๋–ค ๋กœ์ง์„ ๊ธฐ์ค€์œผ๋กœ ํ•ต์‹ฌ์ ์ธ ๊ด€์ , ๋ถ€๊ฐ€์ ์ธ ๊ด€์ ์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ๋ณด๊ณ  ๊ทธ ๊ด€์ ์„ ๊ธฐ์ค€์œผ๋กœ ๋ชจ๋“ˆํ™” ํ•˜๊ฒ ๋‹ค๋Š” ๊ฒƒ *๋ชจ๋“ˆํ™” : ์–ด๋–ค ๊ณตํ†ต๋œ ๋กœ์ง์ด๋‚˜ ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ๋ฌถ๋Š” ๊ฒƒ ์˜ˆ๋ฅผ ๋“ค์–ด ํ•ต์‹ฌ์ ์ธ ๊ด€์ ์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๋  ์ˆ˜ ์žˆ๊ณ , ๋ถ€๊ฐ€์ ์ธ ๊ด€์ ์€ ํ•ต์‹ฌ ๋กœ์ง์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ–‰ํ•ด์ง€๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ, ๋กœ๊น…, ํŒŒ์ผ ์ž…์ถœ๋ ฅ ๋“ฑ์ด ๋  ์ˆ˜ ์žˆ๋‹ค. AOP๋Š” ํฉ์–ด์ง„ ๊ด€์‹ฌ์‚ฌ(Crosscutting Concerns)๋ฅผ ๋ชจ๋“ˆํ™” ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•์ด๋‹ค ๋ชจ๋“ˆํ™” ์‹œ์ผœ๋†“์€ ๋ธ”๋Ÿญ์„ Aspect๋ผ๊ณ  ํ•œ๋‹ค. AOP๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ - ๋ชจ๋“  ๋ฉ”์†Œ๋“œ์˜ ํ˜ธ์ถœ ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด? - ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ(cross-cutting con..

Spring/Spring ์ž…๋ฌธ

์Šคํ”„๋ง ์ž…๋ฌธ - (18) ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA

๋”๋ณด๊ธฐ ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA๋งŒ ์‚ฌ์šฉํ•ด๋„ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์ด ์ •๋ง ๋งŽ์ด ์ฆ๊ฐ€ํ•˜๊ณ , ๊ฐœ๋ฐœํ•ด์•ผํ•  ์ฝ”๋“œ๋„ ํ™•์—ฐํžˆ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๊ธฐ์กด์˜ ํ•œ๊ณ„๋ฅผ ๋„˜์–ด ๋งˆ์น˜ ๋งˆ๋ฒ•์ฒ˜๋Ÿผ, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๊ตฌํ˜„ ํด๋ž˜์Šค ์—†์ด ์ธํ„ฐํŽ˜์ด์Šค ๋งŒ์œผ๋กœ ๊ฐœ๋ฐœ์„ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ˜๋ณต ๊ฐœ๋ฐœํ•ด์˜จ ๊ธฐ๋ณธ CRUD ๊ธฐ๋Šฅ๋„ ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๊ฐ€ ๋ชจ๋‘ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA๋ผ๋Š” ๊ธฐ๋ฐ˜ ์œ„์—, ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋ผ๋Š” ํ™˜์ƒ์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋”ํ•˜๋ฉด ๊ฐœ๋ฐœ์ด ์ •๋ง ์ฆ๊ฑฐ์›Œ์ง‘๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ์กฐ๊ธˆ์ด๋ผ๋„ ๋‹จ์ˆœํ•˜๊ณ  ๋ฐ˜๋ณต์ด๋ผ ์ƒ๊ฐํ–ˆ๋˜ ๊ฐœ๋ฐœ ์ฝ”๋“œ๋“ค์ด ํ™•์—ฐํ•˜๊ฒŒ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž๋Š” ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ, ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค๋ฌด์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋Š” ์ด์ œ ์„ ํƒ์ด ์•„๋‹ˆ๋ผ ํ•„์ˆ˜ ..

Spring/Spring ์ž…๋ฌธ

์Šคํ”„๋ง ์ž…๋ฌธ - (17) JPA(Java Persistence API)

JPA๋Š” ์ž๋ฐ” ์ง„์˜์—์„œ ORM(Object-Relational Mapping) ๊ธฐ์ˆ  ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ์Œ์ด๋‹ค ์‹ค์ œ์ ์œผ๋กœ ๊ตฌํ˜„๋œ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ตฌํ˜„๋œ ํด๋ž˜์Šค์™€ ๋งคํ•‘์„ ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. JPA๋ฅผ ๊ตฌํ˜„ํ•œ ๋Œ€ํ‘œ์ ์ธ ์˜คํ”ˆ์†Œ์Šค๋กœ๋Š” Hibernate๊ฐ€ ์žˆ๋‹ค ( JPA๋Š” ์ธํ„ฐํŽ˜์ด์Šค / ๊ตฌํ˜„ hibernate ) ORM(Object-Relational Mapping) ๋”๋ณด๊ธฐ ๊ฐ์ฒด-๊ด€๊ณ„ ๋งคํ•‘ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์˜ ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ ์‚ฌ์ด์—์„œ ๋‚˜ํƒ€๋‚˜๋Š” ๋ฏธ๋ฌ˜ํ•œ ์ฐจ์ด์™€ ์ด๋กœ ์ธํ•œ ๋ฌธ์ œ๋“ค์„ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ ๊ธฐ์ˆ ์ด๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜ ์ ์œผ๋กœ ์•Œ๊ณ  ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ Class์™€ RDB(Relational DataBase)์˜ ํ…Œ์ด๋ธ”์„ ๋งคํ•‘(์—ฐ๊ฒฐ)ํ•œ๋‹ค๋Š” ๋œป์ด๋ฉฐ, ๊ธฐ์ˆ ์ ์œผ๋กœ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐ์ฒด..

Spring/Spring ์ž…๋ฌธ

์Šคํ”„๋ง ์ž…๋ฌธ - (16) ์Šคํ”„๋ง JdbcTemplate

์ˆœ์ˆ˜ Jdbc์™€ ๋™์ผํ•œ ํ™˜๊ฒฝ์„ค์ •์„ ํ•˜๋ฉด ๋œ๋‹ค. ์Šคํ”„๋ง JdbcTemplate๊ณผ MyBatis ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” JDBC API์—์„œ ๋ณธ ๋ฐ˜๋ณต ์ฝ”๋“œ๋ฅผ ๋Œ€๋ถ€๋ถ„ ์ œ๊ฑฐํ•ด์ค€๋‹ค. ํ•˜์ง€๋งŒ SQL์€ ์ง์ ‘ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค. ์Šคํ”„๋ง JdbcTemplate ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ JdbcTemplateMemberRepository.class public class JdbcTemplateMemberRepository implements MemberRepository { private final JdbcTemplate jdbcTemplate; public JdbcTemplateMemberRepository(DataSource dataSource) { jdbcTemplate = new JdbcTemplate(dataSource); } Da..

Spring/Spring ์ž…๋ฌธ

์Šคํ”„๋ง ์ž…๋ฌธ - (15) ์Šคํ”„๋ง ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์™€ DB๊นŒ์ง€ ์—ฐ๊ฒฐํ•œ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ด๋ณด์ž. MemberServiceTest : ์ˆœ์ˆ˜ํ•œ ์ž๋ฐ”์ฝ”๋“œ๋กœ test ( spring๊ณผ ๊ด€๋ จ์—†์Œ ) Database connection ์ •๋ณด๋„ ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ๋“ค๊ณ ์žˆ์Œ -> ํ…Œ์ŠคํŠธ๋ฅผ ์Šคํ”„๋ง์ด๋ž‘ ์—ฎ์–ด์„œ MemberSerivceIntegarionTest class ์ƒ์„ฑ ( MemberServiceTest ๋ณต์‚ฌ ) @SpringBootTest @Transactional class MemberServiceIntegarionTest { @Autowired MemberService memberService; @Autowired MemoryMemberRepository memberRepository; @SpringBootTest : ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์™€ ํ…Œ์ŠคํŠธ๋ฅผ ํ•จ๊ป˜ ..

Spring/Spring ์ž…๋ฌธ

์Šคํ”„๋ง ์ž…๋ฌธ - (14) ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  / ์ˆœ์ˆ˜ Jdbc

์ด์ „์— ์ด์šฉํ•ด์™”๋˜ ๋ฐ์ดํ„ฐ๋“ค์€ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ๊ป๋‹ค ์ผœ๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์ง€์›Œ์ง„๋‹ค ๋ฐ์ดํ„ฐ๋“ค์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•ด์„œ ๊ด€๋ฆฌํ•ด๋ณด์ž H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์น˜ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์„ค์น˜ ๊ถŒํ•œ ์ฃผ๊ธฐ: chmod 755 h2.sh ์‹คํ–‰: ./h2.sh jdbc:h2:~/test (์ตœ์ดˆ ํ•œ๋ฒˆ) ~/test.mv.db ํŒŒ์ผ ์ƒ์„ฑ ํ™•์ธ ์ดํ›„๋ถ€ํ„ฐ๋Š” jdbc:h2:tcp://localhost/~/test ์ด๋ ‡๊ฒŒ ์ ‘์† ํ…Œ์ด๋ธ” ์ƒ์„ฑํ•˜๊ธฐ ํ…Œ์ด๋ธ” ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— sql/ddl.sql ํŒŒ์ผ์„ ์ƒ์„ฑ drop table if exists member CASCADE; create table member ( id bigint generated by default as identity, name varchar(255), prima..

Spring/Spring ์ž…๋ฌธ

์Šคํ”„๋ง ์ž…๋ฌธ - (13) ํšŒ์› ์›น ๊ธฐ๋Šฅ

(1) ํ™ˆ ํ™”๋ฉด ์ถ”๊ฐ€ ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌ ์ƒ์„ฑ package hello.hellospring.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class HomeController { @GetMapping("/") public String home() { return "home"; } } @GetMapping : / ( ์ฒซ ๋„๋ฉ”์ธ ์š”์ฒญ ) ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์šฐ์„ ์„ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์— ์›ฐ์ปดํŽ˜์ด์ง€ ํ˜ธ์ถœ X return : home.html ํ˜ธ์ถœ home.html Hello Spring ํšŒ์› ๊ธฐ๋Šฅ ํšŒ์› ๊ฐ€์ž… ํšŒ์› ๋ชฉ๋ก (2) ํšŒ์› ๋“ฑ..

Spring/Spring ์ž…๋ฌธ

์Šคํ”„๋ง ์ž…๋ฌธ - (12) ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ •

ํ™”๋ฉด์— ๋„์šฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ปจํŠธ๋กค๋Ÿฌ์™€ ๋ทฐ ํƒฌํ”Œ๋ฆฟ์ด ํ•„์š” -> ๋ฉค๋ฒ„ ์ปจํŠธ๋กค๋Ÿฌ ์ƒ์„ฑ ๋ฉค๋ฒ„ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฉค๋ฒ„ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด์„œ ํšŒ์›๊ฐ€์ž…ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ ( ์˜์กด๊ด€๊ณ„ ) ( ๋ฉค๋ฒ„ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฉค๋ฒ„ ์„œ๋น„์Šค๋ฅผ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค) ์Šคํ”„๋ง ๋นˆ๊ณผ ์˜์กด๊ด€๊ณ„ ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ • ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์ง์ ‘ ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋กํ•˜๊ธฐ ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ • ํšŒ์› ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํšŒ์›์„œ๋น„์Šค์™€ ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ์˜์กด๊ด€๊ณ„๋ฅผ ์ค€๋น„ํ•˜์ž. ์ •ํ˜•ํ™”๋˜์–ด ์žˆ๋Š” ํŒจํ„ด ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ†ตํ•ด์„œ ์™ธ๋ถ€ ์š”์ฒญ์„ ๋ฐ›๊ณ  ์„œ๋น„์Šค์— ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋งŒ๋“ค๊ณ  ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ฉค๋ฒ„ ์ปจํŠธ๋กค๋Ÿฌ ์ƒ์„ฑ package hello.hellospring.controller; import org.springframework.stereotyp..

hello_u
'Spring/Spring ์ž…๋ฌธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก