2022/03

๋™๊ธฐ๋ถ„์˜ ๋„์›€์œผ๋กœ ์ฒ˜์Œ์œผ๋กœ 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..
TDD ๊ฐœ๋ฐœ ๋ฐฉ์‹ TDD ๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ๋’ค์— ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผ๋œ ์ฝ”๋“œ๋งŒ์„ ์‹ค์ œ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•œ๋‹ค -> ๋ฒ„๊ทธ๊ฐ€ ์ค„๊ณ  ์†Œ์Šค๊ฐ€ ๊ฐ„๊ฒฐํ•ด์ง€๋ฉฐ ์„ค๊ณ„๊ฐ€ ๊ฐœ์„ ๋œ๋‹ค. - ์„ค๊ณ„ ๋‹จ๊ณ„์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชฉ์ ์„ ๋ฏธ๋ฆฌ ์ •์˜ํ•œ๋‹ค. - ๋ฌด์—‡์„ ํ…Œ์ŠคํŠธํ•ด์•ผ ํ• ์ง€ ๋ฏธ๋ฆฌ ์ •์˜ํ•œ๋‹ค. - ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ๋„์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ ์‚ฌํ•ญ์„ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ์ถ”๊ฐ€ํ•œ๋‹ค. (์„ค๊ณ„ ๊ฐœ์„ ) TDD ํ”„๋กœ์„ธ์Šค ์‹คํŒจํ•˜๋Š” ์ž‘์€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ -> ํ…Œ์ŠคํŠธ ํ†ต๊ณผ, ์ตœ์†Œํ•œ์˜ ์ฝ”๋”ฉ -> ๊ตฌํ˜„ ์„ค๊ณ„ ๊ฐœ์„ , ์ค‘๋ณต ์ œ๊ฑฐ, ๋ฆฌํŒฉํ† ๋ง , ํ…Œ์ŠคํŠธ ํ†ต๊ณผ ์œ ์ง€ ์ข‹์€ ํ…Œ์ŠคํŠธ์˜ ํŠน์ง• Fast: ํ…Œ์ŠคํŠธ๋Š” ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•˜์—ฌ ์ž์ฃผ ๋Œ๋ฆด ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. Independent: ๊ฐ๊ฐ์˜ ํ…Œ์ŠคํŠธ๋Š” ๋…๋ฆฝ์ ์ด๋ฉฐ ์„œ๋กœ ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. Repeatable: ์–ด๋Š ํ™˜๊ฒฝ์—์„œ..
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 */ // ..
๐Ÿƒโ€โ™‚๏ธ ๊ณ„์†ํ•ด์„œ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ ๐Ÿƒโ€โ™‚๏ธ 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..
๐Ÿƒโ€โ™‚๏ธ ๊ณ„์†ํ•ด์„œ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ ๐Ÿƒโ€โ™‚๏ธ ๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ 2022/03/29 1. Querydsl ์„ ์™œ ์‚ฌ์šฉํ• ๊นŒ? 2. ์ž‘๋™๋ฐฉ์‹? 3. ์˜์กด์„ฑ 4. Repository ๊ตฌ์กฐ 5. Projection ์˜ ๋Œ€ํ•œ ๊ณ ์ฐฐ ... 6. ๋™์ ์ฟผ๋ฆฌ (BooleanBuilder) 7. ExpressionUtils 8. ์ •๋ ฌ ํƒ€์ž…์— ๋”ฐ๋ฅธ ์ •๋ ฌ ์ฒ˜๋ฆฌ Querydsl ์„ ์™œ ์‚ฌ์šฉํ• ๊นŒ? JPA ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ (@Query ํฌํ•จ) ์กฐํšŒ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค. ๋™์ ์ธ ์ฟผ๋ฆฌ์ธ ๊ฒฝ์šฐ์ธ๋ฐ ์˜ˆ๋ฅผ ๋“ค์–ด ์ฃผ๋ฌธ ํŽ˜์ด์ง€๋ฅผ ๊ฒ€์ƒ‰ ํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ ์นดํ…Œ๊ณ ๋ฆฌ or ์ƒํ’ˆ๋ช… or ๊ธฐ์—…๋ช… ๋“ฑ๋“ฑ... ์œผ๋กœ ๊ฒ€์ƒ‰ ์กฐ๊ฑด์ด ๋‹ฌ๋ผ์ง€๋Š” ๋ถ€๋ถ„์ด๋‹ค. ๊ทธ๋ž˜์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ ๊ฒƒ์ด ๋ฐ”๋กœ Querydsl ํ”„๋ ˆ์ž„์›Œํฌ ์ด๋‹ค. - ํƒ€์ž… ์ฒดํฌ๊ฐ€ ๋ฐ”๋กœ ๊ฐ€๋Šฅํ•˜๋‹ค - ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ..
์ปดํŒŒ์ผ๊ณผ์ •์—์„œ ์ƒ์„ฑํ•ด ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š” java๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. @Value ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ถˆ๋ณ€๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค. class์— ์„ ์–ธํ•˜๋ฉด ์•„๋ž˜์˜ ์–ด๋…ธํ…Œ์ด์…˜์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌํ•จ๋œ๋‹ค. @Getter @AllArgsConstructor @ToString @EqualsAndHashCode @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) ํ•˜์ง€๋งŒ @Setter ๋Š” ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ถˆ๋ณ€์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— setter๋ฅผ ์ƒ๋žตํ•˜๋Š” ๊ฒƒ์€ ๋‹น์—ฐํ•˜๋‹ค @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) ๋Š” private์ด๋‚˜ final ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. ์ตœ์ข…์ ์œผ๋กœ @Value ..
์• ์ •์“ฐ
'2022/03 ๊ธ€ ๋ชฉ๋ก