BackEnd Skils

백엔드 사전 지식 (2) - 백엔드 배포 방법부터 클라우드 서비스까지

JellyApple 2024. 11. 26. 00:02

1. 배포 방법
1) 롤링 배포
: 특정 개수의 서버들을 돌아가며 배포하는 롤링 배포
: 도커 같은 컨테이너 기술 등 특히 앤서블을 잘 사용하면 구현 가능하다.
2) 블루 그린 배포
: 똑같은 서버 인스턴스를 띄우고 로드밸런서 설정을 바꿔버리는 블루 그린 배포
3) 카나리 배포
: 전체 서버의 특정 비율만큼 배포해보고 문제 없는 경우 점점 배포를 늘려가는 방식

* 컨테이너란?
: 소프트웨어의 실행에 필요한 실행 환경을 독립적으로 운용할 수 있도록 기반 환경 또는 다른 실행 환경과의 간섭을 막고 실행의 독립성을 확보해주는 운영체제 수준의 격리 기술

 

* CI / CD
1) CI 
: 저장소에 코드가 반영되는 것을 말한다.
: Github Action , Jenkis 등을 이용한다.
2) CD
: 실제 프로덕션 환경까지 변경된 코드가 반영되는 것을 의미한다.
: 아르고 CD 같은 것들을 이용한다.

 

2. 백엔드 아키텍처
: 오늘날 서비스는 너무나 방대한 요청과 응답이 함께하기에 짜임새 없이 즉흥적으로 완벽한 서비스를 만드는 것은 불가능함. 즉, 계획이 굉장히 중요함. 이러한 계획을 아키텍처라고 부른다. (계획을 짜는 사람을 아키텍트라 부른다.)

: 아키텍처란 총체적이고 종합적이며 상세하게 개발을 준비하는 것 

: 많은 패턴화된 아키텍처가 있는데, 계층형 아키텍처, 이벤트 기반 아키텍처, 마이크로서비스 아키텍처 등이 있다.

 

1) 계층형 아키텍처 (레이어드 아키텍처)
: 말그대로 소프트웨어를 몇 가지 계층으로 나누어서 만드는 방식. 가장 흔한 방식이라고 할 수 있다. 각 계층에서는 주어진 역할을 수행하며 항상 의존성은 단방향이어야 한다. 
: 계층이 분리되어 있기 때문에 복잡성이 감소하며 계층 내에서는 관련된 코드의 응집성이 높아지는 효과가 있다. 또한 테스트도 쉽다는 장점이 있다.
: 그러나 애플리케이션 규모가 커지게 되면 계층이 거대해지며 유지보수가 힘들어지며, 개발 속도가 떨어지고 배포 속도 또한 떨어진다. 
: TCP / IP 네트워크 계층이 계층형 아키텍처가 잘 적용된 예시라고 볼 수 있다. 

 

2) 이벤트 기반 아키텍처
: 이벤트의 상태 변화에 대응하는 소프트웨어 설계 패턴이다. 
: 이벤트는 시스템의 외부 또는 외부에서 시스템에 영향을 주는 상황들을 의미한다. (로그인 버튼 클릭 시 로그인 이벤트 발생) 
: 이벤트 기반 아키텍처는 이벤트를 발생 시키는 프로듀서와 이벤트를 전달하는 브로커, 이벤트를 받는 컨슈머로 구성된다.

: 또한 이벤트 기반 아키텍처는 모든 요청을 비동기로 처리한다. 따라서 확장성이 좋고 아키텍처 내 컴포넌트 의존성을 줄일 수 있다. 
: 그러나 비동기로 처리하기 때문에 순서를 보장하기 어렵다. 

 

3) 마이크로서비스 아키텍처 
: 시스템을 여러 개의 작은 서비스로 나누어 관리하는 설계 방식이다. 
: 독립적으로 개발 , 배포 , 운영 되며 서로 구조적으로 분리되어 있다.

: 각 서비스는 독립적으로 업데이트 및 스케일링이 가능하고 시스템 전체 구조를 간결하게 하는 효과가 있다.
: 그러나 하나의 서비스를 너무 잘게 쪼개면 문제가 발생한다. 따라서 도메인 주도 설계에 영향을 많이 받은 만큼 하나의 서비스가 하나의 도메인을 담당하는 것이 좋다.  

: 확장성이 좋고 업그레이드가 용이하지만 트랜잭션을 처리하려면 분산 트랜잭션 등을 고려해야 하므로 난이도가 올라간다. 

 

