Post

🎱 챗봇 μ•„ν‚€ν…μ²˜μ— λŒ€ν•΄ μ•Œμ•„λ³΄μž ~

🎱 챗봇 μ•„ν‚€ν…μ²˜μ— λŒ€ν•΄ μ•Œμ•„λ³΄μž ~

πŸ–€ Intro

이제 챗봇 개발이 거의 마무리 단계에 μ ‘μ–΄λ“€μ—ˆμœΌλ―€λ‘œβ€¦.λ‚΄κ°€ μ§  μ•„ν‚€ν…μ²˜μ— λŒ€ν•΄μ„œ μ•Œμ•„λ³΄κ³ μž ν•œλ‹€. 겸사겸사 둜직 μ΄μƒν•œ λΆ€λΆ„ 있으면 μ’€ κ³ μΉ˜κΈ°λ„ ν•˜κ³ ,

일단은 λΆ€νŠΈ μ„œλ²„ λ°±μ—”λ“œ λ‘œμ§μ„ μ‚΄νŽ΄λ³΄κΈ° 전에, λ‚΄κ°€ μ§  μš°λ¦¬νŒ€ μ„œλ²„ μ•„ν‚€ν…μ²˜μ— λŒ€ν•΄ μ•Œμ•„λ³΄λ„λ‘ ν•˜μž!

🩢 Start

μ„œλ²„ μ•„ν‚€ν…μ²˜ μ†Œκ°œν•˜κΈ°~

이번 ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ 개인적으둜 κ°€μž₯ 많이 μ‹ κ²½μΌλ˜ 뢀뢄이기도 ν•˜λ‹€.

μ„œλ²„κ°„μ˜ μ±…μž„ μ˜μ—­μ„ λͺ…ν™•νžˆ ν•˜κ³ , μ„œλ²„λ₯Ό statelessν•˜κ²Œ μœ μ§€ν•˜λ„λ‘ ν•˜κΈ° μœ„ν•΄ μ˜¨κ°– λ…Έλ ₯을 λ‹€ λ“€μ˜€λ˜κ²ƒλ„ κ²°κ΅­ 클린~ν•œ μ•„ν‚€ν…μ²˜λ₯Ό μœ μ§€ν•˜λ„λ‘ ν•˜κΈ° μœ„ν•¨μ΄ μ»Έλ‹€.

μš°μ„  ν˜„μž¬ 우리 ν”„λ‘œμ νŠΈμ˜ μ„œλ²„ μ•„ν‚€ν…μ²˜λ₯Ό μ‚΄νŽ΄λ³΄μž.

image.png

이쀑 λ‚΄κ°€ λ§‘μ•˜λ˜ 뢀뢄은 Recodash의 [챗봇] νŒŒνŠΈμ΄λ‹€.

μš°μ„  μ„œλ²„κ°€ 두 개둜 λ‚˜λˆ μ ΈμžˆκΈ°μ—..μ–΄λ–€ 도메인이 μ–΄λ–€ μ„œλ²„ νŒŒνŠΈμ—μ„œ 무슨 일을 μˆ˜ν–‰ν•˜λŠ”μ§€λ₯Ό λͺ…ν™•νžˆ ν•΄μ•Όλ§Œ ν–ˆλ‹€. λ‹¨μˆœν•œ 기술 λ‚˜μ—΄μ‹ μ•„ν‚€ν…μ²˜λŠ” μ†”μ§νžˆ μ•„ν‚€ν…μ²˜μ μœΌλ‘œ μ˜λ―Έκ°€ μ—†λ‹€κ³  μƒκ°ν•˜κΈ°μ—β€¦

메인 도메인 (우리 νŒ€ λ‹¨μœ„μ΄κΈ°λ„ ν•˜λ‹€.)인 Shorts & Recodash (DATA) & Pay둜 λ‚˜λˆ μ„œ κ΅¬μ„±ν•˜μ˜€μœΌλ©°, Data Server의 경우 Recodash νŒ€λ§Œμ΄ μ‚¬μš©ν•˜κΈ°μ— λ‹€μŒκ³Ό 같이 λΆ„λ¦¬ν•΄μ„œ κ΅¬μ„±ν•˜μ˜€λ‹€.

Redisμ—­μ‹œ, Recodash νŒ€μ˜ λ‚˜λ§Œ μ‚¬μš©ν•˜λ―€λ‘œ ν™”μ‚΄ν‘œλ₯Ό λͺ…ν™•ν•˜κ²Œ μ—°κ²°ν•΄λ‘μ—ˆμœΌλ©°, DB와 Serverλ₯Ό λͺ…ν™•νžˆ κ΅¬λΆ„ν•΄λ‘μ—ˆλ‹€.

