[Network] Application Layer 3 - Email 서비스

chxghee·2024년 10월 4일

이메일 서비스의 구성요소

우리가 자주 사용하는 이메일 서비스는 크게 세가지 구성요소로 설명할 수 있다.

1. User Agent

이메일 작성자 측 소프트웨어로, 사용자가 이메일을 작성하고, 읽고, 전송하며, 수신하는 인터페이스를 제공한다.

  • 이메일 작성: 사용자가 이메일을 작성할 수 있는 인터페이스를 제공합니다.
  • 이메일 전송: 사용자가 작성한 이메일을 발신자의 메일 서버로 전송합니다.
  • 이메일 수신 및 읽기: 수신한 이메일을 받아오고(IMAP/POP3) 사용자가 읽을 수 있도록 표시합니다.

예시로는 Microsoft Outlook(데스크톱 서비스), Gmail(웹기반).. 등등 있다.

2. Mail server

이메일의 저장, 관리, 전송을 담당하는 서버 측 소프트웨어, 메일 서버는 이메일을 저장하고, 다른 서버로 이메일을 전송하며, 수신한 이메일을 관리한다.

  1. 유저 에이전트가 메일을 자신의 메일 서버에 전송.
  2. 보낼 메세지가 송신자 메일 서버메세지 큐에서 대기
  3. 대기하던 메일이 SMTP프로토콜을 통해 수신자 메일 서버로 전송.
  4. 수신자 메일 서버의 메일박스에 이메일이 저장됨
  5. 수신자가 접속하면 메세지를 수신자 메일서버의 메일박스에서 꺼내와 확인
    (수신자가 IMAP 또는 POP3 프로토콜을 통해 수신자 메일 서버에서 이메일을 읽음.)

위와 같은 방식으로 메일을 주고 받는다.

이메일 서비스도 일종의 클라이언트 - 서버 구조로, 메일 서버는 항상 열려있다.
(클라이언트는 송신자 메일서버 / 서버는 수신자 메일서버)

3. SMTP 프로토콜

이메일을 한 서버에서 다른 서버로 전송하는 데 사용되는 인터넷 표준 프로토콜.

  • SMTP는 송신자 메일서버-수신자 메일서버 사이의 통신과,
    송신 유저 에이전트-송신자 메일서버의 통신에서도 사용된다.

  • SMTP는 기본적으로 TCP 연결을 사용하여 신뢰성 있는 이메일 전송을 보장하며,
    메세지 교환전에 TCP연결을 하고 port는 25 번을 사용한다.

  • command/response 상호작용 (http와 비슷하게 요청/응답 상호작용)
    command : 아스키 텍스트 / response : 상태코드와 메세지

  • 메세지들은(메일내용) 7 비트의 아스키 코드로 인코딩 되어야 한다.

SMTP의 동작 과정

  1. SMTP handshaking - TCP 연결 이후, 송수신 서버의 정보를 주고받는 것
  2. 메세지 주고 받기
  3. SMTP 연결 끊기

  • 클라이언트는 HELO 명령으로 서버에 인사를 보낸 후, MAIL FROM 명령으로 발신자를 알림.
  • 이후 RCPT TO 명령으로 수신자를 지정하고, DATA 명령을 통해 이메일의 본문을 전송.
  • 이메일이 전송되면 QUIT 명령을 통해 연결을 종료.

cf) 위 과정은 모두 TCP 연결 이후 이러나는 상호작용이다.

•	SMTP 명령(command): 클라이언트가 이메일을 전송할 때, 이메일을 보내기 위해 서버에게 명령을 보냅니다. 예를 들어:
	•	HELO 명령: 클라이언트가 서버에게 인사하며 연결을 시작.
	•	MAIL FROM: 명령: 발신자의 이메일 주소를 서버에게 알림.
	•	RCPT TO: 명령: 수신자의 이메일 주소를 서버에게 알림.
	•	DATA 명령: 실제 이메일(헤더 + 바디)을 전송할 준비가 되었다고 서버에게 알림.
•	SMTP 응답(response): 서버는 클라이언트가 보낸 명령에 대해 응답을 반환합니다. 예를 들어:
	•	250 OK: 명령이 성공적으로 처리되었다는 의미.
	•	550 No such user: 수신자 주소가 잘못되었거나 존재하지 않는다는 의미.


