서버를 구현하게 된 이유
- 오랜 기간 설계 일을 하면서 느낀점이 있었다. 그건 내가 무언갈 하기 위해 내 기준만을 고집하는 게 아닌 다른 영역도 이해하고 있어야 업무에 있어 의사소통이 원활해지고, 서로 마찰없이 문제를 해결해나갈 수 있다는 것이다. 항상 프로젝트를 하면서 좋은 백엔드분들을 만나 원활하게 소통의 이슈 없이 프로젝트를 진행할 수 있었지만, 소통 시 언어를 이해하지 못해 시간이 오래걸렸던 기억이 많았다. 이번 프로젝트를 구현함에 있어 같이 일하게 될 동료의 마음을 이해할 수 있는 기회가 되지 않을 까 해서 백엔드 파트 구현하게 되었다.
- 이전 FireBase를 이용하여 서버를 구축했던 적이 있다. 하지만 서버의 로직자체를 프론트쪽에서 처리하였었고, CloudFunction 을 이용하는 방법도 있었지만, 이번 기회를 통해 API 작업이라던지, Express 구현을 통해 백엔드 이해도를 높이고 싶었다.
Sequelize, Sqlite, Express
-
Sequelize
를 도입하게 된 이유
-
강의 영상을 보던 중 Sequelize를 이용하면 DB를 node.js로 다룰 수 있다고 배웠다!
우리는 프로젝트의 기간을 2주로 잡고 있었기 때문에 프론트쪽 react-query도 공부해야했고, 프론트를 구현하기 전에 서버 구현을 마쳐서 작업을 해야 프로젝트 기간 안에 마칠 수 있다고 생각했다.
이번 프로젝트 구현 이후 시간을 내서라도 SQL을 공부해봐야겠다. 왜냐면 콘솔에 찍히는 SQL 문을
사용하면 좀 더 코드를 줄일 수 있지 않을까? 라는 생각을 하게 되었다.
-
프로젝트의 볼륨
우선 첫 구상 시에 프로젝트의 기초 구상을 했었다. 구성해야하는 기능은 로그인, 로그아웃, 질문 등록, 질문 재등록, 마이 페이지에서 등록한 질문 보는 항목 등 간단한 작업들로 이루어져있었다. 따라서, SQL 문보다 빠르게 이해하고 사용할 수 있는 ORM을 사용하기로 했다.
-
ORM의 장점
공부하기 전 ORM 장점에 대해 공부했다. 직관적인 코드와 비지니스 로직에 집중할 수 있다는 것이 장점이였다. 처음 Express를 사용하고, 현재 언어를 JS 만을 사용하고, Express도 익숙하지 않기 때문에 Express와 비지니스 로직에 집중하는 것이 중요하다고 생각했다.
-
Sqlite
를 도입하게 된 이유
- 우선 우리는 RDBMS가 필요했다. 이유는 유저가 당일 작성한 답변의 수, 페이지네이션, 질문 재 등록 등 연관되어 있는 데이터가 필요하다 생각했다.
- 우선 프로젝트의 규모가 작기 때문에 가볍고 빠른 DB가 필요했고, 무료로 사용할 수 있는 DB가 필요했다. 또한, 우선 백엔드의 경험이 중요했기 때문에 설치와 사용이 쉬운 Sqlite를 사용하게 되었다.
- 하지만 sqlite는 여러 사용자가 접근하기 어렵기 때문에 나중에 커뮤니티의 기능을 확장할 때는
다른 DB로 옮길 예정이다. 프로젝트 구상 시 우선 여러 사용자가 소통하는 것이 아닌 개인이
사용한다는 가정이 있었기 때문이다.
- 짧은 프로젝트 기간동안 프로젝트의 목업을 만들고 추후 확장 시 새로운 팀원이 이해할 수 있도록 목업이 구현되어야 했기 때문에 Sqlite를 선택하게 되었다.
-
Express
를 도입하게 된 이유
- Express의 라우팅 기능이 react의 라우팅 기능과 비슷하여 로직을 분리하기에 적합하다고 생각했다.
- 커뮤니티가 크기 때문에 참고할 소스들이 많다고 생각했다. 실제로 많은 소스를 통해 참고하고 여러 기능들을 구현할 수 있었다.
- 이전에 한번 경험해봤었다. 이전 경험을 통해 가장 빠르게 라우팅과 API 를 작성할 수 있겠다 생각했다.
Step1. oauth를 통한 로그인!
Oauth를 도입하게 된 이유
-
사용자가 사용하기 편하다.
사용자가 회원가입 시 아이디, 비밀번호 등을 직접 입력하여 회원가입, 로그인을 진행하지 않아도 되기 때문에 사용자의 편의성을 높일 수 있다.
-
프론트엔드 측에서 작업을 줄일 수 있다.
Oauth 인증 방식을 이용하면 별도의 회원가입 로직, 로그인 로직을 생략할 수 있다. 이는 개발 시간을 고려했을 때 보다 효율적이라고 생각했다.
Oauth 의 이해
이전 프로젝트에서 Oauth에 대해 공부했었다. 하지만 막상 백엔드 파트로 구현하려니 뭔가 머릿속이 뒤죽박죽했기 때문에 하나하나씩 정리해뒀었다.
Oauth 인증 순서

옆에 그림과 같은 방식을 구현하고자했다. 알고보니 Oauth 인증 방식에도 여러 방식이 있다는 것을 알 수 있었다.
이번 프로젝트에서 구현한 방식은
Authroization Code Grant(권한 부여 승인 코드 방식)
이다.
OAuth 2.0 개념 총 정리
위 링크에 Oauth의 인증에 대해 자세히 나와있다. 나중에 시간을 내서 자세하게 공부해야겠다.
내가 생각한 회원가입 서버로직
- 클라이언트에서 서버 인증 관련 로직으로 이동.