๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐ˜์‘ํ˜•

๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ60

[Spring Boot]@RequiredArgsConstructor๋ž€? ๋งŽ์ด ์“ฐ์ด๋Š” @NoArgsConstructor๋ž‘ @AllArgsConstructor๋ž‘๋น„๊ตํ•ด์„œ ๋งํ•˜์ž๋ฉด, @NoArgsConstructornew Member()๊ฐ™์ด ์•„๋ฌด ์ธ์ž ์—†๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ๋งŒ๋“ค์–ด์ฃผ๋Š” ์• ๋„ˆํ…Œ์ด์…˜์ž„๊ทผ๋ฐ setter๋‚˜ builder ์—†์œผ๋ฉด ๋ฌด์“ธ๋ชจ ์ผ์ˆ˜๋„โ€‹โ€‹@AllArgsConstructor๋ชจ๋“  ํ•„๋“œ ๋ฐ›์•„์„œ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์ƒ์„ฑ์ž ๋งŒ๋“ค์–ด์ฃผ๋Š” ์• ๋„ˆํ…Œ์ด์…˜์ž„new Member("Kim", 20); ์ด๋Ÿฐ์‹ํ•„๋“œ๊ฐ€ ๋งŽ์œผ๋ฉด ์“ธ๋ฐ์—†์ด ๋งŽ์€ ์ธ์ž ์ „๋‹ฌํ•ด์•ผํ• ์ˆ˜๋„โ€‹โ€‹@RequiredArgsConstructor์ฃผ๋กœ ์˜์กด์„ฑ ์ฃผ์ž…(DI)ํ• ๋•Œ ๋งŽ์ด ์“ฐ์ž„.final๋ถ™์€ ํ•„๋“œ๋‚˜, @NonNull๋ถ™์€ ํ•„๋“œ๋งŒ ์ƒ์„ฑ์ž์— ํฌํ•จ๋จ.ํ•„๋“œ๊ฐ€ ๋งŽ์•„๋„, ํ•„์š”ํ•œ ํ•„๋“œ๋กœ๋งŒ ์ƒ์„ฑ์ž ๋”ฑ๋”ฑ ์ •๋ฆฌ ๊ฐ€๋Šฅ-> ๊น”๋”ํ•จ. ์™œ @RequiredArgCons.. 2025. 5. 3.
[Spring Boot]Entity, Dto, Repository ํ—ท๊ฐˆ๋ฆฌ๋Š” ์‚ฌ๋žŒ ์˜ค์„ธ์š” ์ด๋ฏธ ํ”„์ ์„ ํ•ด๋ณด๊ธดํ–ˆ์ง€๋งŒdto๋ž‘ repository, entity ๊ฐœ๋…์€์ž ๊น ๋’ค๋Œ๋ฉด ํ—ท๊ฐˆ๋ฆฌ๋Š”๊ฒƒ๊ฐ™๋‹คโ€‹์ฒจ์— ์Šคํ”„๋ง๋ถ€ํŠธ๋กœ ๋ฐฑ์—”๋“œ ๊ณต๋ถ€ ์‹œ์ž‘ํ–ˆ์„๋•Œ๋„๊ฐ€์žฅ ํ—ท๊ฐˆ๋ ธ๋˜ ๊ฐœ๋…์ž„โ€‹โ€‹์‚ฌ์ „์  ์˜๋ฏธ๋Š” ๋‹ค๋“ค ์ฑ…์ด๋‚˜ ๊ตฌ๊ธ€๋ง ํ•˜๋ฉด์„œ ๋ดค์„๊ฑฐ๊ฐ™์œผ๋‹ˆ๊นŒ ์Šคํ‚ตํ•˜๊ณ ๋น„์œ ๋ฅผ ๋“ค์–ด์„œ ์„ค๋ช…ํ•˜์ž๋ฉดโ€‹Entity : ์Œ์‹(๋ฐ˜์ฐฌ)DTO : ๋ฐ˜์ฐฌํ†ตRepository : ๋ƒ‰์žฅ๊ณ โ€‹์ด๋Ÿฐ ๋А๋‚Œ์ž„(๋‚œ ๋จธ๋ฆฌ๊ฐ€ ๋‚˜๋น ์„œ ์ด์ •๋„๋กœ ์ง๊ด€์ ์ธ ๋น„์œ ๊ฐ€ ์•„๋‹ˆ๋ฉด ์ฒจ์— ์ดํ•ด๊ฐ€ ์–ด๋ ค์› ์Œ ใ… ) Entity (์ง„์งœ ๋ฐ˜์ฐฌ)์ง„์งœ ์ €์žฅํ•ด์•ผ๋  ์‹ค์ œ ๋ฐ์ดํ„ฐ ๊ทธ์ž์ฒด.๋ƒ‰์žฅ๊ณ (repository)์— ๋„ฃ๊ณ  ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋Š” DB๋ž‘ 1:1๋กœ ์—ฐ๊ฒฐ๋œ ํด๋ž˜์Šค์ž„.์ด ํด๋ž˜์Šค ์•ˆ์— ์ด์ œ @Entity, @Id, @Column์ด๋Ÿฐ ์• ๋„ˆํ…Œ์ด์…˜ ๋ถ™๋Š”๊ฑฐ์ž„โ€‹โ€‹DTO (๋ฐ˜์ฐฌํ†ต)๋ฐ์ดํ„ฐ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜ ๋ฐ›์„๋•Œ ์“ฐ๋Š” ์ „์šฉ ์šฉ๊ธฐDB์— ์ €์žฅ.. 2025. 5. 3.
[Spring Boot]@Builder ์• ๋„ˆํ…Œ์ด์…˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž, ์˜ˆ์‹œ @Builder ์• ๋„ˆํ…Œ์ด์…˜@Builder ์• ๋„ˆํ…Œ์ด์…˜์€ ๋กฌ๋ณต์—์„œ ์ง€์›ํ•˜๋Š” ์• ๋„ˆํ…Œ์ด์…˜์ž„.ํ•œ๋งˆ๋””๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์คŒโ€‹์ƒ์„ฑ์ž ์œ„์— ๋ถ™์ด๊ฒŒ ๋˜๋ฉด, ๋นŒ๋” ํŒจํ„ด ๋ฐฉ์‹์œผ๋กœ ๊ฐ์ฒด ์ƒ์„ฑ ํ•  ์ˆ˜ ์žˆ์–ด์„œ ํŽธํ•จ.โ€‹์˜ˆ๋ฅผ๋“ค์–ด ๋นŒ๋” ํŒจํ„ด ์•ˆ์“ฐ๊ณ  ๋งŒ๋“ค๋ฉดnew Article("title1", "abc");์ด๋ ‡๊ฒŒ ๋จ.โ€‹โ€‹๊ทผ๋ฐ ๋นŒ๋” ํŒจํ„ด ์“ฐ๊ฒŒ๋˜๋ฉด Article.builder().title("title1").content("abc").build();์ด๋ ‡๊ฒŒ ๋จ!โ€‹โ€‹๋นŒ๋” ํŒจํ„ด ์•ˆ์“ฐ๋ฉด abc๊ฐ€ ์–ด๋Аํ•„๋“œ์— ๋“ค์–ด๊ฐ€๋Š”๊ฐ’์ธ์ง€ ํŒŒ์•…ํ•˜๊ธฐ ์ข€ ์–ด๋ ค์›€. ์—ฌ๊ธฐ์„œ ๋‚ด๊ฐ€ ์ข€ ํ—ท๊ฐˆ๋ ธ๋˜๊ฒŒ, @Builder์˜ ์—ญํ• ์ด ์ƒ์„ฑ์ž์ฒ˜๋Ÿผ ๋ณด์ด๋Š”๋ฐ@AllArgsConstructor๋‚˜ @NoArgsConstuctor์ฒ˜๋Ÿผ ํด๋ž˜์Šค ์œ„์— ์•ˆ๋ถ™๊ณ ํ•„๋“œ๋กœ ๋”ฐ๋กœ ๋บ๋Š”์ง€?โ€‹์ผ๋‹จ @B.. 2025. 5. 3.
[Spring Boot] API์™€ REST API๊ฐ€ ๋ญ˜๊นŒ? ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•ด์คŒ API๋ž€? API๋Š” ๋งค๊ฐœ์ฒด์ž„.๋„คํŠธ์›Œํฌ์—์„œ ํ”„๋กœ๊ทธ๋žจ ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ์„ ์œ„ํ•œ ๋งค๊ฐœ์ฒด! ์‹๋‹น์—์„œ ์Œ์‹์„ ์ฃผ๋ฌธํ•˜๋Š”๊ฑธ๋กœ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด์ž๋ฉด,์šฐ๋ฆฌ๊ฐ€ ์‹๋‹น์„ ๊ฐ€์„œ ์ฃผ๋ฌธํ• ๋•Œ, ์ฃผ๋ฐฉ์œผ๋กœ ์ง์ ‘ ๊ฐ€์„œ ์š”๋ฆฌ์‚ฌํ•œํ…Œ ๋ฌด์Šจ ์Œ์‹ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”~ ๋ผ๊ณ  ์•ˆํ•˜์ž–์•„์š” ๋ฉ”๋‰ดํŒ ๋ณด๊ณ  ๊ฑฐ๊ธฐ ๋‚˜์™€์žˆ๋Š”๋Œ€๋กœ ์ฃผ๋ฌธํ•จ!!!๊ทธ๋ฆฌ๊ณ  ์›จ์ดํ„ฐ๊ฐ€ ์ฃผ๋ฌธ์„ ๋ฐ›์œผ๋ฉด, ์ฃผ๋ฐฉ์— ๊ฐ€์„œ @@์š”๋ฆฌ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”~ ๋ผ๊ณ  ํ•˜๊ณ ์š”๋ฆฌ๊ฐ€ ๋‹ค ๋ผ๋ฉด ์›จ์ดํ„ฐ๊ฐ€ ์†๋‹˜ํ•œํ…Œ ์š”๋ฆฌ๋ฅผ ์คŒ. ์—ฌ๊ธฐ์„œ ์†๋‹˜ = ํด๋ผ์ด์–ธํŠธ์š”๋ฆฌ์‚ฌ = ์„œ๋ฒ„์›จ์ดํ„ฐ = API๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด๋จ. ๊ทธ๋ฆฌ๊ณ  ๋ฉ”๋‰ดํŒ์„ API ๋ช…์„ธ์„œ (์–ด๋–ค์‹์œผ๋กœ API๋ฅผ ๋ฐฉ์‹์œผ๋กœ ํ˜ธ์ถœํ•˜๋ฉด๋˜๋Š”์ง€.. ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฉ€ ๋„ฃ์–ด์•ผํ•˜๋Š”์ง€..๋“ฑ)๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด๋จ ๋‹ค์‹œ ์‹ค์ œ ์ƒํ™ฉ์—์„œ ์˜ˆ์‹œ๋ฅผ ๋“ค์ž๋ฉด,์šฐ๋ฆฌ๊ฐ€ ์›น์‚ฌ์ดํŠธ ๋„ค์ด๋ฒ„์— ์ ‘์†ํ•˜๋Š” ์ƒํ™ฉ.-> ํด๋ผ์ด์–ธํŠธ๊ฐ€ url ์ฃผ์†Œ์ฐฝ์— ๋„ค์ด๋ฒ„.com.. 2025. 5. 3.
[JPA] ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ž€? ํŠน์ง• ์ •๋ฆฌ JPA์™€ EntityManager ( ๋งค๋‹ˆ์ก€~) JPA : ์ž๋ฐ”์—์„œ ๊ด€๊ณ„ํ˜• DB ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์ •์˜ํ•œ interfaceHibernate: JPA ๊ตฌํ˜„์ฒด. (JPA๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋‹ˆ๊นŒ ๊ตฌํ˜„์ฒด ํ•„์š”) ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” JDBC API ์‚ฌ์šฉ JPA ์ฃผ์š” ์ปจ์…‰ - ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € - ์˜์†์„ฑ ์—”ํ‹ฐํ‹ฐ(Entity)? DB ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋˜๋Š” ๊ฐ์ฒด. query๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฐ์ฒด.์ž๋ฐ” ๊ฐ์ฒด๋ž‘ ๊ฐ™์Œ. ๊ทผ๋ฐ DB์˜ ํ…Œ์ด๋ธ”์ด๋ž‘ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜๋Š” ํŠน๋ณ„ํ•œ ์• ๋ผ์„œ entity๋ผ๊ณ  ๊ตฌ๋ถ„์ง€์–ด์„œ ๋ถˆ๋Ÿฌ์ฃผ๋Š”๊ฒƒ ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €(Entity Manager)?๋ง ๊ทธ๋Œ€๋กœ ์—”ํ‹ฐํ‹ฐ ๊ด€๋ฆฌ, DB๋ž‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‚ฌ์ด์—์„œ ๊ฐ์ฒด ๋งŒ๋“ค๊ณ  ์ˆ˜์ •ํ•˜๊ณ  ์‚ญ์ œํ•˜๊ณ ..๋’ท๋ฐ”๋ผ์ง€ํ•จ ex) ํšŒ์› 2๋ช…์ด์„œ ๋™์‹œ์— ํšŒ์›๊ฐ€์ž… ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ (=๋™์‹œ์— DB ์ ‘๊ทผํ•˜๋ ค๋Š” ๊ฒฝ์šฐ)ํšŒ์›A์˜ ์š”์ฒญ์— ๋Œ€ํ•ด ์—”ํ‹ฐ.. 2025. 5. 3.
[Spring Boot]๋งŽ์ด ์“ฐ์ด๋Š” ์• ๋„ˆํ…Œ์ด์…˜ ์ •์˜ ์ •๋ฆฌ 1. @Entity ์• ๋„ˆํ…Œ์ด์…˜Member ๊ฐ์ฒด๋ฅผ JPA๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์—”ํ‹ฐํ‹ฐ๋กœ ์ง€์ •= Member ํด๋ž˜์Šค & ์‹ค์ œ DB ํ…Œ์ด๋ธ”์„ mapping ํ…Œ์ด๋ธ” ์ด๋ฆ„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด, ๊ทธ๋ƒฅ ํด๋ž˜์Šค ์ด๋ฆ„์ด๋ž‘ ๊ฐ™์€ ์ด๋ฆ„์˜ ํ…Œ์ด๋ธ”์ด๋ž‘ ๋งตํ•‘๋จ(๋”ฐ๋ผ์„œ ์œ„์˜ ์˜ˆ์ œ์—์„œ๋Š” member ํ…Œ์ด๋ธ”)(์ง€์ •ํ•˜๊ณ  ์‹ถ์œผ๋ฉด,@Entity(name = "member_list") ์ด๋Ÿฐ์‹์œผ๋กœ ํ•˜๋ฉด๋จ 2. @NoArgsConstructor ์• ๋„ˆํ…Œ์ด์…˜protected ๊ธฐ๋ณธ ์ƒ์„ฑ์ž. ์—”ํ‹ฐํ‹ฐ๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ๊ผญ ์ž‡์–ด์•ผํ•จ(์ ‘๊ทผ์ œ์–ด์ž๋Š” public or protected) 3. @Id ์• ๋„ˆํ…Œ์ด์…˜@Id ์• ๋„ˆํ…Œ์ด์…˜ ๋ถ™์€ ํ•„๋“œ๊ฐ€ ๊ธฐ๋ณธ ํ‚ค๊ฐ€ ๋จ+ GeneratedValue๋Š” ๊ธฐ๋ณธํ‚ค ์ƒ์„ฑ ๋ฐฉ์‹์„ ๊ฒฐ์ •.(์—ฌ๊ธฐ์„œ๋Š” ์ž๋™ ์ฆ๊ฐ€๋กœ ์„ค์ •๋˜์–ด์žˆ์Œ) 4. @Column ์• ๋„ˆํ…Œ์ด์…˜D.. 2025. 5. 3.
๋ฐ˜์‘ํ˜•