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

์ „์ฒด ๊ธ€47

git lfs ์˜ฌ๋ ธ๋˜ ๋ฐ์ดํ„ฐ ์‚ญ์ œ lfs๋กœ ์˜ฌ๋ ธ๋˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋”์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„ ์‚ญ์ œํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.์ตœ์ข…์ ์œผ๋กœ ์›ํ–ˆ๋˜ ์•ก์…˜์€ ์ถ”์ ํŒŒ์ผ ์‚ญ์ œ, ์›๋ณธ ๋ฐ์ดํ„ฐ ๋กœ์ปฌ๋งŒ ์œ ์ง€, lfs ์ž์ฒด uninstall 1. lfs์— ์˜ฌ๋ผ๊ฐ„ ์ถ”์ ํŒŒ์ผ -> ์›๋ณธ ํŒŒ์ผ๋กœ ๋ณ€๊ฒฝgit lfs fetch --allgit lfs checkout 2. lfs ๋ฐ์ดํ„ฐ ์ถ”์  ์‚ญ์ œgit lfs untrack "src/main/resources/data.csv"git lfs untrack "src/test/resources/testData.csv" ์ด๋•Œ untrack๋งŒ ํ•˜๋ฉด ๊ณ„์† git lfs ls-files ํ• ๋•Œ ๋ณด์ด๋”๋ผGit ์บ์‹œ์™€ ์ธ๋ฑ์Šค๋„ ์ •๋ฆฌํ•ด์ค˜์•ผํ•œ๋‹ค๊ณ  ํ•จgit rm --cached "src/main/resources/data.csv"git rm --cached "src/t.. 2024. 11. 3.
์ด๋ฏธ ์ƒ์„ฑ๋˜์–ด ์žˆ๋Š” ๋„์ปค ์ปจํ…Œ์ด๋„ˆ(mysql)์— ์ƒˆ database ์ถ”๊ฐ€ ๊ฐœ์š”์ด๋ฏธ ๊ณผ๊ฑฐ์— mysql8-container์ด๋ผ๋Š” ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ–ˆ๊ณ  ์œ ์ง€์ค‘sample1 database๋ฅผ ๊ฐ–๊ณ  ์žˆ์—ˆ์œผ๋‚˜, sample2 database๋ฅผ ์ถ”๊ฐ€ ํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.ํ…Œ์ŠคํŠธ ์šฉ์ด๋ผ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•˜๋‚˜ ๋” ๋„์šธ ํ•„์š”๋Š” ์—†๊ณ  ์„ค์ •๋„ ๋” ์ถ”๊ฐ€ํ•˜๊ธฐ ๊ท€์ฐฎ์•˜๋‹ค. -> ๊ธฐ ์„ค์น˜ ๋˜์–ด์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ, ์„ค์ • ๋˜์–ด์žˆ๋Š” ๊ณ„์ •์— database๋งŒ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ถŒํ•œ๋งŒ ์ถ”๊ฐ€ํ•ด์ฃผ๊ธฐ~~ ์ž‘์—… ์ˆœ์„œ1. Terminal ์•”๊ฑฐ๋‚˜ ์ ‘์†ํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ ์ ‘์†docker exec -it {{mysql8-container}} bash 2. MySQL ์— ๋ฃจํŠธ ๊ณ„์ •์œผ๋กœ ์ ‘์† mysql -u root -padmin 3. ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ CREATE DATABASE {{sample2}}; 4. ๊ธฐ์กด ์œ ์ €์— ๊ถŒํ•œ ๋ถ€์—ฌ GRANT ALL PR.. 2024. 10. 26.
SSE ์ ์šฉ (3) - SSE ์ ์šฉ ์‹œ ์ด์Šˆ ์ฒ˜๋ฆฌ 1. Event Share ์ด์Šˆ ์ฒ˜๋ฆฌ (๋™์‹œ ์ ‘์† ๊ณ ๋ ค)์ด์Šˆ - ์—ฌ๋Ÿฌ๊ฐœ์˜ ํƒญ์„ ๋„์›Œ๋†จ์„ ๋•Œ Emitter Subscribe Response๋Š” ๋‹ค OK๊ณ  Event๊ฐ€ ์ œ๋Œ€๋กœ ์ƒ์„ฑ์—ˆ์ง€๋งŒ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ƒ์„ฑ๋œ ํƒญ๋งŒ event data ์—…ํ…Œ์ดํŠธ๊ฐ€ ๋จ ์›์ธ - API์—์„œ ๋™์ผ ์ด๋ฒคํŠธ๊ฐ€ ์•„๋‹Œ ๋‹ค์Œ ์ƒ์„ฑ๋œ ๋™์ผ ํ‚ค์˜ ์ด๋ฒคํŠธ๋กœ ๋ฎ์–ด ์“ฐ๊ธฐ๊ฐ€ ๋˜์–ด์ ธ๋ฒ„๋ฆผ - = API์—์„œ concurrentHashMap์— emitter ๋‹ด๊ณ  ์žˆ๋Š”๋ฐ ๋™์ผ key๋กœ ์ƒˆ ๊ฒƒ์œผ๋กœ ์—Ž์–ด์ณ์ ธ์„œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• - emitter๋Š” ๊ณต์œ  ์•ˆ๋จ - ์ด๋ฒคํŠธ ๊ตฌ๋…์ด ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์—ฌ๋Ÿฌ๊ฐœ emitter๋ฅผ uuid ์ถ”๊ฐ€ ๋ฐ idPrefix์ ์šฉํ•ด์„œ Broadcast ์‹œ idPrefix ํ•˜์œ„ ๊ฒƒ๋“ค ๋ชจ๋‘ ์—…๋ฐ์ดํŠธ ๋˜๋„๋ก ๋ณ€๊ฒฝ 2. ์ธ์ฆ์ด์Šˆ - event subscribe์‹œ .. 2024. 8. 19.
SSE ์ ์šฉ (2) - ์ด์ค‘ํ™”๋ฅผ ์ ์šฉํ•ด๋ณด์ž ํ•„์š”์„ฑ- ์‹ ๊ทœ ๊ตฌ์ถ• ์Šคํ…Œ์ด์ง€ ๋Œ€๋ถ€๋ถ„ API 2๋Œ€ -> ์Šค์ผ€์ผ๋ง ์ด์Šˆ ๊ณ ๋ฏผ์ด ํ•„์š”- ํ˜„์žฌ ๊ฐ๊ฐ API์— Subscribe, broadcast๊ฐ€ ์žˆ์œผ๋ฉด ์ด๋ฒคํŠธ ๋ฐœ์ƒํ•œ ์ชฝ์— ์‘๋‹ต ๋ˆ„๋ฝ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ. ๊ตฌํ˜„ ๋ฐฉ๋ฒ•- MQ๋ฅผ ์ด์šฉ  - ๊ธฐ์กด์— ์‚ฌ์šฉ์ค‘์ธ ๋ฆฌ์†Œ์Šค  - Redis๋‚˜ Kafka๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋‚˜, ํ˜„์žฌ ์ƒํ™ฉ์—์„œ SSE๋•Œ๋ฌธ์— ์ธํ”„๋ผ ์ถ”๊ฐ€๋Š” ๋ถˆ๊ฐ€ํ•œ ์ƒํ™ฉ  - ๋‹ค์ค‘ ๋กœ๊ทธ์ธ ์ด๋ ‡๊ฒŒ ์‹ฌํ™”๊นŒ์ง€ ํ•„์š”ํ•˜์ง€ ์•Š์Œ (๋‹จ์ผ ๊ธฐ๊ธฐ ๋กœ๊ทธ์ธ ํ™˜๊ฒฝ)  - ๊ตฌํ˜„์„ ์ด๊ฒƒ์ €๊ฒƒ ๋ณด๋‹ˆ MQ๋กœ ์ถฉ๋ถ„ํ•˜๊ฒŒ ๋Œ€์‘ ๊ฐ€๋Šฅํ•  ๊ฒƒ ๊ฐ™์Œ- Subscribe๋Š” ์–ด๋Š ์„œ๋ฒ„์—์„œ ๋ฐœ์ƒํ•ด๋„ ์ƒ๊ด€์ด ์—†์Œ, ๋”ฐ๋ผ์„œ API๋กœ ์ง„ํ–‰, Broadcast๋Š” MQ๋กœ ์ ์šฉ- ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ์ด๋ฒคํŠธ ID Prefix๋ฅผ ํ™•์ธํ•˜์—ฌ ๊ตฌ๋…์ค‘์ธ ๋ชจ๋“  ์„œ๋ฒ„์— ๋งคํ•‘๋˜๋Š” ๋ชจ๋“  ์ด๋ฒคํŠธ๋ฅผ ๋™์‹œ์— Br.. 2024. 8. 19.
github git-lfs ์‚ฌ์šฉ ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ ์—…๋กœ๋“œ ๊นƒํ—ˆ๋ธŒ ํŒŒ์ผ ์—…๋กœ๋“œ ์‹œ 25๋ฉ”๊ฐ€ ์šฉ๋Ÿ‰ ์ œํ•œ์ด ์žˆ์Œ git-lfs ์ด์šฉํ•ด์„œ ์—…๋ฐ์ดํŠธ ํ•„์š” ์ฃผ์˜ ์‚ฌํ•ญ์˜ฌ๋ฆฌ๋Š” ์‚ฌ๋žŒ๋„ ๋ฆฌํฌ๋ฅผ ํด๋ก  ๋ฐ›๋Š” ์‚ฌ๋žŒ๋„ ๋ชจ๋‘ git-lfs๊ฐ€ ์„ค์น˜ ๋˜์–ด์žˆ์–ด์•ผํ•จgit-lfs๊ฐ€ ์„ค์น˜๋˜์–ด์žˆ์ง€ ์•Š์€ PC์—์„œ lfs๋กœ ์—…๋กœ๋“œํ•œ ํŒŒ์ผ์„ ๋‹ค์šด๋ฐ›์œผ๋ฉด ํฌ์ธํ„ฐ๋งŒ ๋‹ค์šด๋ฐ›์•„์ง ์„ค์น˜ ๋ฐ ์—…๋กœ๋“œ ๋ฐฉ๋ฒ•1. ์„ค์น˜ : brew install git-lfs2. lfs ์ดˆ๊ธฐํ™” : git lfs install3. ํŒŒ์ผ ์ถ”์  ์„ค์ • : git lfs track "*.csv" ex)csvํŒŒ์ผ์„ ์ถ”์ ํ•˜๊ณ  ์‹ถ๋‹ค.4. ํŒŒ์ผ ์ถ”๊ฐ€ ๋ฐ ์ปค๋ฐ‹๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋กœ ์ด๋™git add .gitattributesgit add {์ด๋ฆ„}.csvgit commit -m "Add large CSV file using Git LFS"git push origin m.. 2024. 8. 15.
Group Concat Query DSL 1. UtilityClass๋กœ ๋นผ์„œ ์ž‘์—…ํ•˜๊ธฐ ๋‹จ์ˆœ Group Concatpublic static StringTemplate getGroupConcatTemplate(StringPath field) { return Expressions.stringTemplate("GROUP_CONCAT(DISTINCT {0})", field);}//์ฟผ๋ฆฌ ์‚ฌ์šฉ์‹œQueryTemplateUtils.getGroupConcatTemplate(account.accId).as("accGroupingString"),  2. QueryRepository Class์˜ ์ฟผ๋ฆฌ์—์„œ ์ง์ ‘ ์‚ฌ์šฉํ•˜๊ธฐ๋ฌธ์ž์—ด ๋‘๊ฐœ ์—ฐ๊ฒฐ ํ›„ Group Concat...Expressions.stringTemplate("GROUP_CONCAT(DISTINCT CONCA.. 2024. 8. 5.
๋กฌ๋ณต ๋นŒ๋” ๊ธฐ๋ณธ๊ฐ’ ๋ชจ๋ธ์— ๊ธฐ๋ณธ๊ฐ’์„ ์ฃผ๊ณ  ์‹ถ์„ ๋•Œ, ๋นŒ๋”์—์„œ ๋”ฐ๋กœ ์ง€์ • ์•ˆํ•ด๋„ ํ•ด๋‹น ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’ ์„ธํŒ… 2024. 6. 11.
H2 ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์„ค์น˜ ๋ฐ ์ดˆ๊ธฐ ์„ค์ • ๋ฐฉ๋ฒ• h2 ๋””๋น„ ์ฒ˜์Œ ์ ‘๊ทผํ•  ๋•Œ๋งŒ ํŒŒ์ผ๋ชจ๋“œ๋กœ ์ ‘์†ํ•˜๊ณ  ๋””๋น„ ์ƒ์„ฑ๋˜๋ฉด ๊ทธ ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ๋„คํŠธ์›Œํฌ ๋ชจ๋“œ๋กœ ์ ‘์† 1. ์„ค์น˜ ๋ฐ ์••์ถ• ํ•ด์ œ https://www.h2database.com/html/main.html 2. ์‰˜ ํŒŒ์ผ ์‹คํ–‰ cd Downloads/h2/bin ./h2.sh 3. ๊ถŒํ•œ์ด ์—†๋‹ค๋ฉด ๊ถŒํ•œ ์—…๋ฐ์ดํŠธ ํ›„ ์žฌ์‹คํ–‰ chmod 755 h2.sh ./h2.sh 4. ์‰˜ ํŒŒ์ผ ์‹คํ–‰ํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋””๋น„ ๋œจ์ง€๋งŒ ์•ˆ๋œฌ๋‹ค๋ฉด localhost:8082๋กœ ์ง์ ‘ ๊ฐ€๋„๋ก 5. ์‹คํ–‰ ํ›„ ์ตœ์ดˆ ์ ‘์† ์‹œ JDBC URL์— `jdbc:h2:~/{dbName}` 6. ์œ ์ € ๋””๋ ‰ํ† ๋ฆฌ์— `~/{dbName}.mv.db` ํŒŒ์ผ ์ƒ์„ฑ ํ™•์ธ 7. ์ดํ›„ ๋ถ€ํ„ฐ๋Š” ์—ฐ๊ฒฐํ•ด์ œ ํ›„ `jdbc:h2:tcp://localhost/~/{dbName}` ์ด๋ ‡๊ฒŒ ์ ‘์† 2024. 4. 15.
Spring Boot 3.0 ์ด์ƒ QueryDSL ์„ค์ • gradle ๊ธฐ์ค€ 1. dependencies ์ถ”๊ฐ€ implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" 2. build -> clean 3. other -> compileJava 2024. 4. 14.