๐ Language/โ JAVA
![[Spring][ํผ๊ณต] 7. AOP(Aspect Oriented Programming) - (2) AOP ์ ์ฉ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI4taA%2Fbtrjl9yJRPO%2FglkkPpFtqYRaHWUD2fkmKk%2Fimg.png)
[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๊ฐ ํ์ํ ์ํฉ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkT6yJ%2FbtriArtBzv6%2FcwZLdXIkkb3VEvqU6e2cd1%2Fimg.png)
[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](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1aZLv%2Fbtrhnc34IPZ%2F0CdwJO6s10ahNZh8OrteQ0%2Fimg.png)
[Spring][ํผ๊ณต] 6. ์คํ๋ง DB ์ ๊ทผ ๊ธฐ์ - (6) ์คํ๋ง ๋ฐ์ดํฐ JPA
์คํ๋ง DB ์ ๊ทผ ๊ธฐ์ 6. ์คํ๋ง ๋ฐ์ดํฐ JPA ์คํ๋ง ๋ถํธ์ JPA๋ง ์ฌ์ฉํด๋ ๊ฐ๋ฐ ์์ฐ์ฑ์ด ํฌ๊ฒ ์ฆ๊ฐํ๊ณ ๊ฐ๋ฐํด์ผ ํ ์ฝ๋๋ ํ์ฐํ ์ค์ด๋ค์๋ค. ์ฌ๊ธฐ์ ์คํ๋ง ๋ฐ์ดํฐ JPA๋ผ๋ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ฉด, ๊ธฐ์กด์ ํ๊ณ๋ฅผ ๋์ด ๋ฆฌํฌ์งํ ๋ฆฌ์ ๊ตฌํ ํด๋์ค ์์ด ์ธํฐํ์ด์ค ๋ง์ผ๋ก ๊ฐ๋ฐ์ ์๋ฃํ ์ ์๊ณ ๋ฐ๋ณต ๊ฐ๋ฐํด์จ ๊ธฐ๋ณธ CRUD ๊ธฐ๋ฅ๋ ์ ๊ณตํ๋ค. ์คํ๋ง ๋ฐ์ดํฐ JPA๋ JPA๋ฅผ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ๋๋ก ๋์์ฃผ๋ ๊ธฐ์ ์ด๋ค. JPA์ ๋์ผํ ํ๊ฒฝ ์ค์ ์ ๊ฐ์ง๋ค. ์ด ๊ธฐ์ ์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๊ฐ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ๊ฐ๋ฐํ๋๋ฐ ์ง์คํ ์ ์๋ค. ์ค๋ฌด์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์คํ๋ง ๋ฐ์ดํฐ JPA๋ ์ด์ ์ ํ์ด ์๋๋ผ ํ์์ด๋ค. ๋๋ณด๊ธฐ ์ค๋ฌด์์๋ JPA์ ์คํ๋ง ๋ฐ์ดํฐ JPA๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ๊ณ , ๋ณต์กํ ๋์ ์ฟผ๋ฆฌ..
![[Spring][ํผ๊ณต] 6. ์คํ๋ง DB ์ ๊ทผ ๊ธฐ์ - (5) JPA](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgWhYW%2FbtrgJYeJBlk%2F6Yw0rqEuzUORkWTkQWkJ70%2Fimg.png)
[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..