-
[기획] Spring DSM BackendProject/DSM(Web DiskStation manager) 만들기 2023. 2. 2. 23:47
DSM의 핵심인 디스크 및 파일 관리를 위해서 서버가 구현해야할 기능을 정리해 보았다.
서버에서 지원할 기능은 다음과 같다.
- 사용자 관리(Guest 접근 제공)
- 사용자에 따른 개별 환경 제공
- 정적 파일 읽기(사진, 동영상, 텍스트)
- 텍스트 파일 수정
- 파일 관리(삭제 및 이름 변경)
- 파일 업로드 및 다운로드
- 파일 공유 uri 제공
1. 사용자 관리
사용자 인증을 제공하기 위해서는 여러 방식이 있지만 JWT를 이용할 것이다. 사실 Session 방식이 더 좋을지 모른다. 해당 서비스는 소수의 사용자를 대상으로 하고 있기 때문에 Session 관리에 따른 비용이 낮기 때문이다. 하지만 개별 환경 제공을 위해 JWT를 선택하였다. 사용자의 Id를 이용하여 사용자에게 개별 디스크 환경을 제공할 것이기 때문에 디스크와 관련된 요청 마다 사용자의 식별자를 확인할 필요가 있다. 이때 JWT는 Token을 해석하기만 하면 되기 때문에 Session에 비해 좋다고 생각했기 때문이다. (추후 SSO 확장성도 생각했다.)
2. 개별 환경 제공
서버는 환경 설정으로 rootDir을 주입받는다. 서버 파일 시스템이 동작할 시작점을 지정할 수 있다. 모든 파일 관리는 rootDir의 하위에서 동작한다. 이때 사용자에게 개별환경을 제공하는 방식은 다음과 같다.
rootDir/ -guest/ # guest 용 home 환경 -[사용자1 id]/ # 사용자의 Id를 이용하여 해당 사용자만의 home을 생성한다. -[사용자2 id]/ ...
(사용자 id는 폴더 이름 명명 규칙을 따른다. 따라서 사용자 가입시 id의 유효성을 확인할 필요가 있다.)
파일 경로 전략
- 물리 경로: 서버 및 컴퓨터에서 사용되는 실제 파일 시스템 경로이다. (C:\\ ~ 등등)
- 가상 경로: 사용자와 서버 사이 API 요청에서 이용되는 가상 경로이다.
사용자는 오직 가상 경로만 이용하여 API 요청을 보낸다. 따라서 서버는 가상경로를 물리경로로 변환하여야 한다.
[가상 경로] => (경로 파싱 함수) => [물리 경로]
물리주소 = rootDir + 사용자 Id + 가상 주소
예시 flow>
# 서버 내 환경: rootDir = "C://temp/myWorkspack" 사용자 요청(userId: byungjin) > "/hello/myText.txt" 물리 주소 = rootDir + 사용자 Id + 가상 주소 => C://temp/myWorkspack/byungjin/hello/myText.txt
3. 파일 관리
파일 관리에서 제공해야 하는 기능은 다음과 같다. 이때 POST, PUT 요청에는 서버에게 적절한 Body와 함께 요청한다. (확장자, 파일 또는 디렉토리 여부 등)
- 읽기(GET): 내부 폴더 및 파일 배열(폴더인 경우), 정적파일 읽기 참고(파일인 경우)
- 정보 읽기(GET): 폴더 및 파일 크기 등
- 생성(POST)
- 이름 변경(PUT)
- 위치 변경(PUT)
- 압축(PUT)
- 삭제(DEL)
4. 파일 공유 uri 발급
앞의 사용자 인증을 보면 모든 요청은 인증을 거쳐야 한다. 따라서 url을 복사하여도 제 3자가 해당 파일에 접근할 수 없다. 따라서 별도의 파일 공유 uri을 제공할 필요가 있다. 해당 uri는 인증이 필요없어 제 3자 또한 파일을 다운로드 할 수 있다. 이때 UUID를 발급하여 uri를 식별한다. uri의 UUID를 이용하여 database에 저장된 파일 물리 주소를 이용하여 파일 공유가 동작한다.
파일 공유 -> UUID 발급 -> DB에 UUID와 물리주소를 저장 (공유 uri 발급 과정)
uri 접근 -> UUID 식별 -> DB에 저장된 물리주소 반환 (공유 uri 이용 과정)
5. 정적 파일 읽기
사진 - 사진 제공
동영상 - 동영상 스트리밍 제공(단 HLS 아님, ResourceRegion을 이용한 간단한 제공)
[참고: https://focus-dev.tistory.com/105 ]
텍스트 - 텍스트 내부 문자자열 제공
'Project > DSM(Web DiskStation manager) 만들기' 카테고리의 다른 글
DSM - 24시간 해커톤 후기 (0) 2023.02.15 [기획] DSM 이란? (0) 2023.02.02