Skip to content

Latest commit

 

History

History
102 lines (61 loc) · 3.73 KB

20181103_Hyeonwoo.md

File metadata and controls

102 lines (61 loc) · 3.73 KB

프로젝트에서 1인분 하기

1. 서버구축

  • Web Server
    정적 컨텐츠(html, png, css등)을 제공하는 서버

  • Web Application Server
    동적 컨텐츠를 제공하기 위해 만들어진 애플리케이션 서버(DB조회, 로직처리가가 요구되는 컨텐츠)

  • Proxy Server란?
    서버와 클라이언트의 사이에서 중계기 역할

  • Proxy Server의 종류

    • Forward Proxy
      클라이언트가 타겟서버에 접근하고자 할때, 클라이언트는 타겟서버의 주소를 프록시 서버에 전달하여, 프록시 서버가 요청된 내용을 가져오는 방식

    • Reverse Proxy
      클라이언트는 Reverse Proxy 로 설정된 서버의 주소로 데이타를 요청하게 되며, Reverse Proxy는 이 요청을 받아서 "배후"의 서버에 데이터를 요청하여 받은 다음 클라이언트에 전달하게 됨.

2. Web Server, DataBase

2.1 Web Server 선택

  • Nginx
    비동기 Event-Driven 기반 구조
    다수의 연결을 효과적으로 처리가능

  • Apache
    쓰레드 / 프로세스 기반 구조로 요청 하나당 쓰레드 하나가 처리하는 구조
    사용자가 많으면 많은 쓰레드 생성, 메모리 및 CPU 낭비가 심함

2.1 DB 선택

  • SQL (관계형 데이터베이스)
    규칙에 맞는 데이터 입력
    테이블간 JOIN 지원
    트랜잭션 지원
    안정성, 일관성
    용어(테이블, 로우, 컬럼)

  • No SQL (비관계형 데이터베이스)
    자유로운 데이터 입력
    컬렉션간 JOIN 미지원
    트랜잭션 미지원
    확장성, 가용성

3. 설계

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 설계

  • 정규화
    정규화는 테이블의 속성들의 상호 종속적인 관계를 갖는 특성을 이용하여 무손실 분해하는 과정으로, 정규화의 목적은 가능한 중복을 제거하여 삽입, 삭제 , 갱신 이상의 발생 가능성을 줄이는 것

  • 반정규화
    정규화된 엔터티 타입, 속성, 관계에 대해 시스템의 성능향상과 개발 및 운영의 단순화를 위해 데이터 모델을 통합하는 프로세스

4. 배포

  • 클라우드 서버
    Azure, AWS, Google Cloud Platform

  • CI(Continuous Integration) 란?
    Build , Test를 실시하는 프로세스를 말하며 이러한 통합 프로세스를 상시로 실시해 주는것
    --> 통합을 지속적으로 수행하는 것

  • CD(Continuous Delivery or Continuous Deploy) 란?
    짧은 주기로 소프트웨어를 개발하는 소프트웨어 공학적 접근의 하나로, 소프트웨어가 언제든지 신뢰 가능한 수준으로 출시될 수 있도록 보증하기 위한 것

    --> 짦은 주기로 개발중인 소프트웨어를 배포하고 그 과정을 자동화 하는 지속적 배포

CI Tool 인 Jenkins, Travis CI 등 을 Git과 연동하여 소스의 커밋을 감지하면 자동적으로 빌드와 테스트를 해줌