
[CS/네트워크] 08. 웹 서비스의 방패와 창: 네트워크 보안과 실무 인프라
⚡ 한 줄 요약: 보안의 3대 요소(CIA)부터 암호화 매커니즘, 실무 인프라 구성(VPN, 로드밸런서, CORS)까지 안전한 웹 서비스를 구축하기 위한 필수 지식을 마스터합니다.
1. 👋 들어가며: "코드만 잘 짜면 끝일까? 보안은 개발자의 생존 근육이다"
우리가 작성한 코드가 아무리 훌륭해도, 그 데이터가 오가는 '길목'이 안전하지 않거나 트래픽 폭주로 서비스가 멈춘다면 그 가치는 사라집니다.
특히 프론트엔드 개발자에게 보안은 단순히 '해킹 방어'가 아니라, 신뢰할 수 있는 사용자 경험을 설계하는 핵심 역량입니다.
-
🧐 Why:
- 보안 사고는 한 번의 실수로 기업의 신뢰를 무너뜨립니다.
- 패킷이 암호화되고 분산되는 흐름을 모르면, 복잡한 실무 환경에서 발생하는 트러블슈팅(CORS,인증서 오류, 방화벽 차단 등)에 대응할 수 없습니다.
-
🎯 Goal:
- 보안의 기본 원칙(CIA)를 이해하고, HTTPS 핸드쉐이크의 내부 매커니즘과 실무에서 접하는 네트워크 장비들의 역할을 명확히 구분하는 것을 목표로 합니다.
📂 2. 네트워크 보안의 핵심: CIA Triad
📌 2-1. 기밀성(Confidentiality): 허가된 사람만 보게 하라
정보가 유출되지 않도록 보호하는 가장 기본적인 요소입니다.
- 핵심:
- 오직 권한이 있는 사용자만 데이터에 접근할 수 있어야 합니다.
- 도구:
- 데이터 암호화, 강력한 로그인 시스템, HTTPS 등이 대표적인 예시입니다.
📌 2-2. 무결성(Integrity): 데이터가 변하지 않았음을 보장하라
전송되는 데이터가 중간에 조작되거나 손상되지 않았음을 증명하는 것입니다.
-
핵심:
- 데이터가 발송된 시점과 수신된 시점이 완벽히 동일해야 합니다.
-
도구:
- 디지털 서명이 여기서 등장합니다.
- 대칭키/비대칭키 암호화 개념을 응용해 보낸이의 신원을 확인하고 데이터 변조 여부를 체크합니다.
💡 비유로 이해하기
중요한 서류가 담긴 봉투에 찍힌 '인감도장'과 같습니다.
봉투가 뜯기지 않았고(무결성), 도장을 찍은 사람이 진짜 그 사람임을 보증(인증)하는 역할을 합니다.
📌 2-3. 가용성(Availability): 서비스는 항상 열려 있어야 한다
정당한 사용자가 필요할 때 언제든 서비스를 이용할 수 있는 상태를 유지하는 것입니다.
-
위협 요소:
- DDos(분산 서비스 거부 공격)가 가용성을 해치는 가장 대표적인 공격입니다.
-
DDos 정의:
- 여러 대의 컴퓨터를 이용해 한 서버나 서비스에 동시에 막대한 요청을 보내, 서버가 정상적인 요청을 처리하지 못하게 마비시키는 방식입니다.
-
도구:
- 방화벽(Firewall), 서버 이중화(백업 서버) 등을 통해 공격을 방어합니다.
💻 참고
API 호출 시 Rate Limiting이나 CORS 설정이 이 가용성과 무결성을 지키기 위한 첫 번째 방어선이 됩니다.
특히 DDos는 서버만의 문제가 아니라, 클라이언트 측에서 비정상적인 반복 요청이 가지 않도록 로직을 설계하는 것도 중요합니다.
📌 2-4. 헷갈리기 쉬운 포인트 / 오해 정리
📌 2-5. 한 줄 정리
- 보안은 정보의 유출을 막는 '기밀성', 변조를 막는 '무결성', 서비스 중단을 막는 '가용성'을 모두 충족해야 하며, 특히 DDos는 가용성을 무너뜨리는 치명적인 위협입니다.
📂 3. 암호화 방식: 대칭키와 비대칭키
📌 3-1. 대칭키 암호화
하나의 비밀키를 공유하여 데이터를 암호화하고 복호화하는 가장 직관적인 방식입니다.
-
특징:
- 자물쇠 하나에 맞는 열쇠가 딱 하나만 존재하는 것과 같습니다.
-
장점:
- AES, DES 같은 알고리즘은 연산 속도가 매우 빠르고 효율적입니다.
- 따라서 영상 스트리밍이나 대용량 파일 암호화처럼 처리량이 많은 데이터를 다룰 때 절대적으로 유리합니다.
-
단점:
- 암호화 통신을 시작하기 전, 이 열쇠를 상대방에게 어떻게 안전하게 전달할 것인가가 최대의 숙제입니다.
💡 비유로 이해하기
대칭키는 현관문 열쇠와 같습니다.
가족끼리 같은 열쇠를 쓰면 편하지만, 멀리 있는 친구에게 이 열쇠를 주려고 할 때 배달 과정에서 누군가 복사해갈 위험이 있는 것과 같습니다.
📌 3-2. 비대칭키 암호화
누구나 가질 수 있는 공개키와 본인만 소유하는 비밀키라는 두 개의 열쇠를 사용하는 방식입니다.
-
기밀성 유지:
- A가 B만 볼 수 있는 데이터를 보내고 싶다면 B의 공개키로 암호화합니다.
- 이 데이터는 오직 B의 비밀키로만 열 수 있기 때문에 전송 과정에서 가로채더라도 안전합니다.
-
특징:
- 키 전달 문제가 해결되어 보안성이 높지만, 소수의 곱셈이나 지수 연산 등 수학적으로 매우 복잡한 계산을 필요로 합니다.
- 이로 인해 대칭키보다 속도가 느리고 컴퓨터 자원을 많이 소모합니다.
📌 3-3. 전자 서명의 비밀: '거꾸로' 사용하는 비대칭키
디지털 서명(전자 서명)은 일반적인 비대칭키 암호화와는 반대 방향으로 작동합니다.
-
작동 원리:
- 내용을 숨기기 위해 수신자의 공개키로 암호화하는 대신, 보내는 사람의 비밀키로 암호화(서명)합니다.
-
목적:
- 이 문서는 보낸 이의 공개키로만 복호화되기 때문에 "이 사람이 보낸 게 확실하다"는 인증과 "내용이 중간에 바뀌지 않았다"는 무결성을 보장합니다.
- 즉, 내용을 숨기는 것이 아니라 신뢰를 증명하기 위한 기술입니다.
📌 3-4. 하이브리드 방식: 보안과 속도를 모두 잡는 법 (HTTPS)
현대 인터넷 통신의 표준인 HTTPS는 두 방식의 장점만을 결합하여 사용합니다.
-
키 교환:
- 먼저 보안성이 높은 비대칭키 방식을 사용하여 이후 통신에 사용할 '대칭키'를 안전하게 주고받습니다.
-
본 통신:
- 일단 키가 공유되면, 실제 대용량 데이터 전송은 속도가 빠른 대칭키 방식으로 처리합니다.
💻 참고
실무에서 API 보안이나 SSH 키 관리를 할 때 이 개념이 흔들리면 보안 취약점이 발생합니다.
특히 비대칭키의 연산 부하 때문에 서버 성능이 저하되는 경우를 대비해, 왜 핸드쉐이크 단계에서만 비대칭키를 쓰는지 그 기술적 타협점을 명확히 이해해야 합니다.
📌 3-5. 헷갈리기 쉬운 포인트 / 오해 정리
📌 3-6. 한 줄 정리
- 대칭키는 빠르지만 키 전달이 어렵고, 비대칭키는 안전하지만 느리기 때문에, HTTPS는 두 방식을 혼합하여 안전한 키 교환 후 빠른 데이터 전송을 실현합니다.
📂 4. 웹 보안의 표준: HTTPS와 SSL/TLS
📌 4-1. HTTPS와 포트 번호: 보안의 시작
HTTPS는 단순히 보안이 강화된 HTTP가 아니라, HTTP 프로토콜 위에 SSL/TLS 보안 계층을 더한 형태입니다.
가장 먼저 기억해야 할 차이는 사용하는 관문(포트)입니다.
- HTTP: 80번 포트를 사용합니다.
- HTTPS: 443번 포트를 사용하여 암호화된 보안 통신을 수행합니다.
📌 4-2. SSL과 TLS: 이름에 숨겨진 차이
우리는 흔히 'SSL'이라고 부르지만, 기술적으로는 변천사가 있습니다.
📌 4-3. SSL/TLS의 3대 핵심 기능
보안 연결을 통해 우리는 다음 세 가지 가치를 보장받습니다.
-
암호화(Encryption):
- 네트워크를 지나는 데이터를 외부에 노출되지 않게 잠급니다.
-
인증(Authentication):
- 접속한 사이트가 믿을 수 있는 진짜인지 확인합니다.
-
데이터 무결성(Integrity):
- 전송 중 데이터가 누군가에 의해 변경되지 않았음을 보장합니다.
📌 4-4. SSL/TLS 핸드쉐이크: 신뢰를 위한 6단계 협상
실제 데이터가 오가기 전, 양쪽이 보안 연결을 맺기 위해 거치는 사전 협상 과정입니다.
이는 OSI 7계층 중 세션 및 표현 계층에서 이루어집니다.
-
Client Hello:
- 클라이언트가 서버에 접속 요청을 보내며, 지원 가능한 알고리즘 목록과 랜덤 데이터를 전달합니다.
-
Server Hello & 인증서 전송:
- 서버가 알고리즘을 선택하고, 자신의 공개키가 포함된 SSL/TLS 인증서를 보냅니다.
-
인증서 검증:
- 브라우저는 인증서가 신뢰할 수 있는 인증 기관(CA)에서 발급되었는지 확인합니다.
- 이를 통해 "인증 기관이 보증했으니 위조 서버가 아니구나"라고 안심하게 됩니다.
-
대칭키 전달 (비대칭키 활용):
- 클라이언트는 대칭키를 생성한 후, 서버의 공개키로 암호화하여 서버에 보냅니다.
-
대칭키 획득:
- 서버는 자신의 비밀키로 이를 복호화하여 동일한 대칭키를 얻습니다.
-
보안 연결 완료:
- 서로 확인 메시지를 주고받으면 협상이 끝나고, 이후부턴 빠른 대칭키 암호화로 데이터를 주고 받습니다.
💡 비유로 이해하기
핸드쉐이크는 무거운 장갑차(비대칭키)를 이용해 '금고 열쇠(대칭키)'만 먼저 안전하게 전달하고, 이후엔 그 열쇠로 잠근 가벼운 가방(대칭키)을 빠르게 주고받는 것과 같습니다.
💻 참고
공식적인 서비스를 제공하려면 반드시 CA를 통해 인증서를 발급받아야 합니다.
자체 서명 인증서도 기술적 암호화는 가능하지만, 브라우저가 경고창을 띄워 사용자 신뢰를 잃게 만들기 때문입니다.
📌 4-3. 헷갈리기 쉬운 포인트 / 오해 정리
-
SSL과 TLS는 같은 말인가요?
- 오해입니다. SSL은 구형이며, 현재의 보안 표준은 TLS입니다.
- 다만 관습적으로 SSL이라는 명칭을 혼용해서 쓸 뿐입니다.
-
인증서만 있으면 암호화가 저절로 되나요?
- 오해입니다. 인증서는 신뢰 확인을 위한 도구이며, 실제 암호화는 핸드쉐이크 과정을 통해 양측이 동일한 대칭키를 가졌을 때 비로소 가능해집니다.
📌 4-4. 한 줄 정리
- HTTPS는 443 포트를 사용하며, 비대칭키로 대칭키를 안전하게 교환하는 SSL/TLS 핸드쉐이크를 통해 기밀성, 무결성, 인증을 보장합니다.
📂 5. 네트워크 보안: 방화벽
📌 5-1. 방화벽이란 무엇인가?
네트워크의 '문지기' 역할을 하는 가장 기초적이고 중요한 보안 장비입니다.
-
정의:
- 네트워크에서 허용된 트래픽만 통과시키고, 불필요하거나 위험한 트래픽을 차단하는 역할을 수행합니다.
-
사용 목적:
- 기업, 기관, 개인 네트워크에서 해킹, 악성 코드, 불법 접근 등을 사전에 방지하기 위해 필수적으로 사용됩니다.
💡 비유로 이해하기
방화벽은 건물의 입구를 지키는 보안 요원과 같습니다.
미리 작성된 '출입 명단(보안 규칙)'을 가지고, 외부인이 들어오려고 할 때 신분증(패킷 정보)을 대조하여 통과시킬지 돌려보낼지 결정하는 것과 같습니다.
📌 5-2. 방화벽의 주요 기능
단순히 막는 것을 넘어, 현대의 방화벽은 지능적인 트래픽 관리를 수행합니다.
-
트래픽 필터링:
- IP 주소, 포트 번호, 프로토콜을 기반으로 데이터를 정밀하게 필터링합니다.
-
인가된 요청 허용:
- 허용된 네트워크 요청만 내부로 통과시키고, 비인가된 요청은 즉시 차단합니다.
-
위협 차단:
- 단순 침입 외에도 DDos 공격, 바이러스, 악성 코드 차단 기능을 제공하여 네트워크를 보호할 수 있습니다.
📌 5-2. 방화벽 트래픽 필터링 3단계 과정
실제 패킷이 들어왔을 때 방화벽 내부에서 일어나는 논리적 흐름입니다.
-
접속 요청 수신:
- 클라이언트(외부)가 웹사이트 접속 등을 위해 서버에 요청을 보냅니다.
-
패킷 검사:
- 방화벽이 해당 패킷을 멈춰 세우고 내용을 검사합니다.
- 이때 출발지 IP, 목적지 IP, 포트 번호, 프로토콜 정보를 확인합니다.
-
규칙 기반 결정:
- 미리 정의된 보안 규칙(Policy)에 따라 최종 결정을 내립니다.
- 허용된 트래픽: 내부 네트워크로 안전하게 전달합니다.
- 차단된 트래픽: 즉시 폐기(Drop)하여 내부 서버에 도달하지 못하게 합니다.
💻 참고
API 통신 시 Connection Refused나 타임아웃 에러를 겪는다면, 가장 먼저 의심해야 할 곳이 서버 앞단의 방화벽 설정입니다.
특정 포트가 열려 있는지, 혹은 개발 환경의 IP가 차단 리스트에 있지는 않은지 확인하는 습관이 트러블슈팅 시간을 획기적으로 줄여줍니다.
📌 5-3. 헷갈리기 쉬운 포인트 / 오해 정리
📌 5-4. 한 줄 정리
- 방화벽은 IP, 포트, 프로토콜 기반의 규칙에 따라 비인가된 패킷을 즉시 폐기하여 네트워크의 가용성과 보안을 지키는 핵심 장비입니다.
📂 6. 실무 보안의 핵심: 주요 공격 기법과 방어 전략
📌 6-1. 브루트포스 공격: 무차별 대입
이 공격은 말 그대로 무식하지만 확실한 방법인 "무차별 대입 공격"입니다.
모든 가능한 비밀번호 조합을 하나씩 다 넣어보며 인증을 우회하려는 시도입니다.
-
원리:
- 자동화된 도구를 사용하여 계정 비밀번호나 암호화 키를 찾을 때까지 반복적으로 로그인을 시도합니다.
-
방어:
- 대소문자와 특수문자를 섞은 강력한 비밀번호 정책을 적용하거나, 여러 번 로그인에 실패하면 일정 시간 접속을 막는 계정 잠금 정책이 필수입니다.
💡 비유로 이해하기
번호 조합을 맞춰야 열리는 자물쇠처럼 비밀번호를 몰라도 0000부터 9999까지 운 좋게 열릴 때까지 계속 돌려보는 것과 같습니다.
📌 6-2. 크로스 사이트 스크립팅(XSS): 신뢰를 이용한 코드 삽입
웹사이트가 사용자 입력을 무조건 믿고 검사하지 않을 때 발생하는 치명적인 문제입니다.
-
원리:
- 공격자가 게시판 글이나 댓글에 평범한 텍스트 대신 악성 스크립트를 몰래 삽입합니다.
- 해당 글을 읽는 다른 사용자의 브라우저에서 이 코드가 실행되면서 문제가 발생합니다.
-
위험성:
- 사용자의 세션을 탈취하거나 피싱 사이트로 유도하고, 악성 코드를 유포할 수 있습니다.
-
방어:
<script> 태그 같은 입력값을 필터링하고 인코딩해야 합니다.
- 또한, 자바스크립트에서 쿠키에 접근하지 못하게 하는 HttpOnly 속성이나 HTTPS에서만 쿠키를 전달하는 Secure 속성을 설정하는 것이 매우 중요합니다.
📌 6-3. 버퍼 오버플로 공격
프로그램이 할당받은 메모리 공간(버퍼)보다 더 큰 데이터를 강제로 밀어 넣어 생기는 취약점입니다.
-
과정:
- 제한된 크기를 초과한 데이터가 입력되면 인접한 메모리를 덮어쓰게 되고, 프로그램이 비정상적으로 동작합니다.
-
결과:
- 공격자가 조작한 쉘코드가 실행되어 관리자 권한을 획득하는 등 시스템 전체가 장악당할 수 있습니다.
-
방어:
- 가장 기본은 입력 데이터의 길이를 철저히 검증하여 버퍼 크기를 넘어서는 입력을 원천 차단하는 것입니다.
💻 참고
프론트엔드 개발자에게 XSS 방어는 숙명과 같습니다. 최근에는 리액트 같은 라이브러리가 기본적으로 렌더링 시 이스케이프 처리를 해주지만, dangerouslySetInnerHTML 같은 속성을 쓸 때는 수동으로라도 반드시 입력값을 검증해야 합니다.
📌 6-3. 헷갈리기 쉬운 포인트 / 오해 정리
📌 6-4. 한 줄 정리
- 네트워크 공격은 시스템의 허점(메모리, 입력값 검증 부재 등)을 파고들기 때문에, 모든 입력을 의심하고 정책과 속성(HttpOnly 등)을 통해 다중 방어막을 구축하는 것이 본질입니다.
📂 7. 실무 네트워크 구성 요소: VPN, 로드밸런서, 그리고 CORS
📌 7-1. VPN(Virtual Private Network): 나만의 안전한 터널
실무에서 보안이 취약한 외부 환경(카페, 공공 와이파이 등)에서 사내 망에 접속할 때 필수적으로 사용하는 기술입니다.
-
핵심 원리:
- 데이터 전송 시 '터널'을 만드는 기술입니다.
- 터널링이 없을 때는 네트워크 관리자나 ISP가 여러분이 어떤 사이트에 접속했는지 알 수 있고, 암호화되지 않은 일부 트래픽은 내용까지 들여다볼 수 있습니다.
-
보안성:
- VPN을 사용하면 트래픽 내용이 암호화되어 제3자의 감시나 제어가 매우 어려워집니다.
-
HTTPS vs VPN:
-
HTTPS:
- 특정 웹 사이트와 브라우저 사이의 '대화 내용'을 암호화하는 보안 대화입니다.
- 예를 들어 은행 사이트에서 오가는 송금 정보는 보호하지만, 여러분이 '은행 사이트에 접속했다'는 사실 자체는 숨기지 못합니다.
-
VPN:
- 전체 통신 통로의 보안과 익명성을 책임집니다.
- 터널 자체를 암호화하기 때문에 어떤 사이트에 접속했는지조차 외부에서 알 수 없게 만듭니다.
📌 7-2. 로드밸런서 vs 리버스 프록시: 분산과 관리의 차이
두 개념 모두 클라이언트의 요청을 서버로 전달하고 분산시킨다는 공통점이 있어 헷갈리기 쉽지만, 존재 목적에서 명확한 차이가 있습니다.
-
리버스 프록시:
- 웹 서비스의 '입구 게이트' 역할을 하는 다목적 중간 서버입니다.
- 단순 트래픽 분산을 넘어 보안, 캐싱, SSL 처리, 방화벽 역할까지 수행하는 종합 관리자라고 보면 됩니다.
-
로드 밸런서:
- 말 그대로 '부하(Load) 균등 배분'에 집중하는 시스템입니다.
- 서버가 여러 대 있을 때 한쪽으로 요청이 몰리지 않도록 미리 정해진 규칙(알고리즘)에 따라 트래픽을 나누는 것이 핵심 목적입니다.
-
실무 팁:
- Nginx나 Cloudflare 같은 서비스는 본질적으로 리버스 프록시이지만, 그 안에 강력한 로드밸런서 기능을 포함하고 있어 실제 현장에서는 두 역할을 동시에 수행하는 경우가 많습니다.
📌 7-3. CORS(Cross-Origin Resource Sharing)
프론트엔드 개발자라면 반드시, 그리고 지겹도록 마주하게 될 개념입니다.
-
등장 배경:
- 현대 웹 개발은 프론트엔드와 백엔드가 서로 다른 도메인(혹은 포트)으로 분리된 환경이 많습니다.
- 브라우저는 보안상 '다른 출처'로의 요청을 제한하는데, 이를 합법적으로 허용해 주는 설정이 바로 CORS입니다.
-
실무 핵심:
- 백엔드 서버에서 허용할 Origin을 정확히 명시해 주는 설정이 필수적입니다.
💻 참고
실무에서 인프라 구성을 논할 때 로드밸런서와 리버스 프록시를 혼용해서 말하는 경우가 많습니다.
하지만 면접에서는 '리버스 프록시는 게이트웨이로서의 다목적성(보안, 캐싱 등)에 방점이 있고, 로드밸런서는 가용성을 위한 트래픽 분배에 방점이 있다'고 명확히 구분해주는 것이 포인트입니다.
📌 7-3. 헷갈리기 쉬운 포인트 / 오해 정리
📌 7-4. 한 줄 정리
- VPN은 전체 통로의 익명성을, HTTPS는 데이터의 기밀성을 보호하며, 리버스 프록시는 서비스의 종합 관문으로서 그 내부에 로드밸런싱 기능을 포함하는 경우가 많습니다.
🎁 8. 정리
🔑 요약
| 구분 | 핵심 키워드 | 주요 특징 및 실무 인사이트 |
|---|
| 보안 3요소 | CIA(기밀성, 무결성, 가용성) | 암호화는 기밀성을, 디지털 서명은 무결성을, DDos 방어는 가용성을 담당합니다. |
| 암호화 방식 | 대칭키 & 비대칭키 | 대칭키는 빠르지만 키 전달이 어렵고, 비대칭키는 안전하지만 느립니다. |
| 보안 표준 | HTTPS (SSL/TLS) | 비대칭키로 대칭키를 교환한 뒤 빠른 대칭키로 통신하는 '하이브리드' 방식이 핵심입니다. |
| 네트워크 장비 | 방화벽 & VPN | 방화벽은 규칙 기반의 문지기이며, VPN은 공용망에서도 안전한 전용 터널을 생성합니다. |
| 서버 아키텍처 | 로드밸런서 & 리버스 프록시 | 로드밸런서는 부하 분산에, 리버스 프록시는 게이트웨이(캐싱, 보안 등)로서의 다목적성에 방점이 있습니다. |
| 주요 공격 | XSS, 브루트포스, 버퍼 오퍼플로 | 모든 사용자 입력은 불신하고 필터링해야 합니다. (HttpOnly, 입력값 검증 필수) |
| FE 필수 개념 | CORS | 브라우저의 보안 정책이지만, 해결의 열쇠는 백엔드 서버의 응답 헤더(Origin 명시)에 있습니다. |