Tristy Project/node js
[node js] 인스타그램 클론 코딩
Tristy
2021. 4. 11. 18:13
- 진행 날짜 - 2021.04.02 ~ 2021.04.08
- 필수 포함 사항
🤩 사용한 패키지 및 CSS
- Express => node.js의 웹 프레임워크
- mongoose => node.js에서 비관계형 데이터베이스인 Mongo DB를 사용해보자
- eslint => node.js에서 팀 단위 협업시, 문법 검사를 해보자
- prettier => node.js에서 팀 단위 협업시, 코딩 스타일을 통일해보자
- husky => node.js에서 git hook을 손쉽게 관리해보자
- lint-staged => node.js에서 Git에 staged 상태인 파일만 lint해주자
- cors => node.js에서 cors 문제를 해결해보자
- nodemon => node.js에서 파일 수정시 자동으로 서버를 내렸다가 올려보자
- bcrypt => node.js에서 데이터베이스에 저장할 비밀번호를 암호화 해보자
- multer => node.js에서 프론트 엔드에서 보내주는 이미지 데이터를 받아보자
- multer-s3 => node.js에서 AWS S3에 접근하여 이미지 데이터를 업로드 해보자
- aws-sdk => node.js에서 AWS를 사용해보자
- jwt => node.js에서 jwt 토큰을 이용한 로그인 기능을 구현해보자
🤭 구현한 기능
- 로그인 및 회원가입 기능
- 메인 페이지 글 보여주기 기능
- 좋아요 및 싫어요 기능
- 로그인 한 사용자의 프로필 데이터 보여주기 기능
- 글쓰기 및 이미지 업로드 기능
🤭 이번 프로젝트를 하며 새롭게 배운 것
- 백엔드 단 구조 잡기 (mvc 구조)
- multer를 사용하여 이미지를 프론트 엔드에서 받아오고, 그것을 AWS S3에 올려보기
- bcrypt를 사용하여 비밀번호를 암호화하여 저장하고, 로그인시 비교하기
- authorization 인증 토큰을 헤더로 담아오기
😎 폴더 구조
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
instagram_clonCording
├─ node_modules
│
├─ .vscode
│
├─ middleWare
│ └─ verifiacation
│ └─ verify_middleWare.js
│
│
├─ models
│ ├─ schema
│ │ └─ board_schema.js
│ │ └─ comment_schema.js
│ │ └─ like_schema.js
│ │ └─ user_schema.js
│ │
│ └─ connectDB.js
│
├─ controller
│ ├─ board_controller
│ │ ├─ board_service
│ │ │ └─ board_service.js
│ │ └─ board_controller.js
│ │
│ ├─ login_controller
│ │ ├─ login_service
│ │ │ └─ login_service.js
│ │ └─ login_controller.js
│ │
│ ├─ main_controller
│ │ ├─ main_service
│ │ │ └─ main_service.js
│ │ └─ main_controller.js
│ │
│ ├─ profile_controller
│ │ ├─ profile_service
│ │ │ └─ profile_service.js
│ │ └─ profile_controller.js
│ │
│ └─ register_controller
│ ├─ register_service
│ │ └─ register_service.js
│ └─ register_controller.js
│
└─ app.js
└─ package-lock.json
└─ package.json
└─ awsconfig.json
└─ .prettierrc.json
└─ .eslintrc.json
|
cs |
🎨 Instagram Clone Cording ERD
🤭 API
🤭 multer와 AWS 사용하기
multer를 사용하여 Amazon S3에 이미지를 업로드할 수 있습니다.
이미지 같은 경우는 용량도 크니, 아무래도 Amazon에서 빌리는 편이 더 좋겠죠?
단, 이미 Amazon S3 bucket이 만들어진 상태여야 하고
미리 awsconfig.json에 aws 키값을 받아서 입력해야 합니다.
물론, 저는 노출 방지를 위해서 내용을 빼놨습니다.
🤭 bcrypt 암호화 하기 및 비교하기
bcrypt는 미국 NSA에서 설계한 암호화 해시 함수입니다.
기존의 SHA가 해쉬속도가 너무 빠른 탓에 레인보우 테이블을 만들 수 있는 시간이 단축된다는 문제점이 있었습니다.
bcrypt는 blowfish라는 기법이 사용되어서 원하는 만큼 해쉬 속도를 조절할 수 있다는 장점이 있었습니다.
그래서 이번 프로젝트에서는 bcrypt로 암호화를 진행하였습니다.
만약, 보안에 더 민감한 곳이라면 scrypt나, Argon2id를 사용해야 합니다.
mongoDB 스키마에 암호화 걸기
bcrypt로 암호화된 비밀번호와 입력된 비밀번호 비교하기
😭 반성점 OR 다음 프로젝트 부터 고치고 싶은 것
- 아무래도 미구현된 기능들이 너무 아쉽습니다 ㅠㅠ
👾 결과물