CS

프론트엔드에서 보는 12 Factor 1~5 알아보기

KIMSANGHUN 2025. 3. 31. 10:13


12 Factor 란?

소프트웨어를 서비스 형태로 제공하는게 일반화 되면서, 웹앱 혹은 SaaS(Software As A Service)라고 부르게 되었다. Twelve-Factor app은 아래 특징을 가진 SaaS 앱을 만들기 위한 방법론이다.

https://12factor.net/ko/codebase

 

The Twelve-Factor App (한국어)

I. 코드베이스 버전 관리되는 하나의 코드베이스와 다양한 배포 Twelve-Factor 앱은 항상 Git, Mercurial, Subversion 같은 버전 컨트롤 시스템을 사용하여 변화를 추적하며, 버전 추적 데이터베이스의 사본

12factor.net

 

12 Factor

 

1. 코드베이스

하나의 애플리케이션에는 하나의 코드베이스를 가지고 있어야한다.

코드베이스란? 

소프트웨어 시스템, 응용 소프트웨어, 소프트웨어 구성 요소를 빌드하기 위해 사용되는 소스코드 모임이다.
일반적으로 코드베이스는 사람이 쓴 소스 코드 파일만 포함한다.

https://ko.wikipedia.org/wiki/%EC%BD%94%EB%93%9C%EB%B2%A0%EC%9D%B4%EC%8A%A4

 

코드베이스 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 소프트웨어 개발에서 코드베이스(codebase)는 특정 소프트웨어 시스템, 응용 소프트웨어, 소프트웨어 구성 요소를 빌드하기 위해 사용되는 소스 코드의 모임이다

ko.wikipedia.org

여러개 앱이 동일한 코드를 공유한다면 Twelve-Factor를 위반하는 것이라고 명시되어 있습니다.

 

 

2. 종속성

명시적으로 선언되고 분리된 종속성

Twelve-Factor App은 전체 시스템에 특정 패키지가 암묵적으로 존재하는 것에는 절대 의존하지 않습니다.

node.js 에서는 이것을 의존성 관리 도구(npm, yarn)을 통해 관리하고 있습니다.

OS 또한 암묵적인 종속성입니다.

 

Version 14 – Nextjs 한글 문서

Upgrade your Next.js Application from Version 13 to 14.

nextjs-ko.org

 

저는 작년에 있었던 한 이슈가 있었습니다.

Next.js는 node.js 최소 버전이 16.14에서 18.17으로 업그레이드 되었습니다.

개발서버로 제공받았던 CentOS7 서버에서는 node.js 지원 최대 버전이 16이었기 때문에(glibc 버전 관련 이슈)
Next.js가 실행되지 않았던 기억이 있습니다.

이때 도커 컨테이너화를 통해 암묵적인 종속성에서 벗어날 수 있었습니다.

 

3. 설정

환경(environment)에 저장된 설정

애플리케이션은 종종 설정을 상수로 코드에 저장합니다.
이것은 Twelve-Factor를 위반하며, Twelve-Factor는 설정을 코드에서 엄격하게 분리하는 것을 요구합니다.
설정은 배치마다 크게 다르지만, 코드는 그렇지 않습니다.

대표적인 환경변수 파일로 .env가 있습니다.

node.js는 dotenv를 이용하여 

.env.local
.env.development
.env.production

등으로 환경을 분리하게 됩니다.

 

4. 백엔드 서비스

백엔드 서비스를 연결된 리소스로 취급

배포시에 리소스 때문에 코드가 변경되어서는 안된다. 라고 말하는 것 같습니다.

프론트엔드에서는 fetch를 통해 데이터를 가져오고 코드 전환 없이
environment를 통해 환경(local, develop, production 등) 전환이 가능하므로 잘 지켜지고 있는 것 같습니다.

 

5. 빌드, 릴리즈, 실행

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

Twelve-Factor App은 빌드, 릴리즈, 실행 단계를 엄격하게 서로를 분리합니다.
여기서 말하는 빌드, 릴리즈, 실행 단계는 다음과 같이 설명하고 있습니다.

빌드
코드 저장소를 빌드라는 실행 가능한 번들로 변환시키는 단계입니다.
빌드 단계에서는 커밋된 코드 중 배포 프로세스에서 지정된 버전을 사용하며, 
종속성을 가져와 바이너리와 에셋들을 컴파일합니다.

릴리즈
빌드 단계에서 만들어진 빌드와 배포의 현재 설정을 결합 합니다.
완성된 릴리즈는 빌드와 설정을 모두 포함하며 실행 환경에서 바로 실행될 수 있도록 준비됩니다.

실행(런타임)
선택된 릴리즈에 대한 애플리케이션 프로세스의 집합을 시작하여, 애플리케이션을 실행 환경에서 돌아가도록 합니다.

 

- 계속 -

 

다음에는 나머지 6~12번을 알아보고 12 Factor를 적용도 해보려고 합니다