๐ค Impl ? ๋ณ๋์ฌํญ์ ์ฝ๊ฒ ์ ์ฉํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์ธํฐํ์ด์ค/๊ตฌํ์ฒด ๋ฐฉ์์์ ์์ฃผ ์ฌ์ฉ๋๋ ๊ตฌํ์ฒด ์ด๋ฆ์ด๋ค.Service๋ฅผ ์ธํฐํ์ด์ค๋ก ๊ตฌํํ๊ณ , ํด๋น Service์ ์ค์ ๊ตฌํ์ฒด๋ฅผ `ServiceImpl`๋ผ๋ ๋ช
์นญ์ผ๋ก ์ฃผ๋ก ์ฌ์ฉํ๋ค.์ค์ ๋ก ์ ์ฌ์ง์ฒ๋ผ, ๋๋ ํ๋ก์ ํธ ๋๋ถ๋ถ์ Service๋ฅผ ์์ ๊ฐ์ด ๊ตฌํํ๊ณ ์์๋ค. ๐ฏ Impl๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์คํ๋ง์ ์ฒ์ ๋ฐฐ์ธ๋๋ถํฐ Service๋จ์ ๋ฏธ๋์ ๋ฐ์ํ ํ์ฅ์ ์ํด ์์ฑํ๋ค๊ณ ๋ฐฐ์ ๊ณ , ์ค์ ๋ก DB๋ก ๋ณ๊ฒฝํ๊ฑฐ๋ ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๊ฐ๊ธฐ ๋ค๋ฅธ ์๋น์ค๋ฅผ ์ ๊ณตํด์ผ ํ๋ ๊ฒฝ์ฐ์์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ ๊ฒ์ ๋ณด์๋ค. ๊ทธ๋์ ํ๋ก์ ํธ ๊ธฐํ์์ ํ์ฅ์ ๊ดํ์ฌ ์ ํด์ง ๊ฒ์ด ์์์ง๋ง, ๋ฏธ๋์ ์์ ํ์ฅ์ ์ํด ๋ฏธ๋ฆฌ ์ธํฐํ์ด์ค/๊ตฌํ์ฒด ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ค. ๐จ Impl..
โ๏ธ Entity์ ๊ธฐ๋ก ๋จ๊ธฐ๊ธฐํ์
์์๋ ์ด์์์ ๋ฐ์ํ ์ด์๋ค์ ์ถ์ ํ ๋ ์ฌ์ฉํ๊ธฐ ์ํด Entity๋ง๋ค `์์ฑ์๊ฐ`,`๋ณ๊ฒฝ์๊ฐ`๋ฑ์ ๋จ๊ธด๋ค๊ณ ํ๋ค.์ด๋ฒ ํ๋ก์ ํธ์์๋ User Entity์ ์์ฑ์๊ฐ์ธ `createdAt`, ๋ณ๊ฒฝ์๊ฐ์ธ `modifiedAt`์ด ์กด์ฌํ๋ค.Entity ๊ธฐ๋ก ๋จ๊ธฐ๊ธฐ@Entity@Getterpublic class UserDetail{ @Column(name = "created_at") private LocalDateTime createdAt; @Column(name = "modified_at") private LocalDateTime modifiedAt; ...}๐ ์๊ฐ ์์ฑ ๋ฐ ๊ฐฑ์ ํ๋ ๋ฐฉ๋ฒ1. ์ง์ ๊ฐ ๋ฃ์ด์ฃผ๊ธฐ ( ๋น์ถ์ฒ ๐
โ๏ธ )// 1. ..
@Entity@Table(name = "users")public class User implements UserDetails { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "email", length = 100) private String email; ...} ์คํ๋ง์ ์ฒ์ ๊ณต๋ถํ ์ดํ๋ก ์ด๋ค ํ
์ด๋ธ์ ๋ง๋ค๋ ๊ฐ์ PK์ ํญ์ Auto Increament๋ฅผ ์ฌ์ฉํ๋ค.๊ทธ๋ฌ๋ ์ค, ํผ๋๋ฐฑ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ๋ฐ์๋ค."User ํ
์ด๋ธ์ Auto Increament๋ณด๋ค๋ Email์ PK๋ก ํ๋๊ฒ ๋ ์ข์๋ณด์ฌ์."์ด์ ๊ฐ ๊ถ๊ธํ์ง๋ง, ๊ทธ์ ์ "์ ๋๋ Auto In..
๐ข ์์ฝ์ฌ๋ฌ๋ถ์ด ์์ ๊ฐ์ ์๋ฌ๋ฅผ ๋ง๋๋ค๋ฉด ์ฌ๋ฌ๊ฐ์ง ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ธํด๋ณด์
์ผํฉ๋๋ค. 1๏ธโฃ Gradle ์ค์ ํ์ธ Gradle ์ค์ ํ์ผ์ด ์ ๋๋ก ๊ตฌ์ฑ๋์๋์ง ํ์ธํด์ฃผ์
์ผํฉ๋๋ค. 2๏ธโฃ Q ํด๋์ค ์์ฑ ํ์ธQํด๋์ค๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์์ฑ์ด ๋์๋์ง ํ์ธํ์
์ผํฉ๋๋ค.(build/generated/sources/annotationProcessor/java/main ๋๋ ํฐ๋ฆฌ์ ์์ฑ๋์ด์์ด์ผ ํฉ๋๋ค.) 3๏ธโฃ query๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์์ฑํ์๋์ง ํ์ธํด์ฃผ์ธ์. ๐ ์ค๋ฅ ํ๊ณ 1๏ธโฃ Gradle ์ค์ ํ์ธ configurations { compileOnly { extendsFrom annotationProcessor }} dependencies { implementation 'com.qu..
โ๏ธ ์๋ฌ ๋ฐ์ mysql ์ธํ
์ ํ๋๋ฐ ๊ณ์ ์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค.cannot resolve class or package 'cj' dependencies๋ ์ ๋๋ก ์ค์ ํ๋๋ฐ ์ ์๋ ๊น??? ๊ณ์ ์ฐพ์๋ณด์์ต๋๋ค. dependencies { runtimeOnly 'com.mysql:mysql-connector-java'} ๐ ํด๊ฒฐ๋ฒ ๊ทธ๋ฌ๋ค ๋ฐ๊ฒฌํ์ต๋๋ค. ๋ฐ๋ก ๋ค์ด๋ฐ์ด ๋ณ๊ฒฝ๋์์ต๋๋ค..... ํ..... ์ด๋ฌ๋ ์๋์ง dependencies { runtimeOnly 'com.mysql:mysql-connector-java'} โ ์์ธ ํ์ ์ ๋ ์คํ๋ง ๋ถํธ 3.2.5๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํด๋น ์๋ฌ๋ 3.1.0 ๋ฒ์ ๋ถํฐ ๋ฐ์ํฉ๋๋ค. ์ฆ 3.1.0 ๋ฏธ๋ง ๋ฒ์ ์์๋ mysql-connec..
html์ ํ์ฑํด์ ์ธ๋ค์ผ ์ด๋ฏธ์ง๋ฅผ ์ถ์ถํด Amazon S3์ ์ ์ฅํด์ผ ํ๋ ์ผ์ด ์์์ต๋๋ค.์ฌ์ด๋ ํ๋ก์ ํธ ์ธ ๋งํผ ์ด๋ฏธ์ง ์ฉ๋์ ์ค์ผ ์ ์์ผ๋ฉด S3 ๋น์ฉ๋ ์๋ผ๊ณ ํ๋ก ํธ ๋ ๋๋ง ์๋ ์ญ์ ๊ฐ์ ๋๊ฒ ๋ค๊ณ ์๊ฐ์ด ๋ค์๊ณ resize์ webp ์ด๋ฏธ์ง ํฌ๋งท์ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.์ด๋ฏธ์ง ์ฝ๊ธฐURL ์ ๋ณด๋ฅผ ํตํด์ ์ด๋ฏธ์ง๋ฅผ ์ฝ์ด์์ผ ํ์๋๋ฐ Java์์ javax.imageio.ImageIO ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๊ฒ ์ด๋ฏธ์ง๋ฅผ ์ฝ๊ณ ์ธ ์ ์์์ต๋๋ค.URL ํน์ ํ์ผ์ ์ฝ์ด์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.BufferedImage image = ImageIO.read(new URL(์ด๋ฏธ์ง ์ฃผ์));BufferedImage image = ImageIO.read(new File(์ด๋ฏธ์ง ์ ์ฅ ์์น));java.awt.image...
์ด๋ฒ์ JPA๋ฅผ ํตํด์ ์ธ๋ถ DB์์ ๋ฐ์ดํฐ๋ฅผ Read/Write๋ฅผ ์ํํ์ง๋ง Spring Batch์ ๋ฉํ ํ
์ด๋ธ์ ๋ถ๋ฆฌํ๊ณ ์ถ์์ต๋๋ค.Spring batch 5.0์์ @EnableBatchProcessing์ ์๋ก์ด ์์ฑ์ด ์๊ฒจ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ ์ค ์์์ต๋๋ค. https://spring.io/blog/2022/09/22/spring-batch-5-0-0-m6-and-4-3-7-are-out#new-configuration-class-for-infrastructure-beansSpring Batch๊ฐ ๊ตฌ์ฑํด์ผ ํ๋ dataSource ๋ฐ transactionManager๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.โ๏ธ ์ฃผ์์ SpringBoot 3.0๋ถํฐ @EnableBatchProcessing ํน์ DefaultBa..
์ฌ์ฉ์์ ๋ฉ์ผํจ์์ ๋ด์ค๋ ํฐ๊ฐ ์ ์กํ ๋ฉ์ผ์ ์ฌ๋ฌ๊ฐ๋ฅผ JpaItemWriter๋ฅผ ํตํด์ Insert ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋ ค๊ณ ํฉ๋๋คํ์ง๋ง ๋ฐฐ์น๋ฅผ ๋๋ ค๋ณด๋ "Class 'class java.util.ArrayList' is not an entity class" ์์ธ๊ฐ ๋ฐ์ํ์ต๋๋ค. Stack trace๋ฅผ ํ์ธํด๋ณด๋ JpaItemWriter์์ write๋ฉ์๋๊ฐ ์ํ๋๋๋ฐ ๋ฐ์์จ ๊ฐ์ฒด๊ฐ Entity๊ฐ ์๋๋ผ List.class๋ผ์ ๋ฐ์ํ ๋ฌธ์ ์์ต๋๋ค.doWrite๋ฅผ ํธ์ถํ๋ฉด์ SessionImpl ํด๋์ค์์ persist๋ฅผ ํ๊ธฐ์ ์ ์ฒดํฌํ๋ ๋ฉ์๋๋ค์ด ํธ์ถ๋ ๋ ArrayList๋ Entity๊ฐ ์๋๋ผ์ ์์ธ๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.SessionImpl ํด๋์ค์ contains ๋ฉ์๋์ฆ write ๋ฉ์๋์ T๊ฐ Artic..