본문 바로가기

코딩 나도 할 수 있다!!

최종 프로젝트 Gmail SMTP

SMTP란?

SMTP(Simple Mail Transfer Protocol)는 이메일을 전송하고 라우팅하는 데 사용되는 표준 프로토콜입니다.

주로 이메일 클라이언트와 이메일 서버 간의 통신에 사용되며, 인터넷에서 이메일을 전송하는 주요 방법 중 하나입니다.


SMTP 서버란?

SMTP 서버는 이메일 전송을 관리하는 서버로, SMTP를 사용하여 이메일 메시지를 송신하고 수신합니다.

이 서버는 안정적이고 효율적인 이메일 통신을 가능하게 하며, 주요 기능으로 이메일 전송, 메일 라우팅, 발신자 인증, 에러 처리, 스팸 필터링 등이 있습니다.

작동 원리는 이메일 클라이언트가 SMTP 서버에 연결하여 인증을 받은 후 이메일 메시지를 전송하는 것입니다.

사용자가 메시지를 작성하고 전송하면, 클라이언트는 SMTP 서버에 인증을 요청하고, 인증이 완료되면 이메일 내용을 전송합니다.

이후 SMTP 서버는 수신자의 주소를 확인하고 메시지를 해당 서버로 라우팅합니다.

전송이 완료되면 발신자에게 완료 메시지를 반환하여 상태를 알립니다.

이 과정은 신속하고 안전한 이메일 통신을 보장합니다.


Gmail SMTP를 선택한 이유

Gmail SMTP를 선택한 이유는 여러 가지가 있습니다.

첫째, Gmail SMTP는 무료로 사용할 수 있다는 점이 정말 큰 장점입니다. 예산이 제한된 우리 팀과 같은 사용자에게는 비용 부담을 줄일 수 있어 매우 유리하다고 느꼈습니다.

둘째, 설정 과정이 간단해서 사용자가 쉽게 활용할 수 있습니다. 복잡한 인프라를 구축할 필요 없이 바로 사용할 수 있어, 개발자들에게 많은 편리함을 제공합니다.

셋째, AWS SES, SendGrid, Mailgun과 같은 서비스는 대량의 메일 발송에 유리하지만, 저희는 대량으로 메일을 발송하는 환경이 아니었으므로 Gmail SMTP의 용량과 기능이 충분히 적합하다고 판단하였습니다.

넷째, 네이버나 다음과 같은 다른 SMTP 서비스를 고려했지만, 새로운 계정을 만드는 과정이 Gmail보다 상대적으로 까다롭게 느껴졌습니다. 그래서 비교적 쉽게 계정을 만들 수 있는 Gmail을 선택하는 것이 더 간편하다고 판단했습니다.

다섯째, 대체할 수 있는 서비스로는 AWS SES, SendGrid, Mailgun과 같은 다양한 옵션들이 존재합니다. 하지만 이들 서비스와 비교했을 때 Gmail SMTP는 간편성과 비용 효율성 면에서 상당히 유리하다는 생각이 들었습니다.

이러한 이유로 Gmail SMTP를 선택하게 되었습니다.


Gmail SMTP 설정 과정

Gmail SMTP를 이용하려면, IMAP사용이 체크 되어 있어야 합니다.

IMAP(Internet Message Access Protocol)은 이메일 서버에서 메시지를 관리하며, 여러 기기에서 동기화된 이메일 접근을 가능하게 하는 프로토콜입니다

2단계 인증에서

앱 비밀번호를 생성합니다

 

그리고

  mail:
    host: smtp.gmail.com
    port: 587
    username: gmail 계정
    password: 앱 비밀번호
    properties:
      mail:
        smtp:
          auth: true
          timeout: 5000
          starttls:
            enable: true

메일을 보내기 위해 필요한 정보를 yaml 파일에 추가합니다.

부가적으로 이메일 전송을 위한 코드를 작성해야 합니다.

코드에 대한 자세한 설명은 여기에서 확인하실 수 있습니다.

포트 부분에는 TLS를 사용하여 포트 번호를 587로 설정했습니다.

그렇다면 TLS란 어떤 것일까요?

