클리어

cdc wiki
클리어 (토론 | 기여)님의 2020년 6월 27일 (토) 19:09 판 (개발 과제의 목표 및 내용)
이동: 둘러보기, 검색

프로젝트 개요

기술개발 과제

국문 : 누구나 쉽게 이용할 수 있는 클라우드 스토리지

영문 : Easy-to-use custom cloud storage

과제 팀명

클리어

지도교수

김성환 교수님

개발기간

2020년 3월 ~ 2020년 6월 (총 4개월)

구성원 소개

서울시립대학교 컴퓨터과학부 20139200** 심*교(팀장)

서울시립대학교 컴퓨터과학부 20159200** 홍*현

서울시립대학교 컴퓨터과학부 20179200** 송*승

서울시립대학교 컴퓨터과학부 20179200** 이*우

서론

개발 과제의 개요

개발 과제 요약

1. 언제 어디서나 사이트에 접근하여 자신의 파일을 업로드할 수 있으며, 이렇게 업로드한 파일들을 자유롭게 내려받을 수 있다.
2. 대용량 파일(최대 4~5GB) 업로드 및 다운로드를 수행할 수 있다.
3. 다른 사용자들과 팀을 이뤄 자신이 업로드한 파일들을 공유할 수 있다.
4. 파일 즐겨찾기 기능을 통해 자신이 선호하는 파일들을 한눈에 확인할 수 있다.
5. 이미지 파일 및 동영상 미리보기 기능을 통해 업로드된 파일들을 확인할 수 있다.
6. 휴지통 기능을 통해 파일을 삭제하거나 다시 복구할 수 있다.
7. RESTful API 설계를 통해 프론트엔드와 백엔드간의 소통을 원활하게 한다.
8. Docker를 이용하여 다양한 Linux 서버에 이식 가능한 시스템을 만든다.
9. JWT 토큰 및 OAuth2 시스템을 이용한 사용자 인증 시스템을 구축한다.

개발 과제의 배경

우리가 평소에 일상적으로 사용해왔던 구글 드라이브나 N드라이브와 같은 클라우드 스토리지 서비스들은 다양한 소셜 로그인 기능을 제공하지 않는 단점을 지니고 있었다. 우리는 이 점에 착안하여 일반적인 로그인과 함께 OAuth2를 이용한 구글, 페이스북 계정 로그인 방식을 제공하는 새로운 클라우드 스토리지 서비스를 만들어 보기로 했다. 우리가 만든 서비스를 통해 각 사용자는 자신의 파일들을 업로드/다운로드 할 수 있으며, 팀을 구성하여 같은 팀에 속해있는 다른 사람들과 자신의 파일을 공유할 수 있을 것이다. 또한, 각 사용자는 자신이 선호하는 파일들을 등록하여 이들을 따로 관리할 수 있는 기능을 제공받게 될 것이다.

개발 과제의 목표 및 내용

1. JWT 토큰을 이용한 로그인 보안 제공
REST API의 특징 중 하나는 무상태성(stateless)으로, 이는 클라이언트의 context를 서버상에 저장하지 않는다는 의미이다. 따라서 RESTful한 시스템을 구축하기 위해 인증 방식으로 서버에 각 사용자의 데이터를 저장하여 사용하는 session 방식 대신 토큰 자체에 사용자에 대한 정보를 저장하고 있어 서버에 사용자의 정보를 따로 저장할 필요가 없는 JWT 토큰 인증 방식을 선택했다. JWT 토큰은 토큰 자체에 사용자의 정보를 저장하고 있으므로 서버에 세션을 저장할 때보다 서버의 부하가 줄어든다는 장점이 있으며, 이는 사용자에게 더욱 양질의 서비스를 제공해줄 수 있다는 것을 의미한다. 또한, OAuth2에서도 JWT 토큰 방식을 이용하기 때문에 연동이 편리하다는 장점도 가지고 있다.
JWT 토큰 인증 방식.png
그림 1.1.1. JWT 토큰 인증 방식
위 그림과 같이 JWT 토큰을 통한 인증 방식은 최초 토큰 발급 시에만 DB에 접근하고 그 이후에는 JWT 토큰을 통하여 인증을 진행하기 때문에 세션 방식의 인증보다 서버 부하가 줄어든다는 장점이 있다.

 하지만 한편으로 JWT 토큰은 몇몇 보안상의 문제도 가지고 있다. 토큰에 들어있는 정보는 서버의 secret key로 암호화되어 있으므로 토큰의 위/변조는 불가능하지만, 토큰을 보내는 도중에 허가받지 않은 사람이 토큰을 탈취하여 마치 허가받은 사용자인 것처럼 서버에 접근할 수 있다. 토큰이 탈취당한 사실을 알았다 해도 서버 측에서 사용자의 로그인 정보를 저장하지 않기 때문에 이미 발행된 토큰을 만료시킬 방법이 없으며, 이는 JWT를 통한 인증 방식에서 중요한 문제가 된다. 이 문제를 해결하기 위해 대표적으로 사용자에게 유효시간이 짧은 JWT 토큰과 함께 유효시간이 긴 Refresh 토큰을 발급해주고 JWT 토큰이 만료되었을 때 refresh 토큰을 이용하여 새로운 JWT 토큰을 발급받는 방법이 있다. 하지만 이 방법은 재발급 과정에서 refresh 토큰을 검증해야 하기 때문에 서버에 추가적인 refresh 토큰을 저장해야 한다. 이는 stateless한 방법이 아니기 때문에, 대신 다음과 같은 방법을 사용하기로 했다.
1, 발급한 JWT 토큰에 짧은 유효기간을 설정한다(5분).
2. 사용자가 서버에 특정 요청을 보내기 위해 JWT 토큰을 보낼 때, 유효기간이 다시 설정된 새로운 JWT 토큰을 발급해준다.
3. 유효기간이 지난 JWT 토큰을 통하여 요청을 보낼 경우, 해당 토큰을 제거하여 사용자를 로그아웃 상태로 만든다.


이러한 방법은 토큰 재발급 과정이 빈번하게 일어난다는 단점이 존재하지만, 이러한 재발급 과정은 DB에 접근하지 않고 처리할 수 있기 때문에 기존에 refresh token을 서버에 저장하는 방법보다 더 나은 성능을 보일 수 있을 것이다.

관련 기술의 현황

관련 기술의 현황 및 분석(State of art)

  • 전 세계적인 기술현황

내용

  • 특허조사 및 특허 전략 분석

내용

  • 기술 로드맵

내용

시장상황에 대한 분석

  • 경쟁제품 조사 비교

내용

  • 마케팅 전략 제시

내용

개발과제의 기대효과

기술적 기대효과

내용

경제적, 사회적 기대 및 파급효과

내용

기술개발 일정 및 추진체계

개발 일정

내용

구성원 및 추진체계

내용

설계

설계사양

제품의 요구사항

내용

설계 사양

내용

개념설계안

내용

이론적 계산 및 시뮬레이션

내용

상세설계 내용

내용

결과 및 평가

완료 작품의 소개

프로토타입 사진 혹은 작동 장면

내용

포스터

내용

관련사업비 내역서

내용

완료작품의 평가

내용

향후계획

내용

특허 출원 내용

내용