๋ฐฑ์๋32 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. PostgreSQL์ ๊ฒฉ๋ฆฌ์์ค๊ณผ ๋น๊ด์ ๋ฝ PostgreSQL์ ๊ฒฉ๋ฆฌ์์ค์ ๋ํดPostgreSQL์ ๊ธฐ๋ณธ ๊ฒฉ๋ฆฌ ์์ค์ READ COMMITTED ์ด๋ค. READ COMMITTED๋ ?๋ค๋ฅธ ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ๋ฅผ ์๋ก ์ปค๋ฐํ๋ฉด, ํ์ฌ ํธ๋์ญ์ ๋์ค์๋ ์ต์ ์ปค๋ฐ๋ ๊ฐ์ ์ฝ์ ์ ์๋ ๊ฒ์ด๋ค.์ฆ, ํ์ฌ ํธ๋์ญ์ ์์์ ๋์ผํ row๋ฅผ ๋ ๋ฒ ์ด์ ์กฐํ ํ์๋, ์ค๊ฐ์ ๋ค๋ฅธ ๊ฐ์ด ๋์ฌ ์๋ ์๋ค. ํ์ ๋ ์๋์ ์ค์๊ฐ์ผ๋ก ํ๋งคํ๋, ํ์ ํ๋งค ์ด๋ฒคํธ์์ READ COMMITTED ์ฌ์ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋ ๋ฌด์์ผ๊น?* ๋ฐ๋ก ์ฌ๊ณ ๊ฐ ์ค๋ณต ๊ฐ์ ๋๋ ๊ฒ์ด๋ค. *์๋ฅผ ๋ค์ด A ์ B๊ฐ ๋์์ ์ฌ๊ณ ๋ฅผ ์กฐํํ์ฌ ๋ ๋ค ๋จ์ ์ฌ๊ณ ๊ฐ ํ ๊ฐ ๋ผ๊ณ ํ๋ค๋ฉด, ๋ ๋ค ์ฃผ๋ฌธ์ด ๊ฐ๋ฅํ ๊ฒ์ด๊ณ , ๋จ์ ์ฌ๊ณ ๋ฅผ ์ด๊ณผํ๋ ์ฃผ๋ฌธ์ด ๋ฐํ๋ ๊ฒ์ด๋ค.๋ฐ๋ผ์ ๋์ ์ ๊ทผ ์ ๋ฐ์ดํฐ ์ ํฉ์ฑ์ด ๊นจ.. 2025. 4. 20. SOLID ์์น๊ณผ ์ฌ์ฉ ์์ SOLID ์์น์ ๊ฐ์ฒด์งํฅ ์ค๊ณ์์ ์ ์ง๋ณด์์ ํ์ฅ์ฑ์ ๋์ด๊ธฐ ์ํด ๋ง๋ค์ด์ง 5๊ฐ์ง ํต์ฌ ์์น์ ๋งํ๋ค.SRPํด๋์ค๋ ํ๋์ ์ฑ ์๋ง ๊ฐ์ ธ์ผ ํ๋ค.OCPํ์ฅ์๋ ์ด๋ ค ์๊ณ , ๋ณ๊ฒฝ์๋ ๋ซํ์ผ ํ๋ค.LSP์์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค๋ฅผ ๋์ฒดํ ์ ์์ด์ผ ํ๋ค.ISP์ธํฐํ์ด์ค๋ ์๊ณ ๋ช ํํ๊ฒ ๋ถ๋ฆฌํ๋ผ.DIP๊ตฌ์ฒด ํด๋์ค๊ฐ ์๋๋ผ ์ถ์ํ์ ์์กดํ๋ผ. ํด๋น SOLID ์์น์ ์ด์ฉํด์ ์ฝ๋์ ์ ์ฉ ์ํจ ์๋ฅผ ํจ๊ป ์ ๋ฆฌํด ๋ณด์๋ค. โ ๋จ์ผ ์ฑ ์ ์์น SRP (Single Responsibility Principle)"ํ๋์ ํด๋์ค๋ ํ๋์ ์ฑ ์์ ๊ฐ์ ธ์ผ ํ๋ค."ํด๋์ค๊ฐ ํ๋์ ๋ณํ ์ด์ ๋ง ๊ฐ์ง๋๋ก ์ค๊ณํด๋์ค๊ฐ ๋ณ๊ฒฝ๋ ์ด์ ๊ฐ ๋ช ํํด์ง๊ณ , ์ ์ง๋ณด์ ๋ฐ ํ์ฅ์ฑ์ ์ข์ex) purchasOrder์์ ํ์ํ ์๋น์ค๋ฅผ ์ฑ ์์ ๋ฐ๋ผ .. 2025. 4. 16. Feign Client๋ฅผ ๊ฐ์ธ๋ Facade Service Class A-์๋น์ค ์์ Feign Client๋ฅผ ์ด์ฉํ์ฌ B-์๋น์ค๋ฅผ ํธ์ถํ ๋,๊ธฐ์กด A-์๋น์ค์ Service Class์์ ์ง์ ํธ์ถํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ Application ๊ณ์ธต์์ Infrastructure ๊ณ์ธต์ ์ง์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ฏ๋ก SRP์ DIP๊ฐ ์ ์ง์ผ์ง์ง ์๋๋ค. ๋ฐ๋ผ์ ์ด๋ฌํ ๊ฒฝ์ฐ B์๋น์ค๋ฅผ ํธ์ถํ๋ Service Class ๋ฅผ ํ์ฌ๋ํ์ฌ ๋ฐ๋ก ์์ฑํด์ฃผ๋๊ฒ ์ข๋ค.์ฆ, Feign Client ํธ์ถ์ ์ํ Service Class๋ฅผ ์์ฑํ๋ ๊ฒ์ด๋ค. @Service@Slf4j(topic = "feign client : call product-service")@RequiredArgsConstructorpublic class ProductClientService { private f.. 2025. 4. 14. ์ด์ 1 2 3 4 ยทยทยท 6 ๋ค์