개발도서 읽기 13

1장) 도메인 주도 설계란?

도메인 주도 설계 "이용자의 세계와 소프트웨어 구현을 연결 짓는 것" 유용한 소프트웨어를 만들려면 이용자의 문제가 무엇인지 파악하고, 이를 해결할 수 있는 최선의 수단을 생각해야 한다. 도메인 지식에 초점을 맞춘 설계 기법 도메인은 영역이라는 뜻이며, 도메인이 무엇인지보다는 도메인에 포함되는 것이 무엇인가 하는 것이 더 중요하다. 예를 들어, 회계 시스템에선 금전, 장부 등이 도메인에 속하는 개념이다. 물류 시스템에선 화물, 창고, 고객사, 주문, 운송방법, 재고 등이 도메인에 속하는 개념이다. "지식에 초점을 맞춘다" ?? : 도메인에 속하는 개념과 사건을 이해하고, 그 중에서 문제 해결에 유용한 것을 뽑아낸 지식을 소프트웨어에 반영하는 과정 이용자들의 문제를 정확히 이해하지 않고 최신 기술을 중시하는..

[3. 식별, 인가, 보안] 12장) 기본 인증

웹 사이트에 있는 개인의 프로필이나 개인이 작성한 문서는 소유자 동의 없인 권한이 없는 사용자는 볼 수 없어야 하기 위해선 서버가 사용자가 누구인지 식별할 수 있어야 한다. 보통 누구인지 사용자 이름과 비밀번호를 입력해 인증한다. HTTP는 자체적인 인증 관련 기능을 제공한다. 인증 : 당신이 누구인지 증명하는 것 - HTTP의 인증요구/응답 프레임워크 - 인증 프로토콜과 헤더 : HTTP는 필요에 따라 고쳐 쓸 수 있는 제어 헤더를 통해, 다른 인증 프로토콜에 맞춰 확장할 수 있는 프레임워크를 제공한다. 네 가지 인증 단계 요청 인증 정보 X GET 인증요구 WWW-Authenticate 이름과 비번을 제공하라는 지시의 의미로 401 상태정보와 함께 요청을 반려한다. 401 Unauthorized 인증..

[3. 식별, 인가, 보안] 11장) 클라이언트 식별과 쿠키

개별 접촉 HTTP는 익명으로 사용하며 상태가 없고 요청과 응답으로 통신하는 프로토콜이다. 현대의 웹 사이트들은 개인화된 서비스를 제공하고 싶어하고 사용자들에 대해 더 많은 것을 알고 기록하고 싶어한다. 개별 인사: 온라인 쇼핑이 개인에게 맞춰 있는 것처럼 느끼게 하려고 사용자에게 특화된 페이지 내용을 만든다. 사용자 맞춤 추천: 온라인 상점은 고객의 흥미가 무엇인지 학습해 좋아할 것이라 예상되는 제품을 추천한다. 저장된 사용자 정보: 복잡한 주소와 카드 정보를 매번 입력하지 않고 저장된 사용자 정보를 사용할 수 있다. 세션 추척: 사용자가 사이트와 상호작용할 수 있게 사용자의 상태를 남긴다. (쇼핑몰 장바구니 기능) 서버가 통신하는 대상을 식별하는 데 사용하는 기술들 - HTTP 헤더 정보를 전달하는 ..

[2. HTTP 아키텍처] 10장) HTTP/2.0

HTTP/2.0 - 등장 배경 : HTTP/1.1의 커넥션 하나를 통해 요청 하나를 보내고 그에 대해 응답 하나만을 받는 메시지 교환 방식은 응답을 받아야만 다음 요청을 보낼 수 있기 때문에 심각한 회전 지연이 발생한다. 이를 해결하기 위해 병렬 커넥션, 파이프라인 등이 도입되었지만 성능 개선에 근본적인 해결책이 되지 못했다. 2009년, 구글은 웹을 더 빠르게 하겠다는 목표로 SPDY 프로토콜을 내놓았다. 헤더를 압축하여 대역폭을 절약하고 하나의 TCP 커넥션에 여러 요청을 동시에 보내는 것이 가능했다. 마침내 12년 10월 3일, SPDY를 기반으로 HTTP/2.0 프로토콜을 설계하기로 결정하였다. velog.io/@taesunny/HTTP2HTTP-2.0-%EC%A0%95%EB%A6%AC HTTP/..

[2. HTTP 아키텍처] 9장) 웹 로봇

웹 로봇 : 사람과의 상호작용 없이 연속된 웹 트랜잭션들을 자동으로 수행하는 소프트웨어 프로그램 크롤러와 크롤링 - 웹 크롤러: 먼저 웹페이지를 한 개 가져오고 그 다음 그 페이지가 가리키는 모든 페이지를 가져오는 일을 재귀적으로 반복하는 방식으로 웹을 순회하는 로봇 - 루트 집합: 크롤러가 방문을 시작하는 URL들의 초기 집합 인터넷 검색엔진에서 쓰이는 것과 같은 많은 대규모 크롤러 제품들은 사용자들이 루트 집합에 새 페이지나 잘 알려지지 않은 페이지들을 추가하는 기능을 제공한다. 크롤러는 웹을 돌아다니면서 꾸준히 HTML 문서를 검색한다. 크롤러는 검색한 각 페이지 안에 들어있는 URL 링크들을 파싱해서 크롤링할 페이지들의 목록에 추가해야 한다. 또한, 로봇이 웹을 크롤링 할 때, 루프나 순환에 빠지..

