π§βπ» κ°λ° κΈ°κ° : 2023.05.19 ~ 2023.06.30
π μλΉμ€ URL : https://www.study-hub.shop π νν΄14κΈ° μ΅κ³ μ μΈκΈ° νλ‘μ νΈμ μμ!
π§βπ» νμ μ€ν°λ
- μ€ν°λλ£Έμ μ μν μ μ λ webRTCλ₯Ό νμ©νμ¬ λ³ΈμΈμ νλ©΄μ μ‘μΆνλ λμμ, λ€λ₯Έ μ μ μ 곡λΆνλ λͺ¨μ΅μ μ€μκ°μΌλ‘ νμΈ
π νμ΄λ¨Έ κΈ°λ₯ & ν΅κ³
- λ§€μΌ μμ μ κΈ°μ€μΌλ‘ DBμ μ μ₯λ κ³΅λΆ μκ°μ μ°Έμ‘°νμ¬, μΌμΌ 곡λΆμκ° λ° λμ 곡λΆμκ° νμΈ
| μ¬μ© κΈ°μ | κΈ°μ μ€λͺ |
|---|---|
| CI/CD - EC2 + Github Action & Nginx | νλ‘ νΈ νμ΄ μννκ² μμ
νκΈ° μν΄μλ μ΅λν 빨리 μλ²κ° λμμ ΈμΌ νλ€κ³ μκ°νμΌλ©°, dev branchμ μ½λκ° merge λ λλ§λ€ λ°°ν¬λ₯Ό μν΄ λ°λ³΅μ μΈ μμ μ΅μννκ³ μλ² κ°λ°μλ§ μ§μ€ν μ μλλ‘ CI/CD νκ²½μ ꡬμΆνκΈ°λ‘ κ²°μ νμμ΅λλ€. Jenkinsμ github action + EC2 λ κ°μ§ μ νμ§ μ€ GitHub Actionμ΄ GitHub μμ μ°λμ΄ νΈνκ³ λΉ λ₯Έ μκ° λ΄μ λ°°ν¬ν μ μλ μ₯μ μ΄ μμΌλ©°, GitHubμμ λ°μνλ μ΄λ²€νΈλ₯Ό μ²λ¦¬ν μ μλ€λ μ μ ν΅ν΄ ν΄λΉ μ νμ§λ₯Ό λμ νκ² λμμ΅λλ€. λν λ°°ν¬ν λλ§λ€ μλ²κ° μ μ μ€λ¨λλ μν©μ μν΄ μ μ λ€μ΄ μλΉμ€λ₯Ό μ΄μ© μ€μ μ€λ¨λλ λΆνΈν¨μ΄ μμ΄ λ¬΄μ€λ¨ λ°°ν¬μΈ Nginxλ₯Ό λμ νκ² λμμ΅λλ€. |
| OpenVidu | NλN νμ μ±ν μ ꡬννκΈ° μν΄μ μκ·Έλλ§ μλ²λ₯Ό ν΅ν΄μ P2Pλ‘ μ°κ²°νλ λ°©μκ³Ό λ―Έλμ΄ μλ²λ₯Ό λλ λ°©μμ΄ μ‘΄μ¬νλλ° P2Pλ‘ κ΅¬ννκΈ°μλ ν΄λΌμ΄μΈνΈμ λΆλ΄μ΄ λ무 ν¬λ©°, OpenVidu νλ«νΌμ μ΄μ©νμ¬ λ―Έλμ΄ μλ²λ₯Ό λ κ³Ό λμμ μκ·Έλλ§ μ²λ¦¬λ λ§‘κΈΈ μ μκΈ° λλ¬Έμ κ²°μ νκ² λμμ΅λλ€. |
| Stomp | Stomp νλ‘ν μ½μ λ©μμ§ μ μ‘μ μν νλ‘ν μ½λ‘μ¨ pub/sub κΈ°λ°μΌλ‘ λμνλ©° λ©μμ§ ν€λλ₯Ό κ°μ§κ³ μκΈ° λλ¬Έμ λ©μμ§μ μ‘μ , μμ μ λν μ²λ¦¬λ₯Ό λͺ
ννκ² μ μ ν μ μλ μ₯μ μ΄ μμ΅λλ€. μΆκ°μ μΈ μμ μμ΄ λ©μμ§ λ°ν μ μλν¬μΈνΈλ§ μ‘°μ νμ¬ μ¬μ΄ μ μ‘/μμ λν κ°λ₯νμ¬ λμ νκ² λμμ΅λλ€. |
| Oauth2 | μμ
λ‘κ·ΈμΈμ λμ
νκ² λ κ°μ₯ ν° μ΄μ λ μ¬μ©μμ νΈμμ± μ¦λλ₯Ό μν΄μ μ
λλ€. ν΄λ¦ λͺ λ² λ§μΌλ‘ λ‘κ·ΈμΈμ ν μ μλ νΈλ¦¬μ±μ ν΅ν΄ μ¬μ©μλ€μ΄ μ΄ μΉμ λ μ°Ύμ μ μλ μ΄μ λ₯Ό μ 곡νκΈ° μν΄μ μ λλ€. |
| Sentry | Sentryλ μ€μκ° μ€λ₯ λͺ¨λν°λ§ λ° λ‘κΉ
νλ«νΌμΌλ‘, μ ν리μΌμ΄μ
μμ λ°μνλ μμΈ, μ€λ₯, κ²½κ³ λ±μ μ€μκ°μΌλ‘ μμ§νκ³ μ€μνλ λμ보λμμ νμΈν μ μλλ‘ μ§μν©λλ€. μ΄λ¬ν μ΄μ λ‘ Sentryλ₯Ό λμ νμ¬ μ ν리μΌμ΄μ μ λ‘κΉ κ³Ό μμΈ μ²λ¦¬λ₯Ό ν¨κ³Όμ μΌλ‘ κ΄λ¦¬ν μ μκ² λμμ΅λλ€. |
| Redis | Redisλ μ€ν μμ€ μΈ λ©λͺ¨λ¦¬ ν€ κ° λ°μ΄ν° ꡬ쑰 μ€ν μ΄λ‘μ λΉ λ₯΄κ² μ κ·Όν νμκ° μλ λ°μ΄ν°λ₯Ό μ μ₯νλλ° μ μ©ν©λλ€. ν΄λΌμ΄μΈνΈκ° μμ£Ό μ κ·Όνλ ν ν° μ 보λ λ°μ΄ν° μΊμ±μ μ¬μ©νκΈ° μν΄μ λμ νμμ΅λλ€. |
| Spring Batch | Spring Batchλ λμ©λ μΌκ΄μ²λ¦¬ νΈμλ₯Ό μν λ€μν κΈ°λ₯μ μ 곡ν©λλ€. νΉμ ν μμ μ μ€μΌμ€λ¬λ₯Ό ν΅ν΄ μλνλ μμ κ³Ό νΈλμμ κ΄λ¦¬μ ν¨κ» ν΅κ³ μ²λ¦¬λ₯Ό λ§‘κΈ°κΈ° μν΄ λμ νμμ΅λλ€. |
| JUnit5 + Mockito | ν
μ€νΈ μ½λλ₯Ό μ¬μ©νλ©΄ κ°λ° κ³Όμ μ€μ λ°μν μ μλ μμμΉ λͺ»ν λ¬Έμ λ₯Ό μ»΄νμΌ μμ μμ μ°Ύμ μ μμ΅λλ€. μ΄λ λ°νμ μ€λ₯λ₯Ό λ°©μ§νκ³ , λ²κ·Έλ₯Ό μ¬μ μ λ°κ²¬νμ¬ λλ²κΉ μκ°μ μ μ½ν μ μμ΅λλ€. λν μμ±ν μ½λκ° μλν λλ‘ λμνλμ§ νμΈν μ μμ΅λλ€. ν μ€νΈ μ½λλ μμλλ μ λ ₯κ³Ό μΆλ ₯μ μ μνκ³ , μ½λ μ€ν κ²°κ³Όλ₯Ό νμΈνμ¬ μ½λμ μ νμ±μ κ²μ¦νλ μν μ ν©λλ€. μ΄λ₯Ό ν΅ν΄ μ½λ λ³κ²½μ΄λ 리ν©ν λ§ νμλ κΈ°λ₯μ λμμ΄ μ¬λ°λ₯Έμ§ νμΈν μ μκΈ° λλ¬Έμ λμ νκ² λμμ΅λλ€. |
π₯ OpenVidu μΈμ μ΄ μ’ λ£λλ μ΄μ
λ¬Έμ
OpenVidu μλ²μ μμ±λ μΈμ μ΄ μ£ΌκΈ°μ μΌλ‘ μμ λκ±°λ, νλ²μ΄λΌλ Connectionμ΄ λ°μν ν Connectionμ΄ νλλ μ‘΄μ¬νμ§ μκ²λ κ²½μ° μΈμ μ΄ μμ λλ λ¬Έμ λ°μ
μλ
- env νμΌμ μμ νμ¬ OPENVIDU_SESSIONS_GARBAGE_INTERVALΒ κ°μ 0μΌλ‘ μμ νλ©΄ Garbage Collectorκ° λΉνμ±νλ¨κ³Ό λμμOPENVIDU_SESSIONS_GARBAGE_THRESHOLDΒ μμ± λν 무ν¨νκ° λκΈ° λλ¬Έμ Interval κ°μ 0μΌλ‘ μμ
- μ μ κ° μ΄λ―Έ μμ λ μΈμ μΌλ‘ μ κ·Όν κ²½μ° μλ‘μ΄ μΈμ μ μμ±ν΄μ ν΄λΉ μΈμ μ μ μ λ₯Ό μ μ₯μν€λ λ°©λ²
ν΄κ²°
μ€ν°λλ£Έμ μ μ μ μ₯ -> OpenVidu μλ²μ νμ±νλμ΄ μλ μΈμ λͺ©λ‘ λ‘λ -> μ μ₯νκ³ μ νλ μΈμ IDκ° μ‘΄μ¬ν κ²½μ° ν΄λΉ μΈμ μΌλ‘ μ μ₯ -> ν΄λΉ μΈμ μ΄ μμ κ²½μ° μ μ₯νκ³ μ νλ μΈμ IDμ λκ°μ IDλ‘ Custom μΈμ μμ± λ° μ μ₯ κ³Όμ μ ν΅ν΄ μ μ μ μ₯μμ μΈμ μ΄ μ’ λ£λμ§ μκ³ κ³μ μ‘΄μ¬νλ κ²μ²λΌ μΈμν μ μλλ‘ μμ νμ¬ ν΄κ²°
ν΄κ²° μ½λ
π₯ λ°© μμ± λ° λ°© μ μ₯ λμμ± μ΄μ
λ¬Έμ
- ν λ°©μ μ μ₯μ 9λͺ κΉμ§ κ°λ₯
- λ°© μμ± μ ν μ μ λΉ 3κ°μ λ°©μ μμ± κ°λ₯
- λ°© μ μ₯ μ ν μ μ κ° κ°μ λ°©μ μ¬λ¬ λ² μ μ₯ν μ μκ³ , μ΄λ―Έ μ μ₯ν λ°© μ΄μΈμ λ€λ₯Έ λ°© μ μ₯ λΆκ°
μ 쑰건λ€μ λν μμΈ μ²λ¦¬λ λμ΄μμ§λ§, Jmeterλ₯Ό μ΄μ©ν λμμ± ν μ€νΈ κ²°κ³Ό μ λΆ λμμ± μ μ΄κ° λμ§ μμ μνλ λλ‘ μ²λ¦¬κ° λμ§ μμ
μλ
- RabbitMQμ κ°μ λ©μΈμ§ λΈλ‘컀λ₯Ό μ΄μ©νμ¬ μμ²μ λ©μΈμ§ νμ λ΄μμ μ²λ¦¬νκ³ μμ² μ체μ λν λμμ± μ μ΄λ₯Ό μλ
- λκΈ°ν κΈ°λ² λ° DB Lock μ¬μ©
ν΄κ²°
Pessimistic Lockμ μ΄μ©νμ¬ DBμ λμ μ κ·Όμ λ§μμ ν΄κ²°
ν΄κ²° μ , ν ν
μ€νΈ
βλ§μ΄νμ΄μ§ μ‘°ν μ±λ₯ κ°μ μ μν Redis μΊμ± λ°©μ
κΈ°μ λμ
λ°°κ²½
μ μ λ‘λΆν° μ κ·Όμ΄ μ¦μ λ§μ΄νμ΄μ§λ₯Ό μ‘°νν λλ§λ€ ν΅κ³λ₯Ό κ³μ°νκ³ μ‘°ννλ μΏΌλ¦¬κ° μμ±λκ³ μλλ° μ΄λ₯Ό κ°μ ν μλ μμκΉ?
κΈ°μ ꡬν κ³Όμ
Redisμ ν΅κ³ λ°μ΄ν°λ₯Ό μ μ₯νμ¬ μΊμ±μ μ μ©νκ³ , μμ μ΄ νμν λΉμΌ λ°μ΄ν°μ λ³κ²½μ΄ μΌμ΄λ λλ§ ν΅κ³ λ°μ΄ν°μ κ°μ μμ .
μ΄μ λ°λΌ, λ§μ΄νμ΄μ§λ₯Ό μ‘°νν λλ§λ€ 쿼리λ₯Ό μμ±νμ§ μμλλκ³ λ°μ΄ν°λ₯Ό μ‘°ννλ μλ λν ν₯μλ μ μλλ‘ νμλ€.
κ³ λ―Ό
λ¨μν Key Value ꡬ쑰λ‘λ§ μ μ₯νκΈ°μλ λͺ¨λ λ©€λ²μ μΌλ³, μ£Όλ³, μλ³ λ°μ΄ν°λ₯Ό λ€λ₯Έ λ©€λ²λ€κ³Ό ꡬλΆλκ² λ£κΈ°κ° μ΄λ €μ΄λ°, μ΄λ€ λ°©λ²μ΄ μμκΉ?
ν΄κ²° λ°©μ
Redisκ° μ 곡νλ μλ£κ΅¬μ‘° μ€ Valueλ‘ λ λ€λ₯Έ Key Value Mapμ λ£μ μ μλ Hash μλ£ κ΅¬μ‘°λ₯Ό μ΄μ©νμ¬ λͺ¨λ λ©€λ²λ€μ ν΅κ³ λ°μ΄ν°λ₯Ό ꡬλΆν΄μ λ£μ μ μλλ‘ νμλ€.
βμ€ν°λ λ£Έ λ§λ£ μ²λ¦¬μ μλνλ ν΅κ³ λ°μ΄ν° κ΄λ¦¬ λ°©λ²
κΈ°μ λμ
λ°°κ²½
λ§λ£κΈ°νμ΄ λ μ€ν°λλ£Έ μ²λ¦¬μ ν¨κ» ν΅κ³ λ°μ΄ν°λ₯Ό ν¨κ³Όμ μΌλ‘ μλνν΄μ μ²λ¦¬ν μ μλ λ°©λ²μ΄ 무μμ΄ μμκΉ?
κΈ°μ ꡬν κ³Όμ
λμ©λ μΌκ΄μ²λ¦¬ κΈ°λ₯μ μ 곡νλ Spring Batchμ μμ μ μλνν μ μλ Spring Schedularλ₯Ό μ¬μ©νμλ€. μ€μΌμ€λ¬λ₯Ό λ§€μΌ μμ μ νλ² μ© μνλλλ‘ μ€μ νκ³ 1. λ§λ£λ λ°©μ μμ 2. μ¬μ©λμ§ μλ OpenVidu μΈμ μμ 3. ν΅κ³ λ°μ΄ν° μ μ₯ μ 3κ°μ StepμΌλ‘ ꡬμ±νμ¬ μΌκ΄ μ²λ¦¬λ₯Ό μλννμλ€.
κ³ λ―Ό
μ²λ¦¬ λ°©μμ μ΄λ»κ² μ ν κ²μΈκ°?
ν΄κ²° λ°©μ
μ€νν μμ μ΄ λ³΅μ‘νκ³ μ½κΈ°, μ²λ¦¬ μ°κΈ°μ κ΄λ ¨λ μμ μ μνν΄μΌνλ ν΅κ³ μμ μ Chunk λ°©μμΌλ‘ μ²λ¦¬νμκ³ , λΉκ΅μ μΌλ‘ μ²λ¦¬κ° λ¨μνκ³ μ²λ¦¬λμ΄ λ§μ§ μμ λλ¨Έμ§ μμ λ€μ Tasklet λ°©μμΌλ‘ μ²λ¦¬νμλ€.
- Front: κ°νλΉ(Github), κΉμμ₯(Github), μ λ―Όμ² (Github)
- Back: κΉκ·Όλ³΄(Github), λ°μ±μ°(Github), νμΉν¬(Github))
| κ°νλΉ | κΉμμ₯ | π©μ λ―Όμ² | π©κΉκ·Όλ³΄ | λ°μ±μ° | νμΉν¬ |
|---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
| FRONT-END | FRONT-END | FRONT-END | BACK-END | BACK-END | BACK-END |
















