1
+ # 팀원 소개
2
+
1
3
| 최은소 (INFRA) | 오예린 (INFRA) | 권민정 (BE) | 선우예림 (BE) | 황지민 (BE) |
2
4
| :---: | :---: | :---: | :---: | :---: |
3
5
| <img src =" https://avatars.githubusercontent.com/u/93801149?v=4 " alt =" 최은소 프로필 " width =" 180 " height =" 180 " > | <img src =" https://avatars.githubusercontent.com/YelynnOh " alt =" 오예린 프로필 " width =" 180 " height =" 180 " > | <img src =" https://avatars.githubusercontent.com/u/145860909?v=4 " alt =" 권민정 프로필 " width =" 180 " height =" 180 " > | <img src =" https://avatars.githubusercontent.com/u/54367532?v=4 " alt =" 선우예림 프로필 " width =" 180 " height =" 180 " > | <img src =" https://avatars.githubusercontent.com/u/88023963?v=4 " alt =" 황지민 프로필 " width =" 180 " height =" 180 " > |
27
29
- 파일 검색: 파일명, 내용 기반 검색 기능 제공 (검색 결과 응답 시간 5초 이내)
28
30
29
31
# 유저 시나리오
30
-
31
- ![ 유저 시나리오 -Version5.drawio.png] ( https://prod-files-secure.s3.us-west-2.amazonaws.com/b782f691-dec6-485a-a6a8-2827dfef2dd5/388131ba-2bfe-46d3-bbef-cf6af069791b/%E1%84%8B%E1%85%B2%E1%84%8C%E1%85%A5_%E1%84%89%E1%85%B5%E1%84%82%E1%85%A1%E1%84%85%E1%85%B5%E1%84%8B%E1%85%A9_-Version5.drawio.png )
32
+ <img src =" https://github.com/user-attachments/assets/753a63a3-6c32-44ec-ac69-c837be8e558a " alt =" 유저 시나리오 " width =" 800 " >
32
33
33
34
# 아키텍처 설계
34
35
35
36
## 발표 시점
36
37
37
- ![ 5차 다이어그램-페이지-1.drawio.png ] ( https://prod-files-secure.s3.us-west-2.amazonaws. com/b782f691-dec6-485a-a6a8-2827dfef2dd5/23c71557-9399-4684-8a1b-24223c790e6c/5%EC%B0%A8_%EB%8B%A4%EC%9D%B4%EC%96%B4%EA%B7%B8%EB%9E%A8-%ED%8E%98%EC%9D%B4%EC%A7%80-1.drawio.png )
38
+ < img src = " https://github. com/user-attachments/assets/7609707d-2228-49d3-a80a-f297c116fc14 " alt = " 발표 시점 아키텍처 " width = " 600 " >
38
39
39
40
1 . 전체 아키텍처 설명
40
41
1 . 전체 VPC에서 Public 서브넷과 Private 서브넷을 분리하여 사용자가 접근할 수 있는 부분과 DB를 저장할 수 있는 부분으로 아키텍처를 분리
67
68
68
69
## 추가 진행 시점
69
70
70
- ![ 6차 아키텍처-페이지-1의 복사본.drawio.png] ( https://prod-files-secure.s3.us-west-2.amazonaws.com/b782f691-dec6-485a-a6a8-2827dfef2dd5/4e9d85ad-8074-4f91-b465-1351e0948e32/6%EC%B0%A8_%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%ED%8E%98%EC%9D%B4%EC%A7%80-1%EC%9D%98_%EB%B3%B5%EC%82%AC%EB%B3%B8.drawio.png )
71
+ <img src =" https://github.com/user-attachments/assets/ab83511d-79d0-4e81-ad7b-999805ac159d " alt =" 추가 진행 시점 아키텍처 " width =" 600 " >
72
+
71
73
72
74
1 . 전체 아키텍처 설명
73
75
1 . AWS VPC (10.0.0.0/16) 내에서 Public 서브넷과 Private 서브넷을 명확히 분리하여 보안성을 강화
102
104
103
105
- github action + Docker + ECR + Codedeploy를 사용한 방식
104
106
105
- ![ image.png ] ( https://prod-files-secure.s3.us-west-2.amazonaws. com/b782f691-dec6-485a-a6a8-2827dfef2dd5/9367a398-1331-454b-b8c0-36c3c0b7cda9/image.png )
106
-
107
+ < img src = " https://github. com/user-attachments/assets/b140832a-8cbe-40f9-844d-99b7b41ab7d1 " alt = " CI/CD " width = " 700 " >
108
+
107
109
- github action이 docker 이미지를 생성해 ECR에 업로드, codedeploy 스크립트를 생성해 S3에 업로드
108
110
- S3에 업로드한 스크립트를 codedeploy가 실행하도록 githubaction에서 트리거 전송
109
111
- codedeploy 스크립트 실행 후 배포 진행
166
168
167
169
## API
168
170
169
- | 기능명 | URL | Http Method | body |
170
- | --- | --- | --- | --- |
171
- | 파일 업로드 | /files | ` POST ` | file
172
- directory
173
- password |
174
- | 파일 다운로드 | /files/download/{file_id} | ` POST ` | password |
175
- | 파일 수정 | /files/{file_id} | ` PATCH ` | file
176
- directory
177
- password |
178
- | 파일 상세 조회(메타데이터) | /files/detail-meta/{file_id} | ` POST ` | password |
179
- | 파일 상세 조회(파일) | /files/detail-file/{file_id} | ` POST ` | password |
180
- | 파일 공유링크 | /files/share/{file_id} | ` POST ` | password |
181
- | 삭제 | /files/delete/{file_id} | ` POST ` | password |
171
+ | 기능명 | URL | Http Method | body |
172
+ | -----------------------------------| ------------------------------------| -------------| -------------------------------|
173
+ | 파일 업로드 | /files | ` POST ` | file, directory, password |
174
+ | 파일 다운로드 | /files/download/{file_id} | ` POST ` | password |
175
+ | 파일 수정 | /files/{file_id} | ` PATCH ` | file, directory, password |
176
+ | 파일 상세 조회(메타데이터) | /files/detail-meta/{file_id} | ` POST ` | password |
177
+ | 파일 상세 조회(파일) | /files/detail-file/{file_id} | ` POST ` | password |
178
+ | 파일 공유링크 | /files/share/{file_id} | ` POST ` | password |
179
+ | 삭제 | /files/delete/{file_id} | ` POST ` | password |
180
+
182
181
- presigned URL 방식으로 변경한 API
183
182
- 모두 비밀번호가 필요한 API이며, 비밀번호를 form-data로 전달
184
183
185
- | 기능명 | URL | Http Method | params |
186
- | --- | --- | --- | --- |
187
- | 전체 조회 | /files/all | ` GET ` | |
188
- | 조회(페이지 단위) | /files | ` GET ` | page
189
- name
190
- time |
191
- | 검색 | /files/search | ` GET ` | name
192
- path
193
- before, after
194
- type
195
- page |
196
- | 로그 조회 | /files/{file_id}/logs | ` DELETE ` | type
197
- page
198
- size |
184
+ | 기능명 | URL | Http Method | params |
185
+ | --------------------| --------------------------| -------------| --------------------------------|
186
+ | 전체 조회 | /files/all | ` GET ` | |
187
+ | 조회(페이지 단위) | /files | ` GET ` | page, name, time |
188
+ | 검색 | /files/search | ` GET ` | name, path, before, after, type, page |
189
+ | 로그 조회 | /files/{file_id}/logs | ` DELETE ` | type, page, size |
199
190
- 비밀번호가 필요없으며, 수정하지 않은 API
200
191
201
192
# 부하 테스트
202
193
203
194
## 파일 업로드 테스트
204
195
205
- ![ image.png ] ( https://prod-files-secure.s3.us-west-2.amazonaws. com/b782f691-dec6-485a-a6a8-2827dfef2dd5/59622d38-796d-4b10-9b32-9e607fefedac/image.png )
196
+ ![ 업로드 ] ( https://github. com/user-attachments/assets/f0f5764a-590d-4aef-b967-8d92b7134e90 )
206
197
207
198
- 5명의 사용자가 동시 접속
208
199
- 각 사용자는 3분 동안 계속해서 파일 업로드를 반복 실행
@@ -212,7 +203,7 @@ size |
212
203
213
204
## 파일 다운로드 테스트
214
205
215
- ![ image.png ] ( https://prod-files-secure.s3.us-west-2.amazonaws. com/b782f691-dec6-485a-a6a8-2827dfef2dd5/dc2fd199-f1f6-494d-8a87-5d18bcaa667b/image.png )
206
+ ![ 다운로드 ] ( https://github. com/user-attachments/assets/022b111a-8f33-407e-be7d-55deb55167ca )
216
207
217
208
- 2명의 사용자가 동시 접속
218
209
- 각 사용자는 3분 동안 계속해서 파일 다운로드를 반복 실행
@@ -222,7 +213,7 @@ size |
222
213
223
214
## 파일 업로드/다운로드 동시 테스트
224
215
225
- ![ image.png ] ( https://prod-files-secure.s3.us-west-2.amazonaws. com/b782f691-dec6-485a-a6a8-2827dfef2dd5/bda4d7f4-1501-4860-8096-2722a272372d/image.png )
216
+ ![ 업로드/다운로드 ] ( https://github. com/user-attachments/assets/cbc9d673-f37b-47f5-a66e-cf8c33b2511f )
226
217
227
218
- 3명의 사용자가 동시 접속
228
219
- 각 사용자는 3분 동안 계속해서 파일 업로드/다운로드를 반복 실행
@@ -233,6 +224,7 @@ size |
233
224
## 파일 검색 테스트
234
225
235
226
![ image.png] ( https://prod-files-secure.s3.us-west-2.amazonaws.com/b782f691-dec6-485a-a6a8-2827dfef2dd5/485a3e47-0f7c-4e76-a68e-5d5a9f3d26fc/image.png )
227
+ ![ search] ( https://github.com/user-attachments/assets/ad6b2c60-c54a-42ed-a9c8-91857818f269 )
236
228
237
229
- 2명의 사용자가 동시 접속
238
230
- 각 사용자는 3분 동안 계속해서 검색 반복 실행
@@ -242,7 +234,7 @@ size |
242
234
243
235
## 메타데이터 조회 테스트
244
236
245
- ![ image.png ] ( https://prod-files-secure.s3.us-west-2.amazonaws. com/b782f691-dec6-485a-a6a8-2827dfef2dd5/ac76b844-b286-4e63-a704-74afb0a7c3d1/image.png )
237
+ ![ 메타데이터 조회 ] ( https://github. com/user-attachments/assets/b9c522f1-010f-4d93-9f12-aa1ab81955ae )
246
238
247
239
- 1분 동안 사용자가 10명으로 증가 → 5분 동안 사용자가 10명으로 유지 → 1분 동안 사용자가 0명으로 감소
248
240
- 각 사용자는 계속해서 메타데이터 조회 반복 실행
@@ -252,7 +244,7 @@ size |
252
244
253
245
## 파일 조회 테스트
254
246
255
- ![ image.png ] ( https://prod-files-secure.s3.us-west-2.amazonaws. com/b782f691-dec6-485a-a6a8-2827dfef2dd5/c3e6970b-a82e-4359-b483-fa44fccf02b6/image.png )
247
+ ![ 파일 조회 ] ( https://github. com/user-attachments/assets/e010cb82-fc56-45a7-84c2-102f1152721d )
256
248
257
249
- 1분 동안 사용자가 5명으로 증가 → 5분 동안 사용자가 5명으로 유지 → 1분 동안 사용자가 0명으로 감소
258
250
- 각 사용자는 계속해서 파일 조회 반복 실행
@@ -262,16 +254,15 @@ size |
262
254
263
255
## 부하 테스트 정리
264
256
265
- | | 파일
266
- 업로드 | 파일
267
- 다운로드 | 업로드/
268
- 다운로드 | 파일 검색 | 메타데이터 조회 | 파일 조회 |
269
- | --- | --- | --- | --- | --- | --- | --- |
270
- | 테스트
271
- 진행 시간 | 3분 | 3분 | 3분 | 3분 | 7분 | 7분 |
257
+
258
+
259
+ | 항목 | 파일 업로드 | 파일 다운로드 | 업로드/ 다운로드 | 파일 검색 | 메타데이터 조회 | 파일 조회 |
260
+ | :---| :---:| :---:| :---:| :---:| :---:| :---:|
261
+ | 테스트 진행 시간 | 3분 | 3분 | 3분 | 3분 | 7분 | 7분 |
272
262
| 평균 사용자 | 5명 | 2명 | 3명 | 2명 | 10명 | 10명 |
273
263
| 총 발생 요청 | 45개 | 37개 | 27개 | 351개 | 3133개 | 3133개 |
274
264
| 성공률 | 100% | 75.67% | 86.66% | 100% | 98.65% | 95.45% |
265
+
275
266
- 매일 약 100-200개의 새로운 파일 업로드 예상
276
267
- 파일 당 평균 크기는 50MB 예상
277
268
0 commit comments