Backend
home

HTTP vs HTTPS

태그
Computer Science
게시일
2025/05/28
최종 편집 일시
2025/06/12 13:10
1 more property

1. HTTP와 HTTPS

HTTP (HyperText Transfer Protocol)

웹에서 데이터를 주고받기 위한 통신 규약.
특징: 데이터가 암호화되지 않고 평문으로 전송된다.

HTTPS (HTTP Secure)

HTTP + SSL/TLS 계층이 추가된 보안 버전이다.
데이터가 암호화되어 중간에서 도청/위조/변조를 방지한다.
비유하자면 HTTP는 엽서처럼 누구나 내용을 들여다볼 수 있으나 HTTPS는 봉투에 담아 밀봉된 편지라고 생각하면 된다. 전달 중 내용이 노출되지 않기 때문이다.

2. HTTP의 실무상 위험 요소

HTTP를 그대로 사용하는 서비스는 다음과 같은 위험에 노출된다.
중간자 공격 (MITM): 사용자의 로그인 정보나 쿠키가 노출될 수 있음
세션 하이재킹: 탈취된 세션 쿠키로 사용자가 된 척 할 수 있음
브라우저 경고: 크롬, 사파리 등에서 “보안되지 않음” 경고가 뜸
검색엔진 패널티: 구글은 HTTPS를 사용하는 사이트를 선호함
실제 사례: 한 중견 기업의 관리자 페이지가 HTTP로 노출돼, 네트워크 상에서 관리자 세션이 탈취되어 전체 데이터가 유출된 사례가 있음.

3. 실무 관점에서의 HTTP vs HTTPS 비교

항목
HTTP
HTTPS
데이터 전송
평문(Plain Text)
암호화됨 (TLS/SSL)
보안
도청, 위변조 가능
중간자 공격, 세션 탈취 방지 가능
인증서
필요 없음
SSL/TLS 인증서 필요
브라우저 표시
"주의 요함", 자물쇠 없음
자물쇠 표시, 신뢰할 수 있는 연결
SEO 영향
낮음
HTTPS 사이트가 더 높은 평가를 받음
성능
과거엔 느렸지만, 최근엔 차이 없음
HTTP/2, TLS 1.3 덕분에 오히려 더 빠르기도 함

4. HTTPS 적용, 어렵지 않다

실무에서 HTTPS를 적용하는 건 생각보다 간단하다

(1) 무료 인증서 발급 - Let’s Encrypt

무료 & 자동 갱신 지원
대부분의 클라우드/서버 환경에서 지원

(2) Spring Boot에서 HTTPS 설정 예시

# application.yml server: ssl: enabled: true key-store: classpath:keystore.p12 key-store-password: your-password key-store-type: PKCS12 key-alias: your-alias
YAML
복사

(3) Nginx에서 리버스 프록시 설정

server { listen 443 ssl; server_name yourdomain.com; ssl_certificate /etc/ssl/cert.pem; ssl_certificate_key /etc/ssl/key.pem; location / { proxy_pass http://localhost:8080; } }
YAML
복사

5. FAQ

HTTPS 쓰면 느려지는 거 아닌가?
거의 차이가 없다. 최신 브라우저는 HTTP/2, TLS 1.3을 기본 지원하여 속도는 오히려 개선되는 경우도 있다.
로컬 개발 환경에서도 HTTPS를 써야 하나?
필수는 아니지만, 테스트/스테이징 환경부터는 HTTPS로 일관성을 맞추는 것이 좋다.
인증서 비용이 부담된다
무료 인증서인 Let’s Encrypt를 사용하면 된다.