๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ (53) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ LocalDate ํฌ๋งท ์ค๋ฅ๋ก ์์๋ OpenFeign ์ Auto Configuration ํ์ ๊ฐ์OpenFeign์ ์ฌ์ฉํด admin ์๋ฒ์ core ์๋ฒ ๊ฐ์ HTTP ํต์ ์ ํ๋ ์ค, ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.admin ์๋ฒ์์ LocalDate ํ์ ์ yyyy-MM-dd ํฌ๋งท์ผ๋ก ์์ฒญ์ ๋ณด๋์ต๋๋ค.๊ทธ๋ฌ๋ core ์๋ฒ์์๋ LocalDate ํฌ๋งท์ด yyyy-MM-dd ๋ฅผ ๊ธฐ๋ํ์ง๋ง, yy. M. d. ์ผ๋ก ์์ ํฌ๋งท ๋ณํ์ ์คํจํ๋ ์๋ฌ ๋ก๊ทธ๊ฐ ๋ฐ์ํ์ต๋๋ค.์ด ๋ฌธ์ ๋ ์ฐ์ํํ์ ๋ค ๊ธฐ์ ๋ธ๋ก๊ทธ์์ ์ ์ํ ๋ฐฉ์์ผ๋ก ๊ฐ๋จํ ํด๊ฒฐํ ์ ์์ต๋๋ค:@Beanpublic FeignFormatterRegistrar localDateFeignFormatterRegister() { return registry -> { DateTimeFormatterRegistrar registrar = new .. ๊ฒ์ ์๊ตฌ ์ฌํญ์ ์ํ Elasticsearch ์ธ๋ฑ์ค & Query DSL ์ค๊ณ๊ธฐ ์ฌ๋ด ์ค์ต์ผ๋ก ๊ฒ์ ๊ธฐ๋ฅ ์๊ตฌ์ฌํญ์ ๋ฐ์ํด Elasticsearch์ ์ธ๋ฑ์ค ์ค์ ๊ณผ ๋งคํ์ ์ ์ํ๊ณ , ๊ฒ์์ ์ํ Query DSL(JSON ๊ธฐ๋ฐ ์ฟผ๋ฆฌ ์ธ์ด, Not OpenFeign QueryDSL)์ ์์ฑํ๋ฉด์ ๊ณ ๋ฏผํ๋ ์ ๋ค์ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. ๊ฐ๋ฐ ํ๊ฒฝ VirtualBox (Rocky Linux)Elasticsearch 7.10.2ํ๋์ ํด๋ฌ์คํฐ์ ๋ ธ๋ 3๊ฐ ๊ตฌ์ฑ API ์์ฒญ/์๋ต ๋๊ตฌ Kibana / Postman1. ๋ช ์ฌ๊ตฌ๊ฐ ์ผ์นํ๋ ๊ฒฝ์ฐ ๊ฒ์์ด ๋ ์๋๊ฒ ํด์ฃผ์ธ์.์ด๋ฅผ ์ํด mulit_match ์ phrase ํ์ ์ ํ์ฉํ๋ค. multi_match๋ type์ ๋ฐ๋ผ ์ฟผ๋ฆฌ ์คํ ๋ฐฉ๋ฒ์ด ๋ฌ๋ผ์ง๋ค. multi_match ์ฟผ๋ฆฌ์ type๋ณ ๋์ - best_fields (๊ธฐ๋ณธ๊ฐ)์ฌ๋ฌ ํ๋ ์ค ํ.. OpenFeign Querydsl์ ์์๋ก ์์๋ณด๋ Spring Boot + Maven ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์ ๋ฒ ๋ชฉํ : Spring Boot๊ฐ ๊ด๋ฆฌํด์ฃผ์ง ์๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ ๋, ์ํ๋ ๋ฒ์ ์ ์ด๋ป๊ฒ ์ฐพ์๊ฐ๋์ง OpenFeign Querydsl ์ ์์๋ก ์์๊ฐ๋ ๊ฒ์ ๋๋ค. ์ฌ์ฉ ํ๊ฒฝ๋น๋ ๋๊ตฌ: Maven (Gradle์ ๋ณธ๋ฌธ์์ ์ผ๋ถ๋ง ๊ฐ๋จํ ๋ค๋ฃน๋๋ค)IDE: IntelliJ Ultimateํ๋ ์์ํฌ: Spring Bootpom.xml ์ค์ ์์๋ ๊ธ ํ๋จ์ "๊ฒฐ๋ก "์ ์ ์๋์ด ์์ผ๋ฉฐ, ๊ทธ ์ค์ ์ ์ด๋ฅด๊ธฐ๊น์ง์ ๊ณผ์ ์ ์๊ฐํฉ๋๋ค. Querydsl vs OpenFeign QuerydslQuerydsl(https://github.com/querydsl/querydsl)5.0.0 ๋ฒ์ : 2021๋ 7์ ๋ฆด๋ฆฌ์ค5.1.0 ๋ฒ์ : 2024๋ 1์ 30์ผ ๋ฆด๋ฆฌ์ค3๋ ๊ฐ๊น์ด ํฐ ์ ๋ฐ์ดํธ ์์ด ์ ์ง๋๋ค 1๋ ์ .. Elasticsearch๊ฐ Apache Lucene ์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง refresh/flush API๋ฅผ ํตํด ์์๋ณด๊ธฐ ๋ชฉํ: ์๋ผ์คํฑ์์น๊ฐ ์ํ์น ๋ฃจ์ฌ์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์์๋ณด๊ธฐ Elasticsearch์ Apache Lucene์ ๊ด๊ณ Apache Lucene์ ๋ฌธ์๋ฅผ ์์ธํ๊ณ ๊ฒ์ํ ์ ์๊ฒ ํด์ฃผ๋ ์คํ์์ค Java ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ๊ฐ๋ ฅํ ํ ์คํธ ๊ฒ์ ์์ง์ ๋๋ค.(https://lucene.apache.org/)๋ฐ๋ฉด, Elasticsearch๋ Lucene์ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง ๋ถ์ฐํ ๊ฒ์ ์์ง์ผ๋ก, Lucene์ ๋ณด๋ค ์ฝ๊ฒ ์ฌ์ฉ์๋ค์ด ์ฌ์ฉํ๊ธฐ ์ํด JSON ๊ธฐ๋ฐ์ RESTful HTTP API๋ฅผ ์ ๊ณตํ์ฌ ๋ณด๋ค ์ฝ๊ฒ ๋ฌธ์๋ฅผ ์์ธํ๊ณ ๊ฒ์ํ ์ ์๋๋ก ๋์์ค๋๋ค. ์๋ฅผ ๋ค์ด, GET์ผ๋ก ๊ฒ์ํ๊ณ , POST/PUT์ผ๋ก ๋ฌธ์๋ฅผ ์์ธํ๋ฉฐ, DELETE๋ก ๋ฌธ์๋ฅผ ์ญ์ ํ ์ ์์ต๋๋ค. ์ด ์ธ์๋ Elasticsearch๋ ๊ณ .. Spring Rest Docs ๋์ ์, Maven๊ณผ Asciidoctor ๋ฌธ๋ฒ์ด ํท๊ฐ๋ฆฌ๋ ๋ถ๋ค์ ์ํ pom.xml ์ค๋ช Spring Rest Docs๋ฅผ ๊ฒ์ํ์ ๋, Maven์ ๋์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ pom.xml ์ค๋ช ์ด ๋ถ์กฑํ๋ค๊ณ ๋๊ผ์ต๋๋ค.๊ทธ๋์ ์ด๋ฒ ๊ธ์์๋ Spring Boot์ Maven(3.9.9 ๋ฒ์ ) ํ๊ฒฝ์์ Spring Rest Docs๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ pom.xml ์ค์ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ๊ณ , ๊ทธ ๊ณผ์ ์์ Maven ์ ๋ฌธ๋ฒ๋ ํจ๊ป ํ์ตํด๋ณด๋ ค ํฉ๋๋ค. ๋ํ, pom.xml ์ค์ ๊ฐ๋ค์ด Asciidoctor์ Maven ์ค ๋๊ตฌ์ ์ค์ ๊ฐ์ธ์ง ์ดํดํ๋ ๊ฒ์ด ์ด ๊ธ์ ๋ชฉํ์ ๋๋ค. ๋ํ, ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ์ฒ๋ผ *.adoc ํ์ผ์ HTML๋ก ๋ณํํ์ฌ .jar ํ์ผ์ ํฌํจ์ํค๊ณ , *.adoc ํ์ผ์ ๋๋ฉ์ธ๋ณ๋ก ๋๋ ํ ๋ฆฌ๋ฅผ ๋๋์ด ๊ด๋ฆฌํ๋ ๋ฐฉ์๋ ํจ๊ป ๊ตฌํํด๋ณด๊ฒ ์ต๋๋ค.1. Spring Rest Docs 3.0.3 .. ์์ต๊ณผ์ ๊ฒ์ํ ๊ตฌํํ๋ฉฐ ๋๋ ๋ฌด์์ ๋ฐฐ์ ๋? ์์ต๊ธฐ๊ฐ 4์ฃผ ๋์ '๊ฒ์ํ ๋ง๋ค๊ธฐ' ๊ณผ์ ๋ฅผ ๋ถ์ฌ๋ฐ์๋ค. ์ด ๊ธ์ ๊ณผ์ ๋ฅผ ์งํํ๋ฉฐ ๋๋ 1๋ฌ์ด๋ผ๋ ๊ธด ์๊ฐ ๋์ ๋ฌด์์ ๋ฐฐ์ ๋์ง ์ ๋ฆฌํ๊ณ ์ ํ๋ค. ํ๋ก์ ํธ ๊ธฐ์ ์คํํ๋ก ํธ์๋: ํผ๋ธ๋ฆฌ์ฑ์ JavaScript๋ฅผ ๋ง๋ถ์ฌ Ajax ์์ฒญ๋ฐฑ์๋: Spring Boot, Spring Security, JDBC Template, ThymeleafDB: MySQL๋น๋: MavenAPI ๋ฌธ์: Rest Docs๊ตฌํํ ๊ธฐ๋ฅ์ ํฌ๊ฒ ๋ค์๊ณผ ๊ฐ๋ค.์ฌ์ฉ์, ๊ฒ์๊ธ, ๋๊ธ/๋ต๊ธ, ๊ด๋ฆฌ์ CRUD ๊ฒ์๊ธ ํ์ด์ง, ๊ฒ์, ์ถ๋ ฅ ๊ฑด์ ์กฐ๊ฑด๋์์ 1๊ณผ 2๋ ๊ฒฐ๊ณผ๋ฌผ์ด๋ค.๋์์ 1. ๊ฒ์ํ ํ ํ๋ฉด ๋์์ 2์ ๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ ๊ด๋ฆฌ์ ๊ถํ์ ๊ฐ์ง ์ฌ์ฉ์๋ก ๋ค๋ฅธ ์ฌ์ฉ์์ ๋ชจ๋ ๋๊ธ/๋ต๊ธ์ ์ญ์ ํ ์ ์์ง๋ง, ์์ ์ ๋ถ๊ฐํ๋ค.๋์์ 2. ๊ฒ.. ์ฝ๋๋ก ์์๋ณด๋ Spring Data Redis์ @Cacheable ๋์ ์๋ฆฌ์ ํธ๋์ญ์ ์์ @CachePut/@CacheEvict ์คํ ์์ ๊ธ์ ๋ชฉํSpring Data Redis์์ @Cacheable ๋ฉ์๋๋ฅผ ์คํํ๊ณ , ์บ์ ๋ฏธ์ค(Cache miss)๋ก ์ธํด ๋ฐํ๊ฐ์ด ์บ์์ ์ ์ฅ๋๋ ๊ณผ์ . ๊ทธ๋ฆฌ๊ณ , @Transactional๊ณผ ํจ๊ป @CachePut/@CacheEvict๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ @CachePut/@CacheEvict๊ฐ ์ธ์ ์คํ๋๋์ง๋ฅผ ๋ด๋ถ ๊ตฌํ์ ํตํด ์๋ ๊ฒ์ด ๋ชฉํ์ ๋๋ค. ๋ณธ ๊ธ์ RedisCache์ ํ์ ๋ ๋ด์ฉ์์ ๋ฏธ๋ฆฌ ์๋ ค๋๋ฆฝ๋๋ค. Spring Cache ์ถ์ํ ๊ตฌ์กฐ Spring Cache๋ Cache ์ธํฐํ์ด์ค์ CacheManager ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ถ์ํ๋ฉ๋๋ค This abstraction is materialized by the org.springframework.cache.Cache and org.springf.. RedisTemplate ๋ด๋ถ ํ๊ตฌ: Spring Data Redis๋ Lettuce๋ฅผ ์ด๋ป๊ฒ ์ถ์ํํ๋๊ฐ? Lettuce ๊ฐ ๋ฌด์์ธ์ง, Spring Data Redis์ RedisTemplate ์ Lettuce ๋ฅผ ์ด๋ป๊ฒ ์ถ์ํํ๋์ง ์์๋ณด๊ณ ์ ํฉ๋๋ค. ๋จผ์ , Spring Data Redis ๋ Lettuce์ Jedis ๋ผ๋ 2๊ฐ์ ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ์ ํตํฉ๋์์ต๋๋ค.Spring Data Redis integrates with Lettuce and Jedis, two popular open-source Java libraries for Redis. Lettuce์ Jedis๋ "Java์์ Redis์ ์ ๊ทผํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ"์ ๋๋ค.๊ทธ๋ ๋ค๋ฉด ๊ฐ๊ฐ ๋ฌด์์ธ์ง Lettuce๋ถํฐ ์์๋ณด๊ฒ ์ต๋๋ค.Lettuce ๋?Lettuce is a scalable thread-safe Redi.. ์ด์ 1 2 3 4 ยทยทยท 7 ๋ค์