3. 데이터베이스
: 검색과 축적이 쉽도록 정리된 데이터의 모음이라고 할 수 있다. 일반적으로 데이터베이스 SW를 의미한다.

: Oracle, MySQL, MariaDB , PostgreSQL , MongoDB , Cassandra , DynamoDB 등이 있다. 

1) RDB 
 : Relational Database의 약자로 관계형 데이터베이스라는 뜻이다. RDB가 아닌 것을 NoSQL 등이라 한다.
 : 데이터를 행과 열로 이루어진 테이블로 관리하며, 기본 키를 사용해 각 행을 식별한다. 
 : 또한 테이블 간의 관계를 지을 수 있다.
  * ACID 트랙잭션 : RDB의 특징으로 ACID는 각각 원자성(Atomic) , 일관성(Consistency) , 격리성(Isolation), 내구성(Durability)을 의미 한다.
    1) 원자성 : 트랜잭션을 구성하는 명령이 하나의 묶음으로 처리되어 함께 성공하거나 실패하는 것을 의미 한다.
    2) 일관성 : 트랜잭션에서 실행된 변경 사항이 데이터베이스의 무결성 조건을 만족하는 것이다.
    3) 격리성 : 두 개의 트랜잭션이 서로에게 영향을 미칠 수 없는 성질을 의미 한다.
    4) 내구성 : 트랜잭션이 성공적으로 끝나면 그 결과가 데이터베이스에 계속 유지되는 성질을 말한다. 

  * SQL : Structured Query Language의 약자로 말 그대로 쿼리를 하는 프로그래밍 언어다. 
2) NoSQL (Not Only SQL)

: DB의 성능을 높이려면 머신의 성능을 좋게 하는 스케일업 또는 머신을 여러 대로 분리하는 스케일아웃이 필요하지만 RDB는 성능 향상이 쉽지 않다. 이 때 트랜잭션을 사용하면 성능이 떨어지기 때문이다. 이러한 문제를 해결하기 위해 등장한 것이 NoSQL 

    1) 키 밸류 캐시 : 맴캐시드와 Redis가 많이 사용되는데 둘 다 클러스터를 쉽게 지원하므로 분산 환경에서 편하게 사용 가능하다. 레디스는 싱글 스레드라 오래 걸리는 작업을 하면 서버가 멈추므로 메인 스레드에서 하지 않는 것이 좋음

    2) 키 밸류 스토어 : 다이나모디비 등이 많이 사용된다. 키 밸류 캐시와 다른 점은 캐시는 껐다 키면 데이터가 휘발 되어 날아가지만 얘는 그렇지 않다. 따라서 업데이트와 쓰기가 빈번하게 일어나는 게임 서버에서 많이 사용한다.

    3) 도큐먼트 스토어 : 몽고디비가 가장 유명하며, BSON이라는 JSON과 유사하게 생긴 문서 모델을 저장한다. 

    4) 와이드 컬럼 스토어 : RDB와 유사하게 행과 열 테이블을 사용한다. 

 

4. 클라우드 서비스
: 예전에는 많은 기업이 IDC라는 건물을 세워 서버를 설치하고 인터넷 서비스를 해왔다. 반면 클라우드는 이러한 물리적 서버를 직접 설치하지 않고도 서버 자원을 사용할 수 있다.
: 매우매우 많은 서버의 CPU , 메모리 , 네트워크 장비의 네트워크 대역폭을 잘게 쪼갠 다음 나누어서 서비스를 하는 것이 클라우드 서비스.
 : AWS , GCP , Azure가 가장 유명하다. 
 : 사용한 만큼 요금을 내는 것이 특징

 

5. 클라우드 서비스 유형
 1) IaaS : 서버 인프라 환경 서비스를 제공하는 것
 2) PassS : 애플리케이션 개발 및 실행 환경을 제공하는 것
 : 인프라 구축 필요 없이 개발자가 코드만 작성하면 서버 환경이 구성되는 것을 의미한다.
 : 클라우드 제공자는 서버 프로비저닝, 리소스 확장 및 기본 인프라 관리와 같은 작업을 처리한다.
 : 헤로쿠 , AWS Elastic Beanstalk, Azure App Service 등이 있다. 
 3) SaaS : 브라우저 기반으로 소프트웨어를 사용할 수 있게 하는 것
 : 구글 독스 , MS Office 365 등이 있다.