SMTP VS HTTP

  1. 데이터 전송 방향
    SMTP: 클라이언트->서버 방향으로 데이터가 전송됨 (PUSH)
    HTTP: 서버->클라이언트 방향으로 데이터가 전송됨 (PULL)

  2. 둘다 아스키 커멘드/응답 상호작용과 상태코드가 있다.

  3. 객체 전송 방식
    HTTP는 엔티티 바디 안에 각각 하나의 오브젝트를 캡슐화 해서 전송한다.(한꺼번에 전송X)
    SMTP는 메세지의 여러 파트에 여러개의 오브젝트를 전송가능

  4. SMTP는 지속연결만 사용

  5. SMTP의 요청 메세지는 7 비트 아스키 코드로 인코딩

  6. SMTP는 메세지의 END를 CRLF를 통해 결정

주요 차이점

비교 항목SMTPHTTP
사용 목적이메일 전송웹 페이지 및 리소스 전송
주된 기능발신자에서 수신자로 이메일을 전송웹 서버에서 웹 브라우저로 웹 리소스를 전송
프로토콜 방식푸시(Push) 기반풀(Pull) 기반
데이터 흐름발신자가 데이터를 푸시하여 수신자에게 전송클라이언트가 서버에 요청하여 데이터를 받음
연결 방식지속 연결을 통해 여러 서버 간 메일 전송요청-응답 기반으로 단일 연결에서 리소스 전송
전송 방식메일 서버 간에 전송되는 데이터브라우저와 서버 간에 전송되는 데이터
주요 사용 포트25, 465, 58780 (HTTP), 443 (HTTPS)
상태 유지무상태이지만, 이메일의 흐름을 유지무상태 프로토콜
동작 모델클라이언트-서버-서버-수신자 (여러 서버 중계)클라이언트-서버
데이터 타입텍스트 기반의 이메일 메시지다양한 데이터 형식 (HTML, 이미지, JSON 등)
TCP 사용 여부TCP 기반TCP 기반


메일 메세지 포맷

이메일 메시지는 크게 두 부분으로 나뉜다.

  1. 헤더(Header): 메시지에 대한 메타데이터를 포함하며, 송신자, 수신자, 날짜, 제목 등 메시지의 관리 정보를 담고 있다.

  2. 본문(Body): 이메일의 실제 콘텐츠(텍스트, 이미지, 첨부 파일 등)를 포함.

헤더에는
To - 수신자 메일 주소
From - 송신자 메일 주소
Subject - 메일 제목

바디에는 아스키 문자로 이루어진 메세지 포함

이와 같은 이메일 메시지 본문에서 사용하는 라인들은 SMTP 커멘드들과 다름 (앞에서 보았던 헨드세이크 커멘드같은 명령과는 별개이다)

- MAIL FROM:와 RCPT TO:는 SMTP 프로토콜 명령어로, 
이메일을 서버 간 전송할 때 발신자와 수신자를 지정하는 데 사용됩니다.
- 이메일 본문에서의 From:와 To: 필드는 이메일 메시지의 헤더 정보로, 
수신자가 이메일을 읽을 때 표시되는 정보이며, SMTP 명령어와는 다른 것입니다.

Mail access protocol

메일을 유저 에이전트나 송신자 메일 서버에서 수신자 메일 서버로 Push 하는 것은 SMTP 프로토콜을 사용한다.

하지만 수신자가 메일 서버(박스)에 저장된 메일을 가져와 읽고, 관리하려면,(pull) POP3IMAP, HTTP 과 같은 메일 억세스 프로토콜을 사용한다.

1. IMAP

IMAP은 이메일을 서버에 저장하고, 클라이언트가 서버에 있는 이메일을 읽고 관리할 수 있게 하는 프로토콜.

IMAP은 로컬이 아니라 서버에 이메일 데이터가 있으므로, 다양한 장치에서 동일한 이메일을 확인할 수 있다.

2. POP

POP는 이메일을 서버에서 다운로드하, 로컬로 이메일을 저장하고, 서버에서 삭제하여, 로컬(유저 에이전트)의 디바이스에서 메세지를 직접 관리한다.

POP는 주로 인터넷 연결이 제한된 환경에서 이메일을 관리하는 데 적합하다.

3. HTTP (웹 메일을 위한 프로토콜)

사용자는 웹 브라우저를 통해 메일 서버에 접근하고, 이메일을 관리한다.

예시. gmail / naver


profile
다 같이 화이팅! 🙋‍♂️

0개의 댓글