μ§§μ μΌμ μ λ§₯λ½μ μ΄ν΄νκ³ , μ€μ λ‘ νμν ν μΌμ μ μνλ κ΄κ³ κΈ°λ° μΌμ κ΄λ¦¬ μλΉμ€
TRYNAλ μ¬μ©μκ° μ λ ₯ν μ§§μ μΌμ μ λ§₯λ½μ μ΄ν΄νκ³ , μΌμ μ νμ μ€μ λ‘ νμν ν μΌμ μ μνλ μΌμ κ΄λ¦¬ μλΉμ€μ λλ€.
κ°μ "νμ"λΌλ μΌμ μ΄λΌλ μ 곡 νν νμμ λμ리 λ€νΈμνΉ νμλ μ¬μ©μκ° μ€λΉν΄μΌ νλ μΌμ΄ λ€λ¦ λλ€.
TRYNAλ μ΄λ¬ν μ°¨μ΄λ₯Ό λ¨μ ν€μλ λ§€μΉμΌλ‘ μ²λ¦¬νμ§ μμ΅λλ€.
μΌμ κ³Ό νλ μ¬μ΄μ λ§₯λ½ κ΄κ³λ₯Ό ꡬ쑰ννκ³ , κ΄κ³ κΈ°λ°μΌλ‘ ν보λ₯Ό νμν
λ€ μ¬μ©μμ κΈ°μ‘΄ μ 보μ DB μ 보λ₯Ό λ°νμΌλ‘ μ€μ λ‘ νμν ν μΌλ§
μ λ³ν©λλ€.
μ¬μ©μλ μΆμ²λ ν μΌμ κ·Έλλ‘ μ¬μ©ν μλ μκ³ , νμ μλ νλͺ©μ μμ νκ±°λ μλ‘μ΄ νλͺ©μ μ§μ μΆκ°ν μλ μμ΅λλ€.
| BE | BE | BE | BE | BE |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
| κΉνν @taehyeon1998 |
κΉνλ¦Ό @taerimiiii |
μ€μλ¦Ό @yeremeee |
μλν @hoondongseo |
μ λ€ν @Ubokchi |
| Type | Tool |
|---|---|
| Language | |
| Framework | |
| ORM | |
| Security | |
| Database | |
| API Documentation | |
| In-Memory Store | |
| Build Tool | |
| Version Control | |
| Collaboration |
| λ΄λΉ μμ | λ΄λΉμ | λ΄λΉ κΈ°λ₯ |
|---|---|---|
| μΈμ¦/μ¬μ©μ | μ¬μ΄λ¨Ό/μλν | νμΒ·λΉνμ μΈμ¦, μ¬μ©μ κ³μ κ΄λ¦¬, μΈλΆμΊλ¦°λ μ°λ |
| μΌμ /μΊλ¦°λ | κ³€/κΉνν | μΌμ CRUD, μΊλ¦°λ μ‘°ν, μμ°μ΄ μΌμ μ λ ₯ |
| λΆμ/μΆμ² | λ λ―Έ/μ€μλ¦Ό | μΌμ λ§₯λ½ λΆμ, κ΄κ³ κΈ°λ° μΆμ², LLM ν보 μ μ |
| μ€λΉ/μ€ν νλͺ© | μ 볡μΉ/μ λ€ν | μΆμ² νλͺ© κ΄λ¦¬, νμ€ν¬ μλ£ μ²λ¦¬, λΌλ²¨, μΌμ Β·μΊλ¦°λ μ°λ |
| μλ¦Ό/μΈλΆμ°λ/κ³΅ν΅ | λΌν¬/κΉνλ¦Ό | μΌμ λ° μ€λΉ/μ€ννλͺ© μλ¦Ό, μΈνλΌ |
μ¬μ©μ μΌμ μ
λ ₯
β
βΌ
Rule Based Parser + Kiwi
β
β μΌμ μ 보 ꡬ쑰ν
βΌ
Neo4j
β
β κ΄κ³ κΈ°λ° ν μΌ ν보 νμ
βΌ
Upstage LLM
β
β μ€λ³΅ ν΅ν© λ° λΆνμν ν보 μ κ±°
βΌ
μ¬μ©μ λ§μΆ€ ν μΌ μ μ
μ¬μ©μκ° μ§§μ μΌμ μ λͺ©μ μ λ ₯ν©λλ€.
νΈλΌμ΄λ μ 체 λ―Έν
Rule Based Parserμ Kiwiλ₯Ό μ¬μ©νμ¬ μ§§μ μΌμ μ μ 보λ₯Ό ꡬ쑰νν©λλ€.
νΈλΌμ΄λ β νλ‘μ νΈ λλ κ·Έλ£Ή λ§₯λ½
λ―Έν
β μΌμ μ ν
μ 체 β λ―Έν
μ λ²μ
ꡬ쑰νλ λ°μ΄ν°λ λ€μ λ¨κ³μ μΆμ² κ³Όμ μμ νμ©λ©λλ€.
{
"title": "νΈλΌμ΄λ μ 체 λ―Έν
",
"eventType": "meeting",
"contextTags": [
"group_meeting",
"people_meeting"
],
"project": "tryna",
"date": null,
"time": null,
"location": null
}ꡬ쑰νλ μΌμ μ 보λ Neo4j κ·Έλν λ°μ΄ν°λ² μ΄μ€λ‘ μ λ¬λ©λλ€.
TRYNAλ μΌμ κ³Ό νλ μ¬μ΄μ κ΄κ³λ₯Ό κ·Έλνλ‘ κ΄λ¦¬νκ³ , νμ¬ μΌμ κ³Ό μ°κ²°λ ν μΌ ν보λ₯Ό νμν©λλ€.
μλ₯Ό λ€μ΄ λ―Έν μΌμ μμλ λ€μκ³Ό κ°μ νλ³΄κ° νμλ μ μμ΅λλ€.
μ건 μ 리
곡μ μλ£ μ€λΉ
νμλ‘ μ€λΉ
μ₯μ νμΈ
μ΄λ μκ° νμΈ
κ΅ν΅νΈ νμΈ
μλΉ ν보 μ°ΎκΈ°
μΉ΄ν ν보 μ°ΎκΈ°
μ°Έμμ νμΈ
κ·Έλνμμ νμν λͺ¨λ ν보λ₯Ό μ¬μ©μμκ² κ·Έλλ‘ λ³΄μ¬μ£Όμ§λ μμ΅λλ€.
Upstage LLMμ΄ λ€μ μ 보λ₯Ό λ°νμΌλ‘ ν보λ₯Ό μ μ ν©λλ€.
- μ¬μ©μκ° μ λ ₯ν μΌμ μ 보
- μ¬μ©μκ° κΈ°μ‘΄μ μ λ ₯ν μ 보
- DBμ μ μ₯λ μ 보
- Neo4jμμ νμλ ν μΌ ν보
μ΄ κ³Όμ μμ μλ―Έκ° κ²ΉμΉλ νλͺ©μ λ¬Άκ³ , νμ¬ μΌμ μ λΆνμν νλͺ©μ μ κ±°ν©λλ€.
μ΅μ’ μ μΌλ‘ μ¬μ©μκ° μ€μ λ‘ νμ©ν κ°λ₯μ±μ΄ λμ λͺ κ°μ ν μΌλ§ μ μν©λλ€.
β λ―Έν
μ건 μ 리νκΈ°
β μ₯μ λ° μ΄λμκ° νμΈ
β μ£Όλ³ μλΉ ν보 μ μ
μΆμ² κ²°κ³Όλ μλμΌλ‘ κ°μ μ μ₯λμ§ μμ΅λλ€.
μ¬μ©μλ μΆμ²λ ν μΌμ μμ λ‘κ² μμ ν μ μμ΅λλ€.
- μΆμ² νλͺ© μ¬μ©
- νμ μλ νλͺ© μμ
- μλ‘μ΄ ν μΌ μ§μ μΆκ°
TRYNAλ μΆμ²μ μ λ΅μΌλ‘ μ μνλ κ²μ΄ μλλΌ, μ¬μ©μκ° λΆλ΄ μμ΄ λ°μλ€μ΄κ³ μμ ν μ μλ κ°λ²Όμ΄ μ μμΌλ‘ μ 곡ν©λλ€.
| Step | Technology | Responsibility |
|---|---|---|
| 1 | Rule Based Parser | μΌμ μμ κ·μΉ κΈ°λ° μ 보 μΆμΆ |
| 2 | Kiwi | νκ΅μ΄ ννμ λΆμ λ° μΌμ λ§₯λ½ κ΅¬μ‘°ν |
| 3 | Neo4j | μΌμ κ³Ό νλμ κ΄κ³λ₯Ό κΈ°λ°μΌλ‘ ν보 νμ |
| 4 | Upstage LLM | μ€λ³΅ ν보 ν΅ν© λ° λΆνμν ν보 μ κ±° |
| 5 | TRYNA | μ΅μ’ ν μΌμ μμ κ°λ₯ν ννλ‘ μ 곡 |
- μΊλ¦°λ λ©μΈ μ‘°ν
- μΌμ μμΈ μ‘°ν
- μΌμ μμ±
- μΌμ μμ
- μΌμ μμ
- μ¬μ©μλ³ μΌμ κ΄λ¦¬
- μ§§μ μμ°μ΄ μΌμ μ λ ₯
- μΌμ μ ν λ° λ§₯λ½ λΆμ
- νλ‘μ νΈ λ° κ·Έλ£Ή μ 보 μΆμΆ
- λ μ§, μκ°, μ₯μ μ 보 ꡬ쑰ν
- μΌμ κ³Ό νλ μ¬μ΄μ κ΄κ³ λͺ¨λΈλ§
- Neo4j κΈ°λ° κ΄λ ¨ ν μΌ ν보 νμ
- μΌμ λ§₯λ½μ λ°λ₯Έ ν보 νμ₯
- λ¨μ ν€μλ λ§€μΉμ λμ΄μ κ΄κ³ κΈ°λ° μΆμ²
- μ¬μ©μμ κΈ°μ‘΄ μ 보 λ°μ
- DB μ 보 κΈ°λ° ν보 μ μ
- μλ―Έκ° κ²ΉμΉλ μΆμ² ν΅ν©
- λΆνμν μΆμ² μ κ±°
- μ€μ νμ© κ°λ₯μ±μ΄ λμ ν μΌ μ λ³
- μΆμ²λ ν μΌ μ¬μ©
- λΆνμν μΆμ² μμ
- ν μΌ μ§μ μΆκ°
- μΆμ² κ²°κ³Ό μμ
- μ¬μ©μ λ³κ²½ μ 보 κΈ°λ‘
- νμ μ¬μ©μ μΈμ¦ λ° μλ³
- λΉνμ μ¬μ©μ μλ³
- μΈμ¦ μ 보λ₯Ό κΈ°λ°μΌλ‘ ν μΌμ μ‘°ν λ° μ μ₯
- νμΒ·λΉνμ κ³΅ν΅ μΌμ API μ¬μ©
Client
β
βΌ
Controller
β
βΌ
Service
β
βββ μΌμ κ΄λ¦¬
βββ μ¬μ©μ κ΄λ¦¬
βββ μΆμ² κ²°κ³Ό κ΄λ¦¬
βββ νΌλλ°± κ΄λ¦¬
β
βββββββββββββββββ
βΌ βΌ
Relational DB Recommendation Pipeline
β
βΌ
Rule Based Parser
+ Kiwi
β
βΌ
Neo4j
β
βΌ
Upstage LLM
β
βΌ
ν μΌ μ μ
νλ‘μ νΈμ κΈ°λ³Έ ν¨ν€μ§ ꡬ쑰λ globalκ³Ό domainμΌλ‘ ꡬλΆν©λλ€.
src/
βββ main/
βββ java/
β βββ ...
β βββ global/
β β βββ config/
β β βββ exception/
β β βββ response/
β β βββ security/
β β βββ util/
β β
β βββ domain/
β βββ {domain}/
β βββ controller/
β β βββ docs/
β βββ service/
β βββ repository/
β βββ entity/
β βββ enums/
β βββ dto/
β
βββ resources/
βββ application.yaml
βββ application-local.yaml
βββ application-prod.yaml
βββ application-test.yaml
κ° κ³μΈ΅μ λ€μ μν μ λ΄λΉν©λλ€.
Layer Responsibility
Controller μμ² λ° μλ΅ μ²λ¦¬ ControllerDocs Swagger API λ¬Έμ μμ± Service λΉμ¦λμ€ λ‘μ§ λ° νΈλμμ μ²λ¦¬ Repository λ°μ΄ν° μ κ·Ό Entity λλ©μΈ λ°μ΄ν° νν DTO API μμ² λ° μλ΅ λ°μ΄ν° μ λ¬
TRYNAλ μΈμ¦ μ 보λ₯Ό κΈ°λ°μΌλ‘ μ¬μ©μλ₯Ό μλ³ν©λλ€.
Authorization: Bearer {token}νμκ³Ό λΉνμ λͺ¨λ μΈμ¦ μ 보λ₯Ό ν΅ν΄ μ¬μ©μλ₯Ό μλ³νλ©°, μΌμ APIμμλ μΈμ¦λ μ¬μ©μ μ 보λ₯Ό κΈ°μ€μΌλ‘ λ°μ΄ν°λ₯Ό μ‘°ννκ³ μ μ₯ν©λλ€.
API κ²½λ‘λ λ€μ νμμ μ¬μ©ν©λλ€.
/api/v1/{resources}
리μμ€λͺ μ 볡μν λͺ μ¬λ₯Ό μ¬μ©νλ©°, λμμ URLμ΄ μλ HTTP Methodλ‘ ννν©λλ€.
Method Purpose
GET μ‘°ν POST μμ± PATCH μΌλΆ μμ DELETE μμ
{
"success": true,
"code": "COMMON_200",
"message": "μμ²μ μ±κ³΅νμ΅λλ€.",
"data": {}
}{
"success": false,
"code": "COMMON_400",
"message": "μλͺ»λ μμ²μ
λλ€.",
"data": null
}μλ΅ λ°μ΄ν°κ° μλ κ²½μ° dataλ nullλ‘ λ°νν©λλ€.
API λ¬Έμλ Swaggerμ OpenAPIλ₯Ό κΈ°λ°μΌλ‘ κ΄λ¦¬ν©λλ€.
μ€μ μμ²μ μ²λ¦¬νλ Controllerμ API λ¬Έμλ₯Ό λ΄λΉνλ ControllerDocsλ₯Ό λΆλ¦¬ν©λλ€.
domain/
βββ {domain}/
βββ controller/
βββ XxxController
βββ docs/
βββ XxxControllerDocs
APIκ° λ³κ²½λλ©΄ Controllerμ ControllerDocsλ₯Ό ν¨κ» μμ ν©λλ€.
νκ²½λ³ μ€μ νμΌμ λ€μκ³Ό κ°μ΄ κ΄λ¦¬ν©λλ€.
application.yaml # κ³΅ν΅ μ€μ
application-local.yaml # λ‘컬 νκ²½
application-prod.yaml # μ΄μ νκ²½
application-test.yaml # ν
μ€νΈ νκ²½
λ―Όκ° μ 보λ νκ²½ λ³μ λλ λ³λμ λ‘컬 μ€μ νμΌμ ν΅ν΄ κ΄λ¦¬νλ©° Gitμ 컀λ°νμ§ μμ΅λλ€.
β οΈ .env, μΈμ¦ μ 보, API Key, λ°μ΄ν°λ² μ΄μ€ λΉλ°λ²νΈ λ±μ λ―Όκ° μ 보λ μ μ₯μμ 컀λ°νμ§ μμ΅λλ€.
type/nickname/issueNumber-task
feat/nickname/1-create-event
bug/nickname/2-calendar-response
docs/nickname/3-api-docs
type: subject
feat: μΌμ μμ± API μΆκ°
bug: μΊλ¦°λ μ‘°ν μ€λ₯ μμ
docs: README μμ±
refactor: μΌμ μλΉμ€ ꡬ쑰 κ°μ
feat/* ββ
bug/* β
docs/* β
style/* βββ> develop ββ> main
refactor/* β
chore/* ββ
hotfix/* ββ> main
ββ> develop
main λΈλμΉμλ μ§μ μμ
νμ§ μμΌλ©°, PRμ AI μ½λ 리뷰 νμΈ
ν λ³ν©ν©λλ€.





