123 - DevOpsSociety/Hanmo-front GitHub Wiki
'ํ๋ชจ(ํ์ธ์์ ๋ชจ์ฌ์)' ํ๋ก์ ํธ ๋ฐํ ์๋ฃ
Slide 1: ํ์ง
- ํ๋ก์ ํธ๋ช : ํ๋ชจ : ํ์ธ์์ ๋ชจ์ฌ์
- ํ์:
- [cite_start]Frontend: ์ ์์ง, ์ด๊ฒฝํ
- [cite_start]Backend: ๊น์๋, ๊นํ๋จ, ๋ฐ๋คํ, ๋ฐ์งํ
- ๋ฐํ์ผ: 2025๋ O์ O์ผ
Slide 2: ๋ชฉ์ฐจ (Agenda)
- ํ๋ก์ ํธ ์๊ฐ
- ์๋น์ค ์ฃผ์ ๊ธฐ๋ฅ ๋ฐ ํ๋ฆ
- ์ ์ฉ ๊ธฐ์ ๋ฐ ์์คํ ์ํคํ ์ฒ
- ํต์ฌ ๊ธฐ๋ฅ ๊ฐ๋ฐ ๊ณผ์ (๋งค์นญ, ์ฑํ )
- ์ฃผ์ ๋์ ๊ณผ์ ๋ฐ ํด๊ฒฐ ๋ฐฉ์
- ํ๋ก์ ํธ ์ฑ๊ณผ ๋ฐ ํฅํ ๊ณํ
- Q&A
Slide 3: ํ๋ก์ ํธ ์๊ฐ
- ์ ํ ๋ฐฐ๊ฒฝ
- [cite_start]ํ๊ธฐ ์ด์ ๋ฌ๋ฆฌ ์๊ฐ์ด ์ง๋๋ฉฐ ํ์ ๊ฐ์ ๊ต๋ฅ๊ฐ ์ค์ด๋๋ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ณ ์ ํ์ต๋๋ค.
- [cite_start]ํนํ, ๋ํ ์ถ์ ๊ธฐ๊ฐ ๋์ ํจ๊ป ์ฆ๊ธธ ์น๊ตฌ๋ฅผ ๋ง๋ค์ด ์ถ์ ์ฐธ์ฌ๋ฅผ ํ์ฑํํ๋ ๊ฒ์ ๋ชฉํ๋ก ์ผ์์ต๋๋ค.
- ํ๋ก์ ํธ ๋ชฉํ
- [cite_start]1:1 ๋์ฑ ๋ฐ 2:2 ์ด์ฑ ๋งค์นญ ์๋น์ค๋ฅผ ํตํด ๊ต๋ด์์ ์๋ก์ด ์ธ์ฐ์ ์ฐพ์ ์ ์๋๋ก ๋์ต๋๋ค.
- [cite_start]๊ถ๊ทน์ ์ผ๋ก ํ์๋ค ๊ฐ์ ๊ต๋ฅ๋ฅผ ํ์ฑํํ์ฌ ๋ ์ฆ๊ฑฐ์ด ์บ ํผ์ค ์ํ์ ๋ง๋๋ ๊ฒ์ ์งํฅํฉ๋๋ค.
Slide 4: ์๋น์ค ์ฃผ์ ๊ธฐ๋ฅ ๋ฐ ํ๋ฆ
- ์ฌ์ฉ์ ์ด์ฉ ํ๋ฆ
- [cite_start]์์ ๋ฐ ๊ฐ์ : ์ฒซ ํ๋ฉด์์ ํ์๊ฐ์ ์ ์ ํํ๊ณ [cite: 10][cite_start], SMS๋ฅผ ํตํด ๋ณธ์ธ ์ธ์ฆ์ ์งํํฉ๋๋ค.
- [cite_start]์ ๋ณด ์ ๋ ฅ: MBTI, ์ฑ๋ณ, ํ๊ณผ, ์ธ์คํ๊ทธ๋จ ID ๋ฑ ๋งค์นญ์ ์ํ ๊ธฐ๋ณธ ์ ๋ณด๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- [cite_start]๋๋ค ๋๋ค์ ์์ฑ: ์ ๋ ฅํ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์ฌ๋ฏธ์๋ ๋๋ค ๋๋ค์์ด ์์ฑ๋ฉ๋๋ค[cite: 13]. [cite_start](1ํ ๋ณ๊ฒฝ ๊ฐ๋ฅ )
- [cite_start]๋งค์นญ ์ ์ฒญ: ๋ฉ์ธ ํ์ด์ง์์ ์ํ๋ ๋งค์นญ(1:1 ๋๋ 2:2)์ ์ ์ฒญํฉ๋๋ค.
- [cite_start]๋งค์นญ ์๋ฃ ๋ฐ ํ์ธ: ๋งค์นญ์ด ์๋ฃ๋๋ฉด ํ์๋ค์ ๋๋ค์๊ณผ ์ธ์คํ๊ทธ๋จ ID๋ฅผ ํ์ธํฉ๋๋ค.
- [cite_start]์ปค๋ฎค๋ํฐ: ๊ฒ์ํ์์ ๊ณผํ ํ๊ธฐ๋ ์์ ๋ก์ด ์๊ฒฌ์ ๋๋ ์ ์์ต๋๋ค.
- [cite_start]์ฑํ : ๋งค์นญ๋ ํ์๋ค๊ณผ 24์๊ฐ ๋์ ๋ํํ ์ ์๋ ์ฑํ ๋ฐฉ์ด ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค.
Slide 5: ์์คํ ์ํคํ ์ฒ ๋ฐ ์ ์ฉ ๊ธฐ์
-
์์คํ ๊ตฌ์ฑ๋
- [cite_start]์ฌ์ฉ์ ์์ฒญ์ **Nginx(๋ฆฌ๋ฒ์ค ํ๋ก์)**๋ฅผ ํตํด HTTPS(SSL)๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
- [cite_start]Docker ์ปจํ ์ด๋ ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋๋ฉฐ [cite: 3, 69][cite_start], Jenkins๋ฅผ ํตํด CI/CD ์๋ ๋ฐฐํฌ๋ฅผ ๊ตฌ์ถํ์ต๋๋ค.
- [cite_start]๋ฐฑ์๋ ์๋ฒ๋ Spring Framework๋ก ๊ตฌํ๋์์ผ๋ฉฐ [cite: 3, 7][cite_start], ๋ฐ์ดํฐ๋ **AWS RDS(MySQL)**์ [cite: 3][cite_start], ๋งค์นญ ๋๊ธฐ์ด๊ณผ ์ธ์ ๊ด๋ฆฌ๋ Redis์ ์ ์ฅ๋ฉ๋๋ค.
-
์ฃผ์ ๊ธฐ์ ์คํ
- [cite_start]Frontend:
React
[cite: 3, 7][cite_start],Next.js
[cite: 3, 7][cite_start],TypeScript
[cite: 3, 7][cite_start],Styled-components
[cite: 3, 7][cite_start],Recoil
- [cite_start]Backend:
Java
[cite: 3, 7][cite_start],Spring Framework
[cite: 3, 7][cite_start],MySQL
[cite: 3, 7][cite_start],Redis
[cite: 23, 29][cite_start],QueryDSL
- [cite_start]DevOps/Infra:
AWS (RDS, S3)
[cite: 3, 7][cite_start],Docker
[cite: 3, 7][cite_start],Jenkins
[cite: 3, 7][cite_start],Nginx
- [cite_start]Monitoring:
Grafana
,Prometheus
๋ฅผ ์ด์ฉํด ์๋ฒ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ์ต๋๋ค.
- [cite_start]Frontend:
Slide 6: ํต์ฌ ๊ธฐ๋ฅ ๊ฐ๋ฐ ๊ณผ์ โ - ๋งค์นญ ์์คํ
-
1์ฐจ ๊ฐ๋ฐ (๋๋ค ๋งค์นญ)
- [cite_start]์ฌ์ฉ์๊ฐ ๋งค์นญ์ ์ ์ฒญํ๋ฉด Redis ๋๊ธฐ์ด์
PENDING
์ํ๋ก ๋ฑ๋ก๋ฉ๋๋ค. - [cite_start]์กฐ๊ฑด(์ฑ๋ณ, ๋งค์นญ ํ์
)์ ๋ง์กฑํ๋ ์ ์ ๊ฐ ๋ชจ์ด๋ฉด ๋งค์นญ ๊ทธ๋ฃน์ ์์ฑํ๊ณ
MATCHED
์ํ๋ก ๋ณ๊ฒฝํ์ต๋๋ค.
- [cite_start]์ฌ์ฉ์๊ฐ ๋งค์นญ์ ์ ์ฒญํ๋ฉด Redis ๋๊ธฐ์ด์
-
2์ฐจ ๊ฐ๋ฐ (์กฐ๊ฑด ๋งค์นญ - MBTI, ํ๋ฒ)
- [cite_start]MBTI ์ ํธ ๋งค์นญ: ์ฌ์ฉ์๊ฐ ์ ํธํ๋ MBTI๋ฅผ ์ ๋ ฅํ๋ฉด, ์ํธ ๊ฐ์ ์ ํธ MBTI๊ฐ ์ผ์นํ๋ ์ ์ ๋ค์ ์ฐ์ ์ ์ผ๋ก ํํฐ๋งํ์ฌ ๋งค์นญ ๊ทธ๋ฃน์ ๊ตฌ์ฑํฉ๋๋ค.
- [cite_start]ํ๋ฒ ์ ํธ ๋งค์นญ: ์ฌ์ฉ์๊ฐ ์ ํธํ๋ ํ๋ฒ(์: 20ํ๋ฒ)์ ์ ํํ๋ฉด, ํด๋น ํ๋ฒ์ ยฑ1 ๋ฒ์ ๋ด์ ์๋ ์ ์ ๋ค์ ํํฐ๋งํ๋ ๋ก์ง์ ์ถ๊ฐํ์ต๋๋ค.
- [cite_start]์ด๋ฌํ ์กฐ๊ฑด ํํฐ๋ง์ Redis์์ 1์ฐจ ํํฐ๋ง ํ, ์๋น์ค ๋ก์ง์์ 2์ฐจ๋ก ์ฒ๋ฆฌํ์ฌ DB ๋ถํ๋ฅผ ์ต์ํํ์ต๋๋ค.
-
๋งค์นญ ์ฟจ๋ค์ด ๋ฐ ์์ธ ์ฒ๋ฆฌ
- [cite_start]์ ์ ๋งค์นญ ์ 24์๊ฐ์ ์ฟจ๋ค์ด์ ์ ์ฉํ์ผ๋ฉฐ [cite: 98][cite_start], ๊ทธ๋ฃน์ด ํ๊ดด๋ ๊ฒฝ์ฐ ๋จ์ ์ธ์์ ์ฟจ๋ค์ด์ ์ฆ์ ํด์ ํ์ฌ ์ฌ๋งค์นญ์ด ๊ฐ๋ฅํ๋๋ก ๊ฐ์ ํ์ต๋๋ค.
Slide 7: ํต์ฌ ๊ธฐ๋ฅ ๊ฐ๋ฐ ๊ณผ์ โก - ์ค์๊ฐ ์ฑํ
- [cite_start]๊ธฐ๋ฅ ๋ชฉํ: ๋งค์นญ๋ ์ฌ์ฉ์๋ค์ด 24์๊ฐ ๋์ ์ํตํ๋ฉฐ ์ฐ๋ฝ์ฒ๋ฅผ ๊ตํํ๋๋ก ์ ๋ํ๋ ๊ฒ.
- ๊ตฌํ ํ๋ฆ:
- [cite_start]์ฑํ
๋ฐฉ ์๋ ์์ฑ: ๋งค์นญ ์ฑ๊ณต ์,
MatchEvent
๊ฐ ๋ฐํ๋์ด ์ฑํ ๋ฐฉ์ ์ฆ์ ์์ฑํ๊ณ Redis์ 24์๊ฐ TTL๋ก ์ ์ฅํฉ๋๋ค. - [cite_start]์ฐ๊ฒฐ ๋ฐ ์ธ์ฆ: ํด๋ผ์ด์ธํธ๋
WebSocket(STOMP)
์ผ๋ก ์๋ฒ์ ์ ์ํ๋ฉฐ, Handshake ๊ณผ์ ์์ JWT ํ ํฐ์ผ๋ก ์ฐธ๊ฐ ๊ถํ์ ํ์ธํฉ๋๋ค. - [cite_start]๋ฉ์์ง ๋๊ธฐํ: ์๋ฒ ํ์ฅ์ฑ์ ๊ณ ๋ คํ์ฌ
Redis Pub/Sub
๋ชจ๋ธ์ ํตํด ์ฌ๋ฌ ์๋ฒ ์ธ์คํด์ค ๊ฐ ๋ฉ์์ง๋ฅผ ๋๊ธฐํํ๊ณ ๋ชจ๋ ๊ตฌ๋ ์์๊ฒ ๋ธ๋ก๋์บ์คํธํฉ๋๋ค. - [cite_start]์๋ ๋ง๋ฃ ์ฒ๋ฆฌ: Redis์ TTL์ด ๋ง๋ฃ๋๋ฉด
RoomExpiredListener
๊ฐ ์ข ๋ฃ ์๋ฆผ์ ๋ณด๋ด๊ณ [cite: 151][cite_start], ์์ ํฌ๋ก ์ผ๋ก ๋งค์นญ ๋ฐ์ดํฐ๋ฅผ ์ต์ข ์ด๊ธฐํํฉ๋๋ค.
- [cite_start]์ฑํ
๋ฐฉ ์๋ ์์ฑ: ๋งค์นญ ์ฑ๊ณต ์,
Slide 8: ์ฃผ์ ๋์ ๊ณผ์ ๋ฐ ํด๊ฒฐ ๋ฐฉ์
-
Backend: Redis ํ์ ๋ถ์ผ์น ์๋ฌ
- [cite_start]๋ฌธ์ :
RedisTemplate
์ ํ์ ์ดObject
๋ก ์ค์ ๋์ดUserEntity
๋ฅผ ์ ์ฅํ ๋Bean
๋ฑ๋ก ์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค. - [cite_start]ํด๊ฒฐ:
UserEntity
์ ๋ง๋ ํ์ ์ ๋ช ์ํRedisTemplate<String, UserEntity>
๋ฅผ ๋ณ๋๋ก ์์ฑํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
- [cite_start]๋ฌธ์ :
-
Backend: ์๊ธฐ ์์ ๊ณผ ๋งค์นญ๋๋ ๋ฒ๊ทธ
- [cite_start]๋ฌธ์ : ๋งค์นญ ๋๊ธฐ์ด ํํฐ๋ง ์, ๋ณธ์ธ์ ์ ์ธํ์ง ์์ ์๊ธฐ ์์ ๊ณผ ๋งค์นญ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ์ต๋๋ค.
- [cite_start]ํด๊ฒฐ: ๋งค์นญ ํ๋ณด ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๋ ๋จ๊ณ์์ ์๊ธฐ ์์ ์ ๋ช ์์ ์ผ๋ก ์ ์ธํ๋ ๋ก์ง์ ์ถ๊ฐํ์ฌ ํด๊ฒฐํ์ต๋๋ค.
-
Frontend: ์ฝ๋ ์ค๋ณต ๋ฐ ์ฌ์ฌ์ฉ์ฑ ๋ฌธ์
- [cite_start]๋ฌธ์ : ์ด๊ธฐ ๊ฐ๋ฐ ๋จ๊ณ์์ ์ฌ๋ฌ ํ์ด์ง์ ์ค๋ณต๋๋ ์คํ์ผ๊ณผ ์ปดํฌ๋ํธ ์ฝ๋๊ฐ ๋ง์์ต๋๋ค.
- [cite_start]ํด๊ฒฐ: ๊ณตํต ์คํ์ผ๊ณผ ์๋ฌ ๋ฉ์์ง ๋ฑ์ ๋ณ๋์ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌํ๋ ๋ฆฌํฉํ ๋ง์ ์งํํ์ฌ [cite: 38][cite_start], ์ฝ๋ ๊ฐ๋ ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ณ ์ ์ฒด ์ฝ๋ ์์ ์ฝ 20% ์ค์์ต๋๋ค.
Slide 9: ํ๋ก์ ํธ ์ฑ๊ณผ ๋ฐ ํฅํ ๊ณํ
-
ํ๋ก์ ํธ ์ฑ๊ณผ (์ถ์ ๊ธฐ๊ฐ ๋ฐฐํฌ)
- [cite_start]์ด ๊ฐ์ ์ ์: ์ฝ 200๋ช ์ ํ์์ด ์๋น์ค์ ๊ฐ์ ํ์ต๋๋ค.
- [cite_start]์ด ๋งค์นญ ์: ์ด 65ํ์ ๋งค์นญ์ด ์ฑ๊ณต์ ์ผ๋ก ์ด๋ฃจ์ด์ก์ต๋๋ค.
-
ํฅํ ๊ฐ๋ฐ ๊ณํ
- [cite_start]๊ธฐ๋ฅ ๊ณ ๋ํ: ์ฌ์ฉ์ ์ ๊ณ ๋ฐ ๊ด๋ฆฌ์ ํ์ด์ง ๊ธฐ๋ฅ ๊ฐํ [cite: 84, 85, 126][cite_start], OCR์ ์ด์ฉํ ํ์์ฆ ๋ณธ์ธ ์ธ์ฆ ๋์ ๊ฒํ .
- [cite_start]์ฌ์ฉ์ ๊ฒฝํ ๊ฐ์ : ๋งค์นญ ํ ๋ง๋จ ์ฅ์ ์ถ์ฒ ๊ธฐ๋ฅ ์ถ๊ฐ [cite: 86][cite_start], ์ปค๋ฎค๋ํฐ ๊ฒ์ํ ๊ธฐ๋ฅ ์ธ๋ถํ (์: ๋ฐฅ๋ชจ, ๊ฒ๋ชจ).
- [cite_start]UI/UX ๊ฐ์ : ๋์์ด๋์ ํ์ ํ์ฌ ๋๋ฉ, ๋งค์นญ ๊ฒฐ๊ณผ ํ์ด์ง ๋ฑ์ ๋์์ธ์ ์ง์์ ์ผ๋ก ๊ฐ์ ํ ์์ ์ ๋๋ค.
Slide 10: Q&A
- ์ง์์๋ต
- ๊ฐ์ฌํฉ๋๋ค.