[Architecture] ์ผ๊ธฐ × ์นดํ…Œ๊ณ ๋ฆฌ N:M ๊ด€๊ณ„ ์„ค๊ณ„ (Enum vs DB, ์ค‘๊ฐ„ ํ…Œ์ด๋ธ”, JPA ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘๊นŒ์ง€)
ยท
Dev Log โœ๏ธ/์šฐ์‚ฌ๊ธฐ ๊ฐœ๋ฐœ์ผ์ง€ ๐Ÿฐ
์ผ๊ธฐ ๋„๋ฉ”์ธ์— 'ํ™œ๋™ ์นดํ…Œ๊ณ ๋ฆฌ' ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ, ํ…Œ์ด๋ธ” ์„ค๊ณ„๋ถ€ํ„ฐ JPA ์—”ํ‹ฐํ‹ฐ ๋งคํ•‘๊นŒ์ง€ ์ „์ฒด ๊ณผ์ •์„ ๊ธฐ๋กํ•ด ๋ณด๋ ค๊ณ  ํ•œ๋‹ค.์ฒ˜์Œ์—๋Š” ๋‹จ์ˆœํ•˜๊ฒŒ Enum์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ ค ํ–ˆ๋Š”๋ฐ, ๊ณ ๋ฏผ์„ ๊ฑฐ๋“ญํ• ์ˆ˜๋ก ๊ตฌ์กฐ๊ฐ€ ์ ์  ์ปค์กŒ๋‹ค ... ๐Ÿšจ ๊ณ ๋ฏผ ๋ฐฐ๊ฒฝ์ผ๊ธฐ์— 'ํ™œ๋™ ์นดํ…Œ๊ณ ๋ฆฌ'๋ฅผ ๋งคํ•‘ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ธฐํšํ–ˆ๋‹ค.์˜ˆ๋ฅผ ๋“ค์–ด ํ•˜๋‚˜์˜ ์ผ๊ธฐ์— "๋ฐ์ดํŠธ", "์—…๋ฌด", "์•ฝ์†" ๊ฐ™์€ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๋ถ™์ผ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. 1. ์นดํ…Œ๊ณ ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•  ๊ฒƒ์ธ๊ฐ€?2. ์ผ๊ธฐ์™€ ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ด€๊ณ„๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•  ๊ฒƒ์ธ๊ฐ€?3. JPA ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘์„ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋Š”๊ฐ€? โžก๏ธ ํ•˜๋‚˜ํ•˜๋‚˜ ํ’€์–ด๋ณด๋‹ˆ ์ƒ๊ฐ๋ณด๋‹ค ๊ณ ๋ คํ•  ๊ฒŒ ๋งŽ์•˜๋‹ค. ๐Ÿค” ๊ณ ๋ฏผํ–ˆ๋˜ ์„ ํƒ์ง€ 1. ์นดํ…Œ๊ณ ๋ฆฌ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ• : Enum vs DB ํ…Œ์ด๋ธ”A. Enum์œผ๋กœ ๊ด€๋ฆฌenum cl..
[TIL] JPA @OneToMany ์ปฌ๋ ‰์…˜ ์ˆ˜์ • ์‹œ ์ฃผ์˜์  (์ปฌ๋ ‰์…˜ ์ถ”์ )
ยท
Today I Learned ๐Ÿง/Project
JPA ์—”ํ‹ฐํ‹ฐ์—์„œ `@OneToMany` ์ปฌ๋ ‰์…˜์„ ์—…๋ฐ์ดํŠธํ•  ๋•Œ, ๋ฆฌ์ŠคํŠธ๋ฅผ ํ†ต์งธ๋กœ ๊ต์ฒดํ•˜๋ฉด ์•ˆ ๋˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•ด ๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ๐Ÿšง ์ˆ˜์ • ์ „ ์ฝ”๋“œ - ์ปฌ๋ ‰์…˜์„ ์ƒˆ ๋ฆฌ์ŠคํŠธ๋กœ ํ• ๋‹น //Diary.ktif (diaryActivityCategoryList.isNotEmpty()) { this.diaryActivityCategory?.clear() this.diaryActivityCategory = diaryActivityCategoryList} ํ…Œ์ŠคํŠธ ๊ณผ์ •์—์„œ ๋ณ€๊ฒฝ ๊ฐ์ง€(dirt checking)์ด ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์•„ ์›์ธ์„ ์ฐพ์•„๋ณด์•˜๋‹ค. ๐Ÿ“Œ JPA์˜ ์ปฌ๋ ‰์…˜ ์ถ”์  JPA๋Š” `@OneToMany`๋กœ ๋งคํ•‘๋œ ์ปฌ๋ ‰์…˜์„ ๋กœ๋”ฉํ•  ๋•Œ, ๋‹จ์ˆœํ•œ `ArrayList`๊ฐ€ ์•„๋‹Œ Hibernate ์ „..
[TIL] Kotlin ํ‘œํ˜„์‹ ํ™œ์šฉํ•˜์—ฌ ๋ฆฌํŒฉํ† ๋ง ํ•˜๊ธฐ
ยท
Today I Learned ๐Ÿง/Project
PR ๋ฆฌ๋ทฐ์—์„œ Kotlin ํ‘œํ˜„์‹ ๊ด€๋ จ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•˜๋‹ค.`when`, `ifBlank`, `let`์„ ํ™œ์šฉํ•˜์—ฌ ๋ฆฌํŒฉํ† ๋ง์„ ์ง„ํ–‰ํ•ด๋ดค๋‹ค. ๐Ÿซต๐Ÿป `when` ํ‘œํ˜„์‹ Java ์—์„œ๋Š” `switch~case`๋ฌธ, Kotlin์—์„œ๋Š” `when` ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. when(๊ฐ’) { ์กฐ๊ฑด๋ถ€ -> ์–ด๋– ํ•œ ๊ตฌ๋ฌธ ์กฐ๊ฑด๋ถ€ -> ์–ด๋– ํ•œ ๊ตฌ๋ฌธ else -> ์–ด๋– ํ•œ ๊ตฌ๋ฌธ} Java ์—์„œ๋Š” `switch~case`๋ฌธ, Kotlin์—์„œ๋Š” `when` ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. when { score >= 90 -> "A" score >= 80 -> "B" else -> "C"} `when()` ์— ๊ฐ’ ์—†์ด `ealry return`์ฒ˜๋Ÿผ ํ™œ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.`if-else`๋ฌธ ๋Œ€์‹  ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€๋…์„ฑ์ด ์ข‹..