λ˜ν•œ, EC2κ°€ μ•„λ‹Œ κ°•μ‚¬λ‹˜ μ„œλ²„μ— 우리 ν”„λ‘œμ νŠΈλ₯Ό λ„μ›Œμ•Ό ν•˜κΈ°μ— Docker둜 μ»¨ν…Œμ΄λ„ˆλ§μ„ ν•΄λ‘μ—ˆλ‹€. (사싀 이 뢀뢄은 μ°¨ν›„ λ°”λ€” μˆ˜λ„ μžˆμ„ 것 κ°™λ‹€..)

λ§ˆμ§€λ§‰μœΌλ‘œ Auth의 κ²½μš°λŠ” 인증 / 인가 μ„Ήμ…˜μ„ λΆ„λ¦¬ν•΄λ‘μ—ˆκ³ , Auth의 경우 λͺ¨λ“  도메인이 곡용으둜 μ‚¬μš©ν•˜λŠ” 뢀뢄이기에 λ³„λ„μ˜ λ„λ©”μΈμœΌλ‘œ λΆ„λ¦¬ν•΄λ‘μ—ˆλ‹€.

이λ₯Ό 톡해 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§λ“€κ³Ό 기술 λ‘œμ§μ„ λͺ…ν™•νžˆ λΆ„λ¦¬ν•΄λ‘μ—ˆλ‹€.

μ—¬κΈ°μ„œ 더 λ°œμ „ν•  μˆ˜λŠ” μ—†μ„κΉŒ?

λ‚΄κ°€ 아쉬움을 느꼈던 뢀뢄은 이것이닀.

μ§€κΈˆ 우리 νŒ€μ˜ κ²½μš°λŠ” λ‘œλ“œλ°ΈλŸ°μ‹± & CI/CD μžλ™ 배포 등을 ν•˜μ§€ μ•Šμ„ κ³„νšμ΄λΌκ³  ν•΄μ„œβ€¦μ΄ 뢀뢄에 λŒ€ν•œ νŒŒνŠΈκ°€ λΉ μ ΈμžˆλŠ”κ²Œ μƒλ‹Ήνžˆ 큰 μ•„μ‰¬μ›€μœΌλ‘œ λ‚¨μ•˜λ‹€.

κ·Έλž˜μ„œ 이 νŒŒνŠΈλ“€μ„ μΆ”κ°€ν•œ μ˜ˆμ‹œ μ•„ν‚€ν…μ²˜λ‘œ 우리 μ•„ν‚€ν…μ²˜λ₯Ό ν•œ 단계 λ°œμ „? μ‹œμΌœλ³΄κ³ μž ν•œλ‹€.

λ‘œλ“œλ°ΈλŸ°μ‹±μ΄ 뭔데?

그전에 μΆ”κ°€ν•  μš”μ†Œλ“€μ— λŒ€ν•œ κ°„λž΅ν•œ κ°œλ…μ„ μ•Œμ•„λ³΄μž.

λ¨Όμ € λ‘œλ“œλ°ΈλŸ°μ‹±λΆ€ν„°β€¦

λ‘œλ“œλ°ΈλŸ°μ‹±μ΄λž€? λ“€μ–΄μ˜€λŠ” λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½μ„ μ—¬λŸ¬ μ„œλ²„μ— λΆ„μ‚°μ‹œμΌœ 단일 μ„œλ²„μ˜ λΆ€ν•˜λ₯Ό 쀄이고, μ‹œμŠ€ν…œ μ „μ²΄μ˜ μ„±λŠ₯κ³Ό κ°€μš©μ„±μ„ ν–₯μƒμ‹œν‚€λŠ” κΈ°μˆ μ„ μ˜λ―Έν•œλ‹€.

핡심 λͺ©ν‘œλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

1. λΆ€ν•˜ λΆ„μ‚°

  • ν•œ μ„œλ²„μ— λͺ¨λ“  μš”μ²­μ΄ λͺ°λ¦¬λŠ” 것을 λ°©μ§€ν•œλ‹€.

  • 각 μ„œλ²„κ°€ μ μ ˆν•œ μ–‘μ˜ μž‘μ—…μ„ μ²˜λ¦¬ν•˜λ„λ‘ λΆ„λ°°ν•œλ‹€.

