코드 스테이츠의 부트캠프 과정이 끝나고 취업을 준비해야 하는 단계가 왔다. 그동안 프로젝트에 집중하느라 잊었던 부분을 복습하고 기술 면접과 관련된 질문들을 정리하고 이력서를 작성하면서 개인 프로젝트를 하나 해보고 싶다는 생각이 들었다. 그동안 팀 프로젝트만 진행해왔기 때문에 혼자서 모든 파트를 맡아서 하는 경험도 좋겠다고 생각했는데, 이전 프로젝트에서 계속 풀스택 포지션을 맡았었고 다른 팀원들의 파트도 추가적으로 공부했기 때문에 혼자서 프로젝트를 진행할 수 있다는 생각이 들었다.
이번에는 원하는 조건에 해당하는 아이디어를 찾는 것이 아니라 우연히 드라마를 보다가 아이디어가 생각났다. 영화나 드라마에서 가상의 인물이나 사건을 포털 사이트에서 검색하는 장면이 나오는데 그 장면을 위해서 검색어와 검색 페이지를 커스터마이징 할 수 있는 서비스가 있으면 편리하겠다는 생각이 들었다. 구현해야 하는 기능들을 머릿속으로 정리하면서 충분히 구현 가능하다는 생각이 들었고 빠르게 SR 기획을 시작하였다.
테크 스택을 선정하면서 가장 고민되었던 부분은 데이터베이스였다. 프로필, 뉴스, 이미지 등 검색 페이지에 보여지는 데이터들은 추가, 삭제가 가능하도록 구현할 것이기 때문에 JSON 타입으로 저장해야해서 NoSQL을 사용하는 것이 적합하다고 생각했고 코드스테이츠에서 기초 단계이지만 MongoDB를 배운적이 있어서 많이 고민했다. 하지만 빠르게 개인 프로젝트를 끝내고 취업을 준비하고 싶어서 우선은 숙련도가 쌓인 MySQL을 선정하고 추후에 기회가 된다면 변경해보기로 결정하였다.
스키마 자체는 회원정보가 담기는 Users 테이블, 자동완성 검색어가 저장되는 AutoComplete, 그리고 검색어와 해당 검색어의 검색 페이지 데이터가 저장되는 SearchData 테이블 총 3개의 테이블로 간단하게 구현되었지만 SearchData에 있는 profile, news, image, music 컬럼에 저장되는 JSON 타입의 데이터의 기본 형태가 다 달라서 따로 정리하였다.
이미지는 multer를 사용해서 서버에 파일로 저장하고 데이터베이스에는 이미지의 src 주소값이 저장되도록 구현할 예정이다.
// profile {
// type : 'profile',
// name : '김코딩',
// job: '웹개발자',
// info : [{title : '신체', content:'175cm'},{title : '소속사', content:'코딩컴퍼니'}],
// subinifo : [{title:'방송', content: [{image: '', title:'코딩은 무엇인가'}]
// order : 1,
// view: 1,
// }
// news {
// type : 'news'
// content : [{reporter: '조선일보, datetime : '1시간전', title : '긴급속보', content : '기사내용'}],
// order : 2,
// view: 1,
// }
// image {
// type : 'image',
// content: {img1:'',img2:'',img3:'',img4:''},
// order : 3,
// view: 1,
// }
// music {
// type : 'music',
// title : '노래제목',
// artitst: '가수',
// date: '2021.12.13'
// album : 'img',
// inifo : '곡 정보',
// order : 4,
// view: 1,
// }
검색과 관련된 데이터를 저장하기 위해서는 회원가입 절차가 필요한데 아이디 찾기, 비밀번호 찾기 등의 부수적으로 필요한 페이지들이 많아서 자체 회원가입없이 OAuth(네이버, 구글, 카카오) 로그인으로 구현하기로 결정했고 추가적으로 게스트 로그인 기능을 추가하였다.
어느 부분까지 커스터마이징 할 수 있게 할지 고민이 되었는데, 사이트의 이름과 테마 색상, 자동 완성 검색어, 검색 페이지 이렇게 세 파트로 나누어서 설정 페이지를 기획하였다. 검색 페이지는 섹션(프로필, 뉴스, 이미지, 음악)별로 설정이 가능하고 각 섹션을 추가/삭제하거나 순서를 변경(드래그&드롭)할 수 있도록 구현할 예정이다. 4개의 섹션으로 구성되어 있지만 추후에 지도나 쇼핑 등을 추가해도 좋을 것 같다는 생각이 들었다.
개인 프로젝트의 좋은 점은 기획부터 구현까지 혼자 결정하기 때문에 소통에 필요한 시간이 절약되었다. 기획의 방향이나 구현해야하는 기능이 변경되었을때 필요한 과정이 없기 때문에 편하다는 생각이 들었지만 그만큼 팀 프로젝트에서는 소통이 얼마나 중요한지를 느낄 수 있었다. 혼자 프로젝트를 진행할 때와 다르게 팀 프로젝트를 할때에는 세밀하게 기획하고 적극적인 커뮤니케이션을 통해서 착오가 발생하지 않도록 해야겠다고 생각했다.