์ ๋ณด
๐ ์๋ ํ์ธ์!
๋ฐฑ์๋ ๊ฐ๋ฐ์ NOWIL์ ๋๋ค.
์ฃผ๋ก Spring Boot, Kotlin, AWS ๊ธฐ๋ฐ์ ๋ฐฑ์๋ ์์คํ ์ ๊ฐ๋ฐํ๊ณ ์์ผ๋ฉฐ, ์ด ๋ธ๋ก๊ทธ์์๋ ๊ฐ๋ฐ ๊ณผ์ ์์ ๊ฒช์ ๋ฌธ์ ํด๊ฒฐ ๊ฒฝํ๊ณผ ํ์ต ๋ด์ฉ์ ๊ณต์ ํฉ๋๋ค.
๐ ๏ธ Tech Stack
- Backend: Spring Boot, Kotlin, Node.js
- Database: PostgreSQL, MongoDB, Redis
- Cloud: AWS (ECS, Lambda, RDS, S3)
- DevOps: Docker, GitHub Actions
๐ผ ํ๋ก์ ํธ ๊ฒฝ๋ ฅ
Duurian ๋ฐฑ์๋ ๋ด๋น (2025.11 ~)
๊ฐ์ธ ๋ง์ถคํ ๋ง๋จ ์ ๊ณต ๋งค์นญ ์๋น์ค โDuurianโ ๋ฐฑ์๋ ๊ฐ๋ฐ
Restful API ๊ตฌํ ์๊ตฌ์ฌํญ ๋ถ์ ๋ฐ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง AI ์๋ฒ ์ฐ๋ ์๋น์ค ๊ตฌํ
- ํ๋ก์ ํธ ๊ฐ์
- Spring ๋ฐ PostgreSQL ๊ธฐ๋ฐ ์๋ฒ์ธก ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌํ
- ๊ธฐ์ ํค์๋: Kotlin, Spring, JPA, PostgreSQL, OpenAI, Async
- ์ํคํ ์ฒ: Hexagonal + Multi-module (api, core, domain, infrastructure)
- ๋ด๋น ์
๋ฌด
- ๋ชจ๋ ๋ถ๋ฆฌ๋ฅผ ํตํด ์น ์ด๋ํฐ, ์ ์ค์ผ์ด์ค, ๋๋ฉ์ธ ๋ชจ๋ธ, ์์์ฑ ์ด๋ํฐ๋ฅผ ๋ถ๋ฆฌ
- ๋๋ฆฌ์์ ๋ํ(OpenAI ChatGPT API ์ฐ๋์ ํตํ ์ฑํ ํ ๋ณด์ ์ง๊ธ) ํตํฉ ๊ตฌํ
- ๋ํ/์์ฝ/ํ๋ฅด์๋/ํ๋กฌํํธ/๋ฆฌ์๋ ๋ฑ ํต์ฌ ๋๋ฉ์ธ ์์ง ํตํฉ ๊ตฌํ
- ๋ํ ์ฒ๋ฆฌ โ ์์ฝ โ ๋ฆฌ์๋(๋ณด์) ์ง๊ธ์ผ๋ก ์ด์ด์ง๋ ํ์ฒ๋ฆฌ ์ฒด์ธ์ ์ค๊ณยท๊ตฌํ
- ์ฃผ์ ๊ธฐ๋ฅ ๊ฐ๋ฐ
- ์ธ๋ถ LLM(OpenAI) ์ฐ๋ ์์ ํ ๋ฐ ์์ฒญ ๊ตฌ์กฐ ํ์คํ
- ๋ํ ์์ฝ ์์ฑ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๊ตฌ์กฐ ํ๋ฆฝ (71% ์ฑ๋ฅ ๊ฐ์ ๋ฌ์ฑ)
- ๋ํยท์ง๋ฌธยท์์ฝยทํ๋กฌํํธ ๊ธฐ๋ฅ์ ์๋ํฌ์๋๋ก ์ค๊ณ/๊ตฌํ
- ๋ฆฌ์๋(๋ณด์) ์ง๊ธ/์กฐํ ๋ก์ง์ ์ ๋ฆฌํด ๋๋ฉ์ธ ํ์ฅ์ฑ ๊ฐํ
- ํ๋ฅด์๋ ๊ณต๊ฐ ์ฌ๋ถ ๊ด๋ จ ๋ฒ๊ทธ ์์ ์ผ๋ก ๋ฐ์ดํฐ ์ ๋ขฐ์ฑ ๊ฐ์
- ๋น๋๊ธฐ ๊ตฌ์กฐ๋ก ์๋ต ์ง์ฐ ์ต์ํ ๋ฐ DIP ๊ธฐ๋ฐ ํ์ฅ์ฑ ํ๋ณด
Emerdy ๋ฐฑ์๋ ๋ด๋น (2023.02 - 2023.12)
๋ฅ๋ฌ๋๊ณผ ์์ฑ ์ฒ๋ฆฌ๋ฅผ ํตํ ์๊ธ ์ํฉ ๋์ ์ฑ โEmerdyโ ๋ฐฑ์๋ ๊ฐ๋ฐ
์ํคํ
์ฒยท์ธํ๋ผ ์ค๊ณ ์๊ตฌ์ฌํญ ๋ถ์ ๋ฐ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง ์ด๊ด AI ์๋ฒ ์ฐ๋ ์๋น์ค ๊ตฌํ
- ํ๋ก์ ํธ ๊ฐ์
- Nest.js ๋ฐ MySQL ๊ธฐ๋ฐ ์๋ฒ์ธก ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌํ
- ๋ด๋น ์
๋ฌด
- ๋ฐฑ์๋ ์์คํ ์ค๊ณ ๋ฐ ๊ตฌํ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ธ๋ง ์ค๊ณ ๋ฐ ๊ตฌํ
- Restful API ๊ตฌํ
- ์์ฑ ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ ๊ตฌ์ถ
- ์๋ฐฉํฅ ์ค์๊ฐ ์ฌ์ฉ์ ์์น ๋ฐ์ดํฐ ํต์
- ์ธํ๋ผ ๋ฐ ๋ฐฐํฌ ํ๊ฒฝ ๊ตฌ์ถ
- ์์คํ
์ค๊ณ
- ์๊ตฌ์ฌํญ์ ํ์ ํ์ฌ MySQL ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง ๋ฐ ๊ตฌํ
- ์ค์ฌ์ฉ ํ
์คํธ
- 50๋ช ์ ์ ์ฌ ๊ณ ๊ฐ์ ๋์์ผ๋ก ์์ฑ ๋ น์ ์์ ๋์ ํธ๋ฆฌ๊ฑฐ์ ๋ํ ์ฌ์ฉ์ ํ ์คํธ
- ์ฌ์ฉ์ ํผ๋๋ฐฑ ๊ธฐ๋ฐ ๊ธฐ๋ฅ ๊ฐ์ ์ฃผ๋
- ์ฃผ์ ๊ธฐ๋ฅ ๊ฐ๋ฐ
- GeoJSON ํ์์ผ๋ก ์์น ๋ฐ์ดํฐ ์ ์ฅ
- FFMPEG๋ฅผ ํตํด ์์ฑ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ต์ ํ๋ก ์์ฑ ๋ฐ์ดํฐ ๋ถ๋ฅ ์๊ฐ 3์ด ๋จ์ถ
- ์์ฑ ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ ๊ตฌ์ถ (S3 โ AWS Transcribe โ ML ์๋ฒ โ DB)
- Socket.io๋ฅผ ํตํ ์๋ฐฉํฅ ์ค์๊ฐ ์ฌ์ฉ์ ์์น ๋ฐ์ดํฐ ํต์ ๊ตฌํ
- Message Queue์ธ Bull.js๋ฅผ ํตํด ๋น๋๊ธฐ Push Notification ๊ตฌํํ์ฌ ์์ ๋ถ๋ฆฌ๋ก ์๋ฒ ๋ถํ ์ต์ํ
- ์ธํ๋ผ ๋ฐ ๋ฐฐํฌ
- Naver Clova โ AWS Transcribe๋ก ์ ํํ์ฌ ์์ฑ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ต์ ํ๋ฅผ ํตํด ์๊ธ ์ํฉ ๋ถ๋ฅ ์๊ณ ๋ฆฌ์ฆ ์ ํ๋ ํฅ์
- Docker, Docker-compose, GitHub Actions ๊ธฐ๋ฐ AWS ์ธํ๋ผ ์ด์
- Nginx Reverse Proxy๋ฅผ ํตํ ๋ก๋ ๋ฐธ๋ฐ์ฑ ๋ฐ SSL ์ฒ๋ฆฌ
Devigation ๋ฐฑ์๋ ๋ด๋น (2023.08 - 2023.11)
๊ฐ๋ฐ์ ์ปค๋ฆฌํ๋ผ ๊ณต์ ์น ํ๋ซํผ โDevigationโ ๋ฐฑ์๋ ๊ฐ๋ฐ
์ํคํ
์ฒ ์ค๊ณ ์๊ตฌ์ฌํญ ๋ถ์ ๋ฐ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง ์ด๊ด Restful API ๊ฐ๋ฐ ํ
์คํธ ์ฝ๋ ํ์คํ ๋ฐ ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฌธํ ์ ์ฐฉ
- ํ๋ก์ ํธ ๊ฐ์
- Spring 2.7(SpringBoot) ๋ฐ MySQL ๊ธฐ๋ฐ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌํ
- ๋ด๋น ์
๋ฌด
- DDD ๊ธฐ๋ฐ ๋๋ฉ์ธ ๋ ์ด์ด ์ํคํ ์ฒ ์ค๊ณ
- ์ธ์ฆ ๋ฐ ๋ณด์ ๋๋ฉ์ธ ์ค๊ณ ๋ฐ ๊ตฌํ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ธ๋ง ์ค๊ณ ๋ฐ ๊ตฌํ
- Restful API ๊ตฌํ
- ์๋ฌ ์ฒ๋ฆฌ ๋๋ฉ์ธ ์ค๊ณ ๋ฐ ๊ตฌํ
- ํตํฉ ํ ์คํธ ํ๊ฒฝ ๊ตฌ์ถ
- ์ธ์ฆ ๋ฐ ๋ณด์
- Spring Security๋ฅผ ํตํ ์์ ๋ก๊ทธ์ธ ๊ตฌํ
- JWT ๊ธฐ๋ฐ ์ธ์ฆ ๋ฐ ์ธ๊ฐ ์์คํ ์ ๊ฐ๋ฐํ์ฌ Stateless ์ธ์ฆ์ผ๋ก ํ์ฅ์ฑ ํ๋ณด
- OAuth2(Github) ๋ก๊ทธ์ธ ์ง์ ๊ตฌํ
- ์์คํ
์ค๊ณ
- ๊ฐ์ฒด ์งํฅ ๊ธฐ๋ฐ์ ๋๋ฉ์ธ ๋ ์ด์ด ์ค๊ณ ๋ฐ ๊ฐ๋ฐ
- DDD ์์น์ผ๋ก ๋น์ฆ๋์ค ๋ก์ง ์์ง๋ ํฅ์
- ์๊ตฌ์ฌํญ์ ํ์ ํ์ฌ MySQL ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง ๋ฐ ๊ตฌํ
- RestControllerAdvice๋ฅผ ํตํ ์๋ฌ ์๋ต ์ฝ๋ ํธ๋ค๋ง
- ํ์ง ๊ด๋ฆฌ
- JUnit์ ํตํ ํ ์คํธ ์ฝ๋ ์์ฑํ์ฌ ์์คํ ์ ์์ ์ฑ๊ณผ ์๊ตฌ์ฌํญ ๋ง์กฑ ์ฌ๋ถ๋ฅผ ํ์ธ
- GitHub Actions๋ฅผ ํตํ CI/CD ๊ตฌํํ์ฌ ๊ฐ๋ฐ๊ณผ ๋ฐฐํฌ ๊ณผ์ ์ ๋ถํ์ค์ฑ๊ณผ ๋นํจ์จ์ ํด๊ฒฐ
- Swagger๋ฅผ ํตํ ๋ชจ๋ ์๋ํฌ์ธํธ ๋ฌธ์ํํ์ฌ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ ํ์ ๊ฐํ
์ฐฐ๋ฆฌ์ ๊ฑท๊ธฐ ๋ฐฑ์๋ ๋ด๋น (2022.08 - 2023.02)
์บ๋ฆญํฐ ์ก์ฑ์ ํตํ ์์ ๋ง๋ณด๊ธฐ ์ฑ โCharlieโ ๋ฐฑ์๋ ๊ฐ๋ฐ
์ํคํ
์ฒยท์ธํ๋ผ ์ค๊ณ ์๊ตฌ์ฌํญ ๋ถ์ ๋ฐ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง ์ด๊ด Restful API ๊ฐ๋ฐ ์ธํ๋ผ ๊ตฌ์ฑ
- ํ๋ก์ ํธ ๊ฐ์
- Nest.js ๋ฐ MySQL ๊ธฐ๋ฐ ์๋ฒ์ธก ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌํ
- ์์คํ
์ค๊ณ
- ์๊ตฌ์ฌํญ์ ํ์ ํ์ฌ MySQL ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง ๋ฐ ๊ตฌํ
- ์๊ณ ๋ฆฌ์ฆ ๊ฐ๋ฐ
- ์ผ๊ฐ ๊ฑธ์ ์๋ฅผ ํตํ ๋น๋ง๋ ๋ ๋ฒจ ๊ณ์ฐ ์๊ณ ๋ฆฌ์ฆ ๊ฐ๋ฐ
- ์ธํ๋ผ ๋ฐ ๋ฐฐํฌ
- Docker, Docker-compose, GitHub Actions ๊ธฐ๋ฐ AWS ์ธํ๋ผ ์ด์
- AWS ECS ๊ธฐ๋ฐ ์๋ํ CI/CD ํ์ดํ๋ผ์ธ ๊ตฌ์ถ์ผ๋ก ๋ฐฐํฌ ์์ ์๊ฐ 10๋ถ ๋ด๋ก ๋จ์ถ
- ์ฃผ์ ์ฑ๊ณผ
- App Store ๊ฑด๊ฐ ๋ฐ ํผํธ๋์ค ์นดํ ๊ณ ๋ฆฌ ๋ฌด๋ฃ ์ธ๊ธฐ ์ฑ 1์ ๋ฌ์ฑ
- App Store ์ ์ฒด ์ธ๊ธฐ ๋ฌด๋ฃ ์ฑ 43์ ๋ฌ์ฑ
- (2022.12 ๊ธฐ์ค) ์๊ฐ ํ์ฑ ์ฌ์ฉ์ 2,000๋ช ์ด์ ํ๋ณด
๋ชจ๋ธ ๋ฐฑ์๋ ๋ด๋น (2020.11 - 2022.05)
์ฌ์ฑ ์๊ฒฝ ์ฃผ๊ธฐ ํธ๋ํน ๋ฐ ํธ๋ฅด๋ชฌ ์ฌ์ดํด ๊ธฐ๋ฐ ๋ค์ด์ดํธ ์ฑ โMauveโ ๋ฐฑ์๋ ๊ฐ๋ฐ
์ํคํ
์ฒยท์ธํ๋ผ ์ค๊ณ ์๊ตฌ์ฌํญ ๋ถ์ ๋ฐ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง Restful API ๊ฐ๋ฐ
- ํ๋ก์ ํธ ๊ฐ์
- Express.js ๋ฐ MongoDB ๊ธฐ๋ฐ ์๋ฒ์ธก ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌํ
- ์์คํ
์ค๊ณ
- ์๊ตฌ์ฌํญ์ ํ์ ํ์ฌ MongoDB ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง ๋ฐ ๊ตฌํ
- ์๊ณ ๋ฆฌ์ฆ ๊ฐ๋ฐ
- ์ฌ์ฉ์์ ์๊ฒฝ ์์์ผ ๋ฐ ์ข ๋ฃ์ผ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ์๊ฒฝ ์ฃผ๊ธฐ ๋ฐ ํธ๋ฅด๋ชฌ ์ฌ์ดํด ์์ธก ์๊ณ ๋ฆฌ์ฆ ๊ฐ๋ฐ
- ์ค์๊ฐ ํต์
- socket.io๋ฅผ ํตํ ์ฑํ ์์คํ ๊ฐ๋ฐ
- ๋น๋๊ธฐ ์ฒ๋ฆฌ
- Message Queue ๋ผ์ด๋ธ๋ฌ๋ฆฌ Bull.js๋ฅผ ํตํ ๋น๋๊ธฐ Push Notification ๊ตฌํ
- ๋ฐฐํฌ ๋ฐ ์ธํ๋ผ
- ECS์ Dynamic Port Mapping์ ์ด์ฉํ Blue/Green ๋ฌด์ค๋จ ๋ฐฐํฌ
- Docker, Docker-compose, GitHub Actions๋ฅผ ํตํ AWS ECS ์๋ํ CI/CD ํ์ดํ๋ผ์ธ ๊ตฌ์ถ
๐ซ Contact
์ด ๋ธ๋ก๊ทธ์ ๋ชจ๋ ๊ธ์ ๊ฐ์ธ์ ์ธ ํ์ต๊ณผ ๊ฒฝํ์ ๋ฐํ์ผ๋ก ์์ฑ๋์์ต๋๋ค.