2. κ³ κ°€μš©μ„±

  • ν•œ μ„œλ²„κ°€ λ‹€μš΄ λ˜μ–΄λ„ μ„œλΉ„μŠ€ 쀑단이 없도둝 ν•œλ‹€.

  • 24/7 μ„œλΉ„μŠ€ 운영이 κ°€λŠ₯ν•˜λ‹€. 즉, μ—°μ€‘λ¬΄νœ΄λ‘œ μ„œλΉ„μŠ€κ°€ μ€‘λ‹¨λ˜μ§€ μ•ŠλŠ”λ‹€.

3. ν™•μž₯μ„±

  • νŠΈλž˜ν”½ μ¦κ°€μ‹œ μƒˆλ‘œμš΄ μ„œλ²„λ§Œ μΆ”κ°€ν•˜λ©΄ λœλ‹€. λ‘œλ“œλ°ΈλŸ°μ„œκ°€ μΆ”κ°€λœ μ„œλ²„λ‘œ μ•Œμ•„μ„œ νŠΈλž˜ν”½ 뢄산을 ν•΄μ£ΌκΈ° λ•Œλ¬Έμ΄λ‹€.

  • μˆ˜ν‰μ  ν™•μž₯이 μš©μ΄ν•˜λ‹€. 즉, μ„œλ²„ 개수만 μΆ”κ°€ν•˜λ©΄ λ˜λŠ” 것이닀.

MSAμ—μ„œμ˜ λ™μž‘ 원리

1
2
3
API Gateway β†’ Load Balancer β†’ Auth Service (3λŒ€)
             β†’ Load Balancer β†’ User Service (2λŒ€)  
             β†’ Load Balancer β†’ Payment Service (4λŒ€)

μ΄λŸ°μ‹μœΌλ‘œ, 각 μ„œλΉ„μŠ€ λ§ˆλ‹€ 독립적인 λ‘œλ“œ λ°ΈλŸ°μ„œ κ΅¬μ„±μœΌλ‘œ μ„œλΉ„μŠ€ ν™•μž₯이 μš©μ΄ν•΄μ§€κ³ , μž₯μ•  격리가 κ°€λŠ₯ν•΄μ§€κ³ , 결과적으둜 μ„±λŠ₯ μ΅œμ ν™”λ₯Ό ν•  수 μžˆλŠ” 것이닀.

그럼 우리 μ„œλΉ„μŠ€μ—μ„œ λ‘œλ“œλ°ΈλŸ°μ‹±μ„ λ„μž…ν•΄μ„œ μ–»λŠ” 이점은 뭐지?

1. λ™μ‹œ μ‚¬μš©μž 처리 λŠ₯λ ₯이 ν–₯μƒλœλ‹€.

ν˜„μž¬ κ΅¬μ‘°μ—μ„œλŠ”, μ‚¬μš©μž 100λͺ…이 λ™μ‹œ μ±„νŒ…μ„ μ§„ν–‰ν•  경우 응닡 속도가 μ €ν•˜λ˜μ§€λ§Œ, λ‘œλ“œλ°ΈλŸ°μ‹±μœΌλ‘œ μ„œλ²„λ₯Ό λΆ„μ‚°ν•œλ‹€λ©΄, 각 μ„œλ²„μ— μš”μ²­μ΄ λΆ„μ‚°λ˜μ–΄ λΉ λ₯Έ 응닡이 κ°€λŠ₯ν•΄μ§„λ‹€.

2. LLM API 호좜 λΆ€ν•˜ λΆ„μ‚°

ν˜„μž¬λŠ” FAST API μ„œλ²„ 1λŒ€κ°€ λͺ¨λ“  LLM μš”μ²­μ„ μ²˜λ¦¬ν•œλ‹€. 즉, LLM API 응닡 λŒ€κΈ° μ‹œκ°„λ™μ•ˆ λ‹€λ₯Έ μ‚¬μš©μžκ°€ λŒ€κΈ°ν•˜κ²Œ λ˜λŠ”λ°, 이λ₯Ό μ—¬λŸ¬λŒ€λ‘œ λΆ„μ‚°ν•˜λ©΄ 전체적인 챗봇 응닡 속도λ₯Ό κ°œμ„ ν•  수 μžˆλ‹€.

3. Redis μ—°κ²° λΆ€ν•˜ λΆ„μ‚°

