이 책은 백엔드 개발자의 관점에서 대규모 소프트웨어 애플리케이션을 구축하는 과정을 다룬다. 이 책은 특정 도구나 프레임워크에 대한 튜토리얼 이상으로 여러 기술 원칙과 프로세스를 개략적으로 설명한다. 도구와 프레임워크는 시간이 지남에 따라 변경되며, 새로운 스택으로 대체되지만 패턴은 그대로 유지되며 왜 그렇게 작동하는지를 보여준다. API 개발, 데이터베이스 통합, 응용프로그램 보안 및 배포 프로세스와 같은 교육 자료에서 일반적으로 격리된 다양한 영역을 연결한다. 그것은 가장 큰 소프트웨어 회사들이 수백만 명의 사용자들에게 서비스를 제공할 수 있는 소프트웨어를 어떻게 구축하는지에 대한 통합적인 비전을 제공하며, 이 비전은 소프트웨어 개발자로 경력을 시작하는 사람들과 부분적인 경력만 있는 이들에게 도움이 된다.
소프트웨어 개발 단계를 따르기 위해 12장으로 시간순으로 정렬되어 있으며, 이 책을 따라가면서 처음부터 끝까지 읽으면 백앤드 개발에 대한 전반적인 내용을 이해하게 될 것이다. 책의 첫 부분은 백엔드 개발의 필수적인 측면을 다룬다. 비즈니스 요구사항을 전환하고, 애플리케이션과 함께 진화할 수 있을 만큼 유연한 고급 API를 정의하고, 올바른 유형의 데이터베이스를 선택하는 프로세스를 간략하게 설명한다. 이 첫 번째 부분은 또한 웹 기반 응용 프로그램의 내부 작동에 대한 심층적인 정보를 제공하여 그 위에 구축된 추상화를 완전히 파악할 수 있는 강력한 모델을 구축한다.
두 번째 파트에서는 소프트웨어 애플리케이션에 품질을 구축하는 데 필요한 패턴과 프로세스를 다룬다: 테스트, 애플리케이션 보안, 오류 및 로그 관리, 프레임워크 채택, 지속적인 통합 및 배포. 이러한 개념들은 전 세계 소프트웨어 개발자들의 일상적인 작업의 기초가 된다.
이 책의 세 번째 부분과 마지막 부분은 두 가지 목적을 제공한다: 단순한 앱에서 대규모 분산 시스템 및 개념으로 전환하여 경력을 발전시키고 고급 개발자가 되는 방법에 대해 설명한다.
1장에서는 문제 해결 및 요구사항 수집에 대한 주제를 다룬다. 문제를 해결하기 위한 도구로서 소프트웨어 응용 프로그램의 중요성에 대한 배경을 제공한다. 이 장에서는 반복 프로세스에서 비즈니스 요구사항을 성공적으로 기억하는 데 유용한 휴리스틱을 제공한다. 그런 다음, 이 장에서는 대규모 소프트웨어 애플리케이션과 프로젝트의 기능 및 비기능적 요구사항을 다루는 모든 구성요소와 도구에 대한 개요를 제공한다.
2장은 웹 기반 애플리케이션과 클라이언트-서버 아키텍처에 대해 자세히 설명한다. 웹 서버의 내부 작동에 대해 자세히 설명하고, Java 기반 웹 서버를 생성하고 이를 NodeJS의 Express와 같은 프로덕션 준비 서버와 비교할 수 있도록 안내한다. 상세 보기를 통해 고급 개발자가 되기 위한 중요한 기술인 도구의 “마법”을 이해할 수 있다.
제3장은 “API”라는 용어를 명확하게 설명한다. API가 무엇인지, 백엔드 개발자에게 유용한 이유, 애플리케이션을 만드는 과정에서 어떻게 적합한지 설명하며, 유연한 데이터 기반 API를 설계하는 방법과 이를 구현하기 위한 올바른 도구(REST, GraphQL 및 gRPC)를 선택하는 방법에 대해 설명한다.
4장에서는 데이터베이스를 포함한 상태 및 데이터 관리에 대해 다룬다. 데이터베이스가 필요한 이유, 실제 데이터를 모델링하는 방법, 비즈니스 요구사항에 적합한 데이터베이스를 선택하는 방법에 대한 배경을 제공한다. 이 장에서는 SQL과 NoSQL의 차이점에 대해 설명하고 관계형, 문서 및 그래프 데이터베이스와 같은 각 제품의 가장 일반적인 차이점을 강조한다.
5장에서는 시험 영역을 탐구한다. 수동 및 자동화된 테스트 프로세스를 자세히 설명하고 모의실험, 스텁 및 테스트 더블과 같은 개념 간의 차이점을 강조한다. 또한 이 장에서는 쓰기 단위 및 통합 테스트와 그 차이에 대한 우수 관리 기준을 제공한다. 그런 다음 성능 및 보안 테스트와 같은 비기능 테스트의 다른 영역을 설명한다.
6장에서는 응용프로그램 보안에 대해 다룬다. 이 장에서는 소프트웨어 개발자라면 누구나 알아야 할 애플리케이션 보안 전문가가 사용하는 개념을 정의하고, OAuth2, SAML 및 OpenID Connect와 같은 산업 표준을 포함하여 인증 및 권한 부여 서비스를 애플리케이션에 통합하는 방법을 설명한다. 또한 가장 일반적인 보안 취약점 중 일부를 다루고 이를 방지하는 방법에 대해 조언한다.
7장에서는 소프트웨어 응용 프로그램의 오류 및 로그 관리에 대한 주제를 설명한다. 일부 코딩 언어가 오류를 처리하는 방법, 프로덕션 환경에 배포된 애플리케이션에서 오류를 찾는 방법, Logstash, Elastisearch 및 Kibana와 같은 도구를 사용하여 분산 애플리케이션에서 오류를 중앙 집중화하고 모니터링하는 방법을 설명한다.
8장에서는 애플리케이션 프레임워크에 대한 심층적인 설명을 다룬다. 이 장에서는 프레임워크가 무엇이며, 어떻게 사용되는지, 백엔드 개발자의 일상적인 문제를 해결하는 데 사용되는 패턴에 대해 설명한다. 그런 다음 Java의 Spring and Hibernate 및 Python의 Django와 같은 인기 있는 프레임워크를 소개한다. MVC와 같은 패턴이 이러한 프레임워크에서 구현되는 방식을 대조하며 개발자가 자신의 사용 사례에 적합한 프레임워크를 선택할 수 있는 기반을 제공한다.
9장에서는 프로덕션 환경에 애플리케이션을 배포하는 방법을 설명한다. 사용자에게 애플리케이션을 제공한 방법, 당면한 과제, 최신 CI/CD(Continuous Integration and Deployment) 흐름을 통해 개발 팀이 애플리케이션을 신속하게 제공할 수 있는 방법에 대한 몇 가지 역사적 배경을 제공한다. 또한 Virtual Machines 및 Docker 컨테이너를 사용한 가상화를 통해 복제 가능한 환경의 개념과 이를 CI/CD 프로세스에 통합하는 방법에 대해서도 알아본다.
10장에서는 대규모 분산 응용 프로그램을 만들기 위한 고급 항목을 제공한다. 이 장에서는 성능을 측정하여 개선 기회를 찾는 방법을 다룬다. 그런 다음 “약속”과 “미래”의 개념을 통해 캐싱, 비동기 아키텍처 및 비동기 프로그래밍과 같은 성능을 향상시키는 기술을 탐색한다. Redis 및 Kafka와 같은 대규모 애플리케이션에서 성능을 향상시키는 데 사용되는 몇 가지 도구를 제시한다.
11장은 소프트웨어 애플리케이션을 설계하기 위한 하나의 프로세스로 이전의 모든 장을 통합한다. 이 장에서는 요구사항을 기술 사양으로 변환하고 서버 및 스토리지 크기 요구사항을 추정하며 애플리케이션 확장에 사용되는 원칙을 단계별로 설명한다. 이 프로세스는 시스템 설계 면접에 특히 유용한 부분이다.
마지막 장인 12장은 고급 개발자가 되기를 원하는 백엔드 개발자를 위한 경력 조언의 개요를 제공한다. 주니어 개발자와 시니어 개발자 모두의 전형적인 책임에 대해 설명하며, 기술 인터뷰 준비, 멘토 찾기, 기술 지식을 지속적으로 늘릴 수 있는 리소스 찾기에 대한 지침을 제공한다.
---본문 중에서