์• ์ •์ฝ”๋”ฉ ๐Ÿ’ป
Enum Type ์—์„œ Function Interface ํ™œ์šฉ
WEB/JAVA 2022. 4. 1. 16:44

ํšŒ์‚ฌ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๋‹ค๊ฐ€ ํ•จ์ˆ˜ํ˜•์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•œ ๋ถ€๋ถ„์ด ์žˆ์–ด์„œ ๊ณต๋ถ€ํ•ด๋ณด์•˜๋‹ค. ์‚ฌ์šฉํ•œ ๋ชฉ์ ์€ ํ•ด๋‹น 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..

article thumbnail
Interceptor ํ™œ์šฉํ•˜๊ธฐ ( feat . ArgumentResolver, Custom Annotation )
WEB/Spring 2022. 3. 25. 14:52

๋™๊ธฐ๋ถ„์˜ ๋„์›€์œผ๋กœ ์ฒ˜์Œ์œผ๋กœ 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 ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ
WEB/JAVA 2022. 3. 24. 00:54

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

Java 8 Interface - default ๋ฉ”์„œ๋“œ, static ๋ฉ”์„œ๋“œ
WEB/JAVA 2022. 3. 23. 17:01

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] ๋‚ด๊ฐ€ ์ฐพ์•„ ์“ฐ๋ ค๊ณ  ์ •๋ฆฌํ•œ ๊ธ€
WEB/JAVA 2022. 3. 16. 11:31

๐Ÿƒโ€โ™‚๏ธ ๊ณ„์†ํ•ด์„œ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ ๐Ÿƒโ€โ™‚๏ธ 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..

article thumbnail
[Querydsl] ๋‚ด๊ฐ€ ์ฐพ์•„ ์“ฐ๋ ค๊ณ  ์ •๋ฆฌํ•œ ๊ธ€
WEB/JPA 2022. 3. 15. 11:51

๐Ÿƒโ€โ™‚๏ธ ๊ณ„์†ํ•ด์„œ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ ๐Ÿƒโ€โ™‚๏ธ ๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ 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
WEB/JAVA 2022. 3. 11. 21:22

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

article thumbnail
HTTP , HTTPS
BASIC 2022. 2. 23. 18:44

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

8. Service
Project/DARLING 2022. 2. 16. 16:07

@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(..

7. CI/CD ๊ณ„ํš
Project/DARLING 2022. 2. 9. 17:21

๋ฆฌํŒฉํ† ๋ง์ด 30%์ •๋„ ๋‚จ์€ ์‹œ์ ์—์„œ ์ž๋™ํ™” ๋ฐฐํฌ๋ฅผ ๊ณ„ํšํ•˜๊ณ ์žํ•ฉ๋‹ˆ๋‹ค! ์šฐ์„  ์ฒ˜์Œํ•ด๋ด์„œ ๊ฒ€์ƒ‰์œผ๋กœ ์ฐพ์•„๋‚ธ ๋ฐฉ๋ฒ•์„ ์‹คํ–‰ํ•œ ํ›„ ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๊ณ  ๋‹ค๋ฅธ๊ฑธ๋กœ ๋ฐ”๊ฟ”๋ณผ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ์ œ์ผ ๋งŽ์ด ๋“ค์–ด๋ดค๋˜ Jenkins, Docker๋ฅผ ์‚ฌ์šฉํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. 1. GitHub Push. 2. GitHub์—์„œ Jenkins์— Build ์œ ๋ฐœํ•œ๋‹ค. 3. Jenkins์—์„œ Gradle Buildํ•˜์—ฌ Jar ํŒŒ์ผ ์ƒ์„ฑ ํ•œ๋‹ค. 4. ์ƒ์„ ๋œ Jar ํŒŒ์ผ์„ build ํ•œ๋‹ค. 5. DocerHub์— Push ํ•œ๋‹ค. 6. Jenkins ๊ฐ€ DockerHub์— ์žˆ๋Š” ํŒŒ์ผ์„ pull ํ•œ๋‹ค. 7. ์ด์ „ ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ ํ›„ ์ƒˆ๋กœ ๋ฐ›์•„์˜จ ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. https://velog.io/@haeny01/AWS-Jenkins%EB%A5%BC-%ED%99%9..

article thumbnail
6. ๋ฌด์—‡์ด ๋ฌธ์ œ์ผ๊นŒ ...
Project/DARLING 2022. 1. 25. 20:47

Test ๋„์ค‘ ์ด์ƒํ•˜๊ฒŒ ResponseFileds๋ฅผ ๋ฐ›์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ํ˜น์‹œ๋‚˜ ํ•ด์„œ postman์œผ๋กœ ํ…Œ์ŠคํŠธ ํ•ด๋ณด์•˜๋Š”๋ฐ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž˜๋‚˜์˜จ๋‹ค ... ํ…Œ์ŠคํŠธ๋Š” ์„ฑ๊ณตํ•˜์ง€๋งŒ responseFields ๊ฐ€ ์—†๋‹ค๋ฉฐ ๊ณ„์†ํ•ด์„œ ์˜ค๋ฅ˜๋ฅผ ๋ฑ‰๋Š”๋‹ค ... ใ…œใ…œ ๋ฌด์—‡์ด ๋ฌธ์ œ์ผ๊นŒ @Test void loginUser() throws Exception { final UserLoginRequest userLoginRequest = UserLoginRequest.builder().socialToken("Asd823daz").pushToken("Wesdf0898dfa").build(); final UserLoginResponse userLoginResponse = UserLoginResponse.builder().coupleT..

article thumbnail
5. Spring REST Docs ์‚ฌ์šฉ
Project/DARLING 2022. 1. 24. 19:47

์„œ๋น„์Šค ๊ตฌํ˜„์— ์•ž์„œ REST API ๋ฌธ์„œ๋ฅผ ์ž๋™ํ™” ํ•ด์ฃผ๋Š” Spring REST Docs ๋ฅผ ์‚ฌ์šฉํ•ด๋ณธ๋‹ค. Docs๋ฅผ ์‚ฌ์šฉํ•œ ์ด์œ ๋Š” Test์—์„œ ์„ฑ๊ณตํ•ด์•ผ๋งŒ ๋ฌธ์„œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•˜๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ•์ œ๋กœ TEST CODE๋ฅผ ์ž‘์„ฑํ•˜์—ฌ API์— ๋Œ€ํ•œ ์‹ ๋ขฐ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. Gradle 7์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ๋ฌธ์„œ์ƒ์„ฑ์ด ์•ˆ๋˜์„œ ๊ฒ€์ƒ‰ํ•ด๋ดค๋‹ค. ์šฐํšŒ๋ฐฉ๋ฒ•์ด ์žˆ์ง€๋งŒ ๋ณต์žกํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์„ ํƒํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Gradle๊ณผ Maven ์—์„œ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •๋˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งจ์•„๋ž˜ ๋งํฌ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•ด๋ณด๋Š” ๊ฒƒ๋„ ์ข‹๋‹ค! ํ™˜๊ฒฝ์„ค์ • Springboot 2.6.1 Gradle 6.9.1 JUnit5 Asciidoctor 1.5.9.2 build.gradle ์— ์ถ”๊ฐ€ํ•œ ์„ค์ • plugins { id "org.a..