[2. HTTP 아키텍처] 8장) 통합점: 게이트웨이, 터널, 릴레이

게이트웨이: 서로 다른 프로토콜과 애플리케이션 간의 HTTP 인터페이스 애플리케이션 인터페이스: 서로 다른 형식의 웹 애플리케이션이 통신하는 데 사용 터널: HTTP 커넥션을 통해 HTTP가 아닌 트래픽을 전송하는 데 사용 릴레이: 일종의 단순한 HTTP 프락시로, 한 번에 한 개의 홉에 데이터를 전달하는 데 사용 게이트웨이 : 리소스와 애플리케이션을 연결하는 역할 게이트웨이는 HTTP 트래픽을 다른 프로토콜로 자동으로 변환하여, HTTP 클라이언트가 다른 프로토콜을 알 필요 없이 서버에 접속할 수 있게 하기도 한다. - 클라이언트 측 게이트웨이와 서버 측 게이트웨이 : 웹 게이트웨이는 한쪽에선 HTTP로 통신하고 다른 한 쪽에선 다른 프로토콜로 통신한다. /로 기술한다. 서버 측 게이트웨이: 클라이언트..

[2. HTTP 아키텍처] 7장) 캐시

캐시 캐시는 불필요한 데이터 전송을 줄여 네트워크 요금으로 인한 비용을 줄여준다. 캐시는 네트워크 병목을 줄여준다. 대역폭을 늘리지 않고도 페이지를 빨리 불러 올 수 있음 캐시는 원 서버에 대한 요청을 줄여준다. 캐시는 거리로 인한 지연을 줄여준다. - 불필요한 데이터 전송 : 불필요한 데이터 전송은 값비싼 네트워크 대역폭을 잡아먹고, 전송을 느리게 만들며, 웹 서버 부하를 준다. 캐시는 첫 번째 서버 응답은 캐시에 보관되어, 뒤이으은 요청들에 대한 응답으로 사용할 수 있다. - 대역폭 병목 : 대역폭은 큰 문서에 대해 현저한 지연을 일으키며, 속도는 네트워크 종류의 차이에 따라 달라진다. 클라이언트가 빠른 LAN에 있는 캐시로부터 사본을 가져온다면, 성능이 대폭 개선될 것이다. - 갑작스런 요청 쇄도 ..

[2. HTTP 아키텍처] 6장) 프락시

웹 중개자 (프락시) 웹 프락시 서버는 클라이언트의 입장에서 트랜잭션을 수행하는 중개인 웹 프락시가 있다면, 자신의 입장에서 서버와 대화해주는 프락시와 대화한다. HTTP 프락시 서버는 웹 서버이기도 하고 웹 클라이언트이기도 한다. - 프락시 종류 개인 프락시: 흔하진 않으나 브라우저의 기능을 확장하거나 성능 개선, 무료 ISP 서비스를 위한 광고를 운영하기 위해 사용 공용 프락시: 여러 사용자들의 공통된 요청을 처리하므로 비용효율이 높고 관리가 쉬움 - 프락시 vs 게이트웨이 : 프락시는 같은 프로토콜을 사용하는 둘 이상의 애플리케이션을 연결하고, 게이트웨이는 서로 다른 프로토콜을 사용하는 둘 이상을 연결한다. 왜 프락시를 사용하는가? : 보안을 개선하고, 성능을 높여주며, 비용을 절약한다. - 프락시..

[2. HTTP 아키텍처] 5장) 웹 서버

웹 서버 HTTP 및 그와 관련된 TCP처리를 구현한 것 모든 웹 서버는 리소스에 대한 HTTP 요청을 받아서 콘텐츠를 클라이언트에게 돌려준다. 자신이 제공하는 리소스를 관리하고 웹 서버를 설정, 통제, 확장하기 위한 관리 기능을 제공 - 웹 서버의 형태 다목적 소프트웨어 웹 서버를 표준 컴퓨터 시스템에 설치하고 실행할 수 있다. 전자기기 안에 몇 개의 컴퓨터 칩만으로 구현된 웹 서버를 내장시켜서 관리 콘솔로 제공 - 웹 서버가 하는 일 커넥션을 맺는다. -- 클라이언트의 접속을 받아들이거나, 닫는다. 요청을 받는다. -- 요청 메시지를 네트워크로부터 읽어들임 요청 처리 -- 메시지를 해석하고 행동 리소스에 접근 응답 생성 응답을 보낸다. 트랜잭션을 로그로 남긴다. (5) 응답 만들기 : 응답 상태코드,..

[1. HTTP: 웹의 기초] 4장) 커넥션 관리

모든 HTTP 통신은 TCP/IP를 통해 이루어진다. TCP/IP커넥션이 맺어지면 클라이언트와 서버 간에 주고받는 메시지들은 손실, 손상되거나 순서가 바뀌지 않고 안전하게 전달된다. TCP 성능에 대한 고려 - HTTP 트랜잭션 지연 : 대부분 TCP 네트워크 지연의 원인으로 발생 하드웨어 성능, 네트워크와 서버의 전송 속도, 요청과 응답 메시지의 크기, 클라이언트 서버 간의 거리에 따라 속도가 달라진다. - 성능 관련 중요 요소 TCP 커넥션의 핸드셰이크 설정 인터넷의 혼잡을 제어하기 위한 TCP의 느린 시작 데이터를 한데 모아 한 번에 전송하기 위한 네이글 알고리즘 TCP 편승 확인응답을 위한 확인응답 지연 알고리즘 TIME_WAIT 지연과 포트 고갈 HTTP 커넥션 관리 - Connection 헤더..