Highlited
์๋ ํ์ธ์, ์ฌ๋ฌ๋ถ! ์ค๋์ ์ ๊ฐ Spot! ์ฑ์ ์๋ต ์๋๋ฅผ ๊ฐ์ ํ๋ฉด์ ๊ฒช์ ์ฌ์ ์ ๊ณต์ ํด๋ณด๋ ค๊ณ ํด์. DB ์ฟผ๋ฆฌ ์ฑ๋ฅ ๊ฐ์ ์ด ์ผ๋ง๋ ์ค์ํ์ง, ๊ทธ๋ฆฌ๊ณ ์คํ๊ณํ ๋ถ์์ด ์ด๋ป๊ฒ ๋์์ด ๋๋์ง ํจ๊ป ์์๋ณด์์~!์คํ๊ณํ ๋ถ์์ผ๋ก ์ฟผ๋ฆฌ ์ฑ๋ฅ ๊ฐ์ ํ๊ธฐ: Spot! ์ฑ์ ์๋ต ์๋ ์ต์ ํ ์ฌ์ ์ฒ์์๋ ์ฑ์์ ํน์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ๋ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ๋ฌธ์ ๊ฐ ์์์ด์. ์ฟผ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์๊ณ , ์คํ ๊ณํ์ ๋ณด๋ ์ ์ฒด ํ ์ด๋ธ ์ค์บ์ด ์ผ์ด๋๊ณ ์์์ด์.ย ๊ธฐ์กด ์ฟผ๋ฆฌSELECT r1_0.*, s1_0.*, s2_0.*, b1_0.*, s3_0.*, r2_0.*, m1_0.*, l1_0.*FROM reviews r1_0JOIN stadiums s1_0 ON s1_0.id = r1_0.stadium_idJOIN secti..
-
Ubuntu ์๋ฒ์์ Node.js ํ๋ก์ ํธ ์ธํ ํ๊ธฐ feat. PM2๋ก ์๋ฒ ์๋ํ
์๋ ํ์ธ์! ์ค๋์ Ubuntu ํ๊ฒฝ์์ Node.js ํ๋ก์ ํธ๋ฅผ ์ธํ ํ๊ณ , PM2๋ฅผ ํ์ฉํด ์๋ฒ๋ฅผ ์๋ํํ๋ ๊ณผ์ ์ ๋จ๊ณ๋ณ๋ก ์๋ ค๋๋ฆฌ๋ ค๊ณ ํด์. ๐๐ย ๋จผ์ , Node.js๋ฅผ ์ค์นํ๊ณ , Git์ ์ฌ์ฉํด ํ๋ก์ ํธ๋ฅผ ๋ณต์ ํ ํ, ํ๋ก์ ํธ๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณผ ๊ฑฐ์์.๋ง์ฝ ์๋ฒ ์ธ์คํด์ค๋ฅผ ์์ง ๋ง๋ค์ง ์์๋ค๋ฉด ์๋ ํฌ์คํ ์ ๋ฐ๋ผ Ubuntu ์๋ฒ ์ธ์คํด์ค๋ฅผ ๋จผ์ ๋ง๋ค๊ณ ์ ์ํ ๋ค ์งํํด ์ฃผ์ธ์.ย private ์๋ฒ ์ธ์คํด์ค NAT ๊ฒ์ดํธ์จ์ด ์์ฑ1. Node.js ์ค์นํ๊ธฐ ๐ ๏ธNAT Gateway ์ฐ๊ฒฐ ํ์ธย Ubuntu ์๋ฒ์์ ping google.com์ ํตํด ํจํท์ด ์ ์ค๋์ง ํ์ธํ๊ณ ์ธํฐ๋ท ์ฐ๊ฒฐ์ ํ์ธํ์ด์.์์ ์ฌ์ง์ฒ๋ผ ์ด๋ง๋ค ๊ณ์ ๋ก๊ทธ๊ฐ ์ฐํ๋ฉด ์ธํฐ๋ท ์ฐ๊ฒฐ์ด ์ ๋์ด์๋๊ฑฐ์์..
-
CLOVA-Studio๋ก ์ธ๊ณต์ง๋ฅ ๋ฐ์ดํฐ ํ๊ฐ ์๋ฒ ๊ตฌ์ถํ๊ธฐ feat. ๋ฐ์ดํฐ ํ์ง ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ
์๋ ํ์ธ์! ์ค๋์ Openlist ํ์์ CLOVA-Studio๋ฅผ ์ด์ฉํด ์ธ๊ณต์ง๋ฅ ๋ฐ์ดํฐ ํ๊ฐ ์๋ฒ๋ฅผ ๊ตฌ์ถํ ๊ฒฝํ์ ๊ณต์ ํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ๋ฐ์ดํฐ ํ์ง ๊ฐ์ ์ ์ํด ์ ์ฉํ ์๊ณ ๋ฆฌ์ฆ๋ ํจ๊ป ์๊ฐํ ๊ฒ์.ย ์๋ ์กฐ๊ฑดRedis Pub/Sub์ ์ด์ฉํด WAS์ ํต์ ํฉ๋๋ค.Redis์์ "ai_generate" ์ฑ๋์ ๊ตฌ๋ ํ๋ค๊ฐ processAiEvaluate ๋ฉ์์ง๊ฐ ์ค๋ฉด ํ๊ฐ ์๊ฐ ์ค์ ๋ number ์ดํ์ธ ๋ชจ๋ ์์ดํ ์ ํ๊ฐํฉ๋๋ค.{ "message": "processAiEvaluate", "body": number }ํ๊ฐ ๋ฐฉ์ํ๊ฐ ์๊ฐ number ์ดํ์ธ ๋ชจ๋ ์์ดํ ์ ์ ๋ถ ๊ฐ์ ธ์จ ๋ค์, ์ด๋ฅผ 10๊ฐ์ฉ ์๋ฅธ ๋ค ๊ฐ์ฅ ๊ด์ฐฎ์ ์์ดํ 3๊ฐ๋ฅผ ๋ฝ์๋ฌ๋ผ๊ณ ๋ค์ด๋ฒ HyperClova X์ ์์ฒญ์ ๋ณด๋ ๋๋ค.๋๋ ํ๊ฐ์..
-
GPT-4๋ก ์ธ๊ณต์ง๋ฅ ๋ฐ์ดํฐ ์บ์ฑ ์๋ฒ ๊ตฌ์ถํ๊ธฐ feat. Promise Pool
์๋ ํ์ธ์, Openlist ํ์ ๋ฐฑ์๋ ๊ธฐ์ ์ ๊ด์ฌ์ ๊ฐ์ ธ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!ย ย ๊ธฐ์ ๋ธ๋ก๊ทธ ์์ฑํ๋ ๊ฒ ์ ๋ง ์ฌ๋ฏธ์๋ค์! ์ค๋์ ์ฐ๋ฆฌ ํ์ ์ด์ผ๊ธฐ๋ฅผ ๊ณต์ ํ๊ธฐ ์ํด, GPT-4๋ฅผ ํ์ฉํ ์ธ๊ณต์ง๋ฅ ๋ฐ์ดํฐ ์บ์ฑ ์๋ฒ๋ฅผ ๊ตฌ์ถํ ๊ฒฝํ์ ์ค์ฌ์ผ๋ก ๊ธ์ ์จ๋ณผ๊น ํฉ๋๋ค.ย Why GPT-4?์ผ๋จ ์ฒ์์๋ ๊ธฐ์กด์ Clova Studio๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ํ์์ด์. ์ฐ๋ฆฌ์๊ฒ 20๋ง ์์ด๋ผ๋ ํฌ๋ ๋ง์ด ์์๊ฑฐ๋ ์. ํ์ง๋ง ํธ๊ธฐ์ฌ์ GPT-4์ ๊ฐ์ ์ง๋ฌธ์ ๋ฃ์ด๋ดค๋๋ฐ, CLOVA Studio๋ ๋น๊ตํ์ ๋ ๋๋ผ์ด ๋ฐ์ดํฐ ์์ฑ ๋ฅ๋ ฅ์ ์ง์ ๊ฒฝํํ๊ณ ๋ GPT-4๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.API ํค ๋ฐ๊ธ ๋ฐ๊ธฐGPT-4๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ OpenAI ํ๋ซํผ์์ API ํค๋ฅผ ๋ฐ๊ธ๋ฐ์์ผ ํด์. ์ด ๊ณผ์ ์ ๋น๊ต์ ๊ฐ๋จํด์ ์๋ ๋ฌธ์๋ง ๋ณด๊ณ ๋ฐ๋ผ..
-
Pipe & Filter ์ํคํ ์ฒ๋ก ์ธ๊ณต์ง๋ฅ ๋ฐ์ดํฐ ์บ์ฑ ์์คํ ๊ตฌ์ถํ๊ธฐ
์๋ ํ์ธ์, Openlist ํ์ ๋ฐฑ์๋ ๊ธฐ์ ์ ๊ด์ฌ์ ๊ฐ์ ธ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ๐ย ์ค๋์ ๋ณต์กํ์ง๋ง ๋งค๋ ฅ์ ์ธ Pipe & Filter ์ํคํ ์ฒ์ ์ด๋ฅผ ์ ์ฉํ ์๋ฒ ์ธ์คํด์ค ๋ถ๋ฆฌ ๋ฐฉ์์ ๋ํด ์ด์ผ๊ธฐํด ๋ณด๋ ค๊ณ ํฉ๋๋ค. ์ด ๊ตฌ์กฐ๋ ๊ฐ๊ฐ์ ์๋น์ค๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์๋ํ๋ฉด์๋ ์๋ก ์ฐ๊ฒฐ๋์ด ์๋ ํํ๋ฅผ ์ทจํ๋๋ฐ์.ย ๋จผ์ , ์ฐ๋ฆฌ ํ์ด ๊ฐ์ง๊ณ ์๋ ๋ฌธ์ ์ ์ ๋ํด์ ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค.๋ฐฐ๊ฒฝ์๋ฒ ์ธก์์๋ ์ฑ์ผ๋ก๋ถํฐ ์ง์ ๋ ์๋ํฌ์ธํธ๋ก ์์ฒญ์ด ์ค๋ฉด, ์์ฒญ์ ํฌํจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ๋ค์ด๋ฒ์ ์์ฑํ ์ธ๊ณต์ง๋ฅ์ธ CLOVA Studio API์๊ฒ ๋ฐ์ดํฐ ์์ฑ์ ์์ฒญํ๊ณ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ํ์ฑํด์ ๋ค์ ์ฑ ์ชฝ์ผ๋ก ์๋ต์ ์๋ ๊ตฌ์กฐ์์ด์.ย Openlist ํ์ ์๋ฒ์์ ์ด๋ป๊ฒ CLOVA Studio API ํค๋ฅผ ๋ฐ๊ธ๋ฐ์์ ์ฐ๋ํ๋์ง๋ ์๋ ..
-
NestJS๋ก CLOVA Studio API ์ฐ๋ํ๊ธฐ: ์๋ฒฝ ๊ฐ์ด๋
์๋ ํ์ธ์, ์ฌ๋ฌ๋ถ!์ค๋์ NestJS ์๋น์ค์์ CLOVA Studio API๋ฅผ ์ฐ๋ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๋ ค๊ณ ํฉ๋๋ค.ย ๋จผ์ , CLOVA Studio์ ์๋น์ค ์ฑ์ ๋ฑ๋กํ๋ ๊ฒ๋ถํฐ ์์ํด ๋ณผ๊น์?ย ย 1. CLOVA Studio์ ์๋น์ค ๋ฑ๋กํ๊ธฐhttps://clovastudio.ncloud.com/CLOVA Studio์ ์ ์ํ ๋ค, ํ๋ ์ด ๊ทธ๋ผ์ด๋๋ฅผ ํด๋ฆญํด ์ฃผ์ธ์.ย ย ํ๋ ์ด ๊ทธ๋ผ์ด๋์์๋ ์ฌ๋ฌ๊ฐ์ง ํ ์คํธ๋ฅผ ํด๋ณผ ์ ์๋ ํ๊ฒฝ์ด ์ ๊ณต๋ฉ๋๋ค. ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ์ค๋ฅธ์ชฝ ์ ํ๋กํ ์ด๋ฆ ์๋์ ์๋ ํ ์คํธ ์ฑ ๋ฒํผ์ ๋๋ฌ์ค ๊ฑฐ์์.ย ย ์์ ์ ๋จผ์ ๋ง๋ ๋ค์ ํ ์คํธ ์ฑ ๋ฒํผ์ ๋๋ฅด๋ฉด ๋ชจ๋ฌ์ด ๋ฐ ํ ๋ฐ์. ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ "์ฌ๊ธฐ" ๋ฒํผ์ ๋๋ฌ์ ์๋น์ค ์ฑ ์ ์ฒญ ํผ์ ์์ฑํ๋๋ก ํ๊ฒ ์ต๋๋ค.ย ย 2. ์๋ฒ์์ CLOVA..
-
์ผ๊ตฌ์ฅ ์ข์ ์์ผ ์๋น์ค SPOT! ์๋ฒ ํํธ์ ์ฌ์ SPOT! 2024.10.07 15:28
์๋ ํ์ธ์! ๋์์ด๋์ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ง๋ฌ์ ๋, ๋ํ๋ง(Depromeet) 15๊ธฐ์ 6ํ ์๋ฒ ํํธ์ ๋๋ค ๐ย ์ ํฌ ์ก.์ง.ํ ํ์ ์ผ๋ง ์ ์ฑ๊ณต์ ์ผ๋ก SPOT! ์๋น์ค์ 2์ฐจ MVP ๊ฐ๋ฐ์ ๋ง์น ํ Play Store์ ์๋น์ค๋ฅผ ๋ฐ์นญํ์ด์. ๋ํ๋ง์ ์ง์ํ๋ ์๋ฒ ๊ฐ๋ฐ์๋ถ๋ค ๋๋ถ๋ถ์ด ์งง์ ์๊ฐ ๋ด์ ์๋น์ค๋ฅผ ๋ฐ์นญํ๋ ๊ฒ๊ณผ ํ๋ก์ ํธ ์ค ๊ฐ๋ฐ ์ญ๋์ ํค์ฐ๋ ๊ฒ์ ๋ง์ ๊ธฐ๋๊ฐ์ ๊ฐ์ง๊ณ ๊ณ์ค ๊ฒ ๊ฐ์์.ย ์ด๋ฒ ํฌ์คํ ์ ํตํด ์ ํฌ๊ฐ ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๋ฉฐ ๊ฒช์๋ ์ผ๋ค์ ๊ฐ๊ด์ ์ผ๋ก ์๊ฐํด๋๋ฆฌ๊ณ , ๋น ๋ฅธ ๊ธฐ๊ฐ ๋ด์ ์ฑ๊ณต์ ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ๋ฐ์นญํ ๋ ธํ์ฐ๋ฅผ ๊ณต์ ํด๋ณด๋ ค ํด์.ย 16๊ธฐ ๋ํ๋ง ์๋ฒ ํํธ ์ง์์, ๊ทธ๋ฆฌ๊ณ ์ฌ์ด๋ ํ๋ก์ ํธ๋ฅผ ์์ํ๋ ค๋ ๋ชจ๋ ๊ฐ๋ฐ์๋ถ๋ค๊ป ์ด ํฌ์คํ ์ด ๋์์ด ๋์์ผ๋ฉด ํด์ ๐ฅณย SPOT! ์ ๋ฌด์จ ์๋น์ค ..
-
๋ด๊ฐ ๊ณต๋ถํ๋ ค๊ณ ๊ธฐ๋กํ๋ ๊ฐ์ฒด์งํฅ SOLID ์์น๊ณผ ์์ ์ฝ๋Spring 2024.09.20 23:41
๊ฐ์ฒด ์งํฅ์ ๋ํด ๊ณต๋ถํ๋ฉด ๊ฐ์ฅ ์ฒ์ ๋์ค๋ ๊ฒ์ด SOLID ์์น์ด๋ค.ย ย ๊ฐ์ฒด ์งํฅ์ ์ผ๋ก ํ๋ก๊ทธ๋๋ฐํ ๋ ์ง์ผ์ผ ํ๋ ์์น 5๊ฐ์ง๋ฅผ ๋ํ๋ด๋ ์ฝ์ด์ธ๋ฐ, ์๋์์ ๊ฐ๊ฐ์ ์ํ๋ฒณ์ด ๋ฌด์์ ๋ํ๋ด๋์ง ์ฐจ๋ก๋๋ก ์์๋ณด์.ย Single Responsibility Principle ๋จ์ผ ์ฑ ์ ์์นOpen/Closed Principle ๊ฐ๋ฐฉ/ํ์ ์์นLiscov's Substitution Principle ๋ฆฌ์ค์ฝํ ์นํ ์์นInterface Segregation Principle ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์นDependency Inversion Principle ์์กด์ฑ ์ญ์ ์์นย ์ด๋ ๊ฒ 5๊ฐ์ ์์น์ ๋ณด๊ณ ๋ฐ๋ก ์ด๋ค ์์น์ธ์ง ๊ฐ์ด ์ค๋ ์ฒ์ฌ ๊ฐ๋ฐ์๋ถ๋ค๋ ์์ ๊ฑฐ๊ณ , ํ์์ฒ๋ผ ์๋ฆฌ์กํ๊ฒ ๋๊ปด์ง๋ ๋ถ๋ค๋ ์์ ๊ฒ์ด๋ค.๊ทธ๋์ ํ๋..
-
์ฑ๊ธํค๊ณผ ๋ง๋ฅ ์คํ๋ง ์ปจํ ์ด๋Spring 2024.09.22 17:12
์๋ ํ์ธ์, ์ฌ๋ฌ๋ถ! ์ค๋์ ์คํ๋ง์์ ์ฑ๊ธํค์ ์ด๋ป๊ฒ ๊ด๋ฆฌํ๋์ง์ ๋ํด ์์๋ณด๋ ์๊ฐ์ ๊ฐ์ ธ๋ณด๋ ค๊ณ ํฉ๋๋ค.ย ๋จผ์ , ์ฑ๊ธํค ํจํด์ ๋ํด ๊ฐ๋จํ ์ง๊ณ ๋์ด๊ฐ๊ฒ์. ์ฑ๊ธํค์ ์ธ์คํด์ค๋ฅผ ์ค์ง ํ ๊ฐ๋ง ์์ฑํ์ฌ ์ฌ์ฉํ๋ ๋์์ธ ํจํด์ด์์. ๊ทธ๋ฐ๋ฐ ์ด ์ฑ๊ธํค์ ๊ตฌํํ๋ ค๋ฉด ์กฐ๊ธ ๊ท์ฐฎ์ ์์ ๋ค์ด ํ์ํ์ฃ .ย ๋ํ์ ์ธ ์ฑ๊ธํค ํจํด์ ์ดํด๋ณด์์.public class Singleton { private static final Singleton instance = new Singleton(); private Singleton() {} // private ์์ฑ์๋ก ์ธ๋ถ์์์ ์์ฑ์ ๋ง์ public static Singleton getInstance() { return instanc..