์ „์ฒด ๊ธ€

    11์›” ํšŒ๊ณ 

    ๊ฐœ๋ฐœ์ž๋กœ ์ทจ์—…ํ•˜์—ฌ 2๋…„์ด๋ผ๋Š” ์‹œ๊ฐ„์ด ์ง€๋‚ฌ๋‹ค. ์–ด๋–ค ํ”„๋กœ์ ํŠธ๋ฅผ ํ–ˆ๊ณ  ๋ญ˜ ํ–ˆ๊ณ ๋ฅผ ์“ฐ์ง€๋Š” ๋ชปํ•  ๊ฒƒ ๊ฐ™๋‹ค. ๋‚ด๊ฐ€ ๋ญ˜ ํ•  ์ˆ˜ ์žˆ๊ณ  ํ–ˆ๋Š”์ง€ ๊ธฐ์–ต์ด ์•ˆ๋‚œ๋‹ค... ์•ž์œผ๋กœ ๊พธ์ค€ํ•˜๊ฒŒ ๊ธฐ๋ก์ด๋‚˜ ํšŒ๊ณ ๋ฅผ ํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์•„ ๋‹ฌ๋งˆ๋‹ค ํšŒ๊ณ ๋ฅผ ์“ฐ๊ธฐ๋กœ ํ–ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋กœ์„œ์˜ ์„ฑ์žฅ ๊ฐœ์„ ํ•ด์•ผํ•  ์  ์กฐ๊ธ‰ํ•จ: ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ ๋งŽ์ด ์„ฑ์žฅํ–ˆ์ง€๋งŒ ์—ญ์‹œ ์„ธ์ƒ์—๋Š” ์—„์ฒญ๋‚œ ์‚ฌ๋žŒ์ด ๋„ˆ๋ฌด ๋งŽ๋‹ค ์กฐ๊ธ‰ํ•ดํ•˜์ง€ ์•Š๋„๋ก ๋…ธ๋ ฅํ•˜์ž ํœด์‹: ํœด์‹ํ•  ๋•Œ๋Š” ์ผ ์ƒ๊ฐ์„ ํ•˜์ง€ ๋ง์ž ๋น„๊ต: ์†๋„๊ฐ€ ๋Š๋ฆฐ๊ฑฐ์ง€ ๋ฉˆ์ถฐ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ ์ ์€ ์—†์œผ๋‹ˆ๊นŒ ๋น„๊ตํ•˜์ง€ ์•Š๋„๋ก ๋…ธ๋ ฅํ•˜์ž ์•ฝ์†: ์ผ์ •์„ ๋งž์ถ”๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ต๋‹ค ๊ณต๋ถ€: ์ž๊พธ ํ•‘๊ณ„๋Œ€๋ฉด์„œ ์•ˆํ•˜๊ฒŒ ๋œ๋‹ค. ์ง€๊ธˆ ํ•˜๋˜ ๊ฑฐ ๋ผ๋„ ๋งˆ๋ฌด๋ฆฌํ•ด๋ณด์ž ์ž˜ํ–ˆ๋˜ ์  ์•„์ง ํฌ๊ธฐํ•˜์ง€ ์•Š์•˜๋‹ค ์‚ฌ์‹ค ๋‚ด๊ฐ€ ๊ฐœ๋ฐœ์— ์œ ๋ฆฌํ•œ ์„ฑ๊ฒฉ์€ ์•„๋‹ˆ๋‹ค. ๋…ผ๋ฆฌ์ ์ธ ๋ถ€๋ถ„์—์„œ ์•ฝํ•˜๊ณ  ์‰ฝ..

    Hibernate ์—์„œ ์ œ๊ณตํ•˜๋Š” @NotNull & @NotEmpty & @NotBlank ์‚ฌ์šฉํ•˜๊ธฐ

    Hibernate ๊ฐ€ ๋ญ์ง€? ํ•˜์ด๋ฒ„๋„ค์ดํŠธ ORM์€ ์ž๋ฐ” ์–ธ์–ด๋ฅผ ์œ„ํ•œ ๊ฐ์ฒด ๊ด€๊ณ„ ๋งคํ•‘ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. JPA์˜ ๊ตฌํ˜„์ฒด์˜ ํ•œ ์ข…๋ฅ˜๋กœ, JPA ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉฐ ๋‚ด๋ถ€์ ์œผ๋กœ JDBC API ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. Hibernate ๋Š” SQL ์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ๋งŒ์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ( SQL ๋ฐ˜๋ณต์ž‘์—…์„ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค ) ์ปฌ๋Ÿผ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ, ํ…Œ์ด๋ธ”๊ณผ ๊ด€๋ จ๋œ DAO ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ, ์ฟผ๋ฆฌ ,SQL ๋“ฑ์„ ๋Œ€์‹  ์ˆ˜ํ–‰ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ๋ฒค๋”์‚ฌ์— ์ข…์†์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์ง•์€ ์œ ์ง€๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ๋„ ํฐ ์žฅ์ ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Mysql ์„ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ORCLE ๋กœ ๋ณ€๊ฒฝํ•˜๋”๋ผ๋„ Hibernate ๋Š” ๋ณ€๊ฒฝํ•œ ORCLE ๋กœ ..

    ๋‚˜๋งŒ ์–ด๋ ค์šด ์˜ˆ์™ธ์ฒ˜๋ฆฌ

    ๊ฐœ๋ฐœ ํ•˜๋ฉด์„œ ๋‹น์—ฐํ•œ ๋ถ€๋ถ„์ด์˜€์ง€๋งŒ ๋‚˜์—๊ฒ ์ƒˆ๋กญ๊ฒŒ ๋‹ค๊ฐ€์™”๋˜ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ... ใ…œ ๋ฆฌ๋ทฐ ํ•ด์ฃผ์‹œ๋Š” ๋งค๋‹ˆ์ €๋‹˜์ด ๋„ˆ๋ฌด ์ž˜ ์•Œ๋ ค์ฃผ์…”์„œ ์ •๋ฆฌ ํ•ด๋ด…๋‹ˆ๋‹ค ( ๊ฒฉํ•œ ๊ฐ์‚ฌ ๐Ÿฅน ) ์†Œ์ œ๋ชฉ์ด ์—ฐ๊ด€๋˜์–ด ์ด์–ด์ง€์ง€๋Š” ์•Š๊ณ  ์ƒํ™ฉ๋งˆ๋‹ค ์˜ˆ์™ธ์ฒ˜๋ฆฌ ํ–ˆ๋˜ ๋ถ€๋ถ„์„ ๋ฉ”๋ชจํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ ์กฐ์น˜๋ฅผ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ & ๊ด€๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ POINT * ๋ฐœ์ƒํ• ๋งŒ ๊ณณ ์—์„œ catch ํ›„ ๋ฉ”์‹œ์ง€๋ฅผ ์ ๋Š”๋‹ค. (์˜ˆ์™ธ์ƒํ™ฉ์„ ์ •ํ™•ํžˆ ์„œ์ˆ ํ•œ๋‹ค) * ์–ธ์ฒดํฌ์˜ˆ์™ธ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค. ์˜ˆ์™ธ๋ฅผ ์žก์ง€ ๋ชปํ•˜๋ฉด ์ž๋ฐ”์—์„œ๋Š” ํ•ด๋‹น ์ •๋ณด๋ฅผ ์ž๋™์œผ๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹คํŒจ์›์ธ์„ ๋ถ„์„ํ•  ๋•Œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๋Š” ์Šคํƒ์ •๋ณด์ผ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— log ๋กœ ์˜ˆ์™ธ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์‹คํŒจ ์›์ธ์— ๊ด€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€๋Šฅํ•œ ๋งŽ์ด ๋‹ด์•„ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์ถ”์ ํ•˜๊ธฐ ์‰ฝ๋„๋ก ํ•˜๋Š”๊ฒŒ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค! 1. ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ฐ’..

    Enum Type ์—์„œ Function Interface ํ™œ์šฉ

    ํšŒ์‚ฌ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๋‹ค๊ฐ€ ํ•จ์ˆ˜ํ˜•์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•œ ๋ถ€๋ถ„์ด ์žˆ์–ด์„œ ๊ณต๋ถ€ํ•ด๋ณด์•˜๋‹ค. ์‚ฌ์šฉํ•œ ๋ชฉ์ ์€ ํ•ด๋‹น EnumType ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ทธ Enum์— ๋งž๊ฒŒ ๋ฐฐ์—ด์„ ์ •๋ ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹ ์„ ํ•œ ์ถฉ๊ฒฉ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค ..ใ…Ž.. ๊ทธ๋ž˜์„œ ์ €๋„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•ด๋ณด๊ณ  ๊ณต๋ถ€ํ•ด๋ดค์Šต๋‹ˆ๋‹ค! package com.example.demo; import java.util.function.Function; import lombok.Getter; import lombok.RequiredArgsConstructor; @Getter @RequiredArgsConstructor public enum ItemType { AA("์ƒ์ˆ˜",CalRatio::getRatio), BB("์Œ๋ฃŒ",CalRatio::getRatio), CC("๊ณผ์ž",CalRatio::get..

    Interceptor ํ™œ์šฉํ•˜๊ธฐ ( feat . ArgumentResolver, Custom Annotation )

    ๋™๊ธฐ๋ถ„์˜ ๋„์›€์œผ๋กœ ์ฒ˜์Œ์œผ๋กœ Interceptor ๋ฅผ ์ ์šฉํ•ด๋ณด์•„์„œ ๋‚˜์ค‘์— ์‚ฌ์šฉํ•  ์ผ์ด ์žˆ์„ ๋•Œ ์ฐพ์•„๋ณด๋ ค๊ณ  ์จ๋ด…๋‹ˆ๋‹ค! ์•„๋ž˜์™€ ๊ฐ™์€ Controller ์— Header ์—์„œ ์ธ์ฆ์„ ์œ„ํ•œ ๊ฐ’์„ ๋ฐ›์•„์•ผ์ง€๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค! @RestController @RequestMapping("/orders") @RequiredArgsConstructor public class OrdersController { private final OrdersService ordersService; @Auth(type = ApiServiceType.HOMEPAGE) @GetMapping public ResponseEntity getOrders( @RequestParam(required = false) String sear..

    Test-Driven-Development ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ

    TDD ๊ฐœ๋ฐœ ๋ฐฉ์‹ TDD ๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ๋’ค์— ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผ๋œ ์ฝ”๋“œ๋งŒ์„ ์‹ค์ œ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•œ๋‹ค -> ๋ฒ„๊ทธ๊ฐ€ ์ค„๊ณ  ์†Œ์Šค๊ฐ€ ๊ฐ„๊ฒฐํ•ด์ง€๋ฉฐ ์„ค๊ณ„๊ฐ€ ๊ฐœ์„ ๋œ๋‹ค. - ์„ค๊ณ„ ๋‹จ๊ณ„์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชฉ์ ์„ ๋ฏธ๋ฆฌ ์ •์˜ํ•œ๋‹ค. - ๋ฌด์—‡์„ ํ…Œ์ŠคํŠธํ•ด์•ผ ํ• ์ง€ ๋ฏธ๋ฆฌ ์ •์˜ํ•œ๋‹ค. - ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ๋„์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ ์‚ฌํ•ญ์„ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ์ถ”๊ฐ€ํ•œ๋‹ค. (์„ค๊ณ„ ๊ฐœ์„ ) TDD ํ”„๋กœ์„ธ์Šค ์‹คํŒจํ•˜๋Š” ์ž‘์€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ -> ํ…Œ์ŠคํŠธ ํ†ต๊ณผ, ์ตœ์†Œํ•œ์˜ ์ฝ”๋”ฉ -> ๊ตฌํ˜„ ์„ค๊ณ„ ๊ฐœ์„ , ์ค‘๋ณต ์ œ๊ฑฐ, ๋ฆฌํŒฉํ† ๋ง , ํ…Œ์ŠคํŠธ ํ†ต๊ณผ ์œ ์ง€ ์ข‹์€ ํ…Œ์ŠคํŠธ์˜ ํŠน์ง• Fast: ํ…Œ์ŠคํŠธ๋Š” ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•˜์—ฌ ์ž์ฃผ ๋Œ๋ฆด ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. Independent: ๊ฐ๊ฐ์˜ ํ…Œ์ŠคํŠธ๋Š” ๋…๋ฆฝ์ ์ด๋ฉฐ ์„œ๋กœ ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. Repeatable: ์–ด๋Š ํ™˜๊ฒฝ์—์„œ..

    Java 8 Interface - default ๋ฉ”์„œ๋“œ, static ๋ฉ”์„œ๋“œ

    Java 8 ์ดํ›„๋กœ interface์— ๋Œ€ํ•œ ์ •์˜๊ฐ€ ๋ช‡๊ฐ€์ง€ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค. ์ƒํ™ฉ ์ด๋ฏธ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” Interface ์— ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ ํ•˜๊ณ  ์‹ถ๋‹ค. ํ•˜์ง€๋งŒ ์ด Interface๋ฅผ implemnets ๋ฐ›๊ณ  ์žˆ๋Š” class ๋ชจ๋‘๊ฐ€ ์ด ๊ธฐ๋Šฅ์˜ ๊ตฌํ˜„์ฒด๋ฅผ ์ƒ์„ฑํ•ด์•ผ๋งŒ ํ•œ๋‹ค. default ๋ฉ”์„œ๋“œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ default ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ๋˜๋ฉด ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. -> ๊ตฌํ˜„์ฒด๋“ค์€ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. package com.example.demo; public interface UserService { String getName(Long userId); int getAge(Long userId); /** * @implSpec ์ด ๊ตฌํ˜„์ฒด๋Š” ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. * @param userId * @return */ // ..

    [MapStruct] ๋‚ด๊ฐ€ ์ฐพ์•„ ์“ฐ๋ ค๊ณ  ์ •๋ฆฌํ•œ ๊ธ€

    ๐Ÿƒโ€โ™‚๏ธ ๊ณ„์†ํ•ด์„œ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ ๐Ÿƒโ€โ™‚๏ธ 1. ๊ณต์‹๋ฌธ์„œ 2. ์™œ ์‚ฌ์šฉํ• ๊นŒ? 3. ๋™์ž‘๋ฐฉ์‹ 4. ์˜์กด์„ฑ 5. Mapper Inteface ์ž‘์„ฑ 6. Mapper ๊ตฌํ˜„์ฒด ์‚ดํŽด๋ณด๊ธฐ ๊ณต์‹๋ฌธ์„œ https://mapstruct.org/documentation/stable/reference/pdf/mapstruct-reference-guide.pdf MapStruct ์™œ ์‚ฌ์šฉํ• ๊นŒ? ๋ณดํ†ต DB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ณ  ์„œ๋น„์Šค๋‹จ์—์„œ ๋กœ์ง์„ ์„ค๊ณ„ ํ•˜๊ธฐ ์œ„ํ•ด Entity -> Dto , Dto -> Entity ์ž‘์—…์„ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋Ÿฌํ•œ Mapping ์ž‘์—…์„ ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋งŽ์ด ์กด์žฌํ•œ๋‹ค ๊ทธ์ค‘ ์•„๋ž˜์˜ ๋งํฌ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด MapStruct ํผํฌ๋จผ์Šค๊ฐ€ ๋น ๋ฅธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. https://www.baeldung.com/j..

    [Querydsl] ๋‚ด๊ฐ€ ์ฐพ์•„ ์“ฐ๋ ค๊ณ  ์ •๋ฆฌํ•œ ๊ธ€

    ๐Ÿƒโ€โ™‚๏ธ ๊ณ„์†ํ•ด์„œ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ ๐Ÿƒโ€โ™‚๏ธ ๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ 2022/03/29 1. Querydsl ์„ ์™œ ์‚ฌ์šฉํ• ๊นŒ? 2. ์ž‘๋™๋ฐฉ์‹? 3. ์˜์กด์„ฑ 4. Repository ๊ตฌ์กฐ 5. Projection ์˜ ๋Œ€ํ•œ ๊ณ ์ฐฐ ... 6. ๋™์ ์ฟผ๋ฆฌ (BooleanBuilder) 7. ExpressionUtils 8. ์ •๋ ฌ ํƒ€์ž…์— ๋”ฐ๋ฅธ ์ •๋ ฌ ์ฒ˜๋ฆฌ Querydsl ์„ ์™œ ์‚ฌ์šฉํ• ๊นŒ? JPA ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ (@Query ํฌํ•จ) ์กฐํšŒ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค. ๋™์ ์ธ ์ฟผ๋ฆฌ์ธ ๊ฒฝ์šฐ์ธ๋ฐ ์˜ˆ๋ฅผ ๋“ค์–ด ์ฃผ๋ฌธ ํŽ˜์ด์ง€๋ฅผ ๊ฒ€์ƒ‰ ํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ ์นดํ…Œ๊ณ ๋ฆฌ or ์ƒํ’ˆ๋ช… or ๊ธฐ์—…๋ช… ๋“ฑ๋“ฑ... ์œผ๋กœ ๊ฒ€์ƒ‰ ์กฐ๊ฑด์ด ๋‹ฌ๋ผ์ง€๋Š” ๋ถ€๋ถ„์ด๋‹ค. ๊ทธ๋ž˜์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ ๊ฒƒ์ด ๋ฐ”๋กœ Querydsl ํ”„๋ ˆ์ž„์›Œํฌ ์ด๋‹ค. - ํƒ€์ž… ์ฒดํฌ๊ฐ€ ๋ฐ”๋กœ ๊ฐ€๋Šฅํ•˜๋‹ค - ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ..

    [Lombok] Difference Between @Value and @Data

    ์ปดํŒŒ์ผ๊ณผ์ •์—์„œ ์ƒ์„ฑํ•ด ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š” java๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. @Value ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ถˆ๋ณ€๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค. class์— ์„ ์–ธํ•˜๋ฉด ์•„๋ž˜์˜ ์–ด๋…ธํ…Œ์ด์…˜์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌํ•จ๋œ๋‹ค. @Getter @AllArgsConstructor @ToString @EqualsAndHashCode @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) ํ•˜์ง€๋งŒ @Setter ๋Š” ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ถˆ๋ณ€์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— setter๋ฅผ ์ƒ๋žตํ•˜๋Š” ๊ฒƒ์€ ๋‹น์—ฐํ•˜๋‹ค @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) ๋Š” private์ด๋‚˜ final ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. ์ตœ์ข…์ ์œผ๋กœ @Value ..

    HTTP , HTTPS

    HTTP / HTTPS - HTTP : ์„œ๋กœ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ๋“ค ์‚ฌ์ด์—์„œ ํ†ต์‹ ์„ ์ฃผ๊ณ ๋ฐ›๊ฒŒ ํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํ”„๋กœํ† ์ฝœ(์„œ๋ฒ„์—์„œ ๋ธŒ๋ผ์šฐ์ €๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ์šฉ๋„๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•จ) ๋ฌธ์ œ์  - ์„œ๋ฒ„์—์„œ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ „์†ก๋˜๋Š” ์ •๋ณด๊ฐ€ ์•”ํ˜ธํ™”๋˜์ง€ ์•Š๋Š”๋‹ค. - HTTPS : SSL(๋ณด์•ˆ ์†Œ์ผ“ ๊ณ„์ธต) ์‚ฌ์šฉ, ์„œ๋ฒ„์™€ ๋ธŒ๋ผ์šฐ์ € ์‚ฌ์ด์— ์•ˆ์ „ํ•˜๊ฒŒ ์•”ํ˜ธํ™”๋œ ์—ฐ๊ฒฐ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค€๋‹ค. ์„œ๋ฒ„์™€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ ํ•ด๋‹น ์ •๋ณด๊ฐ€ ๋„๋‚œ๋‹นํ•˜๋Š” ๊ฒƒ์„ ๋ง‰์•„์คŒ. HTTP ์ž์ฒด๋ฅผ ์•”ํ˜ธํ™”ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ HTTP Message Body๋ฅผ ์•”ํ˜ธํ™”ํ•œ๋‹ค. (์ฆ‰, Header๋Š” ์•”ํ˜ธํ™”๋˜์ง€ ์•Š๋Š”๋‹ค) HTTPS ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ์ด์œ  1. ์ค‘๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋กœ์ฑ„๋„ ์•”ํ˜ธํ™”๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•ˆ์ „ํ•˜๋‹ค. 2. ๊ตฌ๊ธ€์€ HTTPS ์›น ์‚ฌ์ดํŠธ์— ๊ฐ€์‚ฐ์ ์„ ..

    8. Service

    @RequiredArgsConstructor @Service public class DiaryRegisterService { private final CoupleRepository coupleRepository; private final DiaryRepository diaryRepository; private final UserRepository userRepository; public DiaryRegisterResponse addDiary(DiaryRegisterRequest diaryRegisterRequest) { Couple couple = coupleRepository .findByCoupleToken(diaryRegisterRequest.getCoupleToken()) .orElseThrow(..