๐Ÿผ๋ฐฑ์•ค๋“œ/Spring

๋จผ์ € build.gradle์— ๋“ค์–ด๊ฐ€์„œ dependencies { implementation 'org.springframework.boot:spring-boot-starter' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.jasypt:jasypt:1.9.3' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.boot:s..
์˜์†์„ฑ ์ปจํ…์ŠคํŠธ JPA์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ 2๊ฐ€์ง€๋ฅผ ๊ผฝ์•„๋ณด๋ฉด 1. ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งคํ•‘(ORM) 2. ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ ์ด๊ทธ๋ฆผ์„ ์„ค๋ช…ํ•˜๋ฉด ์š”์ฒญ์ด ์˜ฌ ๋•Œ๋งˆ๋‹ค EntityManagerFactory๋ฅผ ํ†ตํ•ด EntityManager๋ฅผ ์ƒ์„ฑํ•˜๊ณ , EntityManager๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ DB ์ปค๋„ฅ์…˜์„ ํ†ตํ•ด DB๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ? "์˜๊ตฌ ์†์„ฑ ์ €์žฅ" ์ธ๊ฐ€? ๋งž๋‹ค. "์—”ํ‹ฐํ‹ฐ๋ฅผ ์˜๊ตฌ ์ €์žฅํ•˜๋Š” ํ™˜๊ฒฝ"์ด๋ผ๋Š” ๋“ฏ์ด๋‹ค. ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋Š” ๋…ผ๋ฆฌ์ ์ธ ๊ฐœ๋…์œผ๋กœ ๋ˆˆ์— ๋ณด์ด์ง€๋Š” ์•Š๋Š”๋‹ค. EntityManager๋ฅผ ํ†ตํ•ด์„œ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค. EntityManager.persist(entity); //Entity๋ฅผ DB์— ์ €์žฅํ•˜๋Š” ์ฝ”๋“œ. Entity๋ฅผ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค. EntityManage..
1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฉ์–ธ JPA๋Š” ํŠน์ • DB์— ์ข…์†๋˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ์•Œ์•„์„œ ๋ฐ”๊ฟ”์ค€๋‹ค. 2. JPA๊ตฌ๋™ ๋ฐฉ์‹ Persistence ํด๋ž˜์Šค๊ฐ€ META-INF/persistence.xml ์„ค์ • ํŒŒ์ผ์„ ์ฝ์–ด์„œ EntityManagerFactory๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค EntityManager๋ฅผ ๋งŒ๋“ ๋‹ค. EntityManagerFactory๋Š” ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•ด์„œ ์ „์ฒด์—์„œ ๊ณต์œ ํ•˜๊ณ , EntityManager๋Š” ์“ฐ๋ ˆ๋“œ๊ฐ„์— ๊ณต์œ ํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉ ํ›„ ๋ฒ„๋ฆฐ๋‹ค. JPA์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์€ ํŠธ๋žœ์žญ์…˜ ์•ˆ์—์„œ ์‹คํ–‰ํ•œ๋‹ค. ์‹œ์ž‘์— ์•ž์„œ ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ๋‚ด์šฉ์ด ํ•„์š”ํ•˜๋‹ค. ํ•„์š”ํ•˜๋‹ค๋ฉด ๊ณต๋ถ€๋ฅผ ๋” ํ•˜๋„๋ก ํ•˜๊ณ , ๊ฐ„๋‹จํžˆ ์•„๋ž˜๊ธ€๋กœ ๊ฐœ๋…๋งŒ ์žก์•„๋ณด์ž ํŠธ๋žœ์žญ์…˜? https://koreatstm.tistory.com/1..
์ž๋ฐ” ORM ํ‘œ์ค€ JPA ๊ธฐ๋ณธํŽธ ์ธํ”„๋Ÿฐ ๊น€์˜ํ•œ๋‹˜์˜ '์ž๋ฐ” ORM ํ‘œ์ค€ JPA ๊ธฐ๋ณธํŽธ' ๊ฐ•์˜ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ https://www.inflearn.com/course/ORM-JPA-Basic# ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ ๊ฐ•์˜ - ์ธํ”„๋Ÿฐ ํšŒ์‚ฌ๋•œ์— ๋งค์ผ ๋ฐ”์œ ์™€์ค‘์— ํ•™์›์ด๋ผ๋„ ๋‹ค๋‹๊นŒ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ๋งˆ์นจ JPA ๊ฐ•์˜๊ฐ€ ์ƒ๊ฒจ์„œ ๊ฟ€ ํƒ€์ด๋ฐ์ด๋„ค์š”. ์ €๋Š” ์ด ์ „์— JPA ์ฑ…์„ ๋ณด๊ณ  ๊ณต๋ถ€ ํ–ˆ์—ˆ๋Š”๋ฐ์š” ๊ถ๊ธˆํ–ˆ๋˜ ์ , ์—…๋ฌด์— ์ ์šฉํ•˜๋ฉฐ ๊ณ ๋ฏผํ•˜๊ณ  ํ•ด๊ฒฐํ•˜ www.inflearn.com ๊น€์˜ํ•œ๋‹˜ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ๊ฐœ์ธ์ ์œผ๋กœ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ๋‹จ์ˆœํžˆ ๊ฐœ์ธ ๊ณต๋ถ€๋ฅผ ์œ„ํ•œ ๊ฐœ์ธ์ •๋ฆฌ๊ธ€์ด๋‹ค. https://dodeon.gitbook.io/study/kimyounghan-orm-jpa/01-jpa-introduction JPA ์†Œ๊ฐœ -..
๋จผ์ € ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ์ž ํŒจํ„ด, ์ˆ˜์ •์ž ํŒจํ„ด, ๋นŒ๋” ํŒจํ„ด ๋“ฑ์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์™œ ๋นŒ๋” ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ? ๋นŒ๋” ํŒจํ„ด์€ ์ƒ์„ฑ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์ƒ์„ฑํŒจํ„ด์ด๋ž€? ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ์ ˆ์ฐจ๋ฅผ ์ถ”์ƒํ™”ํ•˜๋Š” ํŒจํ„ด. ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด์ž ์„œ๋ธŒ์›จ์ด~! ์„œ๋ธŒ์›จ์ด ์ฃผ๋ฌธ์‹œ ํŒจํ‹ฐ ์ข…๋ฅ˜์™€ ์•ผ์ฑ„๋“ฑ์„ ๊ณ ๋ฅธ๋‹ค. ๋ˆ„๊ตฌ๋Š” ํ• ๋ผํ”ผ๋‡จ๋ฅผ ๋„ฃ๊ณ , ๋ˆ„๊ตฌ๋Š” ์Šˆ๋ ˆ๋“œ ์น˜์ฆˆ๋ฅผ ์„ ํƒํ•œ๋‹ค. ์ด์ฒ˜๋Ÿผ ์œ ์—ฐํ•˜๊ฒŒ ๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์–ด, ํด๋ž˜์Šค์˜ ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ์— ์ ์ ˆํ•˜๋‹ค. ๋นŒ๋” ํŒจํ„ด์˜ ์žฅ์ ์€ ์ด๋ ‡๋‹ค. 1. ๊ฐ€๋…์„ฑ์„ ๋†’์ธ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋Š” 10,180,50์ด ๋ญ˜ ๋งํ•˜๋Š”์ง€ ์•Œ๊ธฐ ์‰ฝ์ง€ ์•Š๋‹ค. Member member = new Member(20,180,50) ๊ทธ๋Ÿผ ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋Š”? Member member = Member.b..
Java์—์„œ๋Š” ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด try-catch๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜์ง€๋งŒ try-catch๋ฅผ ๋ชจ๋“  ์ฝ”๋“œ์— ๋ถ™์ด๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๋‹ค. Spring์€ ์ „์—ญ์ ์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” @ControllerAdvice์™€ @RestControllerAdvice ์–ด๋…ธํ…Œ์ด์…˜์„ ์ง€์›ํ•œ๋‹ค. @RestControllerAdvice๋Š” @ControllerAdvice์™€ ๋‹ฌ๋ฆฌ @ResponseBody๊ฐ€ ๋ถ™์–ด ์žˆ์–ด ์‘๋‹ต์„ Json์œผ๋กœ ๋‚ด๋ ค์ค€๋‹ค๋Š” ์ ์ด ๋‹ค๋ฅด๋‹ค. @ControllerAdvice @ExceptionHandler, @ModelAttribute, @InitBinder ๊ฐ€ ์ ์šฉ๋œ ๋ฉ”์„œ๋“œ์— AOP๋ฅผ ์ ์šฉํ•ด Controller ๋‹จ์— ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ์–ด๋…ธํ…Œ์ด์…˜ @Controller์— ๋Œ€ํ•œ ์ „์—ญ์ ์œผ๋กœ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌ..
์˜์กด๊ด€๊ณ„ ์ฃผ์ž… ๋ฐฉ๋ฒ•์—๋Š” 4๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ์ƒ์„ฑ์ž ์ฃผ์ž… ์ˆ˜์ •์ž ์ฃผ์ž…(setter ์ฃผ์ž…) ํ•„๋“œ ์ฃผ์ž… ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ ์ฃผ์ž… 1. ์ƒ์„ฑ์ž ์ฃผ์ž… ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์˜์กด ๊ด€๊ณ„๋ฅผ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ƒ์„ฑ์ž ํ˜ธ์ถœ์‹œ์ ์— ๋”ฑ 1๋ฒˆ๋งŒ ํ˜ธ์ถœ๋˜๋Š” ๊ฒƒ์ด ๋ณด์žฅ๋˜๊ณ , ๋ถˆ๋ณ€,ํ•„์ˆ˜ ์˜์กด๊ด€๊ณ„์— ์‚ฌ์šฉ๋œ๋‹ค. 2.์ˆ˜์ •์ž์ฃผ์ž… setter๋ผ ๋ถˆ๋ฆฌ๋Š” ํ•„๋“œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ์ˆ˜์ •์ž ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ• ์„ ํƒ, ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š”์˜์กด๊ด€๊ณ„์— ์‚ฌ์šฉ 3. ํ•„๋“œ์ฃผ์ž… ํ•„๋“œ์— ๋ฐ”๋กœ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•˜์ง€๋งŒ ์™ธ๋ถ€์—์„œ ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•ด ํ…Œ์ŠคํŠธ ํ•˜๊ธฐ๊ฐ€ ํž˜๋“ค๋‹ค 4. ์ผ๋ฐ˜๋ฉ”์„œ๋“œ์ฃผ์ž… ํ•œ๋ฒˆ์— ์—ฌ๋Ÿฌ ํ•„๋“œ๋ฅผ ์ฃผ์ž… ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋‚˜, ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. @Service public class UserService { private UserRepository userReposi..
์„œ๋ธ”๋ฆฟ์ด ์ดˆ๋ก์ƒ‰ ๋ถ€๋ถ„ ์ œ์™ธ ๋ชจ๋“  ๋ถ€๋ถ„์„ ๋‹ค ํ•ด์คŒ HTTP ์š”์ฒญ์‹œ • WAS๋Š” Request, Response ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์„œ ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด ํ˜ธ์ถœ • ๊ฐœ๋ฐœ์ž๋Š” Request ๊ฐ์ฒด์—์„œ HTTP ์š”์ฒญ ์ •๋ณด๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ๊บผ๋‚ด์„œ ์‚ฌ์šฉ • ๊ฐœ๋ฐœ์ž๋Š” Response ๊ฐ์ฒด์— HTTP ์‘๋‹ต ์ •๋ณด๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ž…๋ ฅ • WAS๋Š” Response ๊ฐ์ฒด์— ๋‹ด๊ฒจ์žˆ๋Š” ๋‚ด์šฉ์œผ๋กœ HTTP ์‘๋‹ต ์ •๋ณด๋ฅผ ์ƒ์„ฑ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ: ํ†ฐ์บฃ์ฒ˜๋Ÿผ ์„œ๋ธ”๋ฆฟ์„ ์ง€์›ํ•˜๋Š” WAS๋ฅผ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ํ•จ • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ, ์ดˆ๊ธฐํ™”, ํ˜ธ์ถœ, ์ข…๋ฃŒํ•˜๋Š” ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ • ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋Š” ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๊ด€๋ฆฌ(๊ฐ์ฒด ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ ๊ณต์œ ) Request,response๋Š” ๊ฐ ์š”์ฒญ๋งˆ๋‹ค ๋‹ค๋ฅด๊ธฐ์— ์ƒˆ๋กœ ๋งŒ๋“œ๋Š”๊ฒŒ ๋งž์ง€๋งŒ, helloServlet๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์žฌ..
๊ณ„๋ž€์†Œ๋…„
'๐Ÿผ๋ฐฑ์•ค๋“œ/Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก