CS
  • CS-Study
  • database
    • B-Tree와 B+Tree
    • DB JOIN
    • DB Lock
    • DB 트래픽
    • DBCP (DB Connection Pool)
    • Flyway
    • Message Broker
    • MySQL InnoDB 스토리지 엔진
    • MySQL 엔진 아키텍처
    • RDB와 NoSQL
    • Redis
    • SQL Injection
    • 스키마 (Schema)
    • Table Scan과 Index Scan
    • Apache Kafka
    • Key
    • 뷰 (View)
    • 인덱스
    • 정규화
    • RDBMS, NoSQL의 클러스터링/리플리케이션 방식
    • 트랜잭션(Transaction)
    • 트랜잭션의 격리성(Transaction Isolation)
    • 프로시저와 트리거
    • DB 정규화 (Normalization)
  • etc
    • MSA
    • REST, REST API, RESTful
    • SOLID 원칙
    • TDD (Test-Driven Development)
    • 서버리스
    • 컨테이너와 도커
  • java
    • Collections
    • Garbage Collection
    • Generic
    • JDBC
    • Java Virtual Machine(JVM)
    • Java Thread
    • Java8 vs Java11 vs Java17
    • 객체지향 프로그래밍 OOP (Object Oriented Programing)
    • Optional
    • RxJava(Reactive Programming)
    • 문자열(String & StringBuffer & StringBuilder)
    • Synchronized
    • Virtual Thread
    • Wrapper Class
    • Equals()와 Hashcode()
    • final
    • Jackson 라이브러리
    • 리플렉션(Reflection)
    • static class와 static method
    • 스트림(Stream)과 람다(Lambda)
    • 스프링 프레임워크에서 사용되는 디자인 패턴
    • 예외처리(Exception)
    • Java Annotation
    • 추상클래스와 인터페이스
  • network
    • 3-way handshake
    • 4-way Handshake
    • DHCP(Dynamic Host Configuration Protocol)
    • DMZ(DeMilitarized Zone)
    • DNS(Domain Name System)
    • HTTP Method
    • HTTP 버전 비교
    • HTTP status code
    • HTTP
    • IP Address
    • Mutiplexing & Demultiplexing
    • OSI 7계층
    • SOP, CORS
    • TCP와 UDP
    • XSS와 CSRF
    • gRPC
    • Stateless와 Connectionless
    • 라우터 Router
    • 로드밸런서(Load Balancer)
    • 브라우저에 URL입력시 네트워크 상 일어나는 일
    • 서브넷 마스크, 게이트웨이
    • 웹 소켓과 소켓 통신
    • 쿠키(Cookie)와 세션(Session)
  • operating-system
    • IPC (Inter Process Communication)
    • 인터럽트
    • TLB
    • 스레싱 Thrashing
    • Thread Pool, Fork-Join
    • Thread Safe
    • 프로세스
    • 가상 메모리
    • 데드락 (DeadLock, 교착 상태)
    • 동기/비동기 & 블로킹/논블록킹
    • 동기화(Synchronization)
    • 메모리 할당과 단편화
    • 뮤텍스와 세마포어, 모니터
    • 세그먼테이션과 페이징
    • 운영체제
    • 캐시 메모리
    • Context switching(문맥 교환)
    • 컴파일
    • 파일 시스템
    • 페이지 교체 알고리즘(Page Replacement Algorithm)
    • 프로세서 스케줄링 알고리즘
    • 프로세스 주소 공간
  • spring
    • @Transactional
    • AOP(Aspect-Oriented Programming)
    • DTO, DAO, VO, Entity
    • DispatcherServlet
    • Hibernate, JPA, Spring Data JPA
    • Ioc와 DI
    • JPA 연관관계 맵핑
    • N+1 Problem
    • ORM
    • Persistence Context
    • SQL Mapper vs ORM vs QueryBuilder
    • Servlet Filter와 Spring Interceptor
    • Servlet
    • Spring MVC와 Spring Boot
    • Tomcat
    • WebFlux
Powered by GitBook
On this page
  • 서버리스 아키텍처 종류
  • FaaS(Function as a Service)
  • BaaS(Backend as a Service)
  • 서버리스의 장단점
  1. etc

서버리스

서버리스(Serverless)는 서버가 없다고 생각할 수 있는데 사실 서버가 없는 건 아니다. 특정 작업을 수행하기 위해 컴퓨터를 혹은 가상머신에 서버를 설정하고, 이를 통해 처리하는 것이 아님을 의미한다.

정리하면 개발자가 서버를 관리할 필요없이 애플리케이션을 빌드하고 실행할 수 있도록 하는 클라우드 네이티브 개발 모델이다.

예를 들어 서버의 사용자가 늘어날 것을 기대하고 그에 맞는 용량의 서비스도 늘렸다면 사용자가 늘던 줄던 동일한 금액을 내야 한다. 이는 분명 손실을 가지고 온다.

반면에 서버리스 아키텍처에서는 동적으로 서버의 자원을 할당한다.

서버리스를 활용하면 운영체제 및 파일 시스템 관리, 보안 패치, 부하 분산, 용량 관리, 스케일링, 로깅, 모니터링 같은 일상적인 작업을 모두 클라우드 서비스 제공업체에 맡길 수 있다.

서버리스 아키텍처 종류

  • FaaS(Function as a Service): AWS Lambda, Microsoft Azure Functions, Google Cloud Functions ...

  • BaaS(Backend as a Service): Firebase, Kinvey, Parse ...

두가지 종류가 있지만 서버리스라고 하면 일반적으로 FaaS를 말한다.

FaaS(Function as a Service)

FaaS는 프로젝트를 여러 함수로 쪼갠 뒤, 컴퓨팅 자원에 등록하고 이 함수들이 실행되는 횟수만큼 비용을 지불하는 방식이다.

  • Stateless: 함수가 항상 같은 머신에서 실행된다는 보장이 없기에 무상태를 유지해야 한다.

  • Ephemeral: 특정 이벤트가 발생했을 때에만 컨테이너로 배포되고, 실행이 끝난 후에는 자원이 회수되므로 일시적으로만 배포된다고 할 수 있다.

BaaS(Backend as a Service)

BaaS는 개발자가 다양한 제3사 서비스와 애플리케이션에 액세스할 수 있게 해준다. 인증 서비스와 추가 암호화, 데이터베이스 등을 제공해준다. BaaS를 활용하는 경우 API로 통신한다. BaaS를 사용하여 개발하기 적합한 프로젝트로는 실시간 응용프로그램(채팅앱), 교통 앱, SNS 유형 앱, 스트리밍 앱 등이 있다.

서버리스의 장단점

  • 장점

    • 운영 비용을 줄일 수 있으므로 경제적

    • 서버 관리에 신경 쓸 필요가 없으므로 개발자 생산성 향상 및 개발 시간 단축

    • 자동 스케일 업 및 스케일 다운

    • 간단한 패키징 및 배포

  • 단점

    • Cold start

      • 서버가 항시 요청에 대기하는 것이 아니므로 느리다.

    • 실행 시간 한계

      • 단순작업(댓글 혹은 이메일 작성)에는 적합하지만 긴 시간이 소요되는 작업(동영상 업로드, 데이터 백업)에는 비효율 적이다.

      • 서버리스는 함수가 1회 호출 될 때 사용할 수 있는 메모리 및 시간에 제한이 있기 때문이다.

      • 만약 작업이 끝나지 않은 채로 해당 시간이 지나면 작업이 완료될때까지 일정 시간마다 계속 함수를 다시 호출하게 된다.

    • 클라우드 제공 플랫폼에 종속적

    • 디버깅 및 테스트에 불편


ref

PreviousTDD (Test-Driven Development)Next컨테이너와 도커

Last updated 1 year ago

서버리스(Serverless)란?
서버리스란?
서버리스 아키텍쳐(Serverless)란?