req.user는 Express.js 애플리케이션에서 주로 사용자의 인증 및 권한을 관리하고, 사용자와 관련된 데이터를 접근하기 위해 사용되는 객체입니다. 이를 Sequelize 모델과 함께 사용하면, 로그인한 사용자와 관련된 데이터베이스 작업을 쉽게 처리할 수 있습니다.
1. req.user가 왜 사용되는가?1.1 인증된 사용자 데이터 관리
req.user는 현재 요청(request)을 보낸 사용자와 관련된 정보를 담고 있습니다.
사용자 인증(authentication)이 완료된 후, 사용자 정보를 요청 객체(req)에 추가하여 나머지 요청 처리에서 쉽게 접근할 수 있습니다.
1.2 데이터베이스 작업 편리화
req.user를 통해 현재 사용자와 관련된 데이터베이스 작업을 간편하게 수행할 수 있습니다.
예: 사용자의 장바구니 조회, 주문 생성, 프로필 수정 등.
req.user는 일반적으로 Sequelize 모델 인스턴스로 설정되며, 이를 통해 Sequelize의 모델 메서드(getCart, createOrder 등)를 호출할 수 있습니다.
1.3 코드의 재사용성과 간결성 증가
각 요청마다 사용자 정보를 별도로 쿼리하지 않고, 미리 인증된 사용자 정보를 req.user에 저장함으로써 코드를 간결하게 유지할 수 있습니다.
2. req.user가 어떻게 설정되는가?
req.user는 보통 미들웨어에서 설정됩니다. 대표적인 방식은 다음과 같습니다.
2.1 Passport.js를 이용한 설정
Passport.js는 인증 미들웨어로, 로그인 후 사용자의 정보를 req.user에 설정합니다.
2.2 커스텀 미들웨어를 이용한 설정
직접 미들웨어를 작성하여 req.user에 사용자 정보를 설정할 수도 있습니다.
3. req.user를 사용해야 하는 이유
3.1 사용자 고유 데이터 접근
req.user를 사용하면 로그인된 사용자에 대한 고유 데이터를 쉽게 처리할 수 있습니다.
장바구니, 주문, 프로필 등의 데이터베이스 작업에서 사용자 ID를 따로 관리할 필요가 없습니다.
3.2 컨트롤러 코드의 단순화
사용자 데이터를 컨트롤러에서 별도로 가져오지 않고, req.user를 통해 바로 접근할 수 있습니다.
3.3 보안 강화
req.user는 서버에서만 접근 가능한 객체이므로, 보안상의 이유로 클라이언트 측에서 사용자 데이터를 노출하지 않습니다.
4. 주의할 점
req.user는 반드시 설정된 상태여야 합니다.
인증되지 않은 사용자의 요청에서는 req.user가 undefined일 수 있으므로 이를 처리하는 로직이 필요합니다.
사용자 데이터의 최신 상태를 유지해야 합니다.
예를 들어, 세션의 사용자 정보가 오래된 데이터일 수 있으므로, 중요한 작업 전에는 데이터베이스에서 새로 조회하는 것이 안전합니다.
보안 확인
사용자 인증이 제대로 이루어졌는지 확인하고, 권한이 필요한 작업에는 추가적인 권한 검사를 수행해야 합니다.