반응형
12팩터앱에 대해서 간략하게 알아본다면,
- 12팩터(Twelve-Factor app) 앱은?
-
12팩터앱은 아래 특징을 가진 SaaS(Software As A Service) 앱을 만들기 위한 방법론
- 설정 자동화를 위한 절차(declarative) 를 체계화 하여 새로운 개발자가 프로젝트에 참여하는데 드는 시간과 비용을 최소화함.
- OS에 따라 달라지는 부분을 명확히하고, 실행 환경 사이의 이식성을 극대화 함.
- 최근 등장한 클라우드 플랫폼 배포에 적합하고, 서버와 시스템의 관리가 필요없게 됨.
- 개발 환경과 운영 환경의 차이를 최소화하고 민첩성을 극대화하기 위해 지속적인 배포가 가능함.
- 툴, 아키텍처, 개발 방식을 크게 바꾸지 않고 확장(scale up) 할 수 있음.
-
Twelve-Factor 방법론의 특징은
-
어떤 프로그래밍 언어로 작성된 앱에도 적용할 수 있고 백엔드 서비스(데이터베이스, 큐, 메모리 캐시 등)와 다양한 조합으로 사용할 수 있음.
-
-
- 배경
- 12팩터 앱은 헤로쿠(Heroku) 엔지니어 경험에서 발전한 것이고, 클라우드-네이티브 어플리케이션 아키텍처에서 사용되는 패턴 목록임.
- 그럼, 헤로쿠(Heroku) 란?
- Heroku는 기업이 앱을 구축, 제공, 모니터링 및 확장 할 수있는 클라우드 플랫폼으로 보면됨.
- 아래는 헤로쿠 홈페이지에 있는 설명 구절..^^;
- Heroku is a cloud platform that lets companies build, deliver, monitor and scale apps — we're the fastest way to go from idea to URL, bypassing all those infrastructure headaches.
-
- 참고 URL
- 그럼, 헤로쿠(Heroku) 란?
- 12팩터 앱은 헤로쿠(Heroku) 엔지니어 경험에서 발전한 것이고, 클라우드-네이티브 어플리케이션 아키텍처에서 사용되는 패턴 목록임.
그럼, 12팩터(The Twelve Factors)에 대해서 알아보자.
- 첫번째, 코드베이스
- 버전 관리되는 하나의 코드베이스와 다양한 배포
- 항상 Git, Mercurial, Subversion 같은 버전 컨트롤 시스템을 사용하여 변화를 추적함.
- 코드베이스와 앱 사이에는 항상 1대1 관계가 성립함.
- but, 앱의 코드베이스는 한개여야 하지만, 앱 배포는 여러개가 될수 있음
- but, 앱의 코드베이스는 한개여야 하지만, 앱 배포는 여러개가 될수 있음
- 버전 관리되는 하나의 코드베이스와 다양한 배포
- 두번째. 종속성
- 명시적으로 선언되고 분리된 종속성
- 명시적인 종속성 선언의 장점은 애플리케이션 개발에 새로 참가하게 된 개발자가 설치를 간단하게 할 수 있다는 점.
- 파이선을 예를 들어보면,
- 파이썬에는 이를 지원하기 위한 2가지 도구가 존재함.
- 종속성 선언
- 종속성 분리
- 파이썬에는 이를 지원하기 위한 2가지 도구가 존재함.
- 명시적으로 선언되고 분리된 종속성
- 세번째. 설정
- 모든 애플리케이션에는 환경(environment)에 따라 다른 설정이 존재함.
- 즉, 설정을 코드에서 엄격하게 분리하는 것을 요구함.
- 모든 애플리케이션에는 환경(environment)에 따라 다른 설정이 존재함.
- 네번째. 백엔드 서비스
- 백엔드 서비스를 연결된 리소스로 취급
- 백엔드 서비스란?
- 애플리케이션 정상 동작 중 네트워크를 통해 이용하는 모든 서비스를 말함
- 예를들면,
- 데이터 저장소
- 메시지 큐잉 시스템
- 기타 등등
- 백엔드 서비스란?
- 그리고 12팩터앱은 백엔드 서비스를 연결된 리소스로 취급함.
- 백엔드 서비스를 연결된 리소스로 취급
- 다섯번째, 빌드, 릴리즈, 실행
- 철저하게 분리된 빌드와 실행 단계
- Twelve-Factor App은 빌드, 릴리즈, 실행 단계를 엄격하게 서로 분리함
-
- 빌드
- 코드에서 실행 할 수 있는번들(JAR,WAR 기타등등)과 여러 환경에 배포할 수 있는 의존성을 만듬.
- 릴리즈
- 실행할 수 있는 번들을 해당 환경설정과 결합시켜 배포함.
- 실행
- 해당 릴리즈를 이용해서, 실제 실행 환경에서 어플리케이션을 구동함.
- 빌드
-
- 여섯번째, 프로세스
- 애플리케이션을 하나 혹은 여러개의 무상태(stateless) 프로세스로 실행
- 즉, Twelve-Factor 프로세스는 무상태(stateless)이며, 아무것도 공유하지 않음.
- 그리고, 필요한 모든 데이터는 영구 저장소에 저장됨.
- 애플리케이션을 하나 혹은 여러개의 무상태(stateless) 프로세스로 실행
- 일곱번째. 포트 바인딩
- 포트 바인딩을 사용해서 서비스를 공개함
- 즉, Twelve-Factor 앱은 완전히 독립적 임.
- 즉, 웹서버가 웹 서비스를 만들기 위해 처리하는 실행환경에 대한 런타임 인젝션에 의존하지 않않음.
- 그리고, Twelve-Factor 앱은 포트를 바인딩하여 HTTP 서비스로 공개되며 그 포트로 들어오는 요청을 기다림.
- 포트바인딩은 앱 배포 위치와 상관없이 메시지 수신 / 처리를 완벽하게 제어함.
- 즉, Twelve-Factor 앱은 완전히 독립적 임.
- 포트 바인딩을 사용해서 서비스를 공개함
- 여덟번째. 동시성(Concurrency)
- 프로세스 모델을 사용한 확장
- Twelve-Factor 앱은 수평 확장을 통해서 더 많은 동시성을 구현할 수 있음.
- 수직확장
- 한계가 존재함.
- 수평확장
- 제한 없이 확장할 수 있는 기회를 제공함.
- 수직확장
- Twelve-Factor 앱은 수평 확장을 통해서 더 많은 동시성을 구현할 수 있음.
- 프로세스 모델을 사용한 확장
- 아홉번째, 폐기 가능(Disposability)
- 빠른 시작과 그레이스풀 셧다운(graceful shutdown)을 통한 안정성 극대화
- Twelve-Factor 앱 탄력적인 확장을 촉진함. 즉, 일회용을 추구함.
- 바로 시작 및 중지할 수 있어야 함.
- 첫째, 짧은 구동 시간을 가져야 함.
- 둘째, 프로세스는 바로 종료될 수 있음.
- 그리고, 하드웨어 에러에 의한 갑작스러운 다운에도 견고하게 대처함.
- 이런 일에 대한 대책으로 Beanstalkd와 같은 견고한 큐잉 백엔드를 사용하는 것을 권장하고 있음.
- Beanstalk is a simple, fast work queue.
- Beanstalk 는 단순하고 빠른 작업 큐를 말함.
- 참고 URI
- 빠른 시작과 그레이스풀 셧다운(graceful shutdown)을 통한 안정성 극대화
- 열번째, 개발/프로덕션환경 일치
- 개발, 스테이징, 프로덕션 환경을 최대한 비슷하게 유지
-
즉, Twelve Factor 앱은 개발 환경과 프로덕션 환경의 차이를 작게 유지함.
-
다시말해서, 지속적인 배포가 가능하도록 디자인 됨.
-
첫째, 시간의 차이를 최소화함.
-
개발자가 작성한 코드는 몇 시간, 심지어 몇 분 후에 배포가능함.
-
- 둘째, 담당자의 차이를 최소화함.
- 코드를 작성한 개발자들이 배포와 프로덕션에서의 모니터링에 깊게 관여함.
- 셋째, 툴의 차이를 최소화
- 개발과 프로덕션 환경을 최대한 비슷하게 유지함.
- 개발환경과 프로덕션 환경차이가 작다는 것은 만약 문제 발생 시 문제를 더욱 쉽게 찾고 수정할 수 있다는 것을 의미함.
-
- 개발, 스테이징, 프로덕션 환경을 최대한 비슷하게 유지
- 열한번째, 로그
- 로그를 이벤트 스트림으로 취급
- 보통 로그는, 실행 중인 앱의 동작을 확인할 수 있는 수단이고, 로컬에 파일로 저장됨.
- 하지만, Twelve-Factor 앱은
- 아웃풋 스트림의 전달이나 저장에 절대 관여하지 않음.
- 즉, 앱은 로그 파일을 작성하거나, 관리하려고 해서는 안됨.
- 대신, 각 프로세스는 이벤트 스트림을 버퍼링 없이 표준출력에 출력함.
- 로컬 개발환경에서 작업 중인 개발자는 앱의 동작을 관찰하기 원하면 각자의 터미널에 출력되는 이 스트림을 볼 수 있음.
- 스테이징이나 프로덕션 배포에서 애플리케이션이 클라우드에 배포되고 자동으로 확장되어야함으로 애플리케이션의 여러 인스턴스에서 일어난 일을 중앙집중식으로 볼 수 있어야함.
- 즉, 모든 로그를 스트림으로 처리하면, 뷰 및 보관을 위해 로그 스트림을 다른 대상으로 라우팅 할 수 있음.
- 그리고, 이를 위해 아래와 같은 오픈 소스 로그 라우터를 사용가능함
- 해당 스트림은 문제를 디버깅하고 분석을 수행하고 오류패턴을 기반으로 경고 시스템을 만드는 데 사용할 수도 있음.
- 아웃풋 스트림의 전달이나 저장에 절대 관여하지 않음.
- 로그를 이벤트 스트림으로 취급
- 열두번째, Admin 프로세스
- admin/maintenance 작업을 일회성 프로세스로 실행
- Twelve-Factor는 별도의 설치나 구성없이 REPL shell을 제공하는 언어를 강하게 선호함
- 이러한 점은 일회성 스크립트를 실행하기 쉽게 만들어주기 때문에...
- 그리고, 로컬 배포에서,
- 개발자는 앱을 체크아웃한 디렉토리에서 일회성 admin 프로세스를 shell 명령어로 바로 실행시킴.
- 그리고 프로덕션 배포에서,
- 개발자는 ssh나 배포의 실행 환경에서 제공하는 다른 원격 명령어 실행 메커니즘을 사용하여 admin 프로세스를 실행할 수 있음.
- Twelve-Factor는 별도의 설치나 구성없이 REPL shell을 제공하는 언어를 강하게 선호함
- admin/maintenance 작업을 일회성 프로세스로 실행
- 출처
결론
-
12팩터앱은 아래 특징을 가진 SaaS(Software As A Service) 앱을 만들기 위한 방법론
- 설정 자동화를 위한 절차(declarative) 를 체계화 하여 새로운 개발자가 프로젝트에 참여하는데 드는 시간과 비용을 최소화함.
- OS에 따라 달라지는 부분을 명확히하고, 실행 환경 사이의 이식성을 극대화 함.
- 최근 등장한 클라우드 플랫폼 배포에 적합하고, 서버와 시스템의 관리가 필요없게 됨.
- 개발 환경과 운영 환경의 차이를 최소화하고 민첩성을 극대화하기 위해 지속적인 배포가 가능함.
- 툴, 아키텍처, 개발 방식을 크게 바꾸지 않고 확장(scale up) 할 수 있음.
-
Twelve-Factor 방법론의 특징은
-
어떤 프로그래밍 언어로 작성된 앱에도 적용할 수 있고 백엔드 서비스(데이터베이스, 큐, 메모리 캐시 등)와 다양한 조합으로 사용할 수 있음.
-
- 오늘도 12팩터앱에 대한 지식 마술(?) 한가지 획득완료! 감사합니다. ^^
- 오늘의 명언 한마디
- 살다보면 흔히 저지르게 되는 두가지 실수가 있습니다.
- 첫째는 아예 시작도 하지 않는 것이고,
- 둘째는 끝까지 하지 않는 것입니다.
- 파울로 코엘료 지음, "마법의 순간" 중에서...
- 살다보면 흔히 저지르게 되는 두가지 실수가 있습니다.
- 오늘의 영어 한마디
- I saw her dancing.
- 나는 보았다 / 그녀가 / 춤추고 있는 것을
- 해설
- "saw" 는 see 의 과거형, 즉 보았다.
- "her dancing" 은 그녀가 춤추고 있는 것을 말함.
- I saw her dancing.
- 오늘의 민법 한마디(for real estate)
- 제1편 총칙 / 제5장 법률행위 / 제3절 대리
- 제130조(무권대리)
- 대리권없는 자가 타인의 대리인으로 한 계약은 본인이 이를 추인하지 아니하면 본인에 대하여 효력이 없다.
- 제130조(무권대리)
- 제1편 총칙 / 제5장 법률행위 / 제3절 대리
- 나의 목표 및 다짐을 항상 내곁에 두기.
- 목표
-
- 나의 강점을 바탕으로 나의 일을 잘해냄으로써 타인과 사회를 아릅답게 만든다.
- 현재 내가 가진 능력으로 누군가에 도움이 될 수 있을까? 에 대해서 항상 생각하기
- 나의 강점을 바탕으로 나의 일을 잘해냄으로써 타인과 사회를 아릅답게 만든다.
- 목표를 이루기 위한 실천방안
- 꾸준한 블로깅/기록법/독서법으로 넘버원이 아닌 온리원이 되보자.
- 천사불여일행(千思不如一行)을 항상생각하며 체화 및 각인시키자.
- "천번 생각하는것보다 한번 행동하는 것이 더 중요하다."
- 기기일약 불능십보(騏驥一躍 不能十步) / 노마십가 공재불사(駑馬十駕 功在不舍)
- 천리마도 한번에 열걸음을 뛸 수 없고, 느리고 둔한말이라도 열흘이면 하룻길을 간다.
300x250
'좋아하는 것_매직IT > 1.spring' 카테고리의 다른 글
21.Spring, Spring Boot App 시작하기 (spring-boot-starter-parent 구성, 1/4) (0) | 2021.01.27 |
---|---|
20.Spring, 스프링 부트(Spring Boot)에 대해서 알아보자. (0) | 2021.01.27 |
18.Spring, 스프링 데이터 JPA(Java Persistence API)에 대해서 알아 볼께요. (0) | 2021.01.15 |
17.Spring, 스프링관련 자바 웹어플리케이션 레이어(Layer) 및 전반적인 구성 요소에 대해서 알아보자. (0) | 2021.01.04 |
16.Spring, 스프링MVC의 핵심개념 중 컨트롤러 레벨에서 공통적으로 특정로직을 적용하는 방법에 대해서 알아볼께요. (0) | 2021.01.02 |