본문 바로가기

Backend

(76)
Node.js (Express) mongoose 연동 NodeJS에서 mongoose 모듈을 활용하여 mongodb를 연동해볼게요. 아주 간단해요. 이 글은 몽고DB를 연결하는 데에 목적이 있어요. (사실 연결할 때마다 구글에 검색해서 긁어오기 귀찮아서..) mongoose 모듈을 활용하여 crud하는 기능은 차후에 별도로 포스팅할 예정이에요~! mongoose 설치 npm install mongoose mongodb.js 설정 혹시 비밀번호가 있다면 mongodb://username:password@localhost:27017/demo const mongoose = require('mongoose') mongoose.connect('mongodb://localhost:27017/demo', { useNewUrlParser: true, useUnifiedT..
Node.js 패스워드 암호화 - bcrypt NodeJS에서 bcrypt로 패스워드 암호화하는 방법을 알아볼게요. bcrypt는 현업에서 많이 사용하고 있는 패스워드 암호화 알고리즘이에요. 기본적으로 salt를 추가하여 해싱하기 때문에 오래 전부터 많이 사용하는 SHA256이나 SHA512보다 보안성이 높다는 평가를 받아요. 물론 다른 알고리즘들도 어떻게 개발자가 salt를 활용하여 커스텀하게 구현하느냐에 따라 보안 강도가 달라지지만 bcrypt를 선택했다는 것만으로도 안정성을 어느 정도 보장받는다고 보시면 되요. 이제부터 NodeJS로 어떻게 평문을 bcrypt를 활용하여 암호화하고 검증하는지 코딩을 해볼게요. bcrypt 모듈을 설치 npm install bcrypt 이제 사용만 하면 되요. 일단 암호화해볼게요. bcrypt 모듈을 소스 상에서..
Node.js Logging 설정 (winston) NodeJS에서 로그를 남겨볼게요. 어떤 서버든지 실제로 서비스를 운영하려면 로그 남기는 것은 필수에요. 특히, 로그 파일만 보고 error가 정확히 어떤 파일의 몇 번째 라인에서 발생했는지 남는 것이 중요해요. 중요한 info 로그도 남길 수 있어야 해요. 예제를 통해 알아볼게요. 우선 아래 모듈을 설치해주세요. npm install winston winston-daily-rotate-file logger.js 아래 코드를 복사하여 원하는 경로에 넣어주세요. 저는 config라는 폴더를 만들어서 넣었어요. logDir 경로는 로그 파일이 저장되는 경로에요. 코드 적용하실 때에 logDir은 필수로 수정해주세요. var winston = require('winston') const winstonDaily..
Node.js exception handler - custom error Node.js에서 커스텀한 메시지를 내려볼게요. 실제로 발생하는 오류가 아닌 "비밀번호 불일치", "게시글 없음"과 같은 오류를 전달할거에요. 바로 예제로 가볼게요. Express Framework 환경이구요. 아마 에러 핸들러를 만드는 최소한의 코드일거에요. 수정하셔서 사용하시면 될 것 같습니다. 일단 custom-error, error-handler라는 파일을 만들었어요. custom-error.js class CustomError extends Error { constructor(code, message, ...params) { super(...params) if (Error.captureStackTrace) { Error.captureStackTrace(this, CustomError) } thi..
Spring Boot logback.xml 설정 logback.xml 파일을 사용해서 로깅 설정을 해볼게요. 스프링부트에서는 application.yml으로 로깅 설정이 가능하지만 할 수 있는 기능이 많지는 않아요. 그래서 실제 어느 정도 규모 있는 서비스를 운영하기 위해선 xml 파일로 설정해두는 것이 좋아요. src/main/resources 경로 밑에 logback-spring.xml 파일을 만들어주세요. 그러면 자동으로 애플리케이션을 실행할 때 파일을 읽어 설정값을 적용합니다. logback-spring.xml %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n ${filePath}/app.log ${filePath}/app.%d{yyyy-MM-dd}.%i.gz 1GB 10 %d{HH:mm:ss..
Spring Boot Logging 간단 설정 (application.yml) 아주 간단한 로깅 남기는 법이에요. 어느정도 규모가 작은 서비스는 application.yml 설정만으로도 커버할 수 있어요. 규모가 점점 커지면 logback.xml 파일로 세부적으로 설정해서 관리할 필요가 있어요. application.yml logging: file: path: /Users/hong/Logs/kotlin-spring max-size: 500MB max-history: 10 level: root: info me.hong.kotlinspring: debug 주의할 점은 logging.file.name 을 설정하면 프로젝트 루트 경로에 파일이 생기고 logging.file.path는 먹지 않아요. 이유는 자세히는 안 찾아봤어요.. 버그인지 의도한건지.. logging.file.max-si..
Node.js 파라미터 전달 (Param, Path, Body, Header) NodeJS에서 파라미터를 받아볼게요. http 통신에 대한 기초적인 개념이 있으셔야 하구요. 1. 파라미터 받기 (Parameter) http://localhost:3000/users?userId=gofnrk&password=1234 요런식으로 파라미터를 전송해볼게요. router.get('/', function(req, res, next) { let { userId, password } = req.query; console.log(userId); console.log(password); res.send('respond with a resource'); }); 2. 경로를 변수로 받기 (Path Variable) http://localhost:3000/users/gofnrk 요렇게 호출했을 때 gofn..
JPA enum으로 컬럼 관리 DB에 특정 데이터만 들어가야 하는 경우가 있어요. 성별: 남자/여자 삭제플래그: YES/NO 상태값: 준비/진행/완료 등등 비즈니스에 따라 여러가지 경우가 있는데요. 데이터를 관리하기 용이하도록 enum을 활용해볼게요. 예시는 쉽게 남자/여자 데이터로 해볼게요. 우선 enum 클래스를 하나 만들어주세요. description 필드는 굳이 안넣어도 됩니다. Gender.java (enum) @Getter @AllArgsConstructor public enum Gender { MALE("남자"), FEMALE("여자"); private String description; } User.java (Entity) @Entity @Getter @Setter public class User { @Id @Gener..