안녕하세요! 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만원 할인
(*얼리버드, 타 혜택 중복 적용 가능)
IT 커리어 성장 코스 항해99, 개발자 취업부터 현직자 코스까지
항해99는 실무에 집중합니다. 최단기간에 개발자로 취업하고, 현직자 코스로 폭발 성장을 이어가세요. 실전 프로젝트, 포트폴리오 멘토링, 모의 면접까지.
hanghae99.spartacodingclub.kr
'항해99 > 취업 리부트 코스 3기' 카테고리의 다른 글
[항해 취업 리부트 코스 3기 후기] 전공자 컴공 졸업생의 후기 (18) | 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 |