해결된 질문
작성
·
7
·
수정됨
0
json 대신 로그인, 회원가입 일때 db 연결 및 data 사용하려면 어떻게 하나요?
답변 1
0
안녕하세요 eju님 🙂
JSON 파일 대신 데이터베이스(DB)를 사용해 로그인과 회원가입 기능을 만들고 싶으시다면, 전체적인 그림을 이렇게 이해하시면 됩니다.
우선 JSON 파일은 데이터를 “그때그때 파일로 직접 저장하는 방식”이에요. 간단해서 배우기에는 좋지만, 사용자가 많아지거나 여러 요청이 동시에 들어오면 금방 한계가 생깁니다. 반면 DB(데이터베이스)는 수많은 데이터를 빠르고 안정적으로 보관하고 꺼내 쓸 수 있는 전용 저장소예요. 쉽게 말해, “데이터를 안전하게 관리해주는 똑똑한 금고”라고 생각하시면 됩니다.
Node.js와 Express 환경에서 자주 쓰는 DB에는 세 가지 대표적인 종류가 있습니다.
먼저 MySQL과 PostgreSQL은 표(테이블) 형태로 데이터를 저장하는 관계형 데이터베이스입니다. 회원 정보, 결제 내역, 주문 기록처럼 구조가 정해진 데이터를 다룰 때 강력하고 안정적이에요.
반면 MongoDB는 NoSQL 데이터베이스로, JSON처럼 생긴 문서(document) 단위로 데이터를 저장합니다. 구조가 자유롭고 변경이 잦은 서비스, 예를 들어 SNS, 게시판, 로그 기록 에서 특히 자주 사용됩니다.
실무에서는 여전히 PostgreSQL이나 MySQL이 가장 많이 쓰이고, 빠르게 기능을 만들어야 하는 스타트업이나 학습용 프로젝트에서는 MongoDB도 인기가 많습니다.
Node.js + Express에서는 이런 DB와 연결하기 위해 중간 도구(라이브러리)를 사용합니다.
PostgreSQL이나 MySQL은 Prisma
나 Sequelize
, MongoDB는 Mongoose
를 가장 많이 써요.
이 도구들이 “DB에 데이터 넣기 / 꺼내기”를 자바스크립트 코드 몇 줄로 간단하게 바꿔 줍니다.
간단히 회원가입을 예로 들면, 사용자가 이름·이메일·비밀번호를 입력했을 때 서버는 다음 순서로 동작합니다.
입력값이 비어 있지 않은지, 이메일 형식이 맞는지 검사합니다.
비밀번호를 bcrypt 라이브러리로 암호화(해시)합니다. 이렇게 하면 실제 비밀번호가 노출되지 않고도 로그인 검증이 가능합니다.
암호화된 비밀번호와 함께 DB에 안전하게 저장합니다.
로그인 과정은 반대로,
사용자가 입력한 이메일을 DB에서 찾아보고,
저장된 암호화된 비밀번호와 입력된 비밀번호를 bcrypt.compare()
로 비교합니다.
두 값이 일치하면 로그인 성공으로 처리합니다.
로그인이 성공하면 서버는 세션/쿠키 방식이나 JWT 토큰을 사용해 로그인 상태를 유지합니다. 세션은 “서버가 로그인표를 들고 있는 방식”이고, JWT는 “서버가 서명된 출입증을 만들어 클라이언트가 직접 들고 있는 방식”이에요.
보안은 여기서 매우 중요합니다.
1. 비밀번호는 절대로 원문 그대로 저장하지 않고 반드시 해시 형태로 저장해야 합니다.
2. DB 주소와 계정 정보는 코드에 직접 쓰지 말고 .env
파일에 따로 숨겨야 합니다.
3. 입력값을 꼼꼼히 검사해서 비정상적인 데이터(빈칸, 이상한 형식 등)는 바로 거절해야 합니다.
이 세 가지만 지켜도, JSON 파일 대신 DB를 사용해도 훨씬 안전하고, 실제 서비스에 가까운 구조를 만들 수 있습니다.
마지막으로, 실무에서는 PostgreSQL이나 MySQL이 표준으로 가장 널리 쓰이고,
MongoDB는 빠르게 바뀌는 데이터나 JSON 구조의 서비스에 유리합니다.
처음 공부하실 때는 MongoDB가 이해하기 쉬워서 입문용으로 좋고,
나중에 회사나 프로젝트 단위로는 PostgreSQL을 연습해두시면 실무에 훨씬 도움이 됩니다.
이 부분은 앞으로 제가 준비 중인 Node.js + Express 실전 강의에서 다룰 예정입니다.
JSON 저장에서 DB 연결로 넘어가는 과정, Prisma·Mongoose 사용법, 비밀번호 암호화와 로그인 세션 관리까지 전부 하나씩 보여드릴 계획이에요. 현재 교재와 함께 실습 중심 강의로 준비 중이며, 가능한 한 빠른 시일 내에 출시하겠습니다.
감사합니다.