Re: [KSUG] JPA ์˜์†์„ฑ ์ „์ด ์ €์žฅ (๋‹ค๋Œ€์ผ ์–‘๋ฐฉํ–ฅ ๋งคํ•‘)

194 views
Skip to first unread message

Jisung Ahn

unread,
Aug 27, 2019, 9:00:15โ€ฏPM8/27/19
to ks...@googlegroups.com
์Œ..

JPA๋กœ ๋ชจ๋“  ํ™”๋ฉด์„ ์ฒ˜๋ฆฌํ•˜์‹œ๋ ค๊ณ  ํ•˜๋ฉด ์•Š๋ฉ๋‹ˆ๋‹ค.ย 
๋ณต์žก์„ฑ๊ณผ ์„ฑ๋Šฅ์ €ํ•˜์— ย ๋น ์ ธ ์ฃฝ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.ย 


๊ดœํžˆ CQS( Command and Query Separation ) ์ด๋ผ๋Š” ๊ฐœ๋…์ด ์š”์ฆ˜ ์œ ํ–‰ํ•˜๋Š”๊ฒŒ ์•„๋‹Œ์ง€๋ผ..

์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๊ฒฉ์ด ํ™”๋ฉด ์ถœ๋ ฅ์ด ์šด์ข‹๊ฒŒ ๋„๋ฉ”์ธ ๋ชจ๋ธ ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋œ๋‹ค๋ฉด ๋ชจ๋ฅผ๊นŒ..
JPA(ORM)์œผ๋กœ๋Š” Command๋งŒ ์ฒ˜๋ฆฌํ•˜๊ณ  ํ™”๋ฉด์— ๋ฟŒ๋ ค ์ฃผ๋Š”๊ฒƒ์€ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ฐพ์œผ์‹œ๋Š”๊ฒŒ ํŽธํ• ๊ฒ๋‹ˆ๋‹ค. (mybatis๋ผ๋˜๊ฐ€ Jooq๋ผ๋˜๊ฐ€)ย 

๊ทธ๋ฆฌ๊ณ  ์ผ๋‹จ ํ™”๋ฉด์—์„œ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์€ Request Model์ด์ง€ ๋„๋ฉ”์ธ ๋ชจ๋ธ์ด ์•„๋‹ˆ๋ผ๋Š”๊ฒƒ์„ ๋จผ์ € ์ƒ๊ฐํ•˜์‹œ๊ณ .

์ด๊ฒŒ ๋ง์ด ๊ธธ์–ด์ง€๋Š”๋ฐ ์š”์ฆ˜์— ๋ฒˆ์—ญํŒ ๋‚˜์˜จ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ ์ฑ…์„ ์‚ฌ์„œ ๋น ๋ฅด๊ฒŒ ์ฝ์–ด ๋ณด์‹œ๋Š”๊ฒƒ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. ย 






2019. 8. 28. ์˜ค์ „ 8:57, A-YUL's Daddy <kim...@gmail.com> ์ž‘์„ฑ:

