1. 리팩토링
- 소프트웨어 개발 과정에서 코드를 재구성하여 가독성을 높이고 유지보수를 쉽게 만드는 과정
- 코드의 구조를 개선하고 중복을 제거하여 더 나은 설계 패턴을 도입함으로 코드의 품질을 향상
- 코드의 기능을 변경하지 않으면서 코드를 개선하는 방법
express-validator
Express.js를 사용하여 웹 어플리케이션을 개발할 때 입력 데이터의 유효성을 검사하기 위한 패키지
설치
npm i express-validator
isLength(): 문자열 길이 검증
app.get('/:email', [param('email').isLength({min:3}).withMessage('이메일을 입력하세요'), validate], (req, res, next) => {
res.send('📧')
});
// 확인이 필요(잘 작동 안함)
isEmail(): 이메일 주소의 유효성 검즘
app.get('/:email', [param('email').isEmail().withMessage('이메일을 입력하세요'), validate], (req, res, next) => {
res.send('📧')
});
isInt(): 숫자의 최소 또는 최대값 검증
app.get('/:num', [param('num').isInt({min:10, max:100}).withMessage('숫자의 범위를 10이상 100이하로 입력하세요'), validate], (req, res, next) => {
res.send('📧')
});
matches(): 정규표현식을 사용하여 문자열의 패턴을 검증
app.get('/:name', [param('name').matchs(/^[가-힣]+$/).withMessage('이름은 한글로 입력하세요'), validate], (req, res, next) => {
res.send('📧')
});
2. 회원 정보 확인
회원가입, 로그인(회원정보 확인, 아이디를 보내면 해당 객체의 정보만 출력)
users = [
{
....
}
]
Authentication(인증)
1. cookie & session
cookie
- 클라이언트 컴퓨터에 저장되는 작은 데이터 조각
- 서버로 부터 전소오디어 클라이언트 웹 브라우저에 저장
- 텍스트 형식으로 주로 사용자 인증, 설정, 장바구니 등에 사용
session
- 웹 서버 측에서 유지되는 상태 정보
- 사용자에 대한 고유한 세션ID를 통해 식별
- 서버 메모리 또는 데이터베이스에 저장할 수 있음
2. JWT(JSON Web Token)
- 웹 애플리케이션과 서비스 간에 정보를 안전하게 전달하기 위한 인증 및 권한 부여 매커니즘을 구현하는 데 사용되는 표준화된 방법 중 하나
- JSON 포맷을 사용하여 정보를 표현하고 서명 및 암호화를 통해 정보의 무결성을 보장
{ Header | Payload | Signature }
Header: 토큰 유형 및 서명 알고리즘과 같은 메타테이터가 포함
Payload: 토큰에 포함될 데이터가 들어있는 부분
Signature: 헤더, 페이로드 및 비밀 키를 사용하여 생성된 서명을 토큰의 무결성을 검증하는데 사용
3. bcrypt
- 해시 함수를 사용하여 비밀번호를 안전하게 저장하는 데 사용되는 암호화 라이브러리
- 단반향 해시 함수로 한 번 해시된 값을 다시 원래 값으로 역추적하는 것이 불가능
- 솔트(salt): 해시에 고유한 솔트 값을 추가하여 보안성을 높임. 같은 비밀번호를 가진 사용자가 있더라도 서로 다른 해시값을 가짐
- 작업인자(Adaptive Work Factor): 매개변수를 조정하여 해시 작업의 복잡성을 조절. 암호 분석학적으로 안전한 해시 함수를 유지하면서도 암호화 작업에 필요한 시간을 조절할 수 있게 함
✔ 해시 함수
임의의 길이의 데이터를 받아서 고정된 길이의 고유한 값으로 변환하는 함수. 이러한 변환된 값은 해시 값 또는 해시 코드라고 함
- 동일한 입력에 대해 항상 동일한 해시 값을 생성
- 고덩죈 출력 길이를 생성
- 해시된 값을 통해 원본 값을 복구할 수 없음
4.jsonwebtoken
- 웹 애플리케이션에서 인증 및 정보 교환을 위한 토큰 기반의 인증 방식 중 하나
- base64로 인코딩된 json 객체이며 사용자 정보 및 기타 데이터를 안전하게 전송하기 위해 사용
- header: jwt의 유형과 해싱 알고리즘이 포함
{
"alg":"hs256",
"typ":"jwt"
}
- patload: 토큰에 담길 정보가 포함
{
id: 'apple',
isAdmin: false
}
- signature: 헤더와 페이로드를 인코딩하고 비밀 키를 사용하여 서명된 문자열, 서명은 토큰이 변조되지 않았음을 확인하는데 사용
sign()
- jsonwebtoken.sign(payload, secretOrPrivatekey,[options,callback])
- payload: jwt에 포함될 페이로드 데이터
- secretOrPrivatekey: jwt 서명하기 위해 사용될 비밀 키 또는 개인 키
'웹 개발' 카테고리의 다른 글
35. Sequelize와 MongoDB (0) | 2024.05.09 |
---|---|
34. Socket.IO를 활용한 웹소켓 채팅 및 ORM vs ODM 비교 (0) | 2024.05.08 |
32. 자바스크립트 다양한 출력들8 (0) | 2024.04.24 |
31. 자바스크립트 고급 정리4(node.js) (0) | 2024.04.24 |
30. 자바스크립트 다양한 출력들7 (0) | 2024.04.24 |