728x90
Nginx
Nginx
-
- Nginx는 웹서버 소프트웨어로, 가벼움과 높은 성능을 목표로 한다. 웹 서버, 리버스 프록시 및 메일 프록시 기능을 가진다. Nginx는 요청에 응답하기 위해 비동기 이벤트 기반 구조를 가진다. 이는 아파치가 http 서버의 스레드/프로세스 기반 구조를 가지는 것과 대조적이다. 이러한 구조는 서버에 많은 부하가 생길 경우의 성능을 예측하기 쉽게 해준다.
- High performance load balancer, web server, API gateway & reverse proxy
- 비동기 방식이기 때문에 매우 높은 성능
- 정적인 파일 (주로 프론트엔드 파일들)을 서비스할 때 뛰어난 성능 (vs 톰캣)
- load balancer나 API gateway 용도로도 사용 가능
- Nginx는 웹서버 소프트웨어로, 가벼움과 높은 성능을 목표로 한다. 웹 서버, 리버스 프록시 및 메일 프록시 기능을 가진다. Nginx는 요청에 응답하기 위해 비동기 이벤트 기반 구조를 가진다. 이는 아파치가 http 서버의 스레드/프로세스 기반 구조를 가지는 것과 대조적이다. 이러한 구조는 서버에 많은 부하가 생길 경우의 성능을 예측하기 쉽게 해준다.
배포 구조
-
- FE는 / , BE는 /api 로 분기하여 보낸다. (Webserver로서의 역할, API gateway로서의 역할을 동시에)
- nginx로 들어오는 통신은 80(http) or 443(https) 포트를 사용해야한다.
- 임의의 포트를 쓰면 안되는 이유? => ISP(KET, KT, LGU 등)에 따라서 닫혀 있는 포트가 존재한다. 따라서 서비스가 어느 장소에서는 되고, 어느 곳에서 안 될 수 있다! => 80 or 443 을 사용하자
- ISP (Internet Service Provider) : 인터넷 서비스 제공자. 인터넷에 접속하는 수단을 제공하는 주체.
- FE 서버를 위해 niginx가 하나 더 붙을 수도 있다. (niginx를 안 쓰는 대신 FE를 볼륨으로 마운트 시킬 수도 있다.)
- nodejs를 사용하여 BE를 구축하는 경우 nginx를 사용하지 않아도 되는가? => nginx는 선택 옵션. FE에서 정적 파일을 제공할 때 더 성능이 우월하다. 동일한 포트로 FE, BE 통신을 할 때 분기처리 해줄 수도 있음. nodejs를 이용해서 BE를 구축하면 nodejs에서 FE, BE를 동시에 서비스 하는 경우는 괜찮을 듯
도커
- 왜 도커를 쓰는가?
- 빠르게 필요한 서버를 증설할 수 있다. 운영체제를 부팅해야하는 기존의 방식보다 빠르다.
- 이미지를 만들어두면 찍어내기만 하는 배포의 편의성 (w/k8s=쿠버네티스)
- 기존에는 VM을 증설하는 방식을 사용했으나, VM이 부팅되는 1분이면 서비스 전체가 중지되기에 충분한 시간이다.
- 어디까지 도커화 해야할까? => 배포의 효율/편의성을 생각할 것
- FE / BE 필수적
- DB / Jenkins / nginx 는 선택적
- DB를 이미지화해서 새로 배포할 일이 많이 있을까? => 자체 데이터 센터를 사용하는 경우가 많음. 통째로 이미지화해서 배포하는 일은 별로 X.
- 빌드 서버를 병렬적으로 추가 증설하는 경우는? => Jenkins도 빌드 서버를 병렬적으로 추가 증설하는 경우는 그렇게 많지 않다.
- Gitlab => Jenkins
- 개발자가 gitlab의 특정 브랜치(develop / master)에 머지 → 이벤트 트리거 & jenkins에서 빌드 → 도커 이미지 제작 배포
- 동일한 도커 이미지로 제작, 배포되므로 동일성 보장
배포 & 보안
- SSL (-> TLS)
- SSL & TLS
- SSL은 웹 서버와 브라우저간에 암호화 된 링크를 설정하기위한 표준 보안 프로토콜
- TLS는 인터넷을 통해 서로 통신하는 클라이언트 / 서버 응용 프로그램 간의 통신 보안을 제공하는 프로토콜
- 회원가입시에 비밀번호 등의 개인 정보가 전송되고, 수시로 유출되어서는 안되는 정보들이 오가기 때문에 암호화가 필요하다. 매번 데이터를 암호화해서 전송하기 어렵기 때문에 TLS(Transport Layer Security)를 사용한다.
- Https 확산을 위해서 시작된 비영리 프로젝트 (Let's encrypt https://letsencrypt.org/ko/)
- Let's Encrypt는 보안 웹사이트를 위한 인증서의 수동 생성, 유효성 확인, 디지털 서명, 설치, 갱신 등 종전의 복잡한 과정을 없애주는 자동화된 프로세스를 통해 전송 계층 보안 암호화를 위해 무료 X.509 인증서를 제공하는 인증 기관이다.
- X.509 : 암호학에서 공개키 인증서와 인증알고리즘의 표준 가운데에서 공개 키 기반(PKI)의 ITU-T 표준
- 상용 프로그램을 제작할 때는 보통 신뢰할 수 있는 ROOT 인증서 발급자로부터 SSL 인증서를 구매해서 사용한다.
- SSAFY 프로젝트의 경우에는 Cert Bot을 이용해서 무료 인증서 발급 추천 https://certbot.eff.org/
- niginx나 백엔드 서버 모두에 설정이 필요하다.
- SSL & TLS
- 사용자 계정 만들기
- 각 프로그램들을 실행할 때는 프로그램에 맞는 권한을 가진 사용자 계정을 만들어서 실행한다.
- 우분투 계정이나 root 계정으로 실행하는 경우에는 해커의 공격 명령이 그 계정의 권한으로 실행되기 때문에 매우 위험하다.
728x90
'SSAFY' 카테고리의 다른 글
[SSAFY] TDD (Test Driven Dev) (0) | 2021.08.12 |
---|---|
[SSAFY] Vue 컴포넌트 전역 등록 (0) | 2021.08.12 |
웹서버 보안 (0) | 2021.08.05 |
SW 테스트 케이스 설계 (0) | 2021.08.05 |
대표적인 프로젝트 실패 사례 (0) | 2021.08.03 |