[간략한 프로젝트 개요]
- 주제 : 공유 가계부 웹 '모모아'
- 개발기간 : 2023.02.11 ~ 2023.02.25 2주간
- 맡은 역할 : 백엔드(카카오 로그인 API, DB설계)
https://github.com/nyondoo/momoa
- ERD

담당 기능 - BackEnd
(1) 카카오 로그인 API
카카오 로그인 API 적용을 위한 공부 과정 및 적용코드
https://velog.io/@nyondoo/카카오-로그인-API-HTTP-프로토콜-이해하기Node.js
(2) DB 설계 및 데이터 가공
(3) 가계부 공유(초대) 기능
📍배운 것 / 느낀 점
- 카카오의 REST API를 적용하기 위해 HTTP 프로토콜을 이해해야 했다. 단순 코드의 적용이 아니라 네트워트적인 지식의 필요성을 많이 느꼈다.
- 코드 적용을 위한 공부에 시간이 많이 걸렸지만, 지식적으로 성장하는 계기가 되어 뿌듯했다.
- DB 설계를 하면서 정규화를 지키려고 노력하였다.
- DB 데이터를 불러올 때 조건문을 sequelize 쿼리문으로 작성하는 데 어려움이 있었다. 그러나 그만큼 sequelize에서 복잡한 조건문을 사용해보는 계기가 되었다.
- 데이터 처리를 최대한 서버단에서 작업해 클라이언트에서 사용할 데이터만 보내주려고 하였다. reduce()함수를 주로 사용해 효율적으로 코딩하고자 노력했다.
🛠주요 기능 구현
-
클라이언트단에서 받아온 인가코드로 카카오 서버에 토큰 요청하기

-
엑세스 토큰으로 사용자 정보 요청하기
- 카카오 서버에서 사용자 정보를 받아와 변수에 담아주었다.
- 이후 JWT로그인 처리를 하며 DB에 저장한다.

- JWT로 자체 로그인 처리하기
- JWT엑세스 토큰과 리프레시 토큰을 발행하고, 엑세스 토큰은 cookie에 전달, 리프레시 토큰은 DB에 저장했다.
- try catch문으로 에러처리하였다.
- 회원정보가 없는 경우(else문) DB에 회원정보를 저장해 가입처리 한 후 동일한 작업을 수행했다.

- DB 설계
- 공유 가계부 웹이기 때문에, User 테이블과 가계부 테이블인 Sheet테이블을 분리하고 DBhub테이블로 연결하였다. 각 가계부의 정보는 Info테이블로, Sheet테이블의 자식테이블로 연결하였다.

- Sequelize - find 조건문
- Sequelize의 Op 모듈을 사용하여 [Op.and]로 where조건문 여러개를 사용하였다.
- 현재 해당 연도의 월별 수입, 지출데이터를 찾아 전달하기 위해 input_date 컬럼의 연도값이 현재 연도와 동일한 값을 찾는 조건을 걸어주었다. Mysql의 YEAR함수를 사용하였다.


- 데이터 가공 - arr.reduce()
- 월 별 수입 배열, 월 별 지출 배열을 각각 응답 데이터로 전달하기 위해 함수를 만들어 사용했다.
- 날짜 데이터에서 월만 추출하여 배열 안에 {month: 월, money: 금액} 객체를 새로 만들어주었다.
- arr.reduce()메소드를 사용하여 month값이 같은 경우 금액을 합쳐 월 별 수입/지출 배열을 만들었다.

- 가계부 공유
- DBhub테이블의 guest컬럼에 초대한 사람의 email을 저장, auth컬럼값을 false(2)로 주었다.
- 초대 받은 사람이 로그인 할 경우 guest 컬럼에서 자신의 email을 검색, auth값이 false(2)인 가계부를 초대알림에 띄우도록 했다.

- 초대 승인버튼 클릭 시 auth값을 true(1)로 주어 가계부 열람/편집 권한을 주었다. 로그인 시 '나의 가계부' 리스트에 띄운다.
- 초대 거절버튼 클릭 시 DBhub 테이블에서 해당 행을 삭제한다.
