diff --git a/backend/src/modules/mail/mail.service.ts b/backend/src/modules/mail/mail.service.ts index bddba04..fb751e8 100644 --- a/backend/src/modules/mail/mail.service.ts +++ b/backend/src/modules/mail/mail.service.ts @@ -1,25 +1,16 @@ import { Injectable, Logger } from '@nestjs/common'; -import { ConfigService } from '@nestjs/config'; // 메일 발송 서비스 (플레이스홀더) — -// 현재는 실제 SMTP 전송 대신 백엔드 로그로 대체한다. -// 추후 nodemailer 등 도입 시 이 서비스 내부 구현만 교체하면 호출부는 그대로 유지된다. +// 현재는 실제 SMTP 전송 대신 백엔드 로그로 대체한다(개발/운영 공통). +// 실 메일러(nodemailer 등) 도입 전까지는 인증/재설정 링크를 로그에서 확인한다. +// ⚠️ 보안: 링크에는 원문 토큰이 포함된다. 실 메일러 도입 시 반드시 이 로그 출력을 제거하고 +// 실제 이메일 전송으로 교체할 것(운영 로그에 토큰을 남기지 않기 위함). @Injectable() export class MailService { private readonly logger = new Logger(MailService.name); - constructor(private readonly config: ConfigService) {} - - // 가입 인증 메일 — 개발 환경에서만 인증 링크(원문 토큰 포함)를 로그로 출력한다. - // 운영 환경에서는 토큰이 로그에 남지 않도록 수신자만 기록한다(실 메일러로 교체 전제). + // 가입 인증 메일 — 실 메일러 전까지 인증 링크(원문 토큰 포함)를 로그로 출력한다(개발/운영 공통). sendVerificationEmail(to: string, name: string, verifyUrl: string): void { - const isProd = this.config.get('NODE_ENV') === 'production'; - if (isProd) { - this.logger.log( - `[메일 발송 - 가입 인증] 수신자=${to} (인증 링크는 보안상 로그에 남기지 않음 — 실 메일러 필요)`, - ); - return; - } this.logger.log( [ '', @@ -34,16 +25,8 @@ export class MailService { ); } - // 비밀번호 재설정 메일 — 개발 환경에서만 재설정 링크(원문 토큰 포함)를 로그로 출력한다. - // 운영 환경에서는 토큰이 로그에 남지 않도록 수신자만 기록한다(실 메일러로 교체 전제). + // 비밀번호 재설정 메일 — 실 메일러 전까지 재설정 링크(원문 토큰 포함)를 로그로 출력한다(개발/운영 공통). sendPasswordResetEmail(to: string, name: string, resetUrl: string): void { - const isProd = this.config.get('NODE_ENV') === 'production'; - if (isProd) { - this.logger.log( - `[메일 발송 - 비밀번호 재설정] 수신자=${to} (재설정 링크는 보안상 로그에 남기지 않음 — 실 메일러 필요)`, - ); - return; - } this.logger.log( [ '',