- 코로나로 끝나가는 이 시기에 다시금 여행에 대한 설렘이 살아날 수 있도록 자신이 갔던 여행지의 정보와 후기등을 공유하는 사이트
- 누군가에게는 여행지에 대한 정보가 될 수 있고, 누군가에게는 자신이 갔던 여행지의 즐거움을 한번 더 기억하게 되는 그런 사이트를 만들고 싶어서 제작하게 되었습니다.
👉 BE : 강명지, 박선우, 김성현
👉 FE : 임운철, 정대규, 장세화
👉 회원가입후 닉네임을 사용한 안전한 익명성의 활동 가능
👉 여행 게시물 작성을 통해 나만의 여행지를 사진과 설명으로 모두에게 알릴 수 있는 인싸력 상승
👉 게시물 상세 조회를 통해 내가 갔었던 여행지를 모아서 볼 수 있는 편리함
👉 여행 게시물 조회를 통해 다른 사람들의 여행 후기를 볼 수 있는 생생함
📌 BackEnd
📌 Front-end
-
router, Controller, Services 를 나눔으로써 의존성은 낮추고 응집도는 높게 구현
-
해싱을 사용해서 사용자의 비밀번호가 DB에 암호화되서 저장되게끔 구현
-
.env로 환경변수 설정해서 중요한 키값을 환경변수로 처리하여 다른사람이 보지못하게 구현.
-
swagger 를 사용하여 API 의 기능확인과 명세서 작성에서의 편의성 추가
-
DB 를 기존에 사용하던 mongodb 가 아닌 MY SQL 을 사용
-
MY SQL 을 사용할 때 다른 테이블의 키값을 가져오기 위해서 외래키를 사용
😥 BE: 개발하면서 어려웠던점
-
FE,BE통신 부분 에러
-
기존 mongodb가아닌 mysql를 사용함으로써 새로운 databases를 사용한점
-
git pull,push를 하루단위가 아닌 며칠 단위로 합치니 합치는데 충돌 에러 발생 (너무많음;;)
-
API명세서를 확실하게 정하지 않으니 기능구현시 FE,BE 서로 계속 수정해야 하는 부분...
🤟 Trouble Shooting (우리 팀이 해결한 문제 정리)
-
이미지 파일을 multer를 사용해서 구현은 했으나 FE분들이랑 상의를 통해 multer를 사용하지 않고, 파이어베이스에 먼저 사진을 저장하고 URL을 데이터 베이스에 저장하게 했습니다.
-
mysql을 auto increment를 사용하니 boardId 가 null값으로 나오는 부분에 대해 FE쪽에서 boardId를 필요로 해서 userCheck.boardId = userCheck['null']; userCheck에 대한 null 변수에 할당되어 있는 값을 boardId로 설정
-
로그인
3-1. passport를 이용하여 SNS(카카오톡)로그인 기능 구현을 했으나 FE와 상의 후 사용하지 않음.
3-2 , FE 토큰 헤더가 Bearer로 서버로 전달하지 않음 => Bearer, token 을 split(''),으로 받지 않고 const { authorization } = req.headers; 받어서 FE로 response
3-3 . FE 요청으로 로그인시 닉네임 넘겨달라는 부분 => user (email.passwoerd)확인 완료시 token만발행 => Board, User 외래키를 잡아(1:n), attributes: ['nickname', 'password', 'userId', 'email'], where: { email } => 사용하여 유저 정보 넘겨 받은뒤에 user.nickname을 token과 같이 response
3-4 . 암호화 : Bcrypt.hashSync(password, 10)
복호화 : Bcrypt.compareSync(password, user.password) => 비밀번호 암호화한 값과 복호화한 값이 일치하지 않는 오류 발생
암호화 : const salt = await Bcrypt.genSalt();
const pwhash = await Bcrypt.hash(password, salt);
복호화 : Bcrypt.compareSync(password, user.password) => 오류 해결