SSAFY

배포

황성안 2021. 8. 11. 09:45
728x90

Nginx

    1.  

Nginx

      • Nginx는 웹서버 소프트웨어로, 가벼움과 높은 성능을 목표로 한다. 웹 서버, 리버스 프록시 및 메일 프록시 기능을 가진다. Nginx는 요청에 응답하기 위해 비동기 이벤트 기반 구조를 가진다. 이는 아파치가 http 서버의 스레드/프로세스 기반 구조를 가지는 것과 대조적이다. 이러한 구조는 서버에 많은 부하가 생길 경우의 성능을 예측하기 쉽게 해준다.
        • High performance load balancer, web server, API gateway & reverse proxy
        • 비동기 방식이기 때문에 매우 높은 성능
        • 정적인 파일 (주로 프론트엔드 파일들)을 서비스할 때 뛰어난 성능 (vs 톰캣)
        • load balancer나 API gateway 용도로도 사용 가능
    1.  

배포 구조

    • 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를 동시에 서비스 하는 경우는 괜찮을 듯

도커

  1. 왜 도커를 쓰는가?
    • 빠르게 필요한 서버를 증설할 수 있다. 운영체제를 부팅해야하는 기존의 방식보다 빠르다.
    • 이미지를 만들어두면 찍어내기만 하는 배포의 편의성 (w/k8s=쿠버네티스)
    • 기존에는 VM을 증설하는 방식을 사용했으나, VM이 부팅되는 1분이면 서비스 전체가 중지되기에 충분한 시간이다.
  2. 어디까지 도커화 해야할까? => 배포의 효율/편의성을 생각할 것
    • FE / BE 필수적
    • DB / Jenkins / nginx 는 선택적
      • DB를 이미지화해서 새로 배포할 일이 많이 있을까? => 자체 데이터 센터를 사용하는 경우가 많음. 통째로 이미지화해서 배포하는 일은 별로 X.
      • 빌드 서버를 병렬적으로 추가 증설하는 경우는? => Jenkins도 빌드 서버를 병렬적으로 추가 증설하는 경우는 그렇게 많지 않다.
    • Gitlab => Jenkins
      • 개발자가 gitlab의 특정 브랜치(develop / master)에 머지 → 이벤트 트리거 & jenkins에서 빌드 → 도커 이미지 제작 배포
      • 동일한 도커 이미지로 제작, 배포되므로 동일성 보장

배포 & 보안

  1. 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나 백엔드 서버 모두에 설정이 필요하다.
  2. 사용자 계정 만들기
    • 각 프로그램들을 실행할 때는 프로그램에 맞는 권한을 가진 사용자 계정을 만들어서 실행한다.
    • 우분투 계정이나 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