ν˜„μž¬λŠ” Spring Boot μ„œλ²„ 1λŒ€κ°€ λͺ¨λ“  Redis 캐싱을 λ‹΄λ‹Ήν•˜λŠ” ꡬ쑰인데, λ‘œλ“œλ°ΈλŸ°μ‹±μ„ ν•˜κ²Œ 되면 μ—¬λŸ¬λŒ€μ˜ μ„œλ²„κ°€ Redis λΆ€ν•˜λ₯Ό λΆ„μ‚°ν•˜κΈ° λ•Œλ¬Έμ— μ±— ν”Œλ‘œμš° 관리가 더 μ•ˆμ •μ μ΄κ²Œ λœλ‹€.

이 외에도, 특히 금육 μ„œλΉ„μŠ€μ˜ κ²½μš°λŠ” μž₯μ•  격리가 맀우 μ€‘μš”ν•œλ° λ‘œλ“œλ°ΈλŸ°μ‹±μ„ μ΄μš©ν•˜λ©΄ 단일 μ„œλ²„ ν•΄ν‚Ήμ‹œμ—λ„ λ‹€λ₯Έ μ„œλ²„λ“€μ΄ 정상 μš΄μ˜λ˜μ–΄ νŠΈλž˜ν”½ λΆ„μ‚°μœΌλ‘œ ν•΄ν‚Ή 곡격 μ™„ν™” νš¨κ³Όλ„ μžˆλ‹€κ³  ν•œλ‹€.

그럼 CI/CD μžλ™ λ°°ν¬λŠ” 뭔데?

CI (Continuous Integration) : 지속적 톡합

  • κ°œλ°œμžλ“€μ΄ μž‘μ„±ν•œ μ½”λ“œλ₯Ό μžλ™μœΌλ‘œ ν†΅ν•©ν•˜κ³  ν…ŒμŠ€νŠΈν•˜λŠ” κ³Όμ •

CD (Continuous Deployment/Delivery) : 지속적 배포

  • ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•œ μ½”λ“œλ₯Ό μžλ™μœΌλ‘œ 운영 μ„œλ²„μ— λ°°ν¬ν•˜λŠ” κ³Όμ •

즉, μ†μœΌλ‘œ 직접 배포λ₯Ό ν•  ν•„μš”κ°€ 없이, μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ³  λ°˜μ˜ν•˜λŠ” 것 만으둜 μžλ™μœΌλ‘œ μ„œλΉ„μŠ€ μž¬μ‹œμž‘μ΄ λ˜λŠ” 것을 μ˜λ―Έν•œλ‹€. 즉, μžλ™ λΉŒλ“œ & μžλ™ 배포λ₯Ό λ§ν•œλ‹€.

λ‚΄κ°€ github λΈ”λ‘œκ·Έμ— 글을 μˆ˜μ •ν•΄μ„œ 올리면 μžλ™μœΌλ‘œ μ„œλ²„μ— λ°°ν¬λ˜λŠ” 것 μ—­μ‹œ github action이 CI/CDλ₯Ό ν•΄μ£Όκ³  있기 λ•Œλ¬Έμ΄λ‹€.

μ•„ν‚€ν…μ²˜ λ¦¬νŒ©ν„°λ§

image.png

λ§ν–ˆλ˜ μš”μ†Œλ₯Ό μΆ”κ°€ν•΄μ„œ λ‹€μŒκ³Ό 같이 μ•„ν‚€ν…μ²˜λ₯Ό λ¦¬νŒ©ν„°λ§ ν•˜μ˜€λ‹€! (참고둜 λ‚΄κ°€ 개발 맑은건 색칠도 ν•΄μ€Œ)

CI/CD 같은 κ²½μš°λŠ” Repo λ‹¨μœ„λ‘œ μ—°κ²°λ˜κΈ°μ—, λ‹€μŒκ³Ό 같이 μ—°κ²°ν•΄μ£Όμ—ˆλ‹€.

μ™„μ „νžˆ λ…λ¦½λœ λ„λ©”μΈμœΌλ‘œ κ΅¬μ„±λœ ꡬ쑰가 μ•„λ‹ˆλΌμ„œ μ’€ 아쉽긴 ν•˜λ‹€β€¦.λ‹€μŒμ—λŠ” 이번 ν”„λ‘œμ νŠΈμ—μ„œ 배운 지식을 λ°”νƒ•μœΌλ‘œ κΌ­ MSA에 도전해보겠닀!!!!!

This post is licensed under CC BY 4.0 by the author.