본문 바로가기

캡스톤 설계 [건물별 소통 플랫폼 BBC]/기술 스택 및 아키텍처

데브옵스& 인프라 기술스택 및 아키텍쳐 [2]

데브옵스& 인프라

 

CI/CD : Github Actions

doamin 구매 : 가비아

API 통신 테스트 : Postman

API 명세서 : Swagger

Deploy: AWS(IAM,EC2,CloudFront, S3, Route 53, RDS, ELB(ALB),ACM,ECR), Docker

.

.

.

.

우선 이번 데브옵스 & 인프라 파트에서 사용할 언어 및 프레임워크, 인프라들이다.

파트 별로 왜 해당 언어인프라들을 사용했는지를 기록해보자.

.

.

우선 이번에 적는 기술 스택과 아키텍쳐중 절반 정도는 사용해 보지 않고 

프로젝트를 구상하는 과정에서 도입하기로 결정한 것들이 절반이다.

실질적 1차 개발 이후 첫 배포 때 다시 사용법을 기록하며 이후 업데이트 포스팅을 할 계획이다.

 

Deploy : Docker

테이너 기반 가상화 기술을 제공하는 오픈 소스 플랫폼으로, 소프트웨어 애플리케이션을 격리된 환경에서 실행하고 배포하는 데 사용된다. 

Docker를 사용하면 애플리케이션과 그 종속성을 패키징하고, 이러한 패키지를 컨테이너로 실행할 수 있으며, 

다양한 환경에서 동일한 방식으로 작동하도록 보장할 수 있습니다. 

주요 개념 :
이미지 (Image): 

Docker 이미지는 애플리케이션 실행에 필요한 모든 파일 및 설정을 포함하는 패키지이다.

이미지는 읽기 전용이며, 컨테이너를 시작할 때 사용된다.

Docker Hub와 같은 레지스트리에서 이미지를 공유하고 다운로드할 수 있다.

컨테이너 (Container): 

컨테이너는 Docker 이미지의 인스턴스이다.

이미지를 실행하면 컨테이너가 생성되고, 컨테이너 내부에서 애플리케이션 및 종속성이 격리되어 실행된다.

컨테이너는 가상 머신처럼 동작하지만 더 가벼우며 빠르게 시작된다.

Dockerfile: 

Dockerfile은 Docker 이미지를 빌드하기 위한 빌드 스크립트이다. 

Dockerfile에는 이미지의 기본 구성, 의존성, 환경 설정 및 애플리케이션 실행 명령이 정의된다.

레지스트리 (Registry): 

Docker 이미지를 저장하고 공유하기 위한 중앙 저장소이다. 

Docker Hub는 가장 널리 사용되는 공개 레지스트리 중 하나이지만, 

조직이나 개발 팀은 자체 레지스트리를 구축하여 이미지를 관리할 수도 있다.

주요 특징:
가상화 및 격리: 

Docker는 컨테이너를 사용하여 애플리케이션 및 그 종속성을 격리된 환경에서 실행한다. 

이로써 여러 애플리케이션을 동일한 호스트에서 분리된 환경에서 실행할 수 있다.

효율성: 

Docker는 컨테이너를 사용하여 빠르게 시작하고 종료할 수 있으며, 더 적은 시스템 리소스를 사용한다.

이는 개발 및 배포 프로세스를 효율적으로 만든다.

이식성: 

Docker 컨테이너는 호스트 환경과 독립적이므로, 개발 환경, 테스트 환경 및 프로덕션 환경 간의 이식성을 보장한다.

자동화: 

Docker는 이미지 및 컨테이너 빌드, 배포 및 관리를 자동화할 수 있는 도구와 통합된다. 

이를 통해 CI/CD 파이프라인과 통합하여 개발 및 배포 프로세스를 자동화할 수 있다.

생태계: 

