๋ฐฑ์๋/ํธ๋ฌ๋ธ์ํ 9 Feign Client ์์ ์๋ต ๋ฐ์ ๋ Jackson ์ญ์ง๋ ฌํ ์ด์ โ ๋ฌธ์ ์ํฉ record ๊ธฐ๋ฐ ํด๋์ค์์ ํ๋๋ช ์ด ๋ค๋ฅธ ์ด์๊ฐ ์๊ฒจ์ Feign Client ์๋ต ํ์ฑ์ด ์คํจํ๋ ์ด์๊ฐ ์๊นpublic record OrderCreateResponse( UUID orderId, // feign client์์๋ id ๋ผ๋ ํ๋๋ช ์ผ๋ก ์๋ตํ๊ณ ์์ UUID productId, Long userId, ...) {} โ ์์ธrecord๋ ๋ชจ๋ ํ๋๊ฐ final์ด๊ณ ์์ฑ์๋ฅผ ์์์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ๋๋ฌธ์, Jackson์ด ์์ฑ์ ํ๋ผ๋ฏธํฐ ์ด๋ฆ์ ์ ์ ์์ด ๋งคํ ์คํจํจ โ ํด๊ฒฐ ๋ฐฉ๋ฒ์์ฑ์์ @JsonProperty ์ด๋ ธํ ์ด์ ์ ๋ฌ์์ ์ง์ ๋ช ์๋ฅผ ํด์ฃผ๋ฉด ๋จpublic record OrderCreateResponse( @JsonProperty("id") .. 2025. 4. 21. Feign Client์์ ์ปค์คํ ์ด๋ ธํ ์ด์ ์ฌ์ฉ์ ์ฃผ์์ฌํญ โ๏ธ ๋ฌธ์ ์ํฉFeign Client ์ธํฐํ์ด์ค ๋ฉ์๋์ @RequestHeader("X-User-Id) ๋์ ์ฌ์ฉํ ์ ์๋ ์ปค์คํ ์ด๋ ธํ ์ด์ ์ ์์ฑํ์ฌ,@CurrentUserId ๋ฅผ ํตํด ํ๋ผ๋ฏธํฐ๋ก ์ฌ์ฉํ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ์ฌ ๋น๋๊ฐ ์คํจํ๋ค. Method has too many Body parameters ์๋ ์ฝ๋์ ๊ฐ์ด ์ปค์คํ ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํด์ ํค๋๋ฅผ ์ ๋ฌํ๊ฒ ๋๋ฉด, ์ปค์คํ ์ด๋ ธํ ์ด์ ์ด ๋ฌด์๋๋ฉด์ userId๊น์ง @RequestBody๋ก ์ธ์์ด ๋์ด ๋ฌธ์ ๊ฐ ์๊ธด ๊ฒ์ด๋ค. (Body ํ๋ผ๋ฏธํฐ๊ฐ 2๊ฐ ์ด์์ด ๋จ)@FeignClient(name = "order-service")public interface OrderFeignClient { @PostMapping OrderCr.. 2025. 4. 21. ๋๊ด์ ๋ฝ ์ฌ์ฉ์ ๋ฒ์ ์ ์ด๊ธฐํ ํ์ง ์์ ์๊ธด ํธ๋ฌ๋ธ์ํ โ๏ธ ๋ฌธ์ ์ํฉ Hibernate์์ @Version ํ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํด๋ ํ๋๊ฐ null ์ด๋ฉด ๋ค์ ์ปค๋ฐ ์์ ์ NPE๊ฐ ๋ฐ์ํ ์ ์๋ค. โ๏ธ ์์ธ Hibernate๋ ๋ด๋ถ์ ์ผ๋ก version + 1์ ์ํํ๊ธฐ ์ํด ํ์ฌ ๋ฒ์ ๊ฐ์ ๊ฐ์ ธ์ค๋๋ฐ,@Version ํ๋๊ฐ null ์ด๋ฉด ์ด๋ฅผ ์ํํ ์ ์์ด ์์ธ๊ฐ ๋ฐ์ํ๋ค. โ๏ธ ํด๊ฒฐ๋ฐฉ๋ฒ์์ฑ์ version ๊ฐ์ ์ด๊ธฐํํด์ค๋ค. ...@Versionprivate Integer version;private Limited(UUID limitedProductId, LocalDateTime startDate, LocalDateTime endDate, LimitedStatus status) { LimitedDateValidator.validateDat.. 2025. 4. 21. JPA์์ Enum ์ปฌ๋ผ ์ ๋๋ก ์ ์ฅํ๊ธฐ ์ค๋์ Entity๋ฅผ ์์ฑํ๋ฉฐ ๊ฒช์ ์ด์์ธSpring Boot JPA์์ Enum ์ปฌ๋ผ ๋งคํํ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ์ ํด๊ฒฐ๋ฒ์ ๋ํด ์ ๋ฆฌํด๋ณด์๋ค. โ๏ธ ์ฒ์ ์ฝ๋์์ ์๋ฌ ๋ฐ์@Column(name = "status", nullable = false)private OrderStatusEnum status = OrderStatusEnum.PENDING; Hibernate๊ฐ Enum์ ์ด๋ป๊ฒ ๋ณํํด์ผ ํ ์ง ๋ชฐ๋ผ IllegalArgumentException์ด ๋ฐ์ํ๋ค.๊ธฐ๋ณธ์ ์ผ๋ก Hibernate๊ฐ ORDINAL(์ซ์)๋ก ์ ์ฅํ๋ คํด์ DBํ์ ๊ณผ ์ถฉ๋ํ๋ค. โ๏ธ @Enumerated(EnumType.STRING) ์ถ๊ฐ @Enumerated(EnumType.STRING) @Column(name = "stat.. 2025. 2. 21. google map api ๋ฅผ ๊ฐ์ ธ์์ ์ธ๋ jsp์์ ์ฃผ์ ์ฌํญ 1. ์ ์ญ๋ณ์ ์ค์ ๊ณผ initMap(), updateMap() ํจ์ ๋ฐ๋ก ์์ฑํด์ฃผ๊ธฐ ๋์ ์ผ๋ก ์ฒ๋ฆฌํ ๊ฐ๋ค์ ๋ค๋ฅธ๊ณณ์์ ์ธ ์ ์๋๋ก ๋ณ์๋ ๊ผญ! ์ ์ญ๋ณ์๋ก ์ค์ ํด์ค๋ค. (ajaxData, map, lat, lng, location ๋ฑ) ๋ํ initMap()์ผ๋ก ์ฒซ ํ์ด์ง ์ ์์ ๋ํ๋ด์ค ์ง๋ ๊ฐ์ ๋ง๋ค๊ณ updateMap() ํจ์๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด ์ฃผ์ด ์๋์ ajax๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ๋ฌ์์ updateMap()ํจ์๋ฅผ ๋ถ๋ฌ ์ธ ์ ์๋๋ก ๋ง๋ค์๋ค. var ajaxData = {}; var map; var latInput,lngInput,locationInput; function initMap() { map = new google.maps.Map(document.getElementById('map'), { .. 2024. 3. 21. DB์์ select ํด์จ ๋ฐ์ดํฐ๊ฐ DTO์ ๋ด๊ธฐ์ง ์์๋ ์ด์ (์์ฑ์ ์์ฑ) ๊ฒฐ๋ก ๋ถํฐ ์ ์๋ฉด DTO class์ ์์ฑ์๋ฅผ ์์ฑํ์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ ์ ์ ํ๋ก์ ํฐ์์๋ ์์ฑ์๋ฅผ ์์ฑํ์ง ์์์ง๋ง Lombok ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ (@Data ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ฉด ํด๋์ค์ ํํธ, getter, setter equals, hashCode, toString ๋ฑ์ ์๋์ผ๋ก ์์ฑํด์ค) Spring์ ๊ธฐ๋ณธ ์ค์ ์ผ๋ก ์ธํด @ComponentScan์ ํตํด ํจํค์ง๋ฅผ ์ค์บํ์ฌ ๋น์ผ๋ก ๋ฑ๋กํ๊ธฐ ๋๋ฌธ์ ์ค๋ฅ ์์ด ์ฝ๋๊ฐ ์ ์คํ๋์์ง๋ง ํ๋ก์ ํธ๋ง๋ค ๊ธฐ๋ณธ ์ค์ ์ด ๋ค๋ฅด๊ณ ์ด๋ฒ์ @ComponentScan ์ ๋ง์ง๋ฉด์ ๋น์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋ฑ๋ก๋์ง ์์ DTO class๋ฅผ ํตํด selectํด์จ ๋ฐ์ดํฐ๊ฐ ํด๋น ๊ฐ์ฒด์ ์ ๋ด๊ธฐ์ง ์์ ๋ถ๋ถ์ ์ผ๋ก null๊ฐ์ ๋๋ฐํ ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๊ฒ ๊ฐ๋ค. ๋ฐ๋ผ์ ํด๋น ๋ฌธ์ ๋ .. 2024. 3. 21. ์ด์ 1 2 ๋ค์