웹 애플리케이션은 애플리케이션 계층 프로토콜로 HTTP를 사용하며, 표준 인터넷 브라우저를 통해 인간 사용자가 접근할 수 있는 기능들을 제공하는 프로그램이다. 이러한 웹 애플리케이션이 하나가 아니라 수십 또는 수백 개의 분산 애플리케이션 요소로 구성되어 네트워크상에서 협력하고 통신할 때, 이를 분산 웹 애플리케이션이라 부른다. (…) 그림 1.1은 모던 웹 애플리케이션의 분산 시스템 스택의 전형적인 논리적 형태를 나타낸다. 실제 세계에서라면 이러한 시스템은 수천 대의 서버에 분산되어 있겠지만, 그림에서는 3개의 서버만 네트워킹 스택을 통해 연결된 것으로 나타냈다.
--- P.5
REST 아키텍처 스타일을 사용해 API를 노출하는 웹 서비스를 RESTful 웹 서비스(RESTful web service)라 부른다. 이번 절에서는 EzyTutors 디지털 스토어프런트를 위한 RESTful 웹 서비스를 만든다. (…) 이번 장에서 구현할 웹 서비스의 핵심 기능은 신규 강의 등록하기, 특정 강사의 강의 목록 얻기, 개별 강의에 대한 세부 정보 얻기다. 초기 데이터 모델은 course라는 하나의 리소스만 갖는다. / 데이터 모델을 다루기 전에, 먼저 프로젝트 구조와 코드 형태를 마무리하자. 또한 여러 Actix 워커 스레드들이 안전하게 메모리의 데이터에 접근할 수 있도록 저장하는 방법도 결정한다.
--- P.70-71
이번 장에서는 관계형 데이터베이스로 PostgreSQL을 사용한다. Postgres는 잘 알려진 오픈 소스 관계형 데이터베이스로 확장성, 안전성, 기능 및 대규모의 복잡한 데이터 작업을 처리하는 데 뛰어나다. / sqlx 크레이트를 사용해 Postgres에 연결한다. 이 크레이트는 가공되지 않는 SQL 구문으로 쿼리를 작성할 수 있다. sqlx는 컴파일 시간에 쿼리를 확인하며, 내장 커넥션 풀을 제공하고, Postgres에 대한 비동기 커넥션을 반환한다. 컴파일 시간 확인은 런타임 에러를 발견하고 예방하는 데 매우 유용하다. / 데이터베이스에 대해 비동기 커넥션을 갖는다는 것은 튜터 웹 서비스가 데이터베이스로부터의 응답을 기다리는 동안 다른 태스크를 수행할 수 있다는 의미이다.
--- P.98
UpdateCourse 구조체는 옵셔널 필드들을 포함하고 있기 때문에, 먼저 API 클라이언트가 어떤 필드들을 보냈는지 검증해야 한다. 필드에 대한 새로운 값을 보냈다면, 해당 필드를 업데이트해야 한다. 그렇지 않다면 데이터베이스의 기존값을 유지해야 한다. 이를 위해 먼저 모든 필드를 포함하고 있는 현재 강의 레코드를 추출한다. 다음으로 API가 특정한 필드에 대한 값을 보냈다면, 해당 값을 사용해 데이터베이스를 업데이트하고, 그렇지 않으면 기존의 값을 사용해 업데이트한다. / 이것으로 강의와 관련된 데이터 모델, 라우트, 핸들러, 테스트 케이스, 데이터베이스 접근 함수에 대한 코드 변경을 완료했다. $PROJECT_ROOT에서 다음 명령을 실행해서 컴파일 에러가 발생하는지 확인할 수 있다.
--- P.181
이전 장에서 강사 등록하기에 관해 살펴봤다. 사용자가 강사로서 등록할 때, 강사 관련 정보는 2개의 데이터베이스에 걸쳐서 저장되었다. 강사의 이름, 이미지, 전문 영역과 같은 프로파일 상세 정보는 백엔드 튜터 웹 서비스 안의 데이터베이스에서 유지보수된다. 사용자 ID, 비밀번호 같은 등록 상세 정보들은 웹 애플리케이션 안의 로컬 데이터베이스에 저장된다. / 이번 장에서는 이전 장에서 만든 코드 위에서 구현한다. 러스트 프런트엔드 웹 앱을 작성할 것이다. 이 웹 앱을 통해 사용자들은 애플리케이션에 로그인할 수 있고, 로컬 데이터베이스와 상호작용할 수 있고, 백엔드 웹 서비스와 통신할 수 있다.
--- P.249
tutors 리스트에 여러분이 추가한 엔트리가 표시된다. 이를 통해 컨테이너가 재시작되어도 데이터베이스 변경은 로컬 볼륨에 지속된다는 것을 확인할 수 있다. 연습 삼아 다른 엔드포인트에 대해서도 테스트를 해보자. / 여기까지 온 것을 축하한다. 여러분은 튜터 웹 서비스와 Postgres 데이터베이스를 성공적으로 도커화했다. 또한 도커 컴포즈를 사용해 모든 컨테이너들을 매우 간단한 명령어로 빌드, 시작, 중지시킬 수 있게 되었다.
--- P.355