Backend/๐ฟ Spring(35)
-
์ด์์ค์ธ ์๋น์ค ์คํ๋ง๋ถํธ 3 ์ ๊ทธ๋ ์ด๋
๋ชฉ์ฐจ 0. JDK 1. javax -> jakarta 2. querydsl 3. spring security ํ์ฌ Tidify iOS ์ฑ์ ์ด์ ์ค์ด๋ค. ์๋ฒ๋ ์คํ๋ง๋ถํธ 2.7.8 ๋ฒ์ ์ ์ฌ์ฉ ์ค์ด์๋๋ฐ ์ฐํด๊ธฐ๊ฐ ๋์ ๋ฒ์ ์ ์ ์งํํ๋ค. ๋ฒ์ ์ ์ ์งํํ๋ฉด์ ๋ค์ํ ๋ฒฝ(?)์ ๋ถ๋ชํ๋๋ฐ ๊ทธ ๊ณผ์ ์ ํ๋ํ๋ ํ์ด๋ณด๊ฒ ๋ค. ์คํ๋ง๋ถํธ 3 ์๋ ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ถ๊ฐ๋์ง๋ง ๋ค์์ ํฐ ํน์ง์ด ์๋ค. Java17๊ณผ Java19 ์ง์ (Java 21 ๋ ์ถ๊ฐ) GraalVM ์ง์ Spring framework 6.0 ๊ธฐ๋ฐ 0. jdk ์คํ๋ง๋ถํธ 3์ java17 ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋๊ธฐ ๋๋ฌธ์ 17 ๋ฏธ๋ง์ JDK๋ ์ง์ํ์ง ์๋๋ค. ๊ธฐ์กด์๋ jdk ๋ java 17 ์ ์ฌ์ฉํ๊ณ ์์๊ธฐ์ ๋ณ๋๋ก jdk ์ ๋ฐ์ดํธ๋ ํ์ง ..
2024.02.19 -
[Spring] @Async ๋น๋๊ธฐ ๋์ ์๋ฆฌ ํํค์น๊ธฐ
๋ชฉ์ฐจ - ์๋ก - @EnableAsync ๋์์๋ฆฌ - @Async ๋์์๋ฆฌ - ๊ฒฐ๋ก ์ค์ต ํ๊ฒฝ - Java 17 - Springboot 3.2.0 ์๋ก ์ค๋ฌด์์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํด CompletableFuture ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ค. ์ ๋์ํ๋ ๊ฒ์ ํ์ธํ์ง๋ง ๋ฌธ๋ @Async ์ด๋ ธํ ์ด์ ์ ์ด์ฉํ๋ฉด ๋ ํธ๋ฆฌํ์ง ์์๊น ํ๋ ์๊ฐ๊ณผ @Async๋ ์ด๋ค ์๋ฆฌ๋ก ๋น๋๊ธฐ๋ฅผ ์ฒ๋ฆฌํ๋์ง ๊ถ๊ธํด์ก๋ค. @Async ๋ด๋ถ ๋์์ ๋๋ฒ๊น ํ ๊ฒฐ๊ณผ ๊ฒฐ๊ตญ @Async ์ญ์ CompletableFuture์ ์ฌ์ฉํ๊ณ ์์๋ค. ์ด ๊ธ์์๋ ์คํ๋ง๋ถํธ์์ @Async ์ด๋ ธํ ์ด์ ์ด ๋ถ์ ๋ฉ์๋๊ฐ ์ด๋ป๊ฒ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌ๋๋์ง์ ๋๋ถ์ด @EnableAsync ๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง๋ฅผ ๋ค๋ค๋ณด๊ฒ ๋ค. @EnableAsync ๋์์๋ฆฌ @Enabl..
2023.12.21 -
@Transactional ์ผ์ง๋ง Dirty Checking ์ด ์๋ ์ด์
๋ชฉ์ฐจ 0. Dirty Checking ์ด ๋์ํ์ง ์์ ๋ด ์ฝ๋ 1. Dirty Checking ์ ์ด๋ค ์กฐ๊ฑด์์ ์คํ๋๋๊ฐ? 2. @Transactional ์ ์ด๋ค ์๋ฆฌ๋ก Dirty Checking ์ ์งํํ๋๊ฐ? 3. ๊ทธ๋ผ ์ด๋ป๊ฒ ์์ ํด์ผํ๋? 4. ๊ฒฐ๋ก Dirty Checking ๊ณผ @Transactional ์ ์๋ฆฌ๋ฅผ ์ ์์๋ ๋ถ์ด๋ผ๋ฉด ์ด ๊ธ์์ ์ป์ด๊ฐ์๋๊ฒ ๋ง์ด ์์ ์ ์์ต๋๋ค. ์ด ๊ธ์ ๋ฌด์ง์ฑ์ผ๋ก @Transactional ์ ์ฌ์ฉํ ์ง๋ ๋ ์ ๋ฐ์ฑํ๊ณ ๋ ๊ณต๋ถํ๊ธฐ ์ํด ์์ฑํ์ต๋๋ค. 0. Dirty Checking ์ด ๋์ํ์ง ์์ ๋ด ์ฝ๋ ๋๋ฌด ๋ถ๋๋ฝ์ง๋ง ์ฒ์์ ์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์ง๋๊ณ ์ Dirty Checking ์ด ๋์ง ์๋์ง ์์ํ๋ค. @Transactional ์ด๋ ธํ ์ด์ ์ด ์๋ ..
2023.03.12 -
[Querydsl] Pagination ์ฑ๋ฅ ๊ฐ์ part1.PageableExecutionUtils
๋ชฉ์ฐจ ๊ธฐ์กด : QueryDSL์ ํ์ด์ง ๊ฐ์ : PageableExecutionUtils : new PageImpl()์ count ์ฟผ๋ฆฌ ๊ฐ์ Test Case Test case 1. ํ์ด์ง ์ฌ์ด์ฆ 20 / ์ด content 8๊ฐ / ์ฒซ ๋ฒ์งธ ํ์ด์ง ํธ์ถ Test case 2. ํ์ด์ง ์ฌ์ด์ฆ 5 / ์ด content 8๊ฐ / ๋๋ฒ์งธ ํ์ด์ง ํธ์ถ Test case 3. ํ์ด์ง ์ฌ์ด์ฆ 3 / ์ด content 8๊ฐ / ๋๋ฒ์งธ ํ์ด์ง ํธ์ถ (์ด 3๊ฐ์ ํ์ด์ง ์กด์ฌ) ๊ฒฐ๋ก (๊ธฐ์กด) QueryDSL์ ํ์ด์ง ๋ณดํต QueryDsl (์ดํ qdsl)์์ ํ์ด์ง ํ ๋ new PageImpl()์ ์ฌ์ฉํ์ต๋๋ค. ์ด๋ฆ๋๋ก Page ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด์ด๋ฉฐ, ๋์์ Chunk ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด์ ๋๋ค. (์ฌ๊ธฐ์ ์ค์ํ ๊ฒ ..
2023.02.21 -
[SpringBoot] @NotNull, @NotEmpty, @NotBlank ์ฐจ์ด์ , ๊ทธ๋ง ํท๊ฐ๋ฆฌ๊ธฐ๋ก ํด์
@NotNull, @NotEmpty, @NotBlank ์ธ ์ด๋ ธํ ์ด์ ์ DTO ํ๋์ ์ ํจ์ฑ ๊ฒ์ฆ์ ์ฌ์ฉ๋๋ค. @NotNull @NotNull์ ํ๋์ Null ๊ฐ์ ํ์ฉํ์ง ์๋๋ค๋ ๊ฒ์ ์ ์ถํ ์ ์๋ค. ์ค์ ๋ก๋ @NotNull ์ด ๋ถ์ ํ๋๋ null ๊ฐ๋ง ํ์ฉํ์ง ์์ ๋ฟ, "" ๋ " " ๊ฐ์ ๋น๊ฐ, ๊ณต๋ฐฑ๊ฐ์ ํ ๋น ๋ฐ์ ์ ์๋ค. ํ์ง๋ง @NotEmpty ์ @NotBlank ๋ ์ ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ๋งค๋ฒ ํท๊ฐ๋ฆฐ๋ค. ๋์ ์ฐจ์ด๊ฐ ํท๊ฐ๋ฆผ -> ๊ตฌ๊ธ๋ง -> ์ค์ผ์ด ํ์ธ -> (๋ฉฐ์น ํ) ๋์ ์ฐจ์ด๊ฐ ํท๊ฐ๋ฆผ -> ๊ตฌ๊ธ๋ง -> ... ์ด์ ๊ทธ๋ง ํท๊ฐ๋ฆฌ๊ธฐ๋ก ํ์. @NotEmpty Not Empty : (ํ๋๊ฐ) ๋น์ด์์ง ์๋ค ๊ทธ๋ ๋ค๋ฉด ๋น์ด์๋ ํ๋๋ ์ด๋ค ์ํ์ผ๊น. ๋ฐ๋ก null ๊ณผ "" ์ด๋ค. ์ฆ @Not..
2023.01.28 -
[Spring] @Cacheable ๋ฉ์๋ ๋ด๋ถ ํธ์ถ ๊ฐ์ ํ๊ธฐ (feat. self invocation)
๋ชฉ์ฐจ ๋ฐฐ๊ฒฝ ๋ฌธ์ API ๊ฐ์ ์๊ตฌ์ฌํญ ํ์ฌ API ์ฌํญ ๊ฐ์ ๋ API ์๊ตฌ์ฌํญ ์ฒซ ๋ฒ์งธ ์๋ ๋ ๋ฒ์งธ ์๋ ์ธ ๋ฒ์งธ ์๋ Self-Invocation ํด๊ฒฐ ๋ฐฉ์ (Proxy ์์ฑ) 1) ApplicationContext DI 2) @Resource์ผ๋ก AutoWiring ๋ง๋ฌด๋ฆฌ ๋ฐฐ๊ฒฝ ํด๋ผ์ด์ธํธ์์ ํน์ ํค์๋๋ก ์กฐํํ๋ฉด, ํด๋น ํค์๋์ ํด๋นํ๋ ์ํ ๋ชฉ๋ก์ ๋ฐ์์จ๋ค. ์ผํ๋ชฐ API ์์ ์ํ์ ๋ณด๋ด์ฃผ๋ฉฐ, 12๊ฐ์ ์ํ์ ๋ํดํธ๋ก ๋ณด๋ด์ค๋ค. ์ผํ๋ชฐ API์์ ํด๋น ํค์๋์ ์ํ ์ฌ๊ณ ๊ฐ ๋ถ์กฑํ๋ฉด, 12๊ฐ ๋ฏธ๋ง์ผ๋ก ์๋ตํ ์ ์๋ค. ์ํ์ ๊ฐ์๊ฐ 9๊ฐ ๋ฏธ๋ง์ด๋ฉด, ์ฌ๊ณ ๋ณด์ถฉ notify ๋ฅผ ์ํด ์ฌ๋๋ด ๋ฉ์์ง๊ฐ ์ ์ก๋๋ค. ๋ฌธ์ ์ํ ์ฌ๊ณ ๊ฐ ๋ถ์กฑํ ํค์๋๋ก api ์์ฒญ์ด ๊ณ์ ๋ค์ด์ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ๋งค๋ฒ api..
2023.01.07 -
[JPA] Can not issue data manipulation statements with executeQuery().
์๋ฌ ๋ฉ์์ง: Caused by: java.sql.SQLException: Can not issue data manipulation statements with executeQuery(). ์์ธ: @Modifying(clearAutomatically = true) ๋ฏธ์ฌ์ฉ `update, delete, insert` ์ฟผ๋ฆฌ๋ ๋ฆฌํด๊ฐ์ ๊ฐ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ๋ ์๋ฌ. Jpa ์์ `select Query` ๋ฅผ ๋ณด๋ผ ๋ `executeQuery()` ๋ฅผ ์ฌ์ฉํ์ง๋ง, `update, delete, insert` ๋ฑ์ ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋ผ ๋, executeUpdate() ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค. executeUpdate() ๋ ์ฟผ๋ฆฌ๋ฅผ ์ ์กํด์ ๋ณ๊ฒฝ๋ ํ์ ๊ฐ์๋ฅผ ๋ฆฌํดํ๋ค. JPA ์ฟผ๋ฆฌ ๋ฉ์๋ ์ฌ์ฉ์, @Modifying ์ด๋ ธํ ..
2022.12.08 -
[IDE] Unable to resolve table ์๋ฌ ํด๊ฒฐ
์๋ฌ ๋ฉ์์ง : Unable to resolve table "'[ํ ์ด๋ธ๋ช ]" JPA ์์ native Query ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ๋ค์ดํฐ๋ธ ์ฟผ๋ฆฌ์ db ์ table ๋ช ์ ๋ฃ์ผ๋ฉด, Unable to resolve table "[table name]" ์ด๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ํ๋ก์ ํธ์์ ์ฐ๋๋ DB ๋ฅผ ๋ชป์ฐพ์ ๋ฐ์ํ ๋ฌธ์ ์ด๋ฏ๋ก, ์ง์ DataBase source ๋ฅผ ์ฐ๋์์ผ์ฃผ์. ์ธํ ๋ฆฌ์ ์ด ์ฐ์ธก์ Database ์์ด์ฝ์ ๋๋ฅด๋ฉด DB ์ฐ๋ ๊ด๋ จ ํญ์ ์ด ์ ์๋ค. ๊ฐ์๊ฐ ์ฌ์ฉํ๋ Database ๋ฅผ ์ ํํ์. ๊ฐ์ DB ์ ์ค์ ๊ฐ์ ์ ๋ ฅํด์ค๋ค. ์ค์ ๊ฐ์ ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด application.yml ํ์ผ์์ ํ์ธํ ์ ์๋ค. ์ด์ ์ ๋จ๋ ์ปดํ์ผ ์๋ฌ๊ฐ ์ฌ๋ผ์ง ๊ฒ์ ํ์ธํ ์ ์๋ค. ๊ทธ๋ผ ํดํผ์ฝ๋ฉํ์
2022.12.08 -
RDS - springboot ์ฐ๋ ์ ์๋ฌ ํธ๋ฌ๋ธ์ํ ๋ชจ์
โ๏ธ ์ง์์ ์ ๋ฐ์ดํธ ๐ ์๋ฌ ๋ฉ์์ง : Driver org.mariadb.jdbc.Driver claims to not accept jdbcUrl . . . โ ํด๊ฒฐ url ์์๋ถ๋ถ์ jdbc:mariadb:// ๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด ํด๊ฒฐ.
2022.09.11