| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 프론테
- gtiactions
- AWS
- Express
- 리버스 프록시
- jsonwebtoken
- JWT
- 자동배포
- 에러핸들링
- node-cron
- nextjs
- 코딩컨벤션
- server
- 유저기능
- 개발지식
- 토큰인증
- typescript
- 성능
- 웹개발
- 데이터베이스
- CI/CD
- 기술블로그
- cronjob
- 포워드 프록시
- pm2
- 권한인증
- 백엔드
- 풀스택
- nodeJS
- amazon web services
- Today
- Total
생각해 보자 님의 블로그
HTTPS 인증이 왜 필요한가? 본문
오늘은 HTTPS 인증의 필요성에 대해 깊이 생각해보는 시간을 가졌다. 사실, 웹 개발을 시작했을 때 HTTPS는 단순히 "보안"과 관련된 것이라고만 생각했다. 그러나 내가 배포 환경에서 HTTPS 인증을 적용하면서, 이 기술이 왜 중요한지에 대해 정말 실감할 수 있었다. 특히 로컬 개발 환경을 벗어나, 실제 AWS와 같은 클라우드 환경에서 HTTPS를 적용해야 하는 이유를 명확히 이해하게 되었다.
HTTPS는 보안의 기본
우리는 모두 웹을 통해 정보를 주고받는다. 내가 개발한 서비스 역시 사용자에게 정보를 제공하고, 때로는 그들의 개인정보를 처리하기도 한다. 그런데, 로컬 환경에서 HTTP로 서비스를 실행하는 것은 어느 정도 이해할 수 있다. 개발하는 동안엔 큰 문제가 되지 않지만, 실제 서비스 환경에 배포하려면 이야기가 달라진다. HTTPS는 이때부터 필수적인 요소가 된다.
배포 환경에서 HTTP로 운영하는 것은 매우 위험하다. 특히 AWS, Vercel, Render와 같은 클라우드 플랫폼에서 애플리케이션을 배포하고 운영하는 경우, HTTPS가 없으면 사용자들의 민감한 정보가 암호화되지 않고 전송될 수 있다. 중간자 공격(man-in-the-middle attack)이나 데이터 탈취와 같은 보안 위협이 언제든지 발생할 수 있기 때문이다. 즉, HTTP는 실제 배포 환경에서는 보안적으로 완전히 신뢰할 수 없다.
HTTPS 인증서가 있어야만 제대로 된 보안 연결이 가능하다
HTTPS를 사용하려면 SSL 인증서가 필요하다. 이 인증서는 웹사이트가 합법적이고 신뢰할 수 있다는 것을 증명해주는 중요한 역할을 한다. 특히 클라우드 환경에서는 이 인증서가 더욱 중요하다. 왜냐하면, 사용자가 실제로 접속하는 것은 AWS나 Vercel, Render와 같은 클라우드 인프라를 통해 이루어지기 때문에, 브라우저와의 안전한 연결을 보장해야만 사용자들이 서비스에 신뢰를 가질 수 있다.
인증서 없이 배포된 애플리케이션은 "안전하지 않음"이라고 표시되며, 사용자는 그 사이트를 신뢰하지 않게 된다. 그로 인해 서비스에 대한 이용률이 급감할 수 있다. 인증서를 사용하는 것은 결국 사용자의 신뢰를 얻는 것이자, 애플리케이션의 보안을 강화하는 것이다.
Nginx와 Certbot을 사용한 HTTPS 인증 설정
이제 배포 환경에서 HTTPS를 적용해야 했는데, 나는 Nginx와 Certbot을 사용하기로 했다. AWS EC2 인스턴스에서 Express 서버를 실행 중이었고, 이 서버에 HTTPS를 적용하려면 Nginx를 리버스 프록시로 사용하여 인증을 처리하는 것이 가장 안전하고 효율적일 것 같았다.
Nginx는 고성능의 웹 서버로 SSL 인증을 처리하고, 외부와의 트래픽을 안전하게 관리하는 데 유용하다. 그리고 Certbot은 Let’s Encrypt에서 제공하는 무료 SSL 인증서를 자동으로 설치해주는 도구로, 이를 통해 HTTPS 인증을 손쉽게 적용할 수 있다.
HTTPS 적용 과정
배포 환경에서 HTTPS를 적용하는 과정은 다음과 같다:
Certbot을 사용해 SSL 인증서 받기
먼저, EC2 인스턴스에 Certbot을 설치하고, Let’s Encrypt에서 제공하는 무료 SSL 인증서를 설치했다. Certbot은 인증서 갱신도 자동으로 관리해주기 때문에, 이를 통해 장기적으로 HTTPS 환경을 유지할 수 있었다.
Nginx 설치 및 설정
Nginx를 설치하고, 기본적으로 SSL 인증서를 적용할 수 있도록 설정을 변경했다. 또한, Nginx의 설정 파일에서 HTTPS 연결을 처리하고, HTTP에서 HTTPS로 리다이렉션되도록 구성했다.
리버스 프록시 설정
Nginx를 리버스 프록시 서버로 설정하여, 외부에서 오는 HTTPS 요청을 내부 Express 서버로 전달했다. Express 서버는 여전히 HTTP로 동작하지만, Nginx가 HTTPS 연결을 관리하므로 안전한 환경이 보장되었다.
배포 환경에서 HTTPS 테스트
설정이 완료된 후, 실제 배포된 환경에서 HTTPS 연결을 테스트해보았다. AWS 인스턴스에 배포된 웹사이트에 접속해보니, 브라우저에서 '안전한 연결'로 표시되며 모든 트래픽이 암호화된 채로 안전하게 전송되는 것을 확인할 수 있었다.
왜 배포 환경에서 HTTPS가 중요한가?
HTTPS는 단순히 보안을 강화하는 것뿐만 아니라, 실제 배포 환경에서 중요한 역할을 한다. 로컬 개발 환경에서는 HTTP로도 충분하지만, 실제 서비스 환경에서 HTTPS를 적용하는 것은 필수적이다. AWS, Vercel, Render와 같은 클라우드 환경에서 배포된 서비스는 사용자의 정보를 처리하고, 외부와의 안전한 연결을 보장해야 하기 때문이다.
내가 HTTPS를 적용한 이유는 단순히 보안을 강화하기 위함만이 아니었다. 배포 환경에서의 서비스 신뢰성을 높이기 위해, 사용자가 내 웹사이트를 신뢰하고, 안전하게 이용할 수 있도록 하기 위해서였다. HTTPS 적용은 결국 사용자와의 신뢰를 쌓는 첫걸음이 된다.
'생각할 거리' 카테고리의 다른 글
| 리팩토링은 왜 필요한가? 어떤 걸 생각해야 할까? (3) | 2025.01.09 |
|---|---|
| 코딩 컨벤션? 왜 중요할까? (1) | 2024.12.24 |
| 에러 핸들링? 좋은 핸들링은 무엇일까? (리스폰스와 로깅의 대하여) (3) | 2024.12.21 |