본문 바로가기
이직&취업/Java 기초 상식

HTTP vs HTTPS, 도대체 뭐가 다른 걸까? – 보안과 성능까지 한 번에 이해하기!

by journeylabs 2025. 4. 24.
728x90
반응형

목차

     

    HTTP와 HTTPS는 웹 통신의 핵심 프로토콜로, 보안과 성능에서 큰 차이를 보입니다. 이 글에서는 HTTP와 HTTPS의 주요 개념, 특징, 차이점, 원리, 실무에서의 활용 사례, 장단점, 그리고 주의사항까지 자세히 다뤄보겠습니다. 초보자부터 실무 개발자까지 쉽게 이해할 수 있도록 구성했으니, HTTP와 HTTPS의 모든 것을 마스터하고 싶다면 끝까지 읽어보세요!


    1. HTTP와 HTTPS란? 주요 개념 및 용어

    HTTP의 정의

    HTTP(HyperText Transfer Protocol)는 웹에서 클라이언트(브라우저)와 서버 간 데이터를 주고받기 위한 프로토콜입니다. 주로 HTML 문서, 이미지, 동영상 등의 리소스를 전송하는 데 사용됩니다.

     

    HTTPS의 정의

    HTTPS(HyperText Transfer Protocol Secure)는 HTTP에 보안 계층(SSL/TLS)을 추가한 프로토콜입니다. 데이터 암호화와 인증을 통해 안전한 통신을 보장합니다.

     

    주요 용어

    • 프로토콜: 컴퓨터 간 데이터 교환을 위한 규칙과 절차.
    • SSL/TLS: Secure Sockets Layer/Transport Layer Security. 데이터 암호화와 인증을 제공하는 보안 프로토콜.
    • 인증서(CA): 서버의 신원을 증명하는 디지털 인증서. 신뢰할 수 있는 인증 기관(CA)에서 발급.
    • 대칭/비대칭 암호화: HTTPS에서 데이터를 암호화하는 두 가지 방식.

    HTTP와 HTTPS의 특징

    • HTTP:
      • 웹에서 데이터를 주고받기 위한 기본 통신 프로토콜
      • 클라이언트(브라우저)와 서버 간 비암호화된 평문(Plain Text) 통신.
      • 속도가 빠르지만 보안 취약.
      • 기본 포트: 80.
    • HTTPS:
      • HTTP + SSL/TLS 암호화가 결합된 보안 프로토콜
      • 데이터 암호화 + 무결성 + 인증 보장
      • 보안성과 신뢰성 높음.
      • 기본 포트: 443.

     

    HTTP vs HTTPS 차이점

    항목 HTTP HTTPS
    보안 평문 전송, 보안 취약 SSL/TLS로 암호화, 안전
    포트 80 443
    인증서 필요 없음 CA 인증서 필요
    성능 빠름 암호화로 인해 약간 느림
    SEO 불리 검색 엔진 순위 우대
    주소형 http:// https://

    2. HTTP와 HTTPS의 원리와 구조

    HTTP의 원리

    HTTP는 클라이언트-서버 모델을 따르며, 요청(Request)과 응답(Response)으로 동작합니다.

    1. 클라이언트가 서버에 GET, POST 등의 요청을 보냄.
    2. 서버는 요청을 처리하고 HTML, JSON 등의 응답을 반환.
    3. 데이터는 평문으로 전송되므로 중간에 가로채기(MITM, Man-in-the-Middle) 가능.

    HTTP 요청 예시

    GET /index.html HTTP/1.1
    Host: example.com
    User-Agent: Mozilla/5.0
    Accept: text/html
    
    • 설명: 클라이언트가 example.com에서 index.html을 요청. 평문으로 전송되므로 데이터 노출 위험.

    HTTPS의 원리

    HTTPS는 HTTP에 SSL/TLS 계층을 추가해 보안을 강화합니다.

    1. SSL 인증서 발급
      • 서버는 CA (인증기관)로부터 인증서를 발급.
    2. SSL/TLS 핸드셰이크:
      • 클라이언트와 서버가 암호화 알고리즘과 세션 키를 협상.
      • 서버는 CA에서 발급받은 인증서를 제공해 신원 증명.
    3. 데이터 암호화:
      • 대칭 암호화(빠른 데이터 전송)와 비대칭 암호화(키 교환)를 조합.
      • 비대칭키(공개키/개인키): 키 전달 과정
      • 대칭키: 실제 데이터 전송
    4. 안전한 전송:
      • 암호화된 데이터는 중간에 가로채도 해독 불가.

    HTTPS 핸드셰이크 과정 (간소화)

    1. 클라이언트 → 서버: 접속 요청
    2. 서버 → 클라이언트: 인증서 전달
    3. 클라이언트: 인증서 검증 + 대칭키 암호화 후 전달
    4. 서버: 대칭키 복호화 → 이후 데이터 암호화 통신 시작
    
    // flow 예시
    1. 클라이언트: "안녕하세요, TLS 1.3 지원합니까?"
    2. 서버: "네, 인증서와 공개키 보냅니다."
    3. 클라이언트: "인증서 확인 완료. 세션 키 교환합니다."
    4. 서버: "암호화된 통신 시작!"

     

    구조 비교

    • HTTP: 클라이언트 <-> 서버 (평문 전송).
    • HTTPS: 클라이언트 <-> SSL/TLS <-> 서버 (암호화 전송).

    3. 실무에서 HTTP와 HTTPS 활용 사례

    HTTPS는 현대 웹 개발에서 필수로 자리 잡았으며, Spring Framework와 같은 프레임워크에서 쉽게 설정할 수 있습니다.

    HTTPS가 아닌 HTTP로 노출되면, 사용자 ID/PW가 평문으로 노출될 수 있습니다. SSL 적용 시 모든 전송 데이터가 암호화되어 중간자 공격(MITM) 방지 가능합니다.

    3.1. Spring Boot에서 HTTPS 설정

    Spring Boot 애플리케이션에서 HTTPS를 활성화하려면 SSL 인증서(예: .p12 파일)를 설정해야 합니다.

     

    예시: Spring Boot HTTPS 설정

    # application.yml
    server:
      port: 443
      ssl:
        key-store: classpath:keystore.p12
        key-store-password: mypassword
        key-store-type: PKCS12
        key-alias: myalias
    • application.yml 또는 application.properties에 설정 추가
    • 인증서 파일 (.p12, .jks) 은 미리 생성/발급받아 resources/ 에 배치

    Spring Boot 컨트롤러

    @RestController
    public class SecureController {
        @GetMapping("/secure")
        public String secureEndpoint() {
            return "This is a secure HTTPS endpoint!";
        }
    }
    
    • 설명: Spring Boot는 HTTPS를 통해 /secure 엔드포인트를 제공. 클라이언트는 https://localhost:443/secure로 안전하게 접근 가능.

    3.2. Spring Security와 HTTPS

    Spring Security는 HTTPS를 강제하도록 설정할 수 있습니다.

    @Configuration
    @EnableWebSecurity
    public class SecurityConfig {
        @Bean
        public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
            http
                .requiresChannel()
                    .anyRequest().requiresSecure() // 모든 요청을 HTTPS로 강제
                .and()
                .authorizeHttpRequests(auth -> auth
                    .anyRequest().authenticated()
                );
            return http.build();
        }
    }
    
    • 설명: requiresSecure()를 사용해 모든 요청을 HTTPS로 리다이렉트. HTTP 요청은 자동으로 https://로 전환.

    3.3. 리버스 프록시와 HTTPS

    실무에서는 NginxAWS ALB 같은 리버스 프록시를 사용해 HTTPS를 처리합니다.

     

    Nginx 설정 예시

    server {
        listen 443 ssl;
        server_name example.com;
        ssl_certificate /etc/ssl/certs/example.com.crt;
        ssl_certificate_key /etc/ssl/private/example.com.key;
    
        location / {
            proxy_pass http://localhost:8080;
            proxy_set_header Host $host;
        }
    }
    
    • 설명: Nginx가 HTTPS 요청을 처리하고, 내부적으로 Spring 애플리케이션(HTTP)으로 프록시. 클라이언트는 HTTPS로 안전하게 통신.

    4. HTTP와 HTTPS의 장점과 단점

    HTTP의 장단점

    • 장점:
      • 빠른 전송 속도: 암호화 과정이 없어 처리 속도가 빠름.
      • 간단한 설정: 인증서나 복잡한 설정 불필요.
    • 단점:
      • 보안 취약: 데이터가 평문으로 전송되므로 해킹 위험.
      • SEO 불리: 검색 엔진에서 HTTPS 사이트에 비해 낮은 순위.
      • 사용자 신뢰 부족: 브라우저에서 "안전하지 않음" 경고 표시.

    HTTPS의 장단점

    • 장점:
      1. 높은 보안성: 데이터 암호화로 개인정보 보호.
      2. 사용자 신뢰: 브라우저에 "자물쇠" 아이콘 표시로 신뢰도 향상.
      3. SEO 우대: Google 등 검색 엔진에서 높은 순위 부여.
    • 단점:
      1. 설정 복잡성: SSL 인증서 발급 및 갱신 필요.
      2. 성능 오버헤드: 암호화/복호화로 인해 약간의 지연 발생.
      3. 비용: 인증서 구매 또는 관리 비용 발생 가능(Let’s Encrypt 등 무료 인증서로 완화).

    주의사항

    • 인증서 관리: SSL/TLS 인증서의 만료를 주기적으로 확인.
    • 혼합 콘텐츠: HTTPS 페이지에서 HTTP 리소스를 로드하면 브라우저 경고 발생.
    • 성능 최적화: HTTP/2, TLS 1.3 등 최신 프로토콜 사용으로 성능 개선.
    • 리다이렉션 설정: HTTP 요청을 HTTPS로 자동 리다이렉트하도록 설정.

    5. 결론

    HTTP는 간단하고 빠른 웹 통신을 제공하지만, 보안 취약점으로 인해 현대 웹에서는 HTTPS가 필수입니다. HTTPS는 데이터 암호화와 인증을 통해 사용자 신뢰보안을 보장하며, SEO와 성능 면에서도 이점을 제공합니다. HTTPS는 초기 설정이 다소 번거롭더라도, 보안성과 사용자 신뢰성을 확보할 수 있는 현대 웹 서비스의 필수 조건입니다.

    Spring Framework, Nginx, AWS 등 다양한 실무 환경에서 HTTPS를 쉽게 설정할 수 있으며, 이를 통해 안전한 웹 서비스를 구축할 수 있습니다.

    이 글을 통해 HTTP와 HTTPS의 차이부터 실무 활용까지 완벽히 이해하셨길 바랍니다. HTTPS를 도입해 더 안전하고 신뢰할 수 있는 웹 애플리케이션을 만들어보세요!

     

     

    728x90
    반응형