

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 현대적 애플리케이션 개발
<a name="modern-apps"></a>

**잘 설계된 클라우드 네이티브 애플리케이션을 빌드합니다.**

[최신 애플리케이션](https://aws.amazon.com/modern-apps/) 개발 사례는 조직이 잘 설계된 클라우드 네이티브 애플리케이션을 빌드하고 경쟁 우위를 유지하는 데 필수적입니다*.* 비즈니스는 [컨테이너](https://aws.amazon.com/containers/) 및 [서버리스](https://aws.amazon.com/serverless/) 컴퓨팅과 같은 클라우드 네이티브 기술을 사용하여 변화하는 시장 수요에 맞게 확장 가능하고 민첩한 애플리케이션을 생성할 수 있습니다. 이러한 기술을 통해 조직은 리소스 사용률을 최적화하고 비용을 절감하며 애플리케이션의 성능을 개선할 수 있습니다.

최신 애플리케이션을 설계할 때 운영 및 개발을 위한 애자일 솔루션을 개발합니다. 최신 애플리케이션은 고객 수요 변화에 자동으로 대응하며 장애에 대해 뛰어난 복원력을 제공합니다. 엔지니어는 변경 사항을 신속하게 개발 및 배포하고 애플리케이션 성능을 모니터링할 수 있습니다. 최신 애플리케이션은 자체 복구가 가능하도록 설계되었으며, 필요할 때 트래픽과 비용을 전혀 들이지 않으면서 대규모 또는 소규모 트래픽으로 규모를 조정할 수 있습니다.

잘 설계된 클라우드 네이티브 애플리케이션을 빌드하려면 기본 기술과 관련 모범 사례를 심층적으로 이해해야 합니다. 조직은 마이크로서비스 아키텍처를 채택하고 애플리케이션을 모듈식으로 느슨하게 결합하도록 설계하여 독립적인 배포와 확장성을 허용해야 합니다. 이 접근 방식을 통해 조직은 애플리케이션을 빠르고 독립적으로 개발, 테스트 및 배포 가능한 더 작고 관리 가능한 구성 요소로 나눌 수 있습니다.

## 시작
<a name="modern-apps-start"></a>

### 최신 접근 방식 살펴보기
<a name="modern-apps-approaches"></a>

먼저 컨테이너, 서버리스 기술 및 [마이크로서비스](https://aws.amazon.com/microservices/) 개발을 지원하는 기타 접근 방식을 조사합니다. 이러한 방법은 리소스 효율성을 높이고 보안을 개선하며 인프라 비용을 최소화합니다. 기존의 차별화 및 엔터프라이즈 애플리케이션을 [현대화](https://docs.aws.amazon.com/prescriptive-guidance/latest/strategy-modernizing-applications/welcome.html)하여 효율성을 개선하고 기존 투자의 가치를 극대화하려고 합니다. 가치 기반 의사 결정에 따라 [리플랫포밍](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-replatforming-cots-applications/welcome.html)(자체 관리형 컨테이너, 데이터베이스 또는 메시지 브로커를 관리형 클라우드 서비스로 이전) 및 [리팩터링](https://docs.aws.amazon.com/prescriptive-guidance/latest/modernization-decomposing-monoliths/welcome.html)(애플리케이션을 재개발하여 클라우드 네이티브 아키텍처 채택)을 고려합니다. 

기존 클라우드 기반 애플리케이션을 업데이트하는 경우 성공적인 접근 방식으로, [스트랭글러 피그 패턴](https://aws.amazon.com/blogs/architecture/seamlessly-migrate-on-premises-legacy-workloads-using-a-strangler-pattern/)을 사용하여 아키텍처를 마이크로서비스로 점진적으로 분해하는 방법이 포함됩니다. 이 절차는 현대적인 애플리케이션 방법론을 채택하는 데 도움이 되므로 내재된 이점을 실현하고 대규모 조직에서 그 가치를 입증할 수 있습니다. 해당하는 경우 [이벤트 기반 아키텍처](https://aws.amazon.com/event-driven-architecture/)를 활용하는 고유한 마이크로서비스로 애플리케이션을 구성하는 방법을 고려합니다. 워크로드 성능 또는 신뢰성에 영향을 주지 않도록 아키텍처에서 변경할 수 없는 [서비스 할당량](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/manage-service-quotas-and-constraints.html)과 물리적 리소스를 고려해야 합니다. 

### 클라우드 네이티브 컴퓨팅 기능 채택
<a name="modern-apps-compute"></a>

클라우드 네이티브 컴퓨팅 기능은 최신 애플리케이션 개발의 핵심입니다. 이 접근 방식을 사용하려면 조직이 컴퓨팅 유닛을 호스팅하는 방법을 고려하고 각 사용 사례 또는 서비스에 가장 적합한 옵션을 식별해야 합니다. 예를 들어 [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)는 애플리케이션 코드를 실행하기 위한 서버리스 메커니즘을 제공하고 이벤트 기반 아키텍처에서 중요한 역할을 합니다. Lambda 함수는 온디맨드 방식으로 시작되고 정의된 최대 동시성까지 병렬로 실행되므로, 다양한 태스크를 수행하도록 확장할 수 있습니다.   

### 컨테이너화 사용
<a name="modern-apps-containers"></a>

최신 소프트웨어 개발에서 애플리케이션 및 종속성 관리는 특히 다양한 환경에서 일관성을 유지해야 한다는 점을 고려할 때 점점 더 복잡한 태스크가 되었습니다. 이러한 문제를 해결하기 위해 Docker와 같은 컨테이너화 기술DL 애플리케이션 및 해당 종속성을 패키징하기 위한 효과적인 솔루션으로 부상했습니다. 컨테이너는 애플리케이션의 런타임 환경에 관계없이 일관되고 재현 가능한 배포를 보장하므로 로컬 환경의 개발이 클라우드 환경의 프로덕션 개발과 동일한 방식으로 작동합니다. 이 접근 방식은 환경 또는 해당 구성 내 불일치로 인해 발생할 수 있는 오류를 줄입니다. 

### 최신 데이터베이스 사용
<a name="modern-apps-dbs"></a>

최신 데이터베이스를 사용하는 경우 애플리케이션 내 각 마이크로서비스는 요구 사항을 충족하는 올바른 목적별 데이터베이스를 사용할 수 있어서 민첩성과 성능이 향상되고 비용은 절감됩니다. 예를 들어 한 마이크로서비스는 세션 데이터를 저장할 때 높은 처리량을 달성하기 위해 NoSQL 데이터베이스를 사용할 수 있고, 다른 마이크로서비스는 관계형 데이터베이스를 사용하여 복잡한 테이블 조인을 수행할 수 있으며, 또 다른 마이크로서비스는 양자 원장 데이터베이스를 사용하여 블록체인의 변경 사항을 추적할 수 있습니다. 

최신 데이터베이스는 확장성과 유연성을 제공합니다. 또한 기존 데이터베이스보다 더 나은 보안, 규정 준수 및 신뢰성을 제공하는 데 도움이 됩니다. 이를 통해 조직은 데이터를 더 효율적으로 저장 및 관리하고 애플리케이션은 적시에 올바른 데이터에 액세스할 수 있으므로 성능과 사용자 경험이 개선됩니다. 

최신 데이터베이스로 마이그레이션하는 것은 최신 애플리케이션 개발의 중요한 부분입니다. 조직은 올바른 데이터 스토리지 솔루션을 사용하여 데이터 관리 기능을 최적화하고 보다 효율적이고 신뢰할 수 있는 애플리케이션을 제공할 수 있습니다. 각 마이크로서비스를 독립적으로 구성하고 각 마이크로서비스에 대한 올바른 기술을 선택하면 조직은 비용을 최소화하면서 효율성과 확장성을 극대화할 수 있도록 데이터 기능을 추가로 최적화할 수 있습니다. 

## 고급
<a name="modern-apps-advance"></a>

### 최신 아키텍처 최적화
<a name="modern-apps-arch"></a>

추가 최적화를 달성하려면 서버리스 기술의 구현을 세부 조정하고 [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) 및 [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)와 같은 AWS 서비스를 사용하여 독립적으로 규모를 조정하고 배포할 수 있는 아키텍처를 개발합니다. [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) 및 [AWS Cloud Map](https://docs.aws.amazon.com/cloud-map/latest/dg/what-is-cloud-map.html)을 사용하여 서비스 검색을 구현해 구성 요소 간에 원활한 통신을 보장합니다.

API 버전 관리, 캐싱 및 사용량 제한 방식을 채택하여 다양한 애플리케이션 버전에서 호환성과 성능을 유지 관리합니다. [AWS Identity and Access Management(IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 및 리소스 정책을 사용하여 보안을 강화합니다. 그러면 인프라를 보호하고 권한 있는 엔터티에만 액세스 권한을 부여할 수 있습니다.

가능한 경우 서버리스 서비스를 사용하여 기본 인프라를 관리할 필요 없이 컨테이너를 실행합니다. 이를 통해 핵심 애플리케이션 개발에 집중할 수 있으며 리소스 관리 및 성능을 개선할 수 있습니다. 또한 확장성, 유연성 및 비용 효율성의 이점을 최대한 활용할 수 있습니다.

서버리스 아키텍처의 복잡성을 심층 분석하고 이러한 고급 사례를 통합하면 조직은 개선 및 미세 조정 기회를 발견하고 궁극적으로 클라우드 네이티브 애플리케이션의 잠재력을 극대화할 수 있습니다. 이러한 노력은 전반적인 사용자 경험을 더욱 개선시키는 보다 정교한 애플리케이션 패턴을 채택하는 데 도움이 됩니다. 또한 조직이 소프트웨어 개발 프로세스에서 더 민첩하고 효율적으로 처리할 수 있도록 지원합니다.

### 서비스 메시 기술 사용
<a name="modern-apps-mesh"></a>

조직이 애플리케이션을 빌드하고 배포하기 위한 마이크로서비스 아키텍처를 더 많이 채택함에 따라 이러한 서비스 간의 복잡성, 보안 및 통신을 관리하는 것이 중요합니다. Istio, Linkerd 또는 Consul과 같은 서비스 메시 기술은 마이크로서비스의 보안, 관찰성 및 신뢰성을 개선하는 데 중요한 역할을 합니다.

### 가시성 및 추적성 보장
<a name="modern-apps-visibility"></a>

최신 사례에서는 개발 프로세스에서 가시성과 추적성을 높이고 업계 표준 및 모범 사례를 더 쉽게 준수할 수 있습니다. 가시성과 모니터링은 최신 애플리케이션 개발에 필수적입니다. 애플리케이션 성능에 대한 중요한 인사이트를 제공하기 위해 모니터링 및 로깅 솔루션을 구현하면 조직은 개선이 필요한 영역을 식별하고 애플리케이션을 최적화할 수 있습니다. 플랫폼 엔지니어링 팀과 협력하여 애플리케이션 오류, 성능 및 규정 준수에 대한 포괄적인 가시성과 모니터링을 제공하기 위해 여러 도구를 사용할 수 있어야 하며 이를 바탕으로 문제를 신속하게 감지, 진단 및 해결할 수 있습니다. 

## Excel
<a name="modern-apps-excel"></a>

### 마이크로서비스 수용
<a name="modern-apps-microservices"></a>

많은 조직에서 최신 애플리케이션 개발은 비즈니스 성공과 동의어입니다. 마이크로서비스는 이러한 트랜스포메이션의 핵심이며 조직은 이러한 강력한 아키텍처 패턴을 수용하여 이점을 얻을 수 있습니다.

마이크로서비스는 확장성과 복원력이 뛰어나고 민첩한 애플리케이션 아키텍처를 제공합니다. 애플리케이션을 독립적으로 배포 가능한 소규모 서비스로 분류하여 조직은 애플리케이션의 다른 부분에 영향을 주지 않고 특정 구성 요소를 빠르게 반복하도록 선택할 수 있습니다. *회로 차단기* 및 *벌크헤드*와 같은 고급 복원력 패턴은 이러한 애플리케이션의 고가용성을 보장하는 데 중요한 역할을 합니다.

[회로 차단기](https://docs.aws.amazon.com/prescriptive-guidance/latest/cloud-design-patterns/circuit-breaker.html)는 비정상 서비스에서 통신을 일시적으로 중지하거나 전환하여 문제를 복구할 수 있도록 계단식 장애를 차단하는 안전 메커니즘 역할을 합니다. [벌크헤드](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_fault_isolation_use_bulkhead.html)는 리소스를 격리하고 잠재적 장애의 영향 범위를 제한합니다. 이러한 패턴을 함께 사용하면 예상치 못한 중단을 견디고 최적의 성능을 유지하는 강력한 아키텍처가 생성됩니다.

마이크로서비스 구현의 또 다른 중요한 측면은 도메인 기반 설계(DDD) 원칙을 채택하는 것입니다. DDD는 비즈니스 도메인에 대한 공유된 이해 기반을 구축하고 이를 체계적인 소프트웨어 설계로 변환하는 데 중점을 둡니다. 이 접근 방식은 보다 응집력 있고 유지 관리 가능한 마이크로서비스로 이어지며, 조직의 요구 사항에 따라 애플리케이션의 단계별 발전을 보장합니다.

마이크로서비스 기반 애플리케이션에서는 서비스 간 통신을 최적화하는 작업도 중요합니다. 조직은 gRPC 또는 GraphQL과 같은 고급 프로토콜을 구현하여 서비스 간 통신 효율성을 크게 개선할 수 있습니다. 이러한 프로토콜은 유형의 안전, 짧은 지연 시간 및 유연성과 같은 기능을 제공하여 애플리케이션의 전반적인 성능과 유지 관리를 개선하는 데 도움이 됩니다.

마이크로서비스를 채택하는 조직은 혁신, 민첩성 및 협업을 장려하는 환경을 제공합니다. 개발 팀은 일반적으로 비즈니스 역량을 중심으로 구성되며 지속적 통합 및 지속적 전송(CI/CD) 사례에 집중합니다. 개발 팀은 공동 책임의 문화를 수용합니다. 또한 의사 결정을 내리고, 실험하며, 반복할 수 있는 이들의 능력을 뒷받침해줍니다.