애플리케이션 관점 가이드

dahye·2021년 9월 8일
0

Twelve Factor 방법론

SaaS 앱을 개발하기 위한 방법론

1. 특징

  • 설정 자동화를 위한 절차 체계화로 새로운 개발자가 프로젝트에 참여하는데 드는 시간과 비용을 최소화
  • OS에 따라 달라지는 부분을 명확히하고, 실행 환경 사이의 이식성을 극대화
  • 최근 등장한 클라우드 플랫폼 배포에 적합하고, 서버와 시스템의 관리가 불필요
  • 개발 환경과 운영 환경의 차이를 최소화하고 민첩성을 극대화하기 위해 지속적인 배포 가능
  • 툴, 아키텍처, 개발 방식을 크게 바꾸지 않고 확장(scale up) 가능

2. 12개의 요소

번호요소설명
1코드베이스버전 관리되는 하나의 코드베이스와 다양한 배포
2종속성명시적으로 선언되고 분리된 종속성
3설정환경(environment)에 저장된 설정
4백엔드 서비스백엔드 서비스를 연결된 리소스로 취급
5빌드, 릴리즈, 실행철저하게 분리된 빌드와 실행 단계
6프로세스애플리케이션을 하나 혹은 여러개의 무상태(stateless) 프로세스로 실행
7포트 바인딩포트 바인딩을 사용해서 서비스를 공개함
8동시성(Concurrency)프로세스 모델을 사용한 확장
9폐기 가능(Disposability)빠른 시작과 그레이스풀 셧다운(graceful shutdown)을 통한 안정성 극대화
10개발/프로덕션환경 일치개발, 스테이징, 프로덕션 환경을 최대한 비슷하게 유지
11로그로그를 이벤트 스트림으로 취급
12Admin 프로세스admin/maintenance 작업을 일회성 프로세스로 실행




5-4 철저하게 분리된 빌드와 실행단계

> 5-4-2 컴파일(Compile)

컴파일이란 개발자가 작성한 소스코드를 바이너리 코드로 변환하는 과정을 말한다. (목적파일이 생성됨)

즉, 컴퓨터가 이해할 수 있는 기계어로 변환하는 작업이다. 이러한 작업을 해주는 프로그램을 가르켜 컴파일러(Compiler)라 한다.

자바의 경우, 자바가상머신(JVM)에서 실행가능한 바이트코드 형태의 클래스파일이 생성이 된다.


### > 5-4-2 링크(link)

프로젝트를 진행하다 보면 소스파일이 여러개가 생성이되고 A라는 소스파일에서 B라는 소스파일에 존재하는 함수(메서드)를 호출하는 경우가 있다.

이때 A와 B 소스파일 각각을 컴파일만 하면 A가 B에 존재하는 함수를 찾질 못하기 때문에 호출할 수가 없다.

따라서 A와 B를 연결해주는 작업이 필요한데 이 작업을 링크라고 한다.

여러개로 분리된 소스파일들을 컴파일한 결과물들에서 최종 실행가능한 파일을 만들기 위해 필요한 부분을 찾아서 연결해주는 작업이다.

링크는 정적링크(static link)와 동적링크(dynamic link)가 있는데

정적링크란 컴파일된 소스파일을 연결해서 실행가능한 파일을 만드는 것이고, 동적링크란 프로그램 실행 도중 프로그램 외부에 존재하는 코드를 찾아서 연결하는 작업을 말한다.

자바의 경우, JVM이 프로그램 실행 도중 필요한 클래스를 찾아서 클래스패스에 로드해주는데 이는 동적링크의 예이다.


### > 5-4-3 빌드(Build)

소스코드 파일을 실행가능한 소프트웨어 산출물로 만드는 일련의 과정을 말한다.

빌드의 단계 중 컴파일이 포함이 되어 있는데 컴파일은 빌드의 부분집합이라 할 수 있다.

빌드 과정을 도와주는 도구를 빌드 툴이라 한다.


### > 5-4-4 빌드 툴(Build Tool)

일반적으로 빌드 툴이 제공해주는 기능으로는 다음과 같은 기능들이 있다.

전처리(preprocessing), 컴파일(Compile), 패키징(packaging), 테스팅(testing), 배포(distribution)

빌드 툴로는 Ant, Maven, Gradle 등이 있다.

출처: https://itwiki.kr/w/Twelve_Factor_%EB%B0%A9%EB%B2%95%EB%A1%A0
출처: https://freezboi.tistory.com/39 [코딩 공작소]

0개의 댓글