Skip to content

Commit e32bfe5

Browse files
authored
Merge branch 'dev' into dev-fe
2 parents 9f32ed5 + 7dc2428 commit e32bfe5

File tree

81 files changed

+3274
-11857
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

81 files changed

+3274
-11857
lines changed

.github/workflows/prod-be-docker.yml

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
name: Build and Push Docker Image
2+
3+
on:
4+
push:
5+
branches:
6+
- prod-be
7+
8+
jobs:
9+
build:
10+
name: Build, Test, and Push Docker Image
11+
runs-on: ubuntu-latest
12+
13+
steps:
14+
- name: Checkout repository
15+
uses: actions/checkout@v3
16+
17+
- name: Set up Node.js
18+
uses: actions/setup-node@v3
19+
with:
20+
node-version: '20'
21+
22+
- name: Install dependencies with Yarn
23+
run: yarn install
24+
25+
- name: Build only backend package with Yarn
26+
run: yarn build:be
27+
28+
- name: Set up Docker Buildx
29+
uses: docker/setup-buildx-action@v2
30+
31+
- name: Log in to Docker Hub
32+
uses: docker/login-action@v2
33+
with:
34+
username: ${{ secrets.DOCKER_USERNAME }}
35+
password: ${{ secrets.DOCKER_PASSWORD }}
36+
37+
- name: Build and push Docker image
38+
run: |
39+
docker compose -f be.build.yaml build
40+
docker compose -f be.build.yaml push
41+
env:
42+
DOCKER_BUILDKIT: 1
43+
44+
- name: Execute deployment script on remote server
45+
env:
46+
SSH_PEM_KEY: ${{ secrets.SSH_PEM_KEY }}
47+
SSH_USERNAME: ${{ secrets.SSH_USERNAME }}
48+
SSH_PORT: ${{ secrets.SSH_PORT }}
49+
50+
run: |
51+
mkdir -p ~/.ssh
52+
echo "$SSH_PEM_KEY" > ~/.ssh/SSH_PEM_KEY.pem
53+
chmod 600 ~/.ssh/SSH_PEM_KEY.pem
54+
ssh -p $SSH_PORT -i ~/.ssh/SSH_PEM_KEY.pem -o StrictHostKeyChecking=no [email protected] 'cd prod && bash prod_be.sh'
55+
56+

README.md

Lines changed: 113 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,132 @@
11
<div align="center">
22
<h1> 라이부 LiBoo </h1>
33
<h3> 컨퍼런스를 더 가까이, LiBoo 에서 라이브로 🚀 </h3>
4+
<br/>
5+
<p align=center>
6+
<a href="https://gominzip.notion.site/TEAM-127673f3719e803faf63c70322560d3b?pvs=4"> Notion </a> &nbsp;&nbsp;
7+
<a href="https://www.figma.com/design/op5Ui6oZ4Zx2D8VUgWOKM0/LiBoo-%F0%9F%9A%80?node-id=1-2&node-type=canvas&t=zcYYT1qCtckcUdcs-0"> Figma </a> &nbsp;&nbsp;
8+
<a href="https://github.com/boostcampwm-2024/web22-LiBoo/wiki"> Wiki </a> &nbsp;&nbsp;
9+
<a href="https://github.com/orgs/boostcampwm-2024/projects/17"> BackLog </a>
10+
</p>
411
</div>
512

613
<br/>
714

8-
<p align=center>
9-
<a href="https://gominzip.notion.site/TEAM-127673f3719e803faf63c70322560d3b?pvs=4"> 팀 노션 </a> &nbsp;&nbsp;
10-
<!-- <a href="https://github.com/orgs/boostcampwm2023/projects/80">백로그</a> &nbsp; ╎ &nbsp; -->
11-
<!-- <a href="https://www.notion.so/04317c11a3d240408383dab9249527a2">기획서</a> &nbsp; ╎ &nbsp; -->
12-
<a href="https://www.figma.com/design/op5Ui6oZ4Zx2D8VUgWOKM0/LiBoo-%F0%9F%9A%80?node-id=1-3&t=WOh9pRJjrJinyUFT-1"> Figma </a> &nbsp;&nbsp;
13-
<a href="https://gominzip.notion.site/12d673f3719e8109b9d4d3d63f74a988?pvs=4"> 그라운드 룰 </a> &nbsp;&nbsp;
14-
<a href="https://gominzip.notion.site/12d673f3719e8098ad94ed6b71b10ac0?pvs=4"> 기술 정리 노트 </a> &nbsp;&nbsp;
15-
<a href="https://gominzip.notion.site/12d673f3719e8012b6a9fa08b8662ad3?pvs=4"> 회의록 </a>
16-
</p>
15+
## 프로젝트 개요
16+
17+
> 토스, 배달의 민족, 카카오 등 다양한 컨퍼런스들이 있지만 실제로 신청해서 당첨되는 것은 쉬운 일이 아닙니다.
18+
> <br>저희는 이러한 컨퍼런스 문화가 더욱 활발해지고, 더 많은 사람들이 기회를 얻을 수 있기를 바라는 마음으로 LiBoo 프로젝트를 기획하게 되었습니다.
19+
> <br>작게는 팀원 간 소규모 기술 공유부터, 크게는 네이버 부스트캠프 발표나 기업의 컨퍼런스과도 함께할 수 있는 서비스를 만들고자 합니다!
1720
1821
<br/>
19-
20-
<div align="center">
21-
<h3> 🧡 팀원 소개 </h3>
2222

