๐Ÿ“ Language/โœ JAVA

    [Spring][ํ˜ผ๊ณต] 7. AOP(Aspect Oriented Programming) - (2) AOP ์ ์šฉ

    [Spring][ํ˜ผ๊ณต] 7. AOP(Aspect Oriented Programming) - (2) AOP ์ ์šฉ

    AOP 2. AOP ์ ์šฉ 1) ์ ์šฉ ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ(cross-cutting concern)๊ณผ ํ•ต์‹ฌ ๊ด€์‹ฌ ์‚ฌํ•ญ(core concern)์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์‹œ๊ฐ„ ์ธก์ • ๋กœ์ง์„ ๋ณ„๋„์˜ ๊ณตํ†ต ๋กœ์ง์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์›ํ•˜๋Š” ๊ณณ์—๋งŒ ์ ์šฉํ•œ๋‹ค. ๋งŒ์•ฝ, ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋‹ค๋ฉด ์ด ๋กœ์ง๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค. package hello.hello.spring.aop; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; @Component // string been ๋“ฑ๋ก..

    [Spring][ํ˜ผ๊ณต] 7. AOP(Aspect Oriented Programming) - (1) AOP๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ

    [Spring][ํ˜ผ๊ณต] 7. AOP(Aspect Oriented Programming) - (1) AOP๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ

    AOP ์ฒ˜์Œ๋ถ€ํ„ฐ AOP ์ด๋ก  ๋ฐ ์šฉ์–ด๋ฅผ ํ•™์Šตํ•˜๊ธฐ์—” ์–ด๋ ค์šฐ๋‹ˆ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ํ•™์Šตํ•œ ํ›„ ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค. 1. AOP๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ 1) ์˜ˆ์ œ ๋ชจ๋“  ๋ฉ”์„œ๋“œ์˜ ํ˜ธ์ถœ ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด? ๋ชจ๋“  ๋ฉ”์„œ๋“œ์˜ ์‹œ์ž‘๊ณผ ๋์— ์‹œ๊ฐ„ ์ธก์ • ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค. ๋งŒ์•ฝ, ๊ฐ‘์ž๊ธฐ ์‹œ๊ฐ„ ๋‹จ์œ„๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค์‹œ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค. package hello.hello.spring.service; import hello.hello.spring.domain.Member; import hello.hello.spring.repository.MemberRepository; import hello.hello.spring.repository.MemoryMemberRepository; import org.springframewo..

    [Spring][ํ˜ผ๊ณต] 6. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  - (6) ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA

    [Spring][ํ˜ผ๊ณต] 6. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  - (6) ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA

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

    [Spring][ํ˜ผ๊ณต] 6. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  - (5) JPA

    [Spring][ํ˜ผ๊ณต] 6. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  - (5) JPA

    ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  5. JPA JPA๋Š” ๊ธฐ์กด์˜ ๋ฐ˜๋ณต ์ฝ”๋“œ๋Š” ๋ฌผ๋ก ์ด๊ณ  SQL๋„ ์ง์ ‘ ๋งŒ๋“ค์–ด์„œ ์‹คํ–‰ํ•ด์ค€๋‹ค. SQL๊ณผ ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ์˜ ์„ค๊ณ„์—์„œ ๊ฐ์ฒด ์ค‘์‹ฌ์˜ ์„ค๊ณ„๋กœ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ํฌ๊ฒŒ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค. 1) ํ™˜๊ฒฝ ์„ค์ • build.gradle ํŒŒ์ผ์— JPA, h2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€ spring-boot-starter-data-jpa: ๋‚ด๋ถ€์— jdbc ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จํ•œ๋‹ค. ๋”ฐ๋ผ์„œ jdbc๋Š” ์ œ๊ฑฐํ•ด๋„ ๋œ๋‹ค. ์Šคํ”„๋ง ๋ถ€ํŠธ์— JPA ์„ค์ • ์ถ”๊ฐ€ show-sql: JPA๊ฐ€ ์ƒ์„ฑํ•˜๋Š” SQL์„ ์ถœ๋ ฅํ•œ๋‹ค. ddl-auto: JPA๋Š” ํ…Œ์ด๋ธ”์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š”๋ฐ none์€ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ๋ˆ๋‹ค. create๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—”ํ‹ฐํ‹ฐ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ…Œ์ด๋ธ”๋„ ์ง์ ‘ ์ƒ์„ฑํ•ด์ค€๋‹ค..

    [Spring][ํ˜ผ๊ณต] 6. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  - (4) ์Šคํ”„๋ง JDBC Template

    ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  4. ์Šคํ”„๋ง JDBC Template ์ˆœ์ˆ˜ JDBC์™€ ๋™์ผํ•œ ํ™˜๊ฒฝ ์„ค์ •์ด๋‹ค. ์Šคํ”„๋ง JDBC Template, MyBatis์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” JDBC API์—์„œ ๋ณธ ๋ฐ˜๋ณต ์ฝ”๋“œ๋ฅผ ๋Œ€๋ถ€๋ถ„ ์ œ๊ฑฐํ•ด์ค€๋‹ค. ํ•˜์ง€๋งŒ SQL์€ ์ง์ ‘ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค. package hello.hello.spring.repository; import hello.hello.spring.domain.Member; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; im..

    [Spring][ํ˜ผ๊ณต] 6. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  - (3) ์Šคํ”„๋ง ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ

    ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ  3. ์Šคํ”„๋ง ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ด๋ฒˆ ํ…Œ์ŠคํŠธ๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์™€ DB๊นŒ์ง€ ์—ฐ๊ฒฐํ•œ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ์ด๋‹ค. ์ด์ „ ํ…Œ์ŠคํŠธ๋Š” ์ˆœ์ˆ˜ ์ž๋ฐ” ์ฝ”๋“œ๋งŒ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์ด๋‹ค. ์ˆœ์ˆ˜ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ๋Œ€๋ถ€๋ถ„ ์ข‹์€ ํ…Œ์ŠคํŠธ์ด๊ณ  ์„ค๊ณ„๊ฐ€ ์ž˜ ๋˜์–ด์žˆ๋Š” ๊ฒƒ์ด๋‹ค. @SpringBootTest: ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์™€ ํ…Œ์ŠคํŠธ๋ฅผ ํ•จ๊ป˜ ์‹คํ–‰ํ•œ๋‹ค. @Transactional: ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ์ด ์• ๋…ธํ…Œ์ด์…˜์ด ์žˆ์œผ๋ฉด, ํ…Œ์ŠคํŠธ ์‹œ์ž‘ ์ „์— ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ์™„๋ฃŒ ํ›„์— ๋กค๋ฐฑํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด DB์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚จ์ง€ ์•Š์œผ๋ฏ€๋กœ ๋‹ค์Œ ํ…Œ์ŠคํŠธ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค. (@AfterEach ๋ถˆํ•„์š”) @Commit: @Transactional๊ฐ€ ์žˆ์–ด๋„ ํ…Œ์ŠคํŠธ๊ฐ€ ๋๋‚œ ํ›„ DB์— ๋ฐ˜์˜ํ•œ๋‹ค. package hello.hello.spring.serv..