TLS를 이해하기 위해서는 먼저 SSL에 대한 이해가 필요합니다.


SSL (Secure Sockets Layer) 및 TLS (Transport Layer Security)

SSL (Secure Sockets Layer)

SSL은 인터넷에서 데이터의 안전한 전송을 보장하기 위해 1990년대 초반 넷스케이프(Netscape)에 의해 개발된 암호화 프로토콜입니다.

SSL은 클라이언트와 서버 간에 전송되는 데이터를 암호화하여 중간에서 누군가가 데이터를 가로채더라도 내용을 읽을 수 없도록 보호합니다.

또한, 데이터의 변경이나 손상을 방지하기 위해 무결성을 확인하며, 수신자는 데이터가 전송 중에 변조되지 않았음을 검증할 수 있습니다.

그러나 SSL에서 보안 취약점이 발견되면서 현재는 TLS로 대체되었습니다.


TLS (Transport Layer Security)

TLS는 SSL의 후속 프로토콜로, 인터넷에서 데이터 전송을 안전하게 보호하기 위해 설계된 암호화 프로토콜입니다.

TLS는 SSL의 보안 문제를 해결하고 성능을 개선하기 위해 개발되었으며, 현재 대부분의 인터넷 통신에서 사용되고 있습니다.


TLS의 중요성

TLS는 HTTPS(HTTP over TLS)로 사용되어 웹사이트와 사용자 간의 안전한 데이터 전송을 보장합니다.

이는 개인 정보, 금융 정보, 기밀 데이터 등을 보호하는 데 필수적이며, 데이터의 기밀성과 무결성을 유지하여 사용자를 안전하게 보호합니다.

이러한 이유로 TLS를 사용하였습니다


그 의외의 기능들을 설명하겠습니다

mail.smtp.auth: true

mail.smtp.auth: true는 SMTP 서버 연결 시 사용자 인증을 활성화하는 설정입니다.

이 옵션을 사용하면 이메일 전송 시 사용자의 신원을 확인하여 스팸이나 악용 위험을 줄일 수 있습니다.

사용자가 이메일을 보낼 때 입력한 username과 password가 서버로 전송되며, 서버는 이 정보를 검증하여 유효한 경우에만 이메일 전송을 허용합니다.

잘못된 정보가 입력되면 인증 실패 메시지를 반환하고 전송을 차단합니다.

이러한 인증 프로세스는 스팸 방지, 신뢰성 확보, 데이터 유출 방지 등에서 중요한 역할을 합니다.

따라서 mail.smtp.auth: true 설정은 이메일 전송의 안전성과 신뢰성을 보장하는 데 필수적입니다.


mail.smtp.timeout: 5000

mail.smtp.timeout: 5000을 설정한 이유는 클라이언트가 SMTP 서버와 연결을 시도할 때 5초 동안 응답이 없으면 연결을 종료하기 위해서입니다.

이메일 전송 과정에서 SMTP 서버가 응답하지 않을 경우, 이 설정된 시간 내에 응답이 없으면 프로그램이 연결을 중단하고 오류를 발생시킵니다.

이는 프로그램이 무한정 대기하는 상황을 방지하여 전체 시스템의 효율성과 응답성을 높이는 역할을 합니다.

결론적으로, mail.smtp.timeout: 5000은 이메일 전송 시 서버와의 연결 안정성을 높이고 프로그램의 응답성을 개선하는 데 중요한 역할을 합니다.


mail.smtp.starttls.enable: true

mail.smtp.starttls.enable: true는 SMTP 서버와의 연결을 암호화하여 보안을 강화하는 설정입니다.

이 옵션을 활성화하면 클라이언트와 서버 간 데이터 전송이 암호화되어, 이메일 내용과 사용자 인증 정보가 외부 공격으로부터 보호됩니다.

STARTTLS 프로토콜은 기존의 비암호화 SMTP 연결을 보안 연결로 전환합니다.

이를 통해 이메일 전송 시 데이터 보안과 개인 정보 보호가 강화됩니다.

결과적으로, 이 설정을 활성화하면 안전한 이메일 통신을 보장할 수 있습니다.