728x90
반응형
안녕하세요! delay100입니다.
오늘은 왠지 많이 피곤한 날이에요.. 프로젝트 시작 전에 준비해야할 거가 너무 많다고 생각하다보니까 심리적 압박감이 너무 크네요 ㅠㅠ..
그래서 오늘은 일찍 자려고 합니다... 내일부터는 좋든 싫든 달려야하니까요!!!
오늘의 타임테이블
- 9시~1시 3주차 코딩테스트 시험(2솔/4문제)
- 1시~3시 삼성전자 서비스센터 다녀오기(SSD추가)
- 3시~4시 팀원끼리 이야기
- 4시~5시 밍글링(OX퀴즈, 테트리스)
- 5시~9시 팀원끼리 추가 스터디(API gateway, HTTPS, 모노리식에서 DDD를 적용한 코드구조, redis, docker)
- 9시~11시30분 휴식
(잠깐 잠듦)
Q1. 팀원끼리 한 스터디
이야기 한 내용을 GPT에게 수정을 부탁했습니다.
A1. API GATEWAY
API Gateway와 로드밸런싱 개요
API Gateway
- API Gateway는 클라이언트 요청을 적절한 마이크로서비스로 라우팅해주는 역할을 합니다.
- 마이크로서비스들의 위치를 모르는 클라이언트 대신, API Gateway가 각 서비스의 위치를 찾아 연결합니다.
- API Gateway는 key-value 맵을 사용하여 서비스와 해당 API 및 포트를 매핑합니다.
- 예: key=order service, value=item service API와 port
- 로드밸런싱: API Gateway는 라운드 로빈 방식 등 다양한 로드밸런싱 기법을 사용해 요청을 분산시킵니다.
모놀리식 애플리케이션과 스케일 아웃
- 모놀리식 애플리케이션도 라운드 로빈 방식을 이용해 스케일 아웃할 수 있습니다.
- 이는 하나의 서버가 아닌 여러 서버에 걸쳐 요청을 분산시키는 방식입니다.
AWS 로드밸런서
- AWS의 로드밸런서는 API Gateway의 역할을 할 수 있습니다.
- AWS 로드밸런서에 HTTPS를 위임하면, 클라이언트와의 HTTPS 통신을 처리해주고, 내부적으로는 HTTP 통신을 가능하게 합니다.
- 클라이언트로부터 443 포트(HTTPS)로 요청을 받아, 내부적으로 80 포트(HTTP)로 전달합니다.
인증서의 위치와 역할
인증서의 위치
- 인증서는 보통 API Gateway나 로드밸런서에 위치합니다.
- 이유는 실제 Spring 서버에 도달하기 전에 HTTPS를 처리하여 HTTP로 변환하는 것이 편리하기 때문입니다.
인증서의 역할
- HTTPS 처리: 인증서가 있는 API Gateway나 로드밸런서는 클라이언트와의 HTTPS 연결을 처리합니다.
- HTTP 변환: HTTPS 통신을 내부적으로 HTTP로 변환하여, 내부 네트워크에서는 평문 통신을 사용하게 합니다.
- 이는 내부적으로 평문 통신을 사용함으로써 성능을 높이고 관리의 편리함을 제공합니다.
정리
- API Gateway
- 클라이언트 요청을 적절한 마이크로서비스로 라우팅
- 서비스 위치를 찾아주는 역할
- 라운드 로빈 방식 등으로 로드밸런싱
- 모놀리식 애플리케이션과 스케일 아웃
- 라운드 로빈 방식으로 요청을 분산하여 스케일 아웃
- AWS 로드밸런서
- API Gateway 역할을 수행
- HTTPS를 처리하고 HTTP로 변환
- 인증서 위치와 역할
- API Gateway나 로드밸런서에 위치
- HTTPS를 처리하고 내부적으로 HTTP로 변환
이러한 구조를 통해 클라이언트와 서버 간의 안전하고 효율적인 통신을 보장할 수 있습니다.
A2. HTTPS
HTTPS와 TCP 통신의 개요
HTTPS
- HTTPS (HyperText Transfer Protocol Secure)는 웹 통신을 암호화하여 데이터의 기밀성과 무결성을 보장합니다.
- 클라이언트(예: 웹 브라우저)와 서버 간에 주고받는 데이터는 암호화되어, 중간에 누군가가 가로채더라도 내용을 이해할 수 없습니다.
- 서버는 암호화된 데이터를 복호화하여 클라이언트의 요청을 처리하고 응답을 보냅니다.
TCP와 HTTP/2
- TCP (Transmission Control Protocol)는 신뢰성 있는 데이터 전송을 제공하는 네트워크 프로토콜입니다.
- HTTP/2는 성능 향상을 위해 설계된 최신 버전의 HTTP 프로토콜로, 여전히 TCP를 사용하여 요청과 응답을 전송합니다.
HTTPS 연결 과정
- TCP 3-Way Handshake
- 클라이언트와 서버는 먼저 TCP 3-Way Handshake를 통해 연결을 설정합니다.
- 이는 세 단계로 이루어집니다:
- 클라이언트가 서버에 SYN 패킷을 보냅니다.
- 서버가 클라이언트에 SYN-ACK 패킷을 응답합니다.
- 클라이언트가 서버에 ACK 패킷을 보내 연결이 확립됩니다.
- HTTPS 연결 요청
- TCP 연결이 설정된 후, 클라이언트는 HTTPS 연결을 요청합니다.
- 이는 TLS (Transport Layer Security) 핸드셰이크를 통해 이루어집니다.
- 암호화 협상 (TLS Handshake)
- 클라이언트와 서버는 TLS 핸드셰이크를 통해 암호화를 어떻게 할지 협상합니다.
- 이 과정에서 클라이언트와 서버는 서로 인증서를 교환하고, 사용할 암호화 알고리즘을 선택합니다.
- 또한, 세션 키를 생성하여 이후의 통신을 암호화하는 데 사용합니다.
4계층에서의 협의
- TLS (Transport Layer Security)는 OSI 모델의 4계층(전송 계층)에서 동작하며, 클라이언트와 서버 간의 보안 통신을 제공합니다.
- TLS 핸드셰이크 동안 클라이언트와 서버는 암호화 방법과 세션 키를 협의합니다.
정리
- TCP 3-Way Handshake: 클라이언트와 서버 간의 TCP 연결을 설정합니다.
- HTTPS 연결 요청: TCP 연결이 설정된 후, 클라이언트는 서버에 HTTPS 연결을 요청합니다.
- 암호화 협상 (TLS Handshake): 클라이언트와 서버는 TLS 핸드셰이크를 통해 암호화 방법과 세션 키를 협상합니다.
이 과정은 HTTPS를 통해 웹 브라우저와 웹 서버 간에 안전하고 암호화된 통신을 보장합니다.
A3. DOCKER
Docker Container와 Docker Image 쉽게 이해하기
Docker Image
- Docker 이미지는 애플리케이션과 그 실행 환경을 포함하는 패키지입니다.
- 쉽게 말해, 이미지는 CD입니다. CD에는 게임, 음악, 소프트웨어 등이 저장되어 있습니다.
Docker Container
- Docker 컨테이너는 이미지를 기반으로 실행되는 독립된 환경입니다.
- 쉽게 말해, 컨테이너는 CD를 읽고 실행하는 CD롬입니다. CD롬에 CD를 넣으면 게임이나 음악, 소프트웨어를 실행할 수 있습니다.
- 하나의 CD를 여러 개의 CD롬에서 실행할 수 있듯이, 하나의 이미지를 기반으로 여러 개의 컨테이너를 실행할 수 있습니다.
비유 정리
- 이미지: CD (애플리케이션과 그 실행 환경을 포함한 패키지)
- 컨테이너: CD롬 (CD를 읽고 실행하는 독립된 환경)
Docker-Compose
Docker-Compose
- Docker-Compose는 여러 개의 컨테이너를 정의하고 실행하기 위한 도구입니다.
- 단일 docker-compose.yml 파일을 사용하여 여러 개의 서비스를 정의할 수 있습니다.
- 마치 여러 장의 CD를 각각의 CD롬에 넣어 동시에 여러 프로그램을 실행하는 것과 비슷합니다.
Spring Boot 예제 다음은 Spring Boot 애플리케이션과 MySQL 데이터베이스를 정의한 docker-compose.yml 파일의 예제입니다:
// docker-compose.yml
version: '3'
services:
springboot-app:
image: your-springboot-app-image
ports:
- "8080:8080"
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/yourdatabase
SPRING_DATASOURCE_USERNAME: user
SPRING_DATASOURCE_PASSWORD: password
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: yourdatabase
MYSQL_USER: user
MYSQL_PASSWORD: password
ports:
- "3306:3306"
설명
- springboot-app 서비스:
- Spring Boot 애플리케이션을 실행하는 컨테이너입니다.
- 포트 8080을 외부와 연결합니다.
- 환경 변수로 데이터베이스 연결 정보를 설정합니다.
- depends_on 키워드로 db 서비스가 먼저 시작되도록 설정합니다.
- db 서비스:
- MySQL 데이터베이스를 실행하는 컨테이너입니다.
- 데이터베이스 이름, 사용자명, 비밀번호 등을 환경 변수로 설정합니다.
- 포트 3306을 외부와 연결합니다.
이 docker-compose.yml 파일을 사용하면 docker-compose up 명령어를 통해 Spring Boot 애플리케이션과 MySQL 데이터베이스를 동시에 실행할 수 있습니다. 이는 여러 장의 CD를 여러 개의 CD롬에 넣어 동시에 다양한 프로그램을 실행하는 것과 비슷합니다.
항해99 취업 리부트 코스를 수강하고 작성한 콘텐츠 입니다.
[할인]란에 “추천왕 3기 백지연” 입력 시 10만원 할인
(*얼리버드, 타 혜택 중복 적용 가능)
728x90
반응형
'항해99 > 취업 리부트 코스 3기' 카테고리의 다른 글
[항해 취업 리부트 코스 3기 후기] 전공자 컴공 졸업생의 후기 (20) | 2024.08.16 |
---|---|
[항해99 취업 리부트 코스 학습일지] 3기 23일차 TIL(부제: 집중은 안 되지만 열심히 노력중) (0) | 2024.06.17 |
[항해99 취업 리부트 코스 학습일지] 3기 22일차 TIL(부제: DP, DB, MSA 프로젝트 관련 공부) (1) | 2024.06.15 |
[항해99 취업 리부트 코스 학습일지] 3기 21일차 TIL(부제: Spring 강의를 열심히 들어요,,) (1) | 2024.06.14 |
[항해99 취업 리부트 코스 학습일지] 3기 20일차 TIL(부제: 팀 스터디 열정적으로 한 날) (1) | 2024.06.13 |