23-
| 김준서 | 김영길 | 고민지 | 김지수 | 홍창현 |
24-
| :----------------------------------------------------------------------------: | :----------------------------------------------------------------------------: | :---------------------------------------------------------------------------: | :--------------------------------------------------------------------------: | :--------------------------------------------------------------------------: |
25-
| <img src="https://avatars.githubusercontent.com/u/45356754?v=4" width="120" /> | <img src="https://avatars.githubusercontent.com/u/46553489?v=4" width="120" /> | <img src="https://avatars.githubusercontent.com/u/101329724?v=4" width="120"> | <img src="https://avatars.githubusercontent.com/u/85912592?v=4" width="120"> | <img src="https://avatars.githubusercontent.com/u/48922050?v=4" width="120"> |
26-
| **BE** | **BE** | **FE** | **FE** | **FE** |
27-
| [@i3kae](https://github.com/i3kae) | [@hoeeeeeh](https://github.com/hoeeeeeh) | [@gominzip](https://github.com/gominzip) | [@jsk3342](https://github.com/jsk3342) | [@spearStr](https://github.com/spearStr) |
23+
# 📺 핵심 기능
24+
25+
### 실시간 컨퍼런스 스트리밍
26+
27+
실시간 컨퍼런스를 시청하거나 호스트가 되어 컨퍼런스를 직접 스트리밍 할 수 있습니다.
28+
29+
### 실시간 채팅
30+
31+
컨퍼런스를 보며 채팅으로 소통할 수 있습니다. 질문이 있다면 질문 채팅으로 전송이 가능합니다.
32+
33+
### 메인 대시보드
34+
35+
동영상 미리보기, 카테고리 등을 통해 원하는 컨퍼런스를 탐색해 볼 수 있습니다.
36+
37+
### 컨퍼런스 다시보기
38+
39+
실시간으로 방송되었던 컨퍼런스를 다시 돌려볼 수 있습니다.
40+
41+
<br/>
42+
43+
# ⚙️ 서비스 아키텍처
44+
![라이부아키텍처 drawio (1)](https://github.com/user-attachments/assets/8867cbf9-99b6-4b24-a02b-a35952c5bf0d)
45+
![Streaming Data Architecture](https://github.com/user-attachments/assets/02e854c4-4512-482d-bda2-719b7ceabea6)
46+
```mermaid
47+
sequenceDiagram
48+
participant H as Host/OBS
49+
participant HP as Host Page
50+
participant MS as Main Server
51+
participant RTMP as RTMP Server
52+
participant OS as Object Storage
53+
participant V as Viewer
54+
55+
Note over H,V: 방송 시작 전 (OBS 시작됨)
56+
57+
HP->>MS: HTTP: Stream Key 요청
58+
MS->>MS: Unique Stream Key 생성
59+
MS->>HP: Stream Key 반환
60+
HP->>H: Stream Key 전달
61+
62+
H->>RTMP: RTMP: 스트림 전송 (Stream Key 포함)
63+
64+
RTMP->>RTMP: HLS 변환 (m3u8, segment 생성)
65+
RTMP->>H: HTTP: HLS 스트림 전송
66+
Note right of H: 호스트가 자신의 방송을<br/>모니터링 할 수 있음
67+
68+
Note over H,V: 방송 시작 후 (호스트 페이지에서 시작 버튼 클릭)
69+
70+
HP->>MS: 방송 시작 신호
71+
MS->>RTMP: 방송 시작 알림
72+
73+
loop HLS 스트리밍
74+
RTMP->>OS: HLS 파일 업로드 (m3u8, segment)
75+
end
76+
77+
V->>MS: 컨퍼런스 선택 (대시보드에서)
78+
MS->>V: Object Storage URL 반환
79+
80+
loop 스트리밍 시청
81+
V->>OS: m3u8 요청
82+
OS->>V: m3u8 파일 전송
83+
V->>OS: segment 요청
84+
OS->>V: segment 파일 전송
85+
end
86+
```
87+
88+
<br/>
89+
90+
# 🛠️ 기술 스택
91+
92+
| Part | Stack |
93+
| ---------- | ----------------------------------------------------------------------------------------------- |
94+
| 공통 | ![fullstack 2](https://github.com/user-attachments/assets/1a7f6b03-9d59-4ecc-adc9-39ad17ac67a4) |
95+
| 프론트엔드 | ![fullstack 1](https://github.com/user-attachments/assets/64fdaa86-289d-42f0-80ce-4f01df4bfe75) |
96+
| 백엔드 | ![fullstack 3](https://github.com/user-attachments/assets/8a01cd0b-f324-4c6e-85f6-f75c74239bdb) |
97+
98+
<br/>
99+
100+
# 🏃 주차별 진행 상황
101+
102+
| 주차 | 내용 요약 | 발표자료 |
103+
| ----- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
104+
| 1주차 | 기획 공유 및 팀 목표 설정 | [보러가기](https://gominzip.notion.site/Week1-Web22-LiBoo-56af3bb7b2314f878667bdbbf99e791f?pvs=4) |
105+
| 2주차 | 백로그 작성, 퍼블리싱, 동영상 스트리밍 아키텍처 설계 | [보러가기](https://gominzip.notion.site/Week2-Web22-LiBoo-137673f3719e805baab4e0a9855ed885?pvs=4) |
106+
| 3주차 | CI/CD, 메인 api 서버 개발, 플레이어 커스텀, 웹소켓 학습 | [보러가기](https://gominzip.notion.site/Week3-Web22-LiBoo-a09dcec3adea4b289d22603df59f24be?pvs=4) |
107+
| 4주차 | 채팅 구현, 서비스 시연 | [보러가기](https://gominzip.notion.site/Week4-Web22-LiBoo-13e673f3719e80e2a6b0cf5fe10d603a) |
108+
| 5주차 | 채팅 고도화, 플레이어 고도화, 다시보기 api 설계 | [보러가기](https://gominzip.notion.site/Week5-Web22-LiBoo-14c673f3719e80eeb14fe3f1f668e1fc?pvs=4) |
28109

29-
</div>
30110
<br/>
31111

32-
# 프로젝트 개요
112+
# 🔥 기술적 도전
33113

34-
## LiBoo를 만들게 된 계기
114+
꾸준한 문서화를 통해 지식을 공유하고, 깊이 있는 기술적 도전을 이어나가고자 합니다.
35115

36-
토스, 배달의 민족, 카카오 등 다양한 컨퍼런스들이 있지만 실제로 신청해서 당첨되는 것은 쉬운 일이 아닙니다.
116+
- [[학습] 동영상 스트리밍 처리 프로토콜을 알아보자](https://gominzip.notion.site/b987e92eb6c84eef9af1301877eb7c91?pvs=4)
117+
- [[학습] 웹 소켓의 실시간 양방향 통신](https://gominzip.notion.site/13b673f3719e8037b430ff7b6af397b7?pvs=4)
118+
- [[과정/근거] 패키지 매니저 및 모노레포 정하기](https://gominzip.notion.site/7677c9cf96464b1d9e9c1d8afd4ab0b6?pvs=4)
119+
- [[트러블슈팅] 외부의 사용자가 Object Storage에 접근하지 못하는 권한 제어](https://gominzip.notion.site/Object-Storage-1cf0c1bde758437ea595c57cf704a029?pvs=4)
120+
- [[트러블슈팅] Docker yarn-berry workspace 를 찾지 못하는 오류](https://gominzip.notion.site/docker-yarn-berry-workspace-eff32ce3f695470a8a2d9ef4d02be1e0?pvs=4)
37121

38-
저희는 이러한 컨퍼런스 문화가 더욱 활발해지고, 더 많은 사람들이 기회를 얻을 수 있기를 바라는 마음으로 LiBoo 프로젝트를 기획하게 되었습니다.
122+
[더 많은 기술정리 보러 가기](https://gominzip.notion.site/12d673f3719e8098ad94ed6b71b10ac0?pvs=4)
39123

40-
작게는 팀원 간 소규모 기술 공유부터, 크게는 네이버 부스트캠프 발표나 기업의 컨퍼런스과도 함께할 수 있는 서비스를 만들고자 합니다!
124+
<br/>
41125

42-
## 주요 기능
126+
# TEAM 정권지르기 👊
43127

44-
- **실시간 컨퍼런스 스트리밍**
45-
- **실시간 채팅 기능**
46-
- 컨퍼런스 실시간 뒤로가기 / 다시보기
47-
- 메인 대시 보드
48-
- 실시간 영상 하나 크게
49-
- 다시보기
50-
- 다른 컨텐츠들
51-
- Q&A 기능
52-
- 채팅 시 질문 채팅으로 설정 가능
53-
- 가장 좋아요 많은 질문 하나 상단에 고정
54-
- 질문 영역 클릭시 질문 모아둔 영영 보이게
55-
- 중간 광고 (다시보기 정적 영상에 한해서)
56-
- 컨퍼런스 내용 정리 AI
128+
| 김준서 | 김영길 | 고민지 | 김지수 | 홍창현 |
129+
| :----------------------------------------------------------------------------: | :----------------------------------------------------------------------------: | :---------------------------------------------------------------------------: | :--------------------------------------------------------------------------: | :--------------------------------------------------------------------------: |
130+
| <img src="https://avatars.githubusercontent.com/u/45356754?v=4" width="120" /> | <img src="https://avatars.githubusercontent.com/u/46553489?v=4" width="120" /> | <img src="https://avatars.githubusercontent.com/u/101329724?v=4" width="120"> | <img src="https://avatars.githubusercontent.com/u/85912592?v=4" width="120"> | <img src="https://avatars.githubusercontent.com/u/48922050?v=4" width="120"> |
131+
| **BE** | **BE** | **FE** | **FE** | **FE** |
132+
| [@i3kae](https://github.com/i3kae) | [@hoeeeeeh](https://github.com/hoeeeeeh) | [@gominzip](https://github.com/gominzip) | [@jsk3342](https://github.com/jsk3342) | [@spearStr](https://github.com/spearStr) |

backend/chatServer/.eslintrc.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
module.exports = {
2+
parser: '@typescript-eslint/parser',
3+
parserOptions: {
4+
project: 'tsconfig.json',
5+
tsconfigRootDir: __dirname,
6+
sourceType: 'module',
7+
},
8+
plugins: ['@typescript-eslint/eslint-plugin'],
9+
extends: [
10+
'plugin:@typescript-eslint/recommended',
11+
'plugin:prettier/recommended',
12+
],
13+
root: true,
14+
env: {
15+
node: true,
16+
jest: true,
17+
},
18+
ignorePatterns: ['.eslintrc.js'],
19+
rules: {
20+
'@typescript-eslint/interface-name-prefix': 'off',
21+
'@typescript-eslint/explicit-function-return-type': 'off',
22+
'@typescript-eslint/explicit-module-boundary-types': 'off',
23+
'@typescript-eslint/no-explicit-any': 'off',
24+
},
25+
};

backend/chatServer/.gitignore

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# compiled output
2+
.dist
3+
/node_modules
4+
/build
5+
chatServerTest.html
6+
# Logs
7+
logs
8+
*.log
9+
npm-debug.log*
10+
pnpm-debug.log*
11+
yarn-debug.log*
12+
yarn-error.log*
13+
lerna-debug.log*
14+
15+
# OS
16+
.DS_Store
17+
18+
# Tests
19+
/coverage
20+
/.nyc_output
21+
22+
# IDEs and editors
23+
/.idea
24+
.project
25+
.classpath
26+
.c9/
27+
*.launch
28+
.settings/
29+
*.sublime-workspace
30+
31+
# IDE - VSCode
32+
.vscode/*
33+
!.vscode/settings.json
34+
!.vscode/tasks.json
35+
!.vscode/launch.json
36+
!.vscode/extensions.json
37+
38+
# dotenv environment variable files
39+
.env
40+
.env.development.local
41+
.env.test.local
42+
.env.production.local
43+
.env.local
44+
45+
# temp directory
46+
.temp
47+
.tmp
48+
49+
# Runtime data
50+
pids
51+
*.pid
52+
*.seed
53+
*.pid.lock
54+
55+
# Diagnostic reports (https://nodejs.org/api/report.html)
56+
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

0 commit comments

Comments
 (0)