๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

TiL26

[Spring] Map Struct ์‚ฌ์šฉํ•˜๊ธฐ Map Struct https://mapstruct.org/ ๐Ÿ’ก MapStruct๋Š” ๊ตฌ์„ฑ ์ ‘๊ทผ๋ฒ•์— ๋Œ€ํ•œ ๊ทœ์•ฝ์— ๊ทผ๊ฑฐํ•˜์—ฌ Java Bean ์ข…๋ฅ˜ ๊ฐ„์˜ ๋งคํ•‘ ๊ตฌํ˜„์„ ํฌ๊ฒŒ ๋‹จ์ˆœํ™”ํ•œ code generator ์ด๋‹ค. ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•˜๋ฉด Dto ์™€ Entity์˜ ๋ณ€ํ™˜์„ ์‰ฝ๊ฒŒ ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด Map Struct๋ฅผ ์™œ ์‚ฌ์šฉํ• ๊นŒ? ์žฅ์  ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผ์‹œ ๋งคํ•‘์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (์ปดํŒŒ์ผ ์‹œ์ ์— ๋งคํ•‘ ์ •๋ณด๊ฐ€ ํƒ€์ž… ์„ธ์ดํ”„ํ•œ ์ง€๋ฅผ ๊ฒ€์ฆ) ๋ฆฌํ”Œ๋ ‰์…˜์ด ์•„๋‹Œ ์ง์ ‘ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜์—ฌ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค. ๋””๋ฒ„๊น…์ด ์‰ฝ๋‹ค. ๊ตฌํ˜„์ฒด๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑ ๋˜๊ธฐ๋•Œ๋ฌธ์— ์ƒ์„ฑ๋œ ๋งคํ•‘ ์ฝ”๋“œ๋ฅผ ๋ˆˆ์œผ๋กœ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค. โ†’ ์‹ค์ œ ๊ฑฐ๋Œ€ํ•œ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค๋‹ค๋ณด๋ฉด, ๋‹ค์–‘ํ•œ ๋„๋ฉ”์ธ ์˜์—ญ๋“ค์ด ์žˆ.. 2023. 1. 21.
[JPA] Entity Custom ID Generator (@GenericGenerator) Entity์˜ ๊ธฐ๋ณธํ‚ค (primary key)๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋ณดํ†ต Auto Increment ๋ฐฉ์‹์ด๋‚˜ UUID ๋ฐฉ์‹์„ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. Auto Increment : ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๊ณ  ์žฌ์ •๋ ฌ์ด ํ•„์š”์—†๋‹ค(์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋œ๋‹ค.) : ํ•œ๋Œ€์˜ DB์—์„œ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์Šค์ผ€์ผ์•„์›ƒ์„ ํ†ตํ•œ ํ™•์žฅ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. (์ฒ˜๋ฆฌ ์„ฑ๋Šฅ ํ™•์ •์ด ์–ด๋ ค์›€) : insert ํ›„์—์•ผ PK ๊ฐ’์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. : ๋ณดํ†ต bigint๋กœ ๊ตฌํ˜„. : ์™ธ๋ถ€์— ๋…ธ์ถœ๋  ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค. (๋‹ค๋ฅธ id๋ฅผ ์œ ์ถ” ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—) UUID : ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ๊ณ ์œ ์„ฑ์ด ๋ณด์žฅ๋˜๋Š” ID๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ํ‘œ์ค€ ๊ทœ์•ฝ : 128 bit ๋ฐ์ดํ„ฐ๋กœ ํ‘œํ˜„ (16 Byte) : ๋ฉ€ํ‹ฐ ํ™˜๊ฒฝ์—์„œ๋„ ๋ณ‘๋ ฌ๋กœ ๋™์ž‘ํ•˜์—ฌ ์œ ์ผํ•œ ID๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. : 128bit๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—.. 2023. 1. 18.
[TIL] 221227 - ๋ฐฑ์—”๋“œ์˜ ํ”„๋กœ์ ํŠธ ์ค€๋น„์‚ฌํ•ญ ๋ฐฑ์—”๋“œ๊ฐ€ ์ด์ •๋„๋Š” ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ• ๋•Œ(์ง„ํ–‰ํ•˜๊ธฐ์ „) ์ฐธ๊ณ ํ• ๋งŒํ•œ ์ฒดํฌ๋ฆฌ์ŠคํŠธ๊ฐ€ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค์–ด๋ดค๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ๋ธ”๋กœ๊ทธ ์ฐธ๊ณ ํ•˜๊ธฐ! ๋ฐฑ์—”๋“œ๊ฐ€ ์ด์ •๋„๋Š” ํ•ด์ค˜์•ผํ•จ - planB ์‹œ๋ฆฌ์ฆˆ | ๋ฐฑ์—”๋“œ๊ฐ€ ์ด์ •๋„๋Š” ํ•ด์ค˜์•ผ ํ•จ - city7310.log ์ด๋ฒˆ์—” ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ๊ฒฐ์ •ํ•˜์ž. pip, npm, yarn, gem, maven, gradle ๋“ฑ๊ณผ ๊ฐ™์€ ์˜์กด์„ฑ ๊ด€๋ฆฌ/๋นŒ๋“œ ๋„๊ตฌ๋ฅผ ์จ๋ณธ ์  ์—†๋‹ค๋ฉด ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋„๊ตฌ(Dependency Manager)๋ผ๋Š” ๊ธ€์„ ์ฝ์–ด velog.io 1. ํ”„๋กœ์ ํŠธ ๊ธฐํš์„œ(์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„) ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜๊ธฐ ํ”„๋กœ์ ํŠธ๋ฅผ 5๋ฌธ์žฅ/3๋ฌธ์žฅ/1๋ฌธ์žฅ์œผ๋กœ ์ •์˜ํ•˜๊ธฐ ๋น„์Šทํ•œ ์„œ๋น„์Šค๊ฐ€ ๋ฌด์—‡์ด ์žˆ๊ณ  ์–ด๋–ค ์ฐจ๋ณ„์ ์ด, ๋ฌด์—‡์„ ๋ฐฐ์šธ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฐ€.. 2023. 1. 6.
[TIL] 221209 - JPA : REST-API, API ๋ฌธ์„œํ™” SpringBoot Part4 (5) ํ•™์Šต๋ชฉํ‘œ ์—”ํ‹ฐํ‹ฐ (์ฃผ๋ฌธ๊ด€๋ฆฌ vs ๊ฒŒ์‹œํŒ) API ๊ฐœ๋ฐœ (JUnit, Lombok, OSIV) API ๋ฌธ์„œํ™” (๋ ˆ์ŠคํŠธ ๋‹ฅ์Šค, ์Šค์›จ๊ฑฐ) org.springframework.restdocs spring-restdocs-mockmvc test ์ฃผ๋ฌธ๊ด€๋ฆฌ API ๊ฐœ๋ฐœ ์ฃผ๋ฌธ์ƒ์„ฑ(POST) ์ฃผ๋ฌธ์กฐํšŒ(GET) ๋ฆฌ์ŠคํŠธ(PAGING) ๋‹จ๊ฑด (ONE) Service layer converter entity๋ฅผ Transaction ๋ฌถ์Œ ๋ฐ–์— ๊นŒ์ง€ ๋Œ๊ณ  ๋‚˜๊ฐ€๋Š” ๊ฒƒ์€ ์ข‹์ง€ ์•Š๋‹ค. entity๋Š” RDB์™€ ์–ด๋А ์ •๋„ ํ†ต์‹ ์„ ํ•˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— entity๊ฐ€ ๋ฌถ์Œ ๋ฐ–์œผ๋กœ ๋น ์ ธ๋‚˜๊ฐ€๋ฉด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๊ณณ์—์„œ ์ฟผ๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (OSIV) โ†’ dto ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ†ต์‹ ํ•œ๋‹ค. Orde.. 2022. 12. 20.
[TIL] 221208 - JPA : SpringDataJPA SpringBoot Part4 (4) SpringDataJPA ์Šคํ”„๋ง์—์„œ JPA๋ฅผ ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ง€์›ํ•ด์ฃผ๋Š” ํ”„๋กœ์ ํŠธ ์ฟผ๋ฆฌ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ์ด ์•„๋‹Œ ๊ฐ์ฒด ์ง€ํ–ฅ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค. Auto Configuration์œผ๋กœ ๋ฐ์ดํ„ฐ ์†Œ์Šค ๋ฐ ํŠธ๋žœ์žญ์…˜ ๋งค๋‹ˆ์ € ์„ค์ •์„ ์ž๋™์œผ๋กœ ํ•ด์ค€๋‹ค. spring: datasource: driver-class-name: org.h2.Driver url: jdbc:h2:~/order;DB_CLOSE_ON_EXIT=FALSE username: sa password: jpa: open-in-view: false hibernate: ddl-auto: create-drop show-sql: true properties: hibernate.format_sql: true JpaRepositor.. 2022. 12. 14.
[TIL] 221207 - JPA : ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘, ๊ณ ๊ธ‰ ๋งคํ•‘, ํ”„๋ก์‹œ SpringBoot Part4(3) ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘ ๊ฐ์ฒด ์—ฐ๊ด€๊ด€๊ณ„ VS ํ…Œ์ด๋ธ” ์—ฐ๊ด€๊ด€๊ณ„ ํ…Œ์ด๋ธ”์€ ์™ธ๋ž˜ํ‚ค๋กœ ์—ฐ๊ด€ ๊ด€๊ณ„๋ฅผ ๋งบ๋Š”๋‹ค. ๊ฐ์ฒด๋Š” ์ฐธ์กฐ(์ฃผ์†Œ)๋กœ ์—ฐ๊ด€ ๊ด€๊ณ„๋ฅผ ๋งบ๋Š”๋‹ค. ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ ๋ฐฉํ–ฅ์„ฑ (๋‹จ๋ฐฉํ–ฅ, ์–‘๋ฐฉํ–ฅ) ํ…Œ์ด๋ธ”์—์„œ ๊ด€๊ณ„๋Š” ํ–ฅ์ƒ ์–‘๋ฐฉํ–ฅ์ด๋‹ค. ์™ธ๋ž˜ํ‚ค๋ฅผ ์ด์šฉํ•ด์„œ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์กฐ์ธ์ด ๊ฐ€๋Šฅ SELECT * FROM orders AS o JOIN member AS m ON o.member._id = m.id ๊ฐ์ฒด์—์„œ์˜ ๋‹จ,์–‘๋ฐฉํ–ฅ ๊ด€๊ณ„ // ํšŒ์› -> ์ฃผ๋ฌธ ๋‹จ๋ฐฉํ–ฅ ๋งคํ•‘ ๊ฒฝ์šฐ. ํšŒ์›์—์„œ ์ฃผ๋ฌธ๋งŒ ์ฐธ์กฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. class Member { private long id; private List orders; // ํšŒ์› -> ์ฃผ๋ฌธ } class Order { private String id; } Member member .. 2022. 12. 14.