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

java50

[์ด๋ฒคํŠธ ์†Œ์‹ฑ๊ณผ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜] CH.3 ์ด๋ฒคํŠธ ์†Œ์‹ฑ I ์ด๋ฒˆ ์ฑ•ํ„ฐ๋ฅผ ์ฝ์œผ๋ฉด์„œ, ๊ธฐ์กด์— ๋‚ด๊ฐ€ ์ž‘์„ฑํ•˜๋˜ ์Šคํƒ€์ผ์˜ ๋ชจํ˜ธํ•œ ๊ฐœ๋…๋“ค์ด ๋ช…ํ™•ํžˆ ์ •๋ฆฌ ๋˜๋Š” ๋А๋‚Œ์ด ๋“ค์—ˆ๋‹ค.์ด๋Ÿฐ ๊ฐœ๋…์„ ๋ช…ํ™•ํžˆ ์ธ์ง€ํ•˜๋ฉด์„œ, ์•ž์œผ๋กœ์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋ฉด kotlin ์Šคํƒ€์ผ์˜ ํŒจํ‚ค์ง€ ์ •๋ฆฌ์— ์ข€ ๋” ์ง‘์ค‘ํ•ด์•ผ ๋˜๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ๋„ ๋“ค์—ˆ๋‹ค. ๋ชจ๋“  ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜์ง„ ์•Š์„ ๊ฒƒ์ด๋ฉฐ, ๊ธฐ์กด์— ์•Œ๊ณ  ์žˆ๋˜ ๋‚ด์šฉ ์ด์™ธ์— ์ƒˆ๋กญ๊ฒŒ ๋ฐ›์•„ ๋“ค์ธ ๋‚ด์šฉ๋งŒ ์ •๋ฆฌํ•  ๊ฒƒ์ด๋‹ค!! ๋„๋ฉ”์ธ ์ด๋ฒคํŠธ๋ณ€๊ฒฝ์˜ ๋‹จ์œ„๋ฅผ ๋น„์ฆˆ๋‹ˆ์Šค ์ฒ˜๋ฆฌ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•œ ๊ฒฐ๊ณผ๋กœ ์ •์˜์ด๋ฒคํŠธ๋ž€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋„๋ก "์‹œ์Šคํ…œ"์— ์š”์ฒญํ•œ ๊ฒƒ์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋Š” ํžŒํŠธ์ด๋ฉด์„œ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•œ ์ด์œ ์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ…Œ๋ฉด, PasswordChanged ๋ผ๋Š” ๊ฐ์ฒด์˜ ๋„ค์ด๋ฐ์„ ๋ณด๋ฉด, ๋„๋ฉ”์ธ์—์„œ ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚ฌ๋Š”์ง€ ์ฆ‰์‹œ ์ดํ•ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. public class QuantityChan.. 2025. 3. 4.
[์ด๋ฒคํŠธ ์†Œ์‹ฑ๊ณผ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜] CH.2 ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™ ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ๋Œ€๋ช…์‚ฌ์ธ Java๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ๊ฐœ๋ฐœ์ž๋“ค, ์ฆ‰ ์šฐ๋ฆฌ๋“ค์€ ์ ˆ์ฐจ ์ง€ํ–ฅ์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๊ฐ€ ๋งŽ๋‹ค.์ฒ˜์Œ ๊ฐ์ฒด ์ง€ํ–ฅ์„ ๊ณต๋ถ€ํ•˜๋˜ ๋•Œ, ๊ฐ์ฒด๋ผ๋Š” ๊ฐœ๋…์ด ๊ทธ๋ฆฌ๋„ ๋‚ฏ์„ค์—ˆ๋‹ค.C์–ธ์–ด๋กœ ์ฝ”๋”ฉ ์ž…๋ฌธ์„ ํ–ˆ๊ธฐ์—, ์ ˆ์ฐจ์ ์ธ ์ฝ”๋“œ์™€ ๋ช…๋ น์—๋งŒ ์ต์ˆ™ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.๊ฐ์ฒด ์ง€ํ–ฅ ๊ธฐ๋ฒ•์„ ๊ณต๋ถ€ํ•˜๋ฉด์„œ, ํด๋ž˜์Šค๋ฅผ ์‚ฌ๋žŒ์œผ๋กœ ๋ฐ”๋ผ๋ณด๋ ค ๋…ธ๋ ฅํ–ˆ๊ณ  ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ฑ…๊ณผ ๊ฐ์ฒด ์ง€ํ–ฅ ์ƒํ™œ ์ฒด์กฐ ์›์น™ ๋“ฑ์˜ ๊ฐœ๋…์„ ์ˆ™์ง€ํ•˜๋‹ˆ,์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉฐ ํ›จ์”ฌ Java์Šค๋Ÿฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ ๊ฒƒ ๊ฐ™๋‹ค. ํ•˜์ง€๋งŒ, ์•„์ง๋„ ๊ฐ์ฒด ์ฆ‰ ํด๋ž˜์Šค๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ๋‚˜๋ˆ„๋Š” ๊ฑด ํž˜๋“  ์ผ์ด๋ผ ์ƒ๊ฐํ•œ๋‹ค.๊ทธ๊ฒƒ์€ ๊ณง ์„ค๊ณ„์— ๋Œ€ํ•œ ์˜์—ญ์ด๋ผ ์ƒ๊ฐ์ด ๋“œ๋Š”๋ฐ, ์ตœ๊ทผ์— LinkedIn ์—์„œ ๋ณธ ํ† ๋น„ ๋‹˜์˜ ๊ธ€์ฒ˜๋Ÿผ ๊ฐœ๋ฐœ์ž๋“ค์€ ์„ค๊ณ„๋ฅผ ์ง์ ‘ ๋‹ค๋ฃจ๋ฉฐ ๊ณต๋ถ€ํ•  ์ผ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๋Š” ์ƒ๊ฐ๋„ ๋“ ๋‹ค. ์ •๋ง ๊ธฐ๋ณธ์ด ๋˜๋Š” ๋‚ด์šฉ์ด์ง€๋งŒ .. 2025. 2. 24.
MapStruct! JPA Entity ๋งคํ•‘ ๊ฐ„ ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•˜์ž ์ตœ๊ทผ ๋น„์ƒ ๊ฒฐ์ œ ๋ชจ๋“œ๋ฅผ ๊ฐœ๋ฐœ ๋ฐ ๋ฐฐํฌํ•˜๋ฉฐ, ์ฐธ์œผ๋กœ ์–ด์ด ์—†๋Š” ์ž‘์€ ์ฝ”๋”ฉ ๊ด€๋ จ ์ด์Šˆ๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ์— ์ด์ƒ์ด ์žˆ์—ˆ๋‹ค. ๋ฐ”๋กœ, MapStruct ์–˜ ๋•Œ๋ฌธ์ธ๋ฐ.. ํ•œ๋ฒˆ ๋‚˜์—ดํ•ด๋ณด๊ฒ ๋‹ค. (ํ•ญ์ƒ ์ƒ๊ฐํ•˜๋Š” ๊ฑฐ์ง€๋งŒ, ์ฝ”๋“œ ๋‹จ ํ•œ์ค„์˜ ํŒŒ๊ธ‰ํšจ๊ณผ๊ฐ€ ์—„์ฒญ ๋‚˜๋‹ค.) MapStruct ๋ž€?Java Bean ์œ ํ˜• ๊ฐ„ ๋งคํ•‘ ๊ตฌํ˜„์„ ๋„์™€์ฃผ๋Š” ์ฝ”๋“œ ์ƒ์„ฑ๊ธฐ์ปดํŒŒ์ผ ํƒ€์ž„์— ์ฝ”๋“œ ์ƒ์„ฑ ๋ฐ ๋Ÿฐํƒ€์ž„์—์„œ ์•ˆ์ •์„ฑ ๋ณด์žฅ์ˆœ์ˆ˜ Java code ๋ฅผ ํ˜ธ์ถœํ•˜๋ฏ€๋กœ ๋‹ค๋ฅธ ๋งคํ•‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ณด๋‹ค ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค. (Reflection ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ)Annotation Processor ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋งคํ•‘ ๋ฐฉ์‹์— ํŽธ๋ฆฌํ•จ์„ ์ œ๊ณต ์‚ฌ์šฉ ์˜ˆ์‹œJAVA@Mapper public interface UserMapper { UserMapper INSTANCE = Mappers.g.. 2024. 3. 24.
[๊ฐ์ƒ๋ฌธ] Effective Java๋ฅผ ์ฝ๊ณ  ๋‚˜์„œ ์ฑ…์„ ์ฝ์€ ์ด์œ  ์ž๋ฐ” ๊ณต๋ถ€๋ฅผ ํ•˜๋ฉด์„œ ํ•œ๋ฒˆ ์ฏค ๋„์ „ํ•ด๋ณด๊ณ  ์‹ถ์—ˆ๋˜ ์ฑ… ์ค‘์— ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”๋‹ค. ์›Œ๋‚™ ์–ด๋ ต๊ธฐ๋กœ๋„ ์†Œ๋ฌธ์ด ๋‚ฌ๊ณ , ๊ทธ ๋งŒํผ ์ž๋ฐ”์˜ ์ •์ˆ˜๋ผ๊ณ  ๋ถˆ๋ฆฌ์šฐ๊ธธ๋ž˜ ์ž๋ฐ” ์„œ์  ์ค‘ ๊ฐ€์žฅ ๊ฐ€์น˜๊ฐ€ ๋†’๊ฒŒ ๋А๊ปด์กŒ์—ˆ๋‹ค. โ€‹ ๋ฐฑ์—”๋“œ ์ฑŒ๋ฆฐ์ง€ ๊ต์œก์„ ๋“ค์œผ๋ฉฐ ๋ฉ˜ํ† ๋‹˜์ด ์ˆ˜ ๋งŽ์€ ๊ต์œก ์˜์ƒ๊ณผ ์ฑ…๋“ค์„ ์ถ”์ฒœํ•ด์ฃผ์…จ๋Š”๋ฐ, ๊ทธ ์ค‘์— ์–ธ์–ด ์‹ค๋ ฅ์˜ ๊ธฐ์ค€์ด ๋˜๋Š” ์ฒ™๋„๊ฐ€ ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”๋ผ๊ณ  ํ•˜์…จ๋‹ค. ์ฑ… ์ฝ์„ ์‹œ๊ฐ„ ์—†๋‹ค๋Š” ํ•‘๊ณ„๋กœ ๋ฏธ๋ฃจ๊ณ  ๋ฏธ๋ฃจ๋‹ค๊ฐ€ ๋ฐ”๋กœ ์ง€๋ฅด๊ธฐ๋กœ ๊ฒฐ์‹ฌํ–ˆ๋‹ค. โ€‹ ์ƒˆ ์ฑ…์„ ์‚ฌ๊ธฐ์—๋Š” ๊ฐ€๊ฒฉ์ด ๋ถ€๋‹ด์Šค๋Ÿฝ๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฒˆ ๊ธฐํšŒ์— ๋‹น๊ทผ ๋งˆ์ผ“์„ ์ด์šฉํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. ๋‹คํ–‰ํžˆ ๊ฐ€๊นŒ์šด ๋™๋„ค์— ํŒ๋งค์ž ๋ถ„์ด ๊ณ„์…”์„œ ๋น„๋ฐ”๋žŒ์„ ๊ฐ€๋ฅด๋ฉฐ ๊ฑฐ๋ž˜ ์žฅ์†Œ๋กœ ๊ฐ”๋‹ค. ๋„ค๊ณ ๊นŒ์ง€ ํ•ด์ฃผ์‹œ๊ณ  ๊ฐœ๋ฐœ์ž ์ทจ์ค€ ์‘์›๊นŒ์ง€ ํ•ด์ฃผ์…”์„œ ๋‚˜์˜ ์ฒซ ๋‹น๊ทผ ๊ฑฐ๋ž˜์— ๋งค์šฐ ๋”ฐ์Šคํ•จ์„ ๋А๊ผˆ๊ณ , ์Šคํƒ€ํŠธ๊ฐ€ ์ข‹์„.. 2022. 10. 26.
WebFlux๋Š” ๋ฌด์—‡์ด๊ณ , ์™œ ๋‚˜์™”๊ณ , ์–ธ์ œ ์“ฐ์ด๋Š”๊ฐ€? ์–ด์ œ Cart API ์ฝ”๋“œ ๋ฆฌํŒฉํ„ฐ๋ง์„ ๋งˆ๋ฌด๋ฆฌํ•˜๊ณ , ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด PR์„ ์˜ฌ๋ ธ๋‹ค.ํด๋ฆฐ ํ•œ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌ๋ทฐ์–ด๋‹˜์ด ์ฃผ์‹  ์˜๊ฒฌ์„ ๋˜๋‡Œ๊ณ , ํด๋ฆฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์„ ๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด ํ•˜๋ฃจ ์ข…์ผ ๋ชจ๋‹ˆํ„ฐ๋ฅผ ๋…ธ๋ ค๋ณด๋ฉฐ ํด๋ž˜์Šค ๊ฐ„ ์ฑ…์ž„์„ ๋‚˜๋ˆ„์–ด ๋ณด์•˜๋‹ค. ๋นจ๋ฆฌ ์„ฑ์žฅํ•˜๊ณ  ์‹ถ๋‹ค!!๋ฆฌ๋ทฐ๋ฅผ ์•ž๋‘๊ณ , ์นด์นด์˜คํŽ˜์ด๋ฅผ ์ด์šฉํ•œ ๋„๋ฉ”์ธ ์ฝ”๋“œ๋“ค์„ ๋ฆฌํŒฉํ„ฐ๋ง ํ•˜๊ธฐ ์•ž์„œ, ๊ธฐ์กด์— ์™ธ๋ถ€ API์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋˜ ํ…œํ”Œ๋ฆฟ์ธ RestTemplate์˜ ๋Œ€์ฒด ์—ฌ๋ถ€์— ๋Œ€ํ•ด ๋– ์˜ฌ๋ž๋‹ค.RestTemplate์€ deprecated ๋˜์—ˆ์œผ๋ฏ€๋กœ, WebClient์˜ ์‚ฌ์šฉ์„ ๊ณ ๋ คํ•ด๋ณด๋ผ๋Š” ์˜๊ฒฌ์„ ๋ฐ›์•˜๋‹ค.WebClient์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋‹ค๊ฐ€ ๋™๊ธฐ/๋น„๋™๊ธฐ, ๋ธ”๋กœํ‚น/๋…ผ๋ธ”๋กœํ‚น์ด๋ผ๋Š” ๊ฐœ๋…์˜ ์ •์˜์— ๋Œ€ํ•ด ๋‹ค์‹œ ๊ณต๋ถ€ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ๋‚˜์•„๊ฐ€ WebFlux.. 2022. 8. 31.
๊ฐ์ฒด ๊ฐ„ ๋งคํ•‘์„ ์œ„ํ•œ MapStruct ์‚ฌ์šฉ ๋ฐฉ๋ฒ• ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์—์„œ Dto Entity๋ฅผ ๋งคํ•‘ํ•  ๋•Œ model mapper ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ–ˆ์—ˆ๋‹ค. ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฆฌํ”Œ๋ ‰์…˜์„ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์„ฑ๋Šฅ ์ƒ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ๋งŽ์ด๋“ค ์ถ”์ฒœํ•˜๋Š” Map Struct๋ฅผ ์‚ฌ์šฉํ•ด๋ดค๋‹ค. ์ ์šฉํ•˜๋ฉด์„œ ์ž์ž˜ํ•œ ๋ฌธ์ œ๋“ค์ด ์žˆ์—ˆ๋Š”๋ฐ, ๋‚ด๊ฐ€ ๊ฒช์€ ๋ฌธ์ œ์ ๋“ค์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๋“ค์„ ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค. https://mapstruct.org/documentation/dev/reference/html/ MapStruct 1.5.2.Final Reference Guide If set to true, MapStruct in which MapStruct logs its major decisions. Note, at the moment of writing in Maven, al.. 2022. 8. 29.
Spring Security [2] - ์˜ˆ์™ธ ์ฒ˜๋ฆฌ AuthenticationEntryPoint & AccessDeniedHandler ์„œํ๋ฆฌํ‹ฐ๋ฅผ ๋„์ž…ํ•˜๋ฉฐ ์ธ์ฆ, ์ธ๊ฐ€์˜ ๊ณผ์ •์„ ๋งˆ์ณค๋‹ค. ์ด์ œ ์ธ์ฆ ๋ฐ ์ธ๊ฐ€ ์ž‘์—…์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ์— ๋Œ€ํ•ด์„œ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ, ํ•œ ๊ฐ€์ง€ ์ƒ๊ฐํ•ด๋ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ์Šคํ”„๋ง ์„œํ๋ฆฌํ‹ฐ๋Š” ํ•„ํ„ฐ์— ๊ธฐ๋ฐ˜ํ•œ ์ฒด์ด๋‹ ๊ตฌ์กฐ์ด๋ฏ€๋กœ, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊นŒ์ง€ ์š”์ฒญ์ด ๋„๋‹ฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ, @ExceptionHandler๋ฅผ ํ†ตํ•œ ํŽธํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€ํ•˜๋‹ค. ์ง์ ‘ Try - catch๋กœ ์žก์•„์„œ ์‘๋‹ต์„ ๋‚ด๋ ค์ฃผ๋Š” ๋ฐฉ๋ฒ• ๋ฐ–์—” ์—†๋‹ค. ํ•˜์ง€๋งŒ, ์Šคํ”„๋ง ์„œํ๋ฆฌํ‹ฐ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ํ—ˆ์ˆ ํ•˜์ง„ ์•Š๋‹ค. ์„œํ๋ฆฌํ‹ฐ ํ•„ํ„ฐ ์ฒด์ธ์˜ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด ๋งˆ์ง€๋ง‰ ์ฆˆ์Œ์— ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•„ํ„ฐ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” AuthenticationEntryPoint์™€ AccessDeniedHandler๋ฅผ ๊ตฌํ˜„ํ•ด ์ธ์ฆ ๋ฐ ์ธ๊ฐ€ ๊ณผ์ •์—์„œ ์ผ์–ด๋‚œ ์˜ˆ์™ธ์— ๋Œ€.. 2022. 8. 21.
DB ์ˆ˜์ • & jpa ์„ธํŒ… ํ”„๋กœ์ ํŠธ์˜ ์ „๋ฐ˜์ ์ธ ๋ฆฌํŒฉํ„ฐ๋ง์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉฐ, ๊ธฐ์กด mybatis๋ฅผ ์ด์šฉํ–ˆ๋˜ ๊ฒƒ์„ ๊ทธ๋Œ€๋กœ ์˜ฎ๊ฒจ์™”๋‹ค. ํ•˜์ง€๋งŒ SQL Mapper๋ฅผ ์ด์šฉํ•œ ์„ค๊ณ„ ํŠน์„ฑ์ƒ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ์ฝ”๋“œ์˜ ์ž‘์„ฑ์ด ์–ด๋ ค์› ๊ณ , ๋˜ ๊ธฐ์กด DB ์„ค๊ณ„์˜ ๋ฌธ์ œ๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. DB์˜ ์ „๋ฐ˜์ ์ธ ์ˆ˜์ •๊ณผ ๋”๋ถˆ์–ด, JPA๋ฅผ ์ด์šฉํ•ด ๋‹ค์‹œ ๋ฆฌํŒฉํ„ฐ๋ง์„ ํ•ด๋ณด๊ธฐ๋กœ ๊ฒฐ์ •์„ ๋‚ด๋ ธ๋‹ค. ๊ทธ ์ˆ˜์ •๊ณผ์ •๊ณผ JPA ์„ธํŒ… ๋ฐฉ๋ฒ•์„ ๋‚˜์—ดํ•ด๋ณด๊ฒ ๋‹ค. https://github.com/GroovyArea/My-ChickenBreast-Shop GitHub - GroovyArea/My-ChickenBreast-Shop: shop api with spring boot shop api with spring boot . Contribute to GroovyArea/My-ChickenB.. 2022. 8. 8.
์Šคํ”„๋ง ๋ถ€ํŠธ ์†Œ๋‚˜ํ๋ธŒ(SonarQube) ์ ์šฉ + PostgreSql ๊ฐˆ์ˆ˜๋ก ์‰ฝ์ง€ ์•Š๋‹ค. ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๊ฐ€๋Š” ๊ณผ์ •์—์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ถ€๋ถ„์€ ๊ทนํžˆ ์ผ๋ถ€ ๊ณผ์ •์ž„์„ ๊นจ๋‹ฌ์•˜๋‹ค. ์˜คํžˆ๋ ค ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์‹œ๊ฐ„์ด ๋” ๊ทธ๋ฆฝ๋‹ค. ๋ฆฌํŒฉํ„ฐ๋ง๊ณผ ๊ธฐ์ˆ  ์ ์šฉ ๋ฐ ๋ฒ„์ „ ๋งž์ถค ์ˆ˜์ •์— ์‹œ๊ฐ„์„ ๋” ์Ÿ๋Š” ์š”์ฆ˜์ด๋‹ค. ํด๋ฆฐ ํ•œ ์ฝ”๋“œ๋ฅผ ์œ„ํ•ด ์†์ˆ˜ ๋ฆฌํŒฉํ„ฐ๋ง์„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ •์  ์ฝ”๋“œ ๋ถ„์„ ๋„๊ตฌ๋ž€ ๊ฒƒ์ด ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ SonarQube๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ ์ด๋ฅผ ์ ์šฉํ•ด ๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค. ์ •๋ง ์˜ค๋ž˜ ๊ฑธ๋ ธ๊ณ , ์ •ํ™•ํ•˜์ง„ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋‚˜๋ฆ„๋Œ€๋กœ ์ ์šฉํ–ˆ๋˜ ๊ณผ์ •์„ ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค. (ํ‹€๋ฆฐ ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ๋ฌดํ•œํ•œ ๋Œ“๊ธ€ ๊ฐ์‚ฌํžˆ ๋ฐ›๊ฒ ์Šต๋‹ˆ๋‹ค!) ์ด๊ฒƒ์ด ์™„๋ฃŒ๋œ ํ›„ AWS lightsales, ec2 ์ ์šฉ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•ด๋ณด์•„์•ผ๊ฒ ๋‹ค. ์ •์  ๋ถ„์„ ๋„๊ตฌ ์ฝ”๋“œ์˜ ํ’ˆ์งˆ์— ๋Œ€ํ•ด ๊ณ ๋ คํ•  ๋•Œ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋„๊ตฌ์ด๋‹ค. ์ง€์†์ ์ธ .. 2022. 7. 5.
2022.06.22 ใ€ŒLv.2 N-Queenใ€ ์ด๋ฒˆ ์ฃผ๋Š” ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์—ฐ์Šต์— ๋” ๋ฐ•์ฐจ๋ฅผ ๊ฐ€ํ•ด๋ณผ ๊ณ„ํš์„ ์งฐ๋‹ค. ๋‹ค์Œ ์ฃผ์— ๋ชจ์˜ ํ…Œ์ŠคํŠธ๋ฅผ ๋ณผ ๊ณ„ํš์ด๋ฏ€๋กœ ๋น„์ค‘์„ ์ข€ ๋” ๋‘ฌ๋ด์•ผ๊ฒ ๋‹ค. ์ด๋ฒˆ ๊ธฐํšŒ์— ์ž๋ฃŒ๊ตฌ์กฐ ํ•œ๋ฒˆ ๋” ์ •๋ฆฌํ•ด๋ณผ ๊ณ„ํš๋„ ๊ตฌ์ƒํ–ˆ๋‹ค. https://programmers.co.kr/learn/courses/30/lessons/12952 ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - N-Queen ๊ฐ€๋กœ, ์„ธ๋กœ ๊ธธ์ด๊ฐ€ n์ธ ์ •์‚ฌ๊ฐํ˜•์œผ๋กœ๋œ ์ฒด์ŠคํŒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒด์ŠคํŒ ์œ„์˜ n๊ฐœ์˜ ํ€ธ์ด ์„œ๋กœ๋ฅผ ๊ณต๊ฒฉํ•  ์ˆ˜ ์—†๋„๋ก ๋ฐฐ์น˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ n์ด 4์ธ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ€ธ์„ ๋ฐฐ์น˜ํ•˜๋ฉด n๊ฐœ์˜ ํ€ธ์€ programmers.co.kr ๋ฌธ์ œ ์„ค๋ช… ๊ฐ€๋กœ, ์„ธ๋กœ ๊ธธ์ด๊ฐ€ n์ธ ์ •์‚ฌ๊ฐํ˜•์œผ๋กœ๋œ ์ฒด์ŠคํŒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒด์ŠคํŒ ์œ„์˜ n๊ฐœ์˜ ํ€ธ์ด ์„œ๋กœ๋ฅผ ๊ณต๊ฒฉํ•  ์ˆ˜ ์—†๋„๋ก ๋ฐฐ์น˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ n์ด 4์ธ๊ฒฝ.. 2022. 6. 22.
2022.06.14 ใ€ŒLv.2 ๋ฉ€์ฉกํ•œ ์‚ฌ๊ฐํ˜•ใ€ ๋ฌธ์ œ ์„ค๋ช… ๊ฐ€๋กœ๊ธธ์ด๊ฐ€ Wcm, ์„ธ๋กœ ๊ธธ์ด๊ฐ€ Hcm์ธ ์ง์‚ฌ๊ฐํ˜• ์ข…์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ข…์ด์—๋Š” ๊ฐ€๋กœ, ์„ธ๋กœ ๋ฐฉํ–ฅ๊ณผ ํ‰ํ–‰ํ•˜๊ฒŒ ๊ฒฉ์ž ํ˜•ํƒœ๋กœ ์„ ์ด ๊ทธ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๋ชจ๋“  ๊ฒฉ์ž ์นธ์€ 1cm x 1cm ํฌ๊ธฐ์ž…๋‹ˆ๋‹ค. ์ด ์ข…์ด๋ฅผ ๊ฒฉ์ž ์„ ์„ ๋”ฐ๋ผ 1cm ร— 1cm์˜ ์ •์‚ฌ๊ฐํ˜•์œผ๋กœ ์ž˜๋ผ ์‚ฌ์šฉํ•  ์˜ˆ์ •์ด์—ˆ๋Š”๋ฐ, ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด ์ข…์ด๋ฅผ ๋Œ€๊ฐ์„  ๊ผญ์ง“์  2๊ฐœ๋ฅผ ์ž‡๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ž˜๋ผ ๋†“์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํ˜„์žฌ ์ง์‚ฌ๊ฐํ˜• ์ข…์ด๋Š” ํฌ๊ธฐ๊ฐ€ ๊ฐ™์€ ์ง๊ฐ์‚ผ๊ฐํ˜• 2๊ฐœ๋กœ ๋‚˜๋ˆ„์–ด์ง„ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์ข…์ด๋ฅผ ๊ตฌํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ด ์ข…์ด์—์„œ ์›๋ž˜ ์ข…์ด์˜ ๊ฐ€๋กœ, ์„ธ๋กœ ๋ฐฉํ–ฅ๊ณผ ํ‰ํ–‰ํ•˜๊ฒŒ 1cm ร— 1cm๋กœ ์ž˜๋ผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋งŒํผ๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ฐ€๋กœ์˜ ๊ธธ์ด W์™€ ์„ธ๋กœ์˜ ๊ธธ์ด H๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ •์‚ฌ๊ฐํ˜•์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” solutio.. 2022. 6. 14.
2022.05.11 ใ€ŒSHA-256 + Salt & ์ธ์ฆใ€ ์ธ์ฆ ๊ด€๋ จํ•ด์„œ ์‚ฌ์‹ค ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๊ดœ์ฐฎ์ง€๋งŒ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ฐ€๊ธฐ ์œ„ํ•ด์„œ ์ˆœ์ˆ˜ํ•˜๊ฒŒ SHA-256 ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™”์™€ ๋กœ๊ทธ์ธ์„ ์›์‹œ์ ์œผ๋กœ ๊ตฌํ˜„ํ•œ ํ•˜๋ฃจ๋‹ค.. ๊ฑฐ์ง„ 12์‹œ๊ฐ„์„ ์‚ฝ์งˆํ•œ ๊ฒƒ ๊ฐ™๋‹ค. ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด์šฉ๊ณผ, Mybatis ๋งคํ•‘ ๋ฌธ์ œ๋„ ์žˆ๊ณ , ModelMapper๋ฅผ ์‚ฌ์šฉํ•ด DTO VO ๋งคํ•‘์ด ๊ณ„์† ์•ˆ๋˜์–ด์„œ ํ•˜๋ฃจ ์ข…์ผ ๋ฉ˜ํ„ธ์ด ๋‚˜๊ฐ”์—ˆ๋‹ค. ๋‹ค๋ฅธ ๊ณต๋ถ€๋„ ํ• ๊ฒŒ ๋„ˆ๋ฌด ๋งŽ์€๋ฐ ํ”„๋กœ์ ํŠธ๋งŒ ๋น„์ค‘์ด ๋งŽ์•˜๋˜ ํ•˜๋ฃจ๋ผ ๋„ˆ๋ฌด ์•„์‰ฝ๋‹ค. ํ•˜์ง€๋งŒ ์‚ฝ์งˆํ•œ ๋งŒํผ ๋‚ด ๊ฒƒ์ด ๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค. ์˜ค๋Š˜์€ ํ•˜๋ฃจ์ข…์ผ ์‚ฝ์งˆํ•œ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋ฒˆ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ์—ฌ๋‹ด์œผ๋กœ ๋‹ค์ด์–ดํŠธ์ค‘์ธ๋ฐ ์š”์ƒˆ ์ƒ์ฃผํ•˜๋Š” ๊ณต๋ถ€ ํ™˜๊ฒฝ์—์„œ ์˜คํŠธ๋ฐ€ ๋ฏธ๋‹ˆ ๋ฐ”์ดํŠธ๋ฅผ ์ œ๊ณตํ•ด์ฃผ๋Š”๋ฐ ์ด๊ฑฐ ์ง„์งœ ๋„ˆ๋ฌด ๋ง›์žˆ๋‹ค.. ์˜ˆ์ „์—” ์ง„์งœ ๋‹จ ๊ฑฐ ์ž˜ ์ฐธ์•˜๋Š”๋ฐ ๋Š™์—ˆ๋‚˜ .. 2022. 5. 11.
2022.05.10 ใ€ŒRest Ful Api & DTO,VO mapping & Mysql Index & ์ƒ์ˆ˜ํ™”ใ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ ์ค‘์— ์ˆ˜์ •์‚ฌํ•ญ์ด ๋„ˆ๋ฌด๋„ ๋งŽ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ์˜ˆ์ „์— ํ•™์›์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•  ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค๋“  ๊ธฐํ•œ์ด ์ •ํ•ด์ ธ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์™„์„ฑ๋„๊ฐ€ ์šฐ์„ ์ด์—ˆ๊ณ , ์œ ์ง€๋ณด์ˆ˜์— ๋Œ€ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์‹ ๊ฒฝ์„ ์“ฐ์ง€ ์•Š์•˜์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ์ œ๋Œ€๋กœ ๋œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋‹ค ๋ณด๋‹ˆ ์˜ˆ์ „ ๋ฒ„๋ฆ‡์ด ๋‚˜์˜ค๊ฒŒ ๋˜์—ˆ๊ณ , ์ด๋ฒˆ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ›์€ ๊น€์— ๋ฆฌํŒฉํ„ฐ๋ง์„ ๋น ๋ฅด๊ฒŒ ํ•˜๋ฉฐ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณผ ์ƒ๊ฐ์ด๋‹ค. RestFul Api ์˜ return ๊ฐ’ 1. ๋˜๋„๋ก ์ฒด์ด๋‹ ํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉ 2. response์— ํ•ด๋‹น๋˜๋Š” ํ—ค๋” ๋ฉ”์‹œ์ง€(์ƒํƒœ ์ฝ”๋“œ, ๋ฉ”์‹œ์ง€ ๋“ฑ๋“ฑ), ๋ฐ”๋”” ๊ฐ’์„ ๋‹ค ๋„ฃ๋„๋ก ๋…ธ๋ ฅํ•˜์ž DTO, VO ๊ฐ„์˜ ๋งคํ•‘ ํ˜„์žฌ Mybatis๋ฅผ ์‚ฌ์šฉ์ค‘์ด๋ฏ€๋กœ ํ…Œ์ด๋ธ” ์ž์ฒด์˜ Entity๋Š” VO service mapper ๊ณ„์ธต ์ด๋™ ์‹œ VO๋ฅผ ์ด์šฉํ•ด์•ผ ํ•จ .. 2022. 5. 10.
2022.05.09 ใ€Œํ•ด์‹œ Lv.2ใ€ ์š”์ƒˆ ๋งค์ผ๋งค์ผ ์ฝ”ํ…Œ๋ฅผ ์ค€๋น„ํ•˜๋ฉฐ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฌธ์ œ๋ฅผ ํ’€๊ณ  ์žˆ๋‹ค. ์ฒ˜์Œ์—” ์™„์ „ํžˆ ๋ง‰ํ˜”์ง€๋งŒ ๊ทธ๋ž˜๋„ ์ด์   ์–ด๋А ์ •๋„ ํ’€์ด๊ฐ€ ๋– ์˜ค๋ฅด๊ธด ํ•œ๋‹ค. ํ•œ ๊ฐ€์ง€ ์•„์‰ฌ์šด ์ ์€ ์ƒ๊ฐ๋ณด๋‹ค ํด๋ž˜์Šค๋งˆ๋‹ค ๋‹ค์–‘ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์ด๋ฅผ ์ž˜ ์•Œ๊ณ  ํ™œ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค. ์ œ์ผ ๋งŽ์ด ๋‚˜์˜ค๋Š” ์œ ํ˜•์ธ ํ•ด์‹œ ๋ฌธ์ œ๋ฅผ ๋งˆ์ฃผํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด ํ™œ์šฉํ•  ๋ฉ”์„œ๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ์ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ์ง€๋งŒ ํ•œ๋ฒˆ ์ •๋ฆฌํ•ด๋ณผ ๋งŒํ•œ ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ์ด ๋“ค์–ด์„œ ์ด๋ ‡๊ฒŒ ์ •๋ฆฌํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๋ฌธ์ œ ์„ค๋ช… ์œ„์žฅ์ด๋ผ๋Š” ๋ฌธ์ œ์ธ๋ฐ, ์˜ท์˜ ์ข…๋ฅ˜์™€ ์˜ท์˜ ์ด๋ฆ„์œผ๋กœ ์ด๋ฃจ์–ด์ง„ 2์ฐจ์› ๋ฐฐ์—ด์„ ๊ฐ€์ง€๊ณ  ๊ทธ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ๋งค์ผ ์˜ท์„ ๋‹ค๋ฅด๊ฒŒ ์ž…์–ด์•ผ ํ•˜๊ณ , ํ•˜๋ฃจ์— ์˜ท 1๊ฐœ๋Š” ๋ฌด์กฐ๊ฑด ์ž…๋Š” ์กฐ๊ฑด์ด๋‹ค. ํ•ด์‹œ๋ฅผ ์ด์šฉํ•ด ํ’€๋ž€๋‹ค. ํ’€์ด public int solution(String[][.. 2022. 5. 9.
2022.04.28 ใ€ŒThymeleaf ์„ค์ •ใ€ โ–ถ ํŒŒํŠธ 1 (10์‹œ30๋ถ„ ~ 5์‹œ30๋ถ„) 1. ๋กœ์ง€ํ… ๋งˆ์šฐ์Šค ๊ตฌ๋งค 2. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •๋ ฌ Level2 3. mysql CH.9 4. ์œ„ํ‚ค ์ˆ˜์ • 5. ์Šคํ”„๋ง๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ โ–ถ ํŒŒํŠธ 2 (9์‹œ30๋ถ„ ~ 12์‹œ) 1. ์Šคํ”„๋ง๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ => ์•Œ๋ฐ” ๊ฐ”๋‹ค ์™€์„œ ๊ฒฝ๋กœ ์ข€ ์† ๋ณด๊ณ  html๋„ ์ข€ ๋„ฃ๊ณ  ํ•˜์ž โ–ถ ๋ฌธ์ œ 1. view ๋””์ž์ธ ๋ฌธ์ œ ๋ฌธ์ œ์ : Thymeleaf ์—”์ง„์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์—ฌ๊ธฐ๋Š” jsp์—์„œ ์‚ฌ์šฉํ•˜๋Š” tiles๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค. ํ•ด๊ฒฐ : - Thymeleaf๊ฐ€ ์ œ๊ณตํ•˜๋Š” layout ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. - Thymeleaf ๊ด€๋ จ resolver properties ํŒŒ์ผ ์ •์˜ํ•จ 2. resources ํด๋” ์•„ํ‚คํ…์ณ ๊ด€๋ จ ๋ฌธ์ œ์  : ์Šคํ”„๋ง๋ถ€ํŠธ์—์„œ view ๊ด€๋ จ ์•„ํ‚คํ…์ณ ์„ค๊ณ„๊ฐ€ ์ฒ˜์Œ์ด.. 2022. 4. 28.
๋ฐ˜์‘ํ˜•