슬라이드쇼 서비스 공유주소 만들기
- Nest
- Concept
- Category
- Service
- Hit
- 249
- Star
- 0
분량이 많아져서 새로운 글로 만들게 되었다.
개요 (가져온 내용)
비공개 슬라이드쇼 부분을 작업하다가 논리적인 오류에 부딪혔다.
비공개 기능에서 패스워드는 수정권한이랑 맞물려있다. 그래서 비밀번호를 공유하면 안될거 같다.
공유용 비밀번호를 만들어서 관리해야 한다면 만드는 입장에서 관리가 대단히 어려울 것이다.
일단은 비공개는 단순히 비공개로 두자. 비공개로 두면 접근 못하도록 막아두고 비밀번호로 접근하면 수정이나 삭제까지 가능하도록 쿠키에 토큰 저장해두는 형식으로 구성해두는게 좋을거 같다.
다만 삭제할때 다시 비밀번호를 입력하는 절차가 있는게 좋을지도..
비공개 슬라이드쇼지만 일부 사람들에게 공개하고 싶을때..
분명히 이런 패턴이 나올 것이다. 특정 사람들만 보여주고 싶을때..
현재까지 생각해둔 방법은 공유주소 만들때 특정 토큰값을 만들어 /watch/sd2gs12wg?token=ang4fof32
형식으로 배포할 수 있을것이다.
이렇게 되면 공개 주소용 테이블도 만들어야 할지도 모르겠다.
URL 구조
현재 기본적인 url의 모습은 다음과 같다.
- /watch/28307f86b84f
- /edit/28307f86b84f
params 형태로 더 붙이기는 애매하니 query로 덧붙이는게 좋아 보인다. 아마도 /watch/{ADDRESS}/?key={TOKEN}
이런 형태로 사용한다면 조회, 수정, 삭제
기능에서 유연하게 대처할 수 있다.key
값이 있으면 공유링크를 통해서 접근했다고 판단할 수 있을것이다.
새로운 아이디어인데 /watch/key-{TOKEN}
으로 호출해도 구분이 가능하고 어떤 슬라이드쇼 주소인지도 알 수 있을것이다. /watch/{ADDRESS}/?key={TOKEN}
모습은 상대적으로 어려워 보이는 모습이다.
데이터베이스 테이블 (가져온 내용)
높은 확률로 토큰 목록이 담긴 새로운 테이블이 만들어져야하는거 같다. 그래서 테이블 설계에 대하여 고민을 해봐야한다.
key
인덱싱이 되는 문자. 주소 파라메터에 사용되는 문자인데 과도하게 긴 문자를 사용하면 안될거 같다.
어떻게 만들어지는지에 대하여 좀 고민이 필요해 보인다.
salt
값 특정 부분을 잘라서 다른문자같이 만들 수 있을거 같다. 랜덤으로 자를 위치를 잡아도 되긴 하는데 과도한 작업 같기도 하고.. 아니면 자른 문자를 뒤집어서 저장해도 될것이다. salt
값은 여러모로 쓸모가 많아 보인다.
permission
허용하는 기능을 기록하는 영역
어떤 포맷으로 기록하고 사용할지는 좀 고민해볼 필요가 있다.
watch,edit,delete
같은 모습으로 내용을 넣어도 될법하다.
address
토큰으로 사용하는 슬라이드 주소값
regdate
등록일
expiry
만료일. 일부러 만료시켜 비공개로 만들어버릴 수 있어 보인다. 일단 토큰을 못쓰게하는 장치로 사용할 수 있다.
작동 플로우
- 특정 슬라이드쇼로 들어간다.
- 슬라이드쇼 인증을 한다.
- 공유 주소 만들기 윈도우를 연다.
스케치북에 대략적으로 그림을 그려뒀는데 메뉴에서공유하기
메뉴를 누르면 창이 열리고 공유용 주소를 만든다. (인증된 상태에서 고유하기 버튼이 나올 것이다.) - 주소를 확인하고 권한을 체크하고나서
공유주소 만들기
버튼을 누르면 주소가 나온다. (옆에 주소복사 버튼도 있으면 좋겠다.) - 공유된 주소로 접속
- 로그인 되어있는지 확인
- 이미 로그인된 상태가 아니라면 공개토큰을 검사하는 API요청
- 데이터베이스에서 아이템 가져와서 토큰값 검사, 만료날짜 검사, 권한검사를 하고 접근 가능한지 알려준다. 아니면 슬라이드쇼 데이터를 내보내주는게 더 빠를지도..
- 이후 열거나 수정하거나 삭제하는 과정 그대로 이어진다.
따로 분리할까? 같이 사용할까?
따로 분리하면 관리포인트가 많이 늘어나서 부담된다.
그래서 기존 API에 기능을 추가하는쪽으로 마음이 기울어져 있다. 공개키값을 쿼리스트링으로 사용한다면 기능을 추가하면서 운영할 수 있을것이다.
아마도 같이 사용하는쪽으로 구현해볼 생각이다.
일단 해보고 영 안되겠다 싶으면 다시 고민해봐야지..