-
Web Server
정적 컨텐츠(html, png, css등)을 제공하는 서버 -
Web Application Server
동적 컨텐츠를 제공하기 위해 만들어진 애플리케이션 서버(DB조회, 로직처리가가 요구되는 컨텐츠) -
Proxy Server란?
서버와 클라이언트의 사이에서 중계기 역할 -
Proxy Server의 종류
-
Forward Proxy
클라이언트가 타겟서버에 접근하고자 할때, 클라이언트는 타겟서버의 주소를 프록시 서버에 전달하여, 프록시 서버가 요청된 내용을 가져오는 방식 -
Reverse Proxy
클라이언트는 Reverse Proxy 로 설정된 서버의 주소로 데이타를 요청하게 되며, Reverse Proxy는 이 요청을 받아서 "배후"의 서버에 데이터를 요청하여 받은 다음 클라이언트에 전달하게 됨.
-
2.1 Web Server 선택
-
Nginx
비동기 Event-Driven 기반 구조
다수의 연결을 효과적으로 처리가능 -
Apache
쓰레드 / 프로세스 기반 구조로 요청 하나당 쓰레드 하나가 처리하는 구조
사용자가 많으면 많은 쓰레드 생성, 메모리 및 CPU 낭비가 심함
2.1 DB 선택
-
SQL (관계형 데이터베이스)
규칙에 맞는 데이터 입력
테이블간 JOIN 지원
트랜잭션 지원
안정성, 일관성
용어(테이블, 로우, 컬럼) -
No SQL (비관계형 데이터베이스)
자유로운 데이터 입력
컬렉션간 JOIN 미지원
트랜잭션 미지원
확장성, 가용성
3.1 API 설계
-
REST API
HTTP 통신에서 어떤 자원에 대한 CRUD 요청을 Resource와 Method (POST, GET, PUT, DELTE)로 표현하여 특정한 형태로 전달하는 방식 -
API 문서화 도구
파라미터 네임, 파라미터 데이터 타입, 리턴 결과 등 개발자들과 공유하기 위해서는 API 문서화는 꼭 필요함Swagger
Swaager로 API 문서를 만들면 문서 자체가 API에 대한 설명이면서 Test-bed이다. 사용자는 API 문서를 읽으면서 바로 해당 API에 대해 테스트를 해볼 수 있다Swagger를 이용하면 이러한 API Test 환경을 문서와 함께 제공하기 때문에 Postman 같은 tool을 이용할 필요가 적어진다
-
API 테스트 도구
Postman, Insomnia
3.2 DB 설계
-
정규화
정규화는 테이블의 속성들의 상호 종속적인 관계를 갖는 특성을 이용하여 무손실 분해하는 과정으로, 정규화의 목적은 가능한 중복을 제거하여 삽입, 삭제 , 갱신 이상의 발생 가능성을 줄이는 것 -
반정규화
정규화된 엔터티 타입, 속성, 관계에 대해 시스템의 성능향상과 개발 및 운영의 단순화를 위해 데이터 모델을 통합하는 프로세스
-
클라우드 서버
Azure, AWS, Google Cloud Platform -
CI(Continuous Integration) 란?
Build , Test를 실시하는 프로세스를 말하며 이러한 통합 프로세스를 상시로 실시해 주는것
--> 통합을 지속적으로 수행하는 것 -
CD(Continuous Delivery or Continuous Deploy) 란?
짧은 주기로 소프트웨어를 개발하는 소프트웨어 공학적 접근의 하나로, 소프트웨어가 언제든지 신뢰 가능한 수준으로 출시될 수 있도록 보증하기 위한 것--> 짦은 주기로 개발중인 소프트웨어를 배포하고 그 과정을 자동화 하는 지속적 배포
CI Tool 인 Jenkins, Travis CI 등 을 Git과 연동하여 소스의 커밋을 감지하면 자동적으로 빌드와 테스트를 해줌