평소에 완전 무료로 서비스하고 사진이 없고 상대가 어떤 사람인지에 초점을 맞춘 소개팅 어플 또는 웹 사이트가 있었으면 좋다고 생각했고 포트폴리오용 웹 사이트를 개발하는 겸 BlindKing 소개팅 웹을 개발하게 되었습니다.
개발기간: 2021-05 ~ 2021-11 (약 6개월 - 개발진행중)
팀원: 나
FrontEnd: Vue.js
BackEnd: Node.js + Express
DB: MongoDB
DevOps: AWS Amplify, AWS Certificate Manager, AWS 53, AWS EC2, AWS Load Balancer, AWS S3
그외 사용 기술: CKEditor5, Bootstarp 4.6, express-rate-limit, JWT, socket.io, Mongoose
FrontEnd Git Repository
https://github.com/GangTakChoi/BlindKing_Web
BackEnd Git Repository
https://github.com/GangTakChoi/BlindKing_BackEnd
https://blindking.choikt.com
관리자 계정 > ID: administrator / PW: 123123
일반 계정 > ID: test / PW: 123123
회원가입 시 비밀번호는 암호화되어 저장되고 있습니다.
일반 계정은 중복되지만 않으면 얼마든지 만들 수 있기 때문에 많이 만들어서 테스트하셔도 괜찮습니다.
자세히보기 버튼 클릭 시 상세페이지로 이동,
페이지 하단에 친구신청 버튼이 있다.
관리자 카테고리는 빨간 글자색이며,
일반 카테고리는 검정 글자색입니다.
관리자로 로그인 시 아래와 같이 버튼이 추가됩니다.
카테고리 추가와 카테고리 관리 버튼입니다.
추가 버튼을 클릭하게 되면 아래와 같이 유형, 카테고리 명을 입력하여 카테고리를 추가할 수 있습니다.
톱니바퀴 모양을 클릭하면 카테고리 관리 창이 뜨고 카테고리 명을 수정할 수 있고 삭제도 가능합니다.
글쓰기는 이미지 업로드 및 동영상 첨부가 가능합니다.
아래는 등록된 글이며 댓글 기능과 함께 캡처했습니다.
신고관리에서는 댓글, 게시글, 채팅, 자기소개작성에서 신고한 정보들을 조회할 수 있고 각각 유형마다 신고 내용을 객관적으로 판단할 수 있도록 구현하였다.
신고 목록 페이지
신고 상세 페이지
질문관리에서는 자기소개작성 페이지에서 노출되는 질문 리스트들을 관리할 수 있는 기능 제공합니다.
드래그하여 질문이 노출되는 순서를 변경할 수 있고 질문 수정, 추가, 삭제가 가능합니다.
window 이벤트 헨들러 onpopstate를 사용하여 뒤로가기를 통해 진입한 페이지인지 확인이 되면 서버에 데이터를 요청하지 않고 localStorage에 저장한 데이터를 불러와 로드함
Matching.vue
commonMixin.js
아래와 같이 CSP child-src 지시문을 사용하여 iframe, frame의 주소를 youtube, vimeo로 제한함
만약 커뮤니티 글쓰기에서 동영상 공유 시 등록된 iframe의 주소가 악의적인 사이트로 위변조된 경우 아래와 같이 막히게 된다.
development, staging, production 환경으로 분리하여 서버가 동작될 수 있도록 개발하였습니다.
전달된 값 (prod, staging, dev)에 따라 환경변수 파일 로드
실제 환경변수 선언 파일
app.js
middlewares/responseHeader.js
이 글은 추후 계속 업데이트해 나가겠습니다.