Docker는 다양한 도구, 라이브러리 및 서비스와 통합되는 풍부한 생태계를 제공한다. 

이는 애플리케이션 개발 및 운영을 간소화하고 확장성을 높인다.

Docker는 현대적인 애플리케이션 개발 및 배포의 핵심 요소 중 하나로 인정받고 있으며, 

다양한 운영 체제와 클라우드 환경에서 사용되고 있다. 

개발자 및 운영 팀은 Docker를 사용하여 애플리케이션을 효율적으로 관리하고, 다양한 환경에서 안정적으로 실행할 수 있다.

 

.

.

.

CI/CD : Github Actions

GitHub의 통합 지속적인 개발 및 배포(CI/CD) 서비스로, 소프트웨어 개발 프로세스를 자동화하고

효율적으로 관리할 수 있도록 해주는 도구이다. 

GitHub Actions를 사용하면 코드 변경 사항을 자동으로 테스트하고 빌드하며, 배포 파이프라인을 설정하고 관리할 수 있다.



워크플로우 (Workflows): 

GitHub Actions는 워크플로우라고 하는 CI/CD 파이프라인을 정의하고 실행할 수 있다. 

워크플로우는 YAML 파일로 정의되며, 코드 리포지토리 내의 .github/workflows 디렉터리에 저장된다.

이벤트 기반 실행: 

워크플로우는 코드 리포지토리 내에서 발생하는 다양한 이벤트(예: 코드 푸시, 이슈 생성, 풀 리퀘스트 생성 등)를 트리거로 실행된다.

이러한 이벤트에 응답하여 워크플로우를 실행할 수 있다.

테스트 및 빌드: 

GitHub Actions를 사용하여 코드를 자동으로 테스트하고, 빌드하고, 패키징하는 단계를 정의할 수 있다. 

이를 통해 코드 품질을 유지하고 무결성을 검증할 수 있다.

다중 환경 및 플랫폼 지원: 

워크플로우는 다양한 환경 및 플랫폼에서 실행할 수 있으며, Linux, macOS, Windows 및 커스텀 도커 컨테이너를 지원한다.

커뮤니티 액션 (Community Actions): 

GitHub Actions 커뮤니티에서 제공하는 다양한 액션을 사용하여 워크플로우를 확장하고 자신만의 사용자 정의 액션을 만들 수 있다.

시크릿 (Secrets): 

민감한 데이터(예: API 키, 액세스 토큰)를 안전하게 보호하고 워크플로우에서 사용할 수 있도록 GitHub Secrets를 사용할 수 있다.

결과 및 알림: 

워크플로우의 실행 결과를 확인하고, 성공 또는 실패에 대한 알림을 설정할 수 있어 Slack, 이메일 등 다양한 알림 메커니즘을 지원한다.

배포 및 자동화: 

워크플로우를 사용하여 서버에 코드를 자동으로 배포하고, 인프라 변경을 자동화할 수 있다.

GitHub Actions를 통해 개발자 및 개발 팀은 지속적인 통합 및 지속적인 배포를 구현하고

소프트웨어 개발 프로세스를 자동화하여 개발 및 배포의 속도를 향상시킬 수 있다.

이는 코드의 품질을 향상시키고 버그를 빠르게 식별하여 해결하는 데 도움이 된다.

 

 

.

.

.

.

API 통신 테스트 : Postman

 API 개발 및 테스트를 위한 인기 있는 협업 도구 및 클라이언트이다. 

API 엔드포인트를 쉽게 테스트하고 문서화하며, 팀과 협업하여 API 개발 및 테스트 프로세스를 효율적으로 관리할 수 있다.



Postman의 주요 기능:

API 요청 생성: 

Postman을 사용하여 HTTP 또는 HTTPS 프로토콜을 사용하는 API 요청을 생성할 수 있다. 

GET, POST, PUT, DELETE 및 기타 HTTP 메서드를 지원한다.

요청 헤더 및 본문 설정: 

요청 헤더를 정의하고, JSON, XML 또는 기타 형식의 요청 본문을 작성하여 API 요청을 구성할 수 있다.

환경 변수와 변수 활용: 

Postman은 환경 변수를 사용하여 다양한 환경에서 동일한 요청을 테스트하고 변수를 활용하여 동적 데이터를 처리할 수 있다.

컬렉션 및 폴더: 

API 요청을 논리적으로 그룹화하고, 컬렉션 및 폴더를 사용하여 요청을 구성 및 정리할 수 있다.

테스트 스크립트 작성: 

Postman은 JavaScript를 사용하여 요청 후에 실행할 테스트 스크립트를 작성할 수 있는 기능을 제공한다. 

이를 통해 응답을 검증하고 테스트 결과를 확인할 수 있다.

자동화와 CI/CD 통합: 

Postman은 API 테스트를 자동화하고, CI/CD 파이프라인과 통합하여

지속적인 통합 및 지속적인 배포 환경에서 API 테스트를 실행할 수 있다.

모니터링 및 협업: 

Postman은 API 모니터링을 제공하고, 팀원과 협업하여 API 요청을 공유하고 설명을 추가할 수 있는 기능을 제공한다.

 

 

 

.

.

.

.

API 명세서 : Swagger

API 개발 및 문서화를 위한 오픈 소스 프레임워크로, RESTful API를 설계, 빌드 및 문서화하는 데 사용된다. 

API 명세서를 자동으로 생성하고 관리하는 기능을 제공하여 개발자와 사용자가 API를 이해하고 사용하는 데 도움을 준다.

Swagger는 현재 OpenAPI Specification (이전 명칭은 Swagger Specification)으로도 알려져 있다.



API 문서화: 

Swagger는 API의 엔드포인트, 요청 및 응답 형식, 헤더, 파라미터 및 예제를 문서화하는 데 사용된다. 

이 문서화된 정보는 개발자 및 사용자에게 API의 사용 방법을 설명하는 데 유용하다.

자동 명세서 생성: 

Swagger는 API의 기능과 엔드포인트를 자동으로 수집하고, 이 정보를 사용하여 API 명세서를 생성한다.

이는 수동으로 API 명세서를 작성하는 번거로움을 줄여준다.

시각화 및 테스트: 

Swagger UI를 사용하여 API 명세서를 시각적으로 표시하고, 이를 통해 API를 테스트하고 상호 작용할 수 있다. 

사용자는 Swagger UI에서 API 엔드포인트를 브라우징하고 요청을 보내며 응답을 확인할 수 있다.

표준화된 명세서: 

Swagger는 RESTful API의 명세를 표준화하고, 여러 개발 플랫폼 및 언어에서 사용할 수 있도록 지원한다. 

이로써 API를 사용하는 클라이언트 및 서버 개발자 간의 협업이 간소화된다.

다양한 언어 지원: 

Swagger 명세서는 YAML 또는 JSON 형식으로 작성되어 다양한 프로그래밍 언어 및 도구에서 사용할 수 있다.

버전 관리: 

Swagger 명세서는 API의 다양한 버전을 관리하고 문서화할 수 있으므로 API 업데이트 및 호환성을 관리하는 데 도움이 된다.

보안 및 인증 지원: 

Swagger는 API의 보안 및 인증 설정을 명시적으로 정의하고 문서화할 수 있으며, 사용자에게 API 접근 권한과 제한을 설명한다.

Swagger (또는 OpenAPI Specification)는 개발자와 사용자 간의 원활한 커뮤니케이션을 지원하며, 

API의 문서화와 관리를 효율적으로 처리할 수 있도록 도와준다.

많은 개발 플랫폼과 도구에서 Swagger를 지원하고 있으며,

개발 및 테스트 프로세스를 단순화하고 API의 신뢰성을 높이는 데 도움이 된다.