node.js와 Mysql을 이용해서 회원가입 구현하기

kmsdoit·2022년 3월 25일
2

node.js

목록 보기
1/1
post-thumbnail

들어가기 앞서...

우선 회사에서 사이드 프로젝트로 진행하는 쇼핑몰 프로젝트에서 쓰일 API를 만들다가 node.js에서 typescript를 이용해서 다른 분들도 보시기에 참고하셨으면 좋겠다라는 생각에서 진행했습니다.

기술스택

node.js => v14.17.4
mysql => 8.0.22
사용된 패키지와 버전들

API 테스트 => Insomnia

mysql 회원가입 테이블 만들기

create table user(
	_no int auto_increment primary key, //식별을 위한 컬럼
    user_id varchar(50) not null, // 아이디
    user_password varchar(100) not null, // 패스워드 => 사이즈를 크게 잡은 이유는 암호화를 할것이기 때문이다
    user_name varchar(30), // 이름
    user_email varchar(30) // 이메일
);

다 만들게 되면
이렇게 테이블이 구성된다.

node.js 시작하기

파일 구조 보기


저는 파일 구조를 이렇게 잡고 진행했습니다.

app.ts


저는 app.ts를 이렇게 구성했습니다. 원래는 PORT도 .env에 넣고 처리하지만 귀찮은 관계로 app.ts에서 const PORT = 3000; 으로 선언 했습니다.

우리가 평소에 아는 app.js와 다른 것은 바로 req,res,next에 타입이 지정되었는데요. 저렇게 지정을 하지 않을경우 에러가 떨어집니다. 타입스크립트에 대해서 궁금하시다면 제 velog에 타입스크립트 내용을 보시면 됩니다.

참고로 cors는 저렇게 쓰면 안됩니다 원래는 whitelist를 지정해줘야하는데 아직 프론트단이 완성이 안돼서 나중에 배포할때는 다 처리를 하고 배포 할 것입니다.

자 이제 http://localhost:3000/welcome으로 접속을 하게 되면
우리가 코드를 작성한대로 잘 나오게 되었습니다. node.js가 잘 동작되는 것을 확인했으니 이제 node.js 와 mysql을 연결을 해야겠죠

node.js와 mysql 연결

저는 config라는 폴더 밑에 dbConnect.js라는 파일을 만들었습니다.

저렇게 연결해주면 되는데 참고로 테스트 할때를 제외하고 host,user,password 등등 정보들을 절대 코드내에서 사용하면 안됩니다. 그렇기 때문에 저는 .env라는 파일을 만들어서 관리를 해주고 있습니다.

.env

dotenv 라이브러리는 디폴트로 현재 디렉토리에 위치한 .env 파일로 부터 환경 변수를 읽어냅니다. 따라서, .env 파일을 생성하고, 그 안에 필요한 환경 변수를 키=값의 포멧으로 나열하면 됩니다.

회원가입 API 만들기

드디어 오늘의 주제가 나왔습니다.
저는 라우팅 하는 부분과 API 로직이 실행하는 부분을 나눴습니다.

routes/routes.ts

라우팅부분 코드입니다. router.get(),router.post로 API를 어떻게 보낼지 정하고 그 내용을 수행하는 부분은 모듈화 하여서 저렇게 가져다가 사용하였습니다.

service/user.ts


회원가입을 실행하는 로직입니다. (일부러 라우팅하는 부분과 API 로직을 실행하는 부분을 나눴습니다. 그 이유는 물론 가독성 측면도 있지만, MVC패턴을 최대한 지키려고 노력했지만 사실 M 부분이 잘 안된것 같아서 조금 더 고민을 해야할 것 같습니다... )

아 참고로 아이디 암호화가 아니라 비밀번호 암호화 입니다. 저는 bcrypt 라이브러리를 이용해서 진행하였고 body를 통해서 전송해올 비밀번호를 bcrypt.hashSync(암호화할 대상, salt)를 이용해서 암호화 하였습니다.

테스트

이제 만든 API를 테스트 해볼 시간입니다.


이렇게 API를 던지게 되면

이런 결과값을 낼 수 있는데 사실은 저 param은 안쓰는 것이 좋습니다. 하지만 그냥 테스트할 때 값이 제대로 들어오는지 확인을 위해서 넣었습니다.

DB에서 확인


실제로 이런식으로 저장되게 된다.

마무리

회원가입은 짜려고 하면 쉽지만 암호화 부분이 들어가면 조금은 생각을 해야하는 부분이 생길 것 같다. 다음 포스트에서는 로그인 로직때는 저것을 어떻게 복호화 해서 로직을 진행할지에 대해서 쓰겠습니다.

profile
하나님 열심히 믿는 Junior back-end Developer🙏

0개의 댓글