Spring

Spring/Spring JPA ํ™œ์šฉ

[์‹ค์ „! ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA ํ™œ์šฉ1] - 3. ํšŒ์› ์„œ๋น„์Šค ๊ฐœ๋ฐœ

@Service @Transactional(readOnly = true) public class MemberService @Service ์Šคํ”„๋ง์—์„œ ์„œ๋น„์Šค๋ฅผ ์ง€์ •ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜. ์‚ฌ์‹ค @Component ์–ด๋…ธํ…Œ์ด์…˜๊ณผ ๊ฑฐ์˜ ์ฐจ์ด๊ฐ€ ์—†์ง€๋งŒ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์„œ๋น„์Šค ๋ ˆ์ด์–ด ํด๋ž˜์Šค ์ž„์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. @Transactional JPA์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด๋‚˜ ๋กœ์ง๋“ค์€ ํŠธ๋žœ์žญ์…˜ ์•ˆ์—์„œ ์‹คํ–‰๋˜๋„๋ก ํ•œ๋‹ค . DB์™€ ๊ด€๋ จ๋œ, ํŠธ๋žœ์žญ์…˜์ด ํ•„์š”ํ•œ ์„œ๋น„์Šค ํด๋ž˜์Šค ํ˜น์€ ๋ฉ”์„œ๋“œ์— @Transactional ์–ด๋…ธํ…Œ์ด์…˜์„ ๋‹ฌ์•„์ฃผ๋ฉด๋œ๋‹ค. @Transactional์ด ๋ถ™์€ ๋ฉ”์„œ๋“œ๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ์ž‘์—… ์ค‘์— ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจํ•  ๊ฒฝ์šฐ ์ „์ฒด ์ž‘์—…์„ ์ทจ์†Œํ•œ๋‹ค. readOnly=true - ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์ด ์—†๋Š” ์ฝ๊ธฐ ์ „์šฉ ๋ฉ”์„œ๋“œ์— ์‚ฌ์šฉ..

Spring/Spring JPA ํ™œ์šฉ