์˜์†์„ฑ ์ „์ด์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ / ํ…Œ์ŠคํŠธ ์ค‘ ๊ถ๊ธˆํ•œ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฑ…์—์„œ๋„ ์ผ๋Œ€๋‹ค ๋‹จ๋ฐฉํ–ฅ์˜ ๋ฌธ์ œ๋ฅผ ์ง€์ ํ•˜๊ณ  ๋‹ค๋Œ€์ผ์–‘๋ฐฉํ–ฅ ๋งคํ•‘์„ ๊ถŒ์žฅํ•˜๋”๊ตฐ์š”. ๋‹จ๋ฐฉํ–ฅ ๋งคํ•‘์œผ๋กœ ์ง„ํ–‰ํ•  ๊ฒฝ์šฐ parent_child_list ํ…Œ์ด๋ธ”์ด ๋ณ„๋„๋กœ ์ƒ์„ฑ๋˜์–ด(์กฐ์ธ ํ…Œ์ด๋ธ”) ์—ฌ๋Ÿฌ ์ธก๋ฉด์—์„œ (์„ฑ๋Šฅ, ๊ด€๋ฆฌ) ์ข‹์ง€ ์•Š์Œ์„ ์ดํ•ด ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด ๋‹ค๋Œ€์ผ์–‘๋ฐฉํ–ฅ ๋งคํ•‘์œผ๋กœ ๋ณ€๊ฒฝํ›„ ํ…Œ์ŠคํŠธ ํ•ด ๋ดค์Šต๋‹ˆ๋‹ค. public class Parent { @Id @Column(name="parent_id") @GeneratedValue private long id; private String parentValue; @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL) @Builder.Default private List<Child> childList = new ArrayList<Child>(); } public class Child { @Id @Column(name = "child_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String childValue; @ManyToOne @JoinColumn(name = "parent_id") @JsonIgnore private Parent parent; } @PostMapping public ResponseEntity<Parent> save(@RequestBody Parent p){ return new ResponseEntity<Parent>(s.save(p), HttpStatus.OK); } @Transactional public Parent save(Parent p) { return repo.save(p); } ๊ทธ๋Ÿฐ๋ฐ child ํ…Œ์ด๋ธ” parent_id column ์— null ์ด ๋“ค์–ด๊ฐ€๋”๊ตฐ์š” ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ajax --> controller --> service ๋กœ ๋„˜์–ด์˜จ Parent ๊ฐ์ฒด์˜ ์ •๋ณด๋ฅผ ๋ณด๋ฉด parent -> child ๋Š” ๋งคํ•‘๋˜์–ด ์žˆ์œผ๋‚˜ (json ํ˜•ํƒœ๋ฅผ ๋ณด๋ฉด), child ์ž…์žฅ์—์„œ๋Š” parent ๋ฅผ ์•Œ์ˆ˜ ์—†์œผ๋‹ˆ ์ด๋Ÿฌํ•œ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ ์•„๋‹๊นŒ... ์ƒ๊ฐ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ service ์—์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ child.setParent(parent); ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•ด ๋ดค์Šต๋‹ˆ๋‹ค. @Transactional public Parent save(Parent p) { for(Child c : p.getChildList()) { c.setParent(p); // <-- child ์ž…์žฅ์—์„œ parent ๋ฅผ set ํ•ด์ฃผ๋Š” ์ž‘์—… } return repo.save(p); } ์ด๋ ‡๊ฒŒ ํ•˜๋‹ˆ ์ •์ƒ ๋™์ž‘ํ•˜๋„ค์š”.... ํ™”๋ฉด์œผ๋กœ ๋ถ€ํ„ฐ ๋„˜์–ด์˜ค๋Š” ๊ฐ์ฒด์˜ ํ˜•ํƒœ๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜๋ก ๋‹ค๋Œ€์ผ ๋งคํ•‘์ด ๋งŽ์•„์ง€๊ณ  depth ๋„ ๋” ๊นŠ์–ด์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์œ„์™€ ๊ฐ™์ด child ์ž…์žฅ์—์„œ parent ๋ฅผ set ํ•ด์ฃผ๋Š” loop ๋„ ์ด์ค‘/์‚ผ์ค‘์œผ๋กœ ๋  ๊ฐ€๋Šฅ์„ฑ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์™€ ๊ฐ™์ด ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋งž๋Š”์ง€ ... ์˜๋ฌธ์ด ๋“œ๋„ค์š”
ํ˜น์‹œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ์—†์„๊นŒ์š”?

--
์ด ๋ฉ”์ผ์€ Google ๊ทธ๋ฃน์Šค 'Korea Spring User Group Q&A' ๊ทธ๋ฃน์— ๊ฐ€์ž…ํ•œ ๋ถ„๋“ค์—๊ฒŒ ์ „์†ก๋˜๋Š” ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค.
์ด ๊ทธ๋ฃน์—์„œ ํƒˆํ‡ดํ•˜๊ณ  ๋” ์ด์ƒ ์ด๋ฉ”์ผ์„ ๋ฐ›์ง€ ์•Š์œผ๋ ค๋ฉด ksug+uns...@googlegroups.com์— ์ด๋ฉ”์ผ์„ ๋ณด๋‚ด์„ธ์š”.
์›น์—์„œ ์ด ํ† ๋ก ์„ ๋ณด๋ ค๋ฉด https://groups.google.com/d/msgid/ksug/a52514a5-088e-4806-a0dc-53696a43299e%40googlegroups.com์„(๋ฅผ) ๋ฐฉ๋ฌธํ•˜์„ธ์š”.

A-YUL's Daddy

unread,
Aug 28, 2019, 7:47:14โ€ฏPM8/28/19
to Korea Spring User Group Q&A
@narusasย ๋‹ต๋ณ€ ๊ณ ๋ง™์Šต๋‹ˆ๋‹ค.ย 

์ผ๋‹จ ์ œ๊ฐ€ ๊ถ๊ธˆํ•ดํ–ˆ๋˜ ๋ถ€๋ถ„์€ Entity ์˜ setter ์—์„œ parent ๋ฅผ set ํ•ด์ฃผ๋„๋ก ์„ค์ •ํ•˜์—ฌ Service ์—์„œ๋Š” ์•„๋ฌด๋Ÿฐ ์ž‘์—…ํ•˜์ง€ ์•Š๊ณ  RequestBody๋กœ Mapping ๋ ๋•Œ ์ž๋™์œผ๋กœ ๋ถ€๋ชจ๋ฅผ ์•Œ๋ ค์ฃผ๋„๋ก ํ•ด์„œ ํ•ด๊ฒฐ ํ–ˆ์Šต๋‹ˆ๋‹ค.ย 

๋‚ด์šฉ์€ ๋ธ”๋กœ๊ทธ์— ์ •๋ฆฌํ•ด ๋‘์—ˆ์œผ๋‹ˆย https://kimyhcj.tistory.com/353ย ํ˜น์‹œ ํ•„์š”ํ•˜์‹  ๋ถ„์ด ์žˆ๋‹ค๋ฉด ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ๋„ค์š”.

๋ง์”€ํ•ด ์ฃผ์‹ ๊ฒƒ ์ฒ˜๋Ÿผ CQS ์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ์œ„ํ•œ ๊ณต๋ถ€๊ฐ€ ํ•„์š”ํ•ด ๋ณด์ด๋„ค์š”.ย 

์ถ”์ฒœํ•ด ์ฃผ์‹  "ํด๋ฆฐ ์•„ํ‚คํ…์ณ" ์ฑ…๋„ ์ฝ์–ด๋ด์•ผ ๊ฒ ์Šต๋‹ˆ๋‹ค.ย 

๊ณ ๋ง™์Šต๋‹ˆ๋‹ค. ์ข‹์€ ํ•˜๋ฃจ ๋˜์„ธ์š”.

2019๋…„ 8์›” 28์ผ ์ˆ˜์š”์ผ ์˜ค์ „ 10์‹œ 0๋ถ„ 15์ดˆ UTC+9, narusas ๋‹˜์˜ ๋ง:
์ด ๊ทธ๋ฃน์—์„œ ํƒˆํ‡ดํ•˜๊ณ  ๋” ์ด์ƒ ์ด๋ฉ”์ผ์„ ๋ฐ›์ง€ ์•Š์œผ๋ ค๋ฉด ks...@googlegroups.com์— ์ด๋ฉ”์ผ์„ ๋ณด๋‚ด์„ธ์š”.
Reply all
Reply to author
Forward
0 new messages