๐ E-Commerce Platform
์ํ ์กฐํ๋ถํฐ ์ฅ๋ฐ๊ตฌ๋, ์ฃผ๋ฌธยท๊ฒฐ์ , ์ฟ ํฐ ๋ฐ๊ธ๊น์ง ๊ตฌํํ ์ด์ปค๋จธ์ค ๋ฐฑ์๋ ํ๋ก์ ํธ์
๋๋ค.
๋จ์ํ API ๊ตฌํ์ ๋์ด, ๋ค์์ ์ฌ์ฉ์๊ฐ ๋์์ ์ฃผ๋ฌธํ๊ฑฐ๋ ์ฟ ํฐ์ ๋ฐ๊ธ๋ฐ์ ๋ ๋ฐ์ํ๋
๋ฐ์ดํฐ ์ ํฉ์ฑ, ๋์์ฑ, ๋ถ์ฐ ํธ๋์ญ์
๋ฐ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์ค์ ์ ์ผ๋ก ๋ค๋ค์ต๋๋ค.
-
๋์์ฑ ์ ์ด ์ ๋ต
- ์ ์ฐฉ์ ์ฟ ํฐ ๋ฐ๊ธ์๋
Redisson ๋ถ์ฐ ๋ฝ - ์์ก๊ณผ ์ฃผ๋ฌธ๋ฒํธ์๋ ์ ํฉ์ฑ์ ์ฐ์ ํ
๋น๊ด์ ๋ฝ - ์ํ ์ฌ๊ณ ์๋ ์ฑ๋ฅ์ ๊ณ ๋ คํ
๋๊ด์ ๋ฝ + ์ฌ์๋ - ๋ฐ์ดํฐ์ ์ค์๋์ ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ ๋ฐ๋ผ ์๋ก ๋ค๋ฅธ ์ ๊ธ ๋ฐฉ์์ ์ ์ฉํ์ต๋๋ค.
- ์ ์ฐฉ์ ์ฟ ํฐ ๋ฐ๊ธ์๋
-
์ฃผ๋ฌธ ๊ณผ์ ์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ
- ์ฃผ๋ฌธยท์ฌ๊ณ ยท์์กยท์ฟ ํฐ ์ฒ๋ฆฌ๋ฅผ ๋น๋๊ธฐ ์ด๋ฒคํธ๋ก ๋ถ๋ฆฌํ์ต๋๋ค.
Saga Choreography์ ๋ณด์ ํธ๋์ญ์ ์ ์ ์ฉํด ์ค๊ฐ ๋จ๊ณ ์คํจ ์ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๋๋ก ์ค๊ณํ์ต๋๋ค.- ๋ฉฑ๋ฑ์ฑ ํค๋ฅผ ์ฌ์ฉํด ์ค๋ณต ์ฃผ๋ฌธ๊ณผ ์ค๋ณต ๊ฒฐ์ ๋ฅผ ๋ฐฉ์งํ์ต๋๋ค.
-
์กฐํ ์ฑ๋ฅ ๊ฐ์
- Redis ์บ์, DB ์ธ๋ฑ์ค ๋ฐ
EntityGraph๋ฅผ ์ ์ฉํ์ต๋๋ค. - N+1 ๋ฌธ์ ๋ฅผ ์ ๊ฑฐํด ์กฐํ ์ฟผ๋ฆฌ๋ฅผ
21ํ โ 1ํ๋ก ์ค์์ต๋๋ค. - ๋ถํ ํ
์คํธ ๊ธฐ์ค ์ ์ฒด ์ฒ๋ฆฌ๋์
60 TPS โ 600 TPS๋ก ๊ฐ์ ํ์ต๋๋ค.
- Redis ์บ์, DB ์ธ๋ฑ์ค ๋ฐ
-
ํ ์คํธ ๋ฐ ์ฑ๋ฅ ๊ฒ์ฆ
- Testcontainers ๊ธฐ๋ฐ์ผ๋ก ์ค์ MySQLยทRedis ํ๊ฒฝ์์ ํตํฉ ํ ์คํธ๋ฅผ ์ํํ์ต๋๋ค.
- JMeter์ k6๋ก ์ฟ ํฐ ๋ฐ๊ธ, ์ฃผ๋ฌธ ์์ฑ ๋ฐ ์ํ ์กฐํ ์๋๋ฆฌ์ค๋ฅผ ๊ฒ์ฆํ์ต๋๋ค.
- 1,000๋ช ์ ๋์ ์์ฒญ์์๋ ํ์ ๋ ์ฟ ํฐ 100๊ฐ๋ง ๋ฐ๊ธ๋๋ ๊ฒ์ ํ์ธํ์ต๋๋ค.
์ด๋ ฅ์์ ์ฑ์ฉ๊ณต๊ณ ๋ฅผ ๋ถ์ํ์ฌ ์ง์์์ ์ง๋ฌด ์ ํฉ๋์ ๋ณด์์ ์ ์ ๊ณตํ๋ AI ๊ธฐ๋ฐ ์๋น์ค
Team Project ยท Backend Developer
PDF ์ด๋ ฅ์์ URLยทํ
์คํธยท์ด๋ฏธ์ง ํํ์ ์ฑ์ฉ๊ณต๊ณ ๋ฅผ ์์งํ๊ณ ,
Gemini๋ฅผ ํ์ฉํด ์ฑ์ฉ ์๊ฑด๋ณ ์ถฉ์กฑ๋์ ์ด๋ ฅ์ ๊ฐ์ ๋ฐฉํฅ์ ์์ฑํ๋ ๋ฐฑ์๋ ์์คํ
์
๋๋ค.
- Spring Boot ํ๋ก์ ํธ ์ด๊ธฐ ๊ตฌ์กฐ์ ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ฑ
- ๊ณตํต API ์๋ต, ์ค๋ฅ ์ฝ๋, ์ฌ์ฉ์ ์ ์ ์์ธ ๋ฐ ์ ์ญ ์์ธ ์ฒ๋ฆฌ ๊ตฌํ
- Gemini ๊ธฐ๋ฐ ์ด๋ ฅ์โ์ฑ์ฉ๊ณต๊ณ ๋ถ์ ๋ฐ ์ฌ๋ถ์ API ๊ตฌํ
- PDF ์ด๋ ฅ์ ํ ์คํธ ์ถ์ถ ๋ฐ ์ ํจ์ฑ ๊ฒ์ฆ
- URL ํฌ๋กค๋ง, ์ง์ ์ ๋ ฅ ํ ์คํธ, ๊ณต๊ณ ์ด๋ฏธ์ง OCR์ ์ง์ํ๋ ์ ๋ ฅ ํ์ดํ๋ผ์ธ ๊ตฌํ
- ๋ถ์ ๊ฒฐ๊ณผ์ ์ฑ์ฉ ์๊ฑด๋ณ ํ๊ฐ๋ฅผ JPA ์ํฐํฐ๋ก ์ค๊ณํ๊ณ MySQL์ ์ ์ฅ
- JUnit 5์ Mockito๋ฅผ ํ์ฉํ ๋ถ์ ์๋น์ค ๋ฐ ์์ธ ์ํฉ ํ ์คํธ ์์ฑ
-
๋ค์ํ ํํ์ ์ฑ์ฉ๊ณต๊ณ ์ ๋ ฅ ์ฒ๋ฆฌ
- ์ฑ์ฉ๊ณต๊ณ ๋ฅผ URL, ์ง์ ์ ๋ ฅํ ํ ์คํธ, ์ด๋ฏธ์ง๋ก ๋ฐ์ ์ ์๋๋ก ์ค๊ณํ์ต๋๋ค.
- URL ํฌ๋กค๋ง์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์๋ฌธ์ ์ฐ์ ์ฌ์ฉํ๋ fallback ์ ๋ต์ ์ ์ฉํ์ต๋๋ค.
- Gemini OCR๋ก ์ด๋ฏธ์ง์ ํ ์คํธ๋ฅผ ์ถ์ถํ๊ณ URLยทํ ์คํธ ๊ฒฐ๊ณผ์ ๋ณํฉํ์ต๋๋ค.
- ๋์ผํ ๊ณต๊ณ ๋ด์ฉ์ด ์ค๋ณต ์ ์ฅ๋์ง ์๋๋ก ํ๋กฌํํธ์ ๋ณํฉ ๋ก์ง์ ๊ฐ์ ํ์ต๋๋ค.
-
LLM ์๋ต์ ๋ถํ์ค์ฑ ์ ์ด
- Gemini์
response_schema๋ฅผ ์ฌ์ฉํด ์๋ต์ ์ ํด์ง JSON ๊ตฌ์กฐ๋ก ์ ํํ์ต๋๋ค. - ํ์ฌ๋ช , ํฌ์ง์ , ์ฑ์ฉ ์๊ฑด, ์ถฉ์กฑ ์ํ์ ํผ๋๋ฐฑ์ DTO๋ก ๋ณํํ๊ณ ๊ฒ์ฆํ์ต๋๋ค.
- ๋๋ฝ๋๊ฑฐ๋ ์๋ชป๋ ์๋ต์ ๊ณตํต ์์ธ๋ก ์ฒ๋ฆฌํด ๋น์ ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ฒ์ ๋ฐฉ์งํ์ต๋๋ค.
- Gemini์
-
๋จ๊ณ๋ณ AI ๋ถ์ ํ์ดํ๋ผ์ธ ์ค๊ณ
- ์ด๋ ฅ์ ์ ๋ฆฌ โ ์ฑ์ฉ๊ณต๊ณ ๊ตฌ์กฐํ โ ์๊ฑด๋ณ ์ ํฉ๋ ๋ถ์ โ ๊ฐ์ ์ฐ์ ์์ ๊ณ์ฐ โ ํผ๋๋ฐฑ ์นด๋ ์์ฑ ๋จ๊ณ๋ก ๋ถ์์ ๋ถ๋ฆฌํ์ต๋๋ค.
- ๋ถ์กฑํ ์๊ฑด์๋ ๊ธฐ๋ํจ๊ณผ์ ์์ฑ ๋์ด๋๋ฅผ ์ ์ํํ์ฌ ๊ฐ์ ์ฐ์ ์์๋ฅผ ์ ๊ณตํ์ต๋๋ค.
- ์์ ๋ ์ด๋ ฅ์๋ฅผ ๋ค์ ํ๊ฐํ ์ ์๋ ์ฌ๋ถ์ ๊ธฐ๋ฅ๊ณผ ๋ถ์ ์๋ ์ด๋ ฅ์ ๊ตฌํํ์ต๋๋ค.
-
ํ์ผ ์ ๋ ฅ ์์ ์ฑ ๊ฐํ
- ํ์ฅ์๋ง ํ์ธํ์ง ์๊ณ MIME Type, ํ์ผ ํฌ๊ธฐ, PDF ํค๋์ ์ค์ ํ์ฑ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ๊ฒ์ฆํ์ต๋๋ค.
- ์์๋๊ฑฐ๋ PDF๋ก ์์ฅ๋ ํ์ผ์ด ๋ถ์ ๊ณผ์ ์ผ๋ก ์ง์ ํ์ง ์๋๋ก ๋ฐฉ์ดํ์ต๋๋ค.
-
ํ์ ๊ธฐ๋ฐ ๋ง๋ จ
- ๊ณตํต ์๋ต ํ์๊ณผ ์ ์ญ ์์ธ ์ฒ๋ฆฌ ๊ท์น์ ๋ง๋ค์ด ํ API์ ์ผ๊ด์ฑ์ ํ๋ณดํ์ต๋๋ค.
- Gradle Wrapper, MySQL Docker Compose, ํ๊ฒฝ๋ณ Spring Profile์ ๊ตฌ์ฑํ์ต๋๋ค.
- PR ํ ํ๋ฆฟ๊ณผ ์คํยท์์ธ ์ฒ๋ฆฌยท์ปค๋ฐ ๊ท์น ๋ฌธ์๋ฅผ ์์ฑํด ํ์ ๊ธฐ์ค์ ์ ๋ฆฌํ์ต๋๋ค.