[์‹ค์ „! ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA ํ™œ์šฉ1] - 2. ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ฐœ๋ฐœ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ฒ˜ Repository repository: JPA๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๊ณ„์ธต, ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ์‚ฌ์šฉ Entity์— ์˜ํ•ด ์ƒ์„ฑ๋œ DB์— ์ ‘๊ทผํ•˜๋Š” ๋ฉ”์„œ๋“œ(ex) findAll()) ๋“ค์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์„ ์–ธํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด, ์—ฌ๊ธฐ์— ์–ด๋–ค ๊ฐ’์„ ๋„ฃ๊ฑฐ๋‚˜, ๋„ฃ์–ด์ง„ ๊ฐ’์„ ์กฐํšŒํ•˜๋Š” ๋“ฑ์˜ CRUD(Create, Read, Update, Delete)๋ฅผ ํ•ด์•ผ ์“ธ๋ชจ๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ํ•  ๊ฒƒ์ธ์ง€ ์ •์˜ํ•ด์ฃผ๋Š” ๊ณ„์ธต์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. @Repository public class MemberRepository { @PersistenceContext private EntityManager em; @Repository : ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ก, JPA ์˜ˆ์™ธ๋ฅผ ์Šคํ”„๋ง ๊ธฐ๋ฐ˜ ์˜ˆ์™ธ๋กœ ์˜ˆ์™ธ ..

Spring/Spring JPA ํ™œ์šฉ

[์‹ค์ „! ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA ํ™œ์šฉ1] - 1. ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค ๊ฐœ๋ฐœ

์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค ๊ฐœ๋ฐœ @Entity @Getter @Setter public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; @Column์€ ๊ฐ์ฒด ํ•„๋“œ๋ฅผ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์— ๋งคํ•‘์‹œ์ผœ์ฃผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ž…๋‹ˆ๋‹ค. name : ํ•„๋“œ์™€ ๋งคํ•‘ํ•  ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ ์ด๋ฆ„์„ ์ง€์ •ํ•œ๋‹ค. ์—”ํ‹ฐํ‹ฐ์˜ ์‹๋ณ„์ž๋Š” id ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  PK ์ปฌ๋Ÿผ๋ช…์€ member_id ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. @Embeddable ๋„์‹œ, ์ฃผ์†Œ ๋ฒˆ์ง€, ์ฃผ์†Œ ์šฐํŽธ๋ฒˆํ˜ธ๋ฅผ ์ฃผ์†Œ๋ผ๋Š” ๊ฐ์ฒด๋กœ ๋ฌถ์–ด ํ‘œํ˜„ํ•˜๋ฉด ๋ณด๋‹ค ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ์ฝ”๋“œ๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค. @Embeddable public class Address { private String city; private String street; privat..

Spring/Spring JPA ํ™œ์šฉ

[์‹ค์ „! ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA ํ™œ์šฉ1] - 0. Entity / EntityManager

Entity(์—”ํ‹ฐํ‹ฐ) JPA์—์„œ ์—”ํ‹ฐํ‹ฐ๋ž€ ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด, DB ํ…Œ์ด๋ธ”์— ๋Œ€์‘ํ•˜๋Š” ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. @Entity๊ฐ€ ๋ถ™์€ ํด๋ž˜์Šค๋Š” JPA๊ฐ€ ๊ด€๋ฆฌํ•ด์ฃผ๋ฉฐ, JPA๋ฅผ ์‚ฌ์šฉํ•ด์„œ DB ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘ํ•  ํด๋ž˜์Šค๋Š” @Entity๋ฅผ ๊ผญ ๋ถ™์—ฌ์•ผ๋งŒ ๋งคํ•‘์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค๋Š” ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋˜๋Š” ํด๋ž˜์Šค์ด๋‹ค. ์• ๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ ์ ˆํžˆ ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ , ์™„์„ฑ๋œ ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค๋Š” ๋ช…์„ธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” 2์ฐจ์› ํ…Œ์ด๋ธ” ์ด ํ…Œ์ด๋ธ”์— ์„œ๋น„์Šค์—์„œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋‹ค ์ €์žฅํ•˜๊ณ  ํ™œ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์„ธ๋กœ์˜ ์—ด ๋ถ€๋ถ„์ด Column ์ด๊ณ , ๊ฐ€๋กœ์˜ ํ–‰ ๋ถ€๋ถ„์ด ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๊ฐ€ ๋œ๋‹ค. ์ด ํ…Œ์ด๋ธ” ์ „์ฒด๊ฐ€ ์—”ํ‹ฐํ‹ฐ ์ด๊ณ , ๊ฐ 1๊ฐœ์˜ ํ–‰๋“ค์ด ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค...

Spring/Spring MVC

[์Šคํ”„๋ง MVC] - 18. Redirect / Post -> Redirect -> Get

๋ฆฌ๋‹ค์ด๋ ‰ํŠธ๋ž€ ๋ง ๊ทธ๋Œ€๋กœ re(๋‹ค์‹œ) + ์ง€์‹œํ•˜๋‹ค(direct) ๋‹ค์‹œ ์ง€์‹œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ www.test.com/page1 URL์„ ์›น ์„œ๋ฒ„์— ์š”์ฒญํ–ˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” HTTP ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•ด "www.test.com/page2 ๋กœ ๋‹ค์‹œ ์š”์ฒญํ•˜์„ธ์š”~" ๋ผ๊ณ  ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ๋‹ค๋ฅธ URL(๊ธธ, ๋ฐฉํ–ฅ) ์„ ์ง€์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. POST ๋“ฑ๋ก ํ›„ ์ƒˆ๋กœ ๊ณ ์นจ ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์ƒˆ๋กœ ๊ณ ์นจ์€ ๋งˆ์ง€๋ง‰์— ์„œ๋ฒ„์— ์ „์†กํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์ „์†กํ•œ๋‹ค. ์ƒํ’ˆ ๋“ฑ๋ก ํผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์ €์žฅ์„ ์„ ํƒํ•˜๋ฉด POST /add + ์ƒํ’ˆ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ ์ „์†กํ•œ๋‹ค. ์ด ์ƒํƒœ์—์„œ ์ƒˆ๋กœ ๊ณ ์นจ์„ ๋˜ ์„ ํƒํ•˜๋ฉด ๋งˆ์ง€๋ง‰์— ์ „์†กํ•œ POST /add + ์ƒํ’ˆ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ ๋‹ค์‹œ ์ „์†กํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚ด์šฉ์€ ๊ฐ™๊ณ , ID๋งŒ ๋‹ค๋ฅธ ์ƒํ’ˆ ๋ฐ์ดํ„ฐ..

Spring/Spring MVC

[์Šคํ”„๋ง MVC] - 17. @ModelAttribute / redirect

์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ์ฒ˜๋ฆฌ @ModelAttribue Item item @PostMapping("/add") public String addItem(@ModelAttribute Item item,Model model) { itemRepository.save(item); model.addAttribute("item",item); return "basic/item"; } ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์•„์„œ ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ๊ฐ์ฒด์— ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๊ธฐ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’์„ ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ๋ฒ•(setXxx)์œผ๋กœ ์ž…๋ ฅํ•ด์ค€๋‹ค. public String addItemV1(@RequestParam String itemName, @RequestParam int price, @RequestParam Integer quantity, Model ..

Spring/Spring MVC

[์Šคํ”„๋ง MVC] - 16. Thymeleaf ํƒ€์ž„๋ฆฌํ”„ ์‚ฌ์šฉ๋ฒ• ๋ฐ ๋ฌธ๋ฒ•

์ •์ ์ธ html ์„ ๋™์  html ๋กœ ๋ฐ”๊ฟ”๋ณด์ž ํƒ€์ž„๋ฆฌํ”„๋Š” ์ˆœ์ˆ˜ HTML ํŒŒ์ผ์„ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์—ด์–ด๋„ ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ๋ทฐ ํ…œํ”Œ๋ฆฟ์„ ๊ฑฐ์น˜๋ฉด ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋œ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ˆœ์ˆ˜ HTML์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ ๋ทฐ ํ…œํ”Œ๋ฆฟ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž„๋ฆฌํ”„์˜ ํŠน์ง•์„ ๋„ค์ธ„๋Ÿด ํ…œํ”Œ๋ฆฟ ํƒ€์ž„๋ฆฌํ”„ ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณด๊ธฐ ํƒ€์ž„๋ฆฌํ”„ ์‚ฌ์šฉ ์„ ์–ธ ์†์„ฑ ๋ณ€๊ฒฝ - th:href ๋ทฐ ํ…œํ”Œ๋ฆฟ์„ ๊ฑฐ์น˜๋ฉด th:href ์˜ ๊ฐ’์ด href ๋กœ ๋Œ€์ฒด๋˜๋ฉด์„œ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ HTML ์†์„ฑ์„ th:xxx ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ์ƒํ’ˆ ๋ชฉ๋ก ํŽ˜์ด์ง€ ์ƒํ’ˆ ๋“ฑ๋ก ๋ฒ„ํŠผ html ์ƒํ’ˆ ๋“ฑ๋ก ์†์„ฑ ๋ณ€๊ฒฝ - th:onclick onclick="location.href='addForm.html'" th:onclick="|locati..

Spring/Spring MVC

[์Šคํ”„๋ง MVC] - 15. HTTP ์‘๋‹ต / HttpMessageConverter / ArgumentResolver

์Šคํ”„๋ง(์„œ๋ฒ„)์—์„œ ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ• ์ •์  ๋ฆฌ์†Œ์Šค ์˜ˆ) ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ •์ ์ธ HTML, css, js๋ฅผ ์ œ๊ณตํ•  ๋•Œ๋Š”, ์ •์  ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋ทฐ ํ…œํ”Œ๋ฆฟ ์‚ฌ์šฉ ์˜ˆ) ์›น ๋ธŒ๋ผ์šฐ์ €์— ๋™์ ์ธ HTML์„ ์ œ๊ณตํ•  ๋•Œ๋Š” ๋ทฐ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•œ๋‹ค. HTTP ๋ฉ”์‹œ์ง€ ์‚ฌ์šฉ HTTP API๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” HTML์ด ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ, HTTP ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์— JSON ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์–ด ๋ณด๋‚ธ๋‹ค. HTTP ์‘๋‹ต - ์ •์  ๋ฆฌ์†Œ์Šค, ๋ทฐ ํ…œํ”Œ๋ฆฟ ์ •์  ๋ฆฌ์†Œ์Šค ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ํด๋ž˜์ŠคํŒจ์Šค์˜ ๋‹ค์Œ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ์ •์  ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค. /static , /public , /resources , /META-INF/resources src/main/resources ๋ทฐ ํ…œํ”Œ๋ฆฟ ๋ทฐ ํ…œํ”Œ๋ฆฟ์„ ๊ฑฐ์ณ์„œ HTML์ด ์ƒ..

hello_u
'Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (6 Page)