ZSet์ ์ ๋ ฌ๋ ์์๋ก ์ ์ฅ๋๋ ๊ณ ์ ํ ๋ฐ์ดํฐ ์งํฉ๊ฐ ์์๋ ์ ์(Score) ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ ์ ๋ ฌ1. Redis Sorted Set(ZSet) ์ด๋?Key-Value ์ ์ฅ ๊ตฌ์กฐ์ง๋ง, ๊ฐ Value์ Score(์ซ์)๊ฐ ์ถ๊ฐ๋๋ค.์ ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์๋ ์ ๋ ฌ๋จ์ค๋ณต๋ ๊ฐ์ ์ ์ฅ๋์ง ์์ผ๋ฉฐ(Unique), Score๋ ์ค๋ณต ๊ฐ๋ฅ๋น ๋ฅธ ์กฐํ ์๋(O(log N))๋ก ๋ญํน, ์ ๋ ฌ๋ ๋ฐ์ดํฐ ๊ด๋ฆฌ, TTL ๊ธฐ๋ฐ ์บ์ฑ ๋ฑ์ ์ ์ฉํ๋ค.์ฃผ์ ๋ช
๋ น์ด1. ๋ฐ์ดํฐ ์ถ๊ฐ(ZADD)ZADD key score1 member1 [score2 member2 ... ]2. ๋ฐ์ดํฐ ์กฐํ(ZRANGE, ZREVRANGE)์ค๋ฆ์ฐจ์ ์กฐํ(ZRANGE)๋ด๋ฆผ์ฐจ์ ์กฐํ(ZREVRANGE)3. ํน์ ๊ฐ์ ์์ ์กฐํ์ค๋ฆ์ฐจ์ ์์ ์กฐํ(ZRANK)๋ด๋ฆผ์ฐจ์..
์คํ๋ง

์ธ๊ธฐ๊ธ ์๊ตฌ์ฌํญ์ผ ๋จ์๋ก ์์ 10๊ฑด ์ธ๊ธฐ๊ธ ์ ์ ๋งค์ผ ์ค์ 1์ ์
๋ฐ์ดํธ์ข์์ ์/๋๊ธ ์/์กฐํ์ ๊ธฐ๋ฐ ์ ์ ๊ณ์ฐ์ ์ = (์ข์์ ์ * 3) + (๋๊ธ ์ * 2) + (์กฐํ์ * 1)์ต๊ทผ 7์ผ ์ธ๊ธฐ๊ธ ๋ด์ญ ์กฐํ์ค๊ณ๋งค์ผ ๊ฒ์๊ธ ์์ฑ ํธ๋ํฝ์ ์๋ฐฑ~์์ฒ๋ง ๊ฑด ์ด์ํ๋ฃจ๋์ ์์ฑ๋ ๋ชจ๋ ๊ฒ์๊ธ์ ๋ํด์,์ ์๋ฅผ ๊ณ์ฐํ๊ณ , ์์ 10๊ฑด์ ์ฐพ์์ผํ๋ ์์
์ด๋ฌํ ์์
์ 1์๊ฐ ๋ง์ ์ฒ๋ฆฌ๋์ด์ผ ํ๋ค.๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด ํ์ํ๋ค.๋ฐฐ์น ์ฒ๋ฆฌ๋ฅผ ๊ณ ๋ คํด๋ณผ ์ ์๋ค.์ค์ 12์๊ฐ ๋์๋ง์, ์ ๋ ์์ฑ๋ ๊ฒ์๊ธ์ ๋ชจ๋ ์ํ๊ฐ ๊ฒ์๊ธ์ ๋ํด์ ์ข์์ ์, ์กฐํ์, ๋๊ธ ์๋ฅผ ์กฐํ๊ฒ์๊ธ์ ์ ์๋ฅผ ๊ณ์ฐ๋ชจ๋ ๊ฒ์๊ธ์ ๋ํด์ ์์ 10๊ฑด์ ์ ์ ๋ฐฐ์น ์์
์ ํตํด ๋ฌธ์ ์์ด ์ฒ๋ฆฌํ ์ ์์ง๋ง, ์ ํ์ฌํญ์ด ..
Apache Kafka๋ ๋ถ์ฐ ์คํธ๋ฆฌ๋ฐ ํ๋ซํผ์ผ๋ก, ๋๊ท๋ชจ ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ฉ์์ง ๋ธ๋ก์ปค ์ญํ ์ ํ๋ค.Kafka๋ ๋์ ํ์ฅ์ฑ, ๋ด๊ฒฐํจ์ฑ(fault tolerance), ๋์ ์ฒ๋ฆฌ๋์ ์ ๊ณตํ๋ฉฐ, ๊ธฐ์
์ ๋ก๊ทธ ์ฒ๋ฆฌ, ์ด๋ฒคํธ ์คํธ๋ฆฌ๋ฐ, ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ ๊ตฌ์ถ ๋ฑ์ ๋๋ฆฌ ์ฌ์ฉ๋๋ค.1. Kafka๋?๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ณ ์์ ์ ์ผ๋ก ์ก์์ ํ๊ธฐ ์ํ ๋ถ์ฐ ๋ฉ์์ง ์์คํ
Pub/Sub(๋ฐํ-๊ตฌ๋
) ๋ชจ๋ธ ๊ธฐ๋ฐ์ ๋ฉ์์ง ๋ธ๋ก์ปค์ด๋ฒคํธ ๊ธฐ๋ฐ ์์คํ
๊ตฌ์ถ ๊ฐ๋ฅ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ ์ฒ๋ฆฌ ๋ฐ ๋น๋๊ธฐ ๋ฉ์์ง ํ๋ก ํ์ฉ2. Kafka ์ํคํ
์ฒ1. Producer(์์ฐ์)Kafka์ ๋ฉ์์ง๋ฅผ ์ ์กํ๋ ์ญํ ๋ฉ์์ง๋ฅผ Topic์๊ฒ ๊ฒ์(Publish) ํจacks ์ค์ ์ผ๋ก ๋ฉ์์ง ์ ์ก ๋ณด์ฅ ์์ค ์กฐ์ ๊ฐ๋ฅ (acks=0, 1, all..

๊ฒ์๊ธ ํ
์ด๋ธ ์ค๊ณcolumn_nameTypeDescriptionarticle_idBIGINTPrimary KeytitleVARCHAR(100)์ ๋ชฉcontentVARCHAR(3000)๋ด์ฉboard_idBIGINT๊ฒ์ํID(Shard Key)writer_idBIGINT์์ฑ์IDcreated_atDATETIME์์ฑ์๊ฐmodified_atDATETIME์์ ์๊ฐ์ฌ๊ธฐ์ Shard Key๋ ๊ฒ์ํ ID์? ๊ฒ์๊ธ ์๋น์ค๋ ๊ฒ์ํ ๋จ์๋ก ์๋น์ค๋ฅผ ์ด์ฉํ๊ธฐ์, ๊ฒ์ํ ๋จ์๋ก ๊ฒ์๊ธ ๋ชฉ๋ก์ด ์กฐํ๋๋ ๊ฒprimary key ์์ฑ ์๊ณ ๋ฆฌ์ฆ์ Snowflake ์ฌ์ฉ๋ถ์ฐ ์์คํ
์์ ๊ณ ์ ํ 64bit ID๋ฅผ ์์ฑํ๋ ์๊ณ ๋ฆฌ์ฆ๋ถ์ฐ ํ๊ฒฝ์์๋ ์ค๋ณต ์์ด ์์ฐจ์ ID๋ฅผ ์์ฑํ๊ธฐ ์ํ ๊ท์น[1bit][41bits:ํ์์คํฌํ][10bit..

ํ๋ก์ ํธ ์์ฑ ์ ๋ถํฐ ์์๋ ๋ฉ์ฒญํ ์ง1jdk๋ฅผ 21๋ก ์ค์ ํ๊ณ ํ๋ก์ ํธ ์ธํ
์ ์งํํ๋๋ฐ, gradle build๋ ๋ฌธ์ ์์ด ๋๋๋ฐ ์?์๊พธ ์ด๋ฐ์ ์๋ฌ๊ฐ ๋จ๋์ง ์ดํด๊ฐ ์๋....build.gradle ์์๋ 21ํ๋ก์ ํธ ์ธํ
์์๋ 21๋ฌด์ํ ์ค์ ์ ์ฉ์ ๋ฐ๋ณตํ๋ค ๋ฐ๊ฒฌํ ๋ฉ์ฒญํ ์งintellij ์ธํ
์์ฒด์์ 17๋ก ๋์ด์์....์ด๊ฑธ 21๋ก ๋ณ๊ฒฝํด์ฃผ๋ ์ ์ ๋์..... ๋ช๋ถ์ ์ธ๋ฐ์์ด ๋ ๋ ธ๋คใ

SimpleJdbcInsert๋ฅผ ์ฌ์ฉํ์ฌ, insert๋ฅผ ๊ตฌํํ๋ ์ค ๋ฌธ์ ๋ฐ์ private Member insert(Member member) { SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(jdbcTemplate.getJdbcTemplate()) .withTableName("Member") .usingGeneratedKeyColumns("id"); SqlParameterSource params = new BeanPropertySqlParameterSource(member); var id = simpleJdbcInsert.executeAndReturnKey(params).longValue(); return Member.builder() .id(..

QueryDSL gradle ์ค์ plugins { id 'java' id 'org.springframework.boot' version '3.0.6' id 'io.spring.dependency-management' version '1.1.0' // id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" } group = 'dev.be' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation..
QueryDSL ์ SQL, JPQL ๋ฑ์ ์ฝ๋๋ก ์์ฑํ ์ ์๋๋ก ํด์ฃผ๋ ๋น๋ ์คํ์์ค ํ๋ ์์ํฌ ์ด๋ค. QueryDSL JPA SQL, JPQL์ ์ฝ๋๋ก ์์ฑํ ์ ์๋๋ก ํด์ฃผ๋ ๋น๋ API์ด๋ค. Entity ํด๋์ค์ ๋งคํ๋๋ QClass ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ค. QClass ? QueryDSL์ ์ปดํ์ผ ๋จ๊ณ์์ ์ํฐํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก QClass๋ฅผ ์์ฑํ๋๋ฐ JPAAnnotationProcessor๊ฐ ์ปดํ์ผ ์์ ์ ์๋ํด์ @Entity ๋ฑ์ ์ ๋
ธํ
์ด์
์ ์ฐพ์ ํด๋น ํ์ผ์ ๋ถ์ํด์ QClass๋ฅผ ๋ง๋ ๋ค. ๐ QClass๋ Entity์ ํํ๊ฐ ๋๊ฐ์ static class์ด๋ค. ๐ QueryDSL์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ๋, QClass๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ค. ๐โโ๏ธ ์ฌ์ฉ ์ด์ ? EntityCl..