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

๋ฐฑ์—”๋“œ/ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…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.