Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
161 changes: 161 additions & 0 deletions keyword/chapter10/keyword.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
- 클라우드 컴퓨팅이란?

자체적인 물리적 데이터 센터를 구축하는 대신, 인터넷을 통해 서버, 스토리지, 등 리소스들을 빌려 쓰고 사용한 만큼만 비용을 지불하는 것

- 서비스 모델
- IasS / Infrastructure as a Service
- AWS EC2
- PasS / Platform as a Service
- Heroku
- SaaS / Software as a Service
- 노션, 슬랙

- 장점
- 민첩성
- 필요한 리소스를 빠르게 작동시킬 수 있다.
- 탄력성
- 필요한 만큼 리소스를 프로비저닝하면 된다.
- 요구 변화에 따라 리소스를 확장하거나 축소가 가능하다.
- 비용 절감
- 데이터 센터 등 물리적 장치에 들어가는 고정 비용을 절감한다.
- 전 세계에 배포
- 새로운 지리적 리전을 활용하여 배포가 가능하다.

- 단점
- 데이터 보안 문제
- 제 3자의 서버에 저장, 해킹과 유출의 위험이 존재한다.
- 서비스 의존성
- 제공업체의 안정성과 성능에 따른 영향을 받는다.
- 데이터 전송 비용 및 속도
- 대규모 데이터를 전송하거나 다운받으면 대역폭 비용이 발생한다.
- 기술적 복잡성
- 내부 기술 인력 부족, 클라우드 관련 지식 부족으로 문제가 발생할 수 있다.


- AWS? GCP?

AWS: Amazon Web Service

- 장점
- 다양한 서비스와 기능
- 강력한 인프라와 광범위한 글로벌 네트워크
- 핵심 서비스
- EC2, S3, RDS 등 폭 넓은 클라우드 서비스
- 적합한 사용처
- 대규모 엔터프라이즈 운영에 적합
- 다양한 클라우드 서비스가 필요한 경우

GCP: Google Cloud Platform

- 장점
- 데이터 분석 및 머신 러닝에 강점
- 빅데이터 서비스와 Google 기술 및 인프라 사용
- 핵심 서비스
- Compute Engine, Google Cloud Storage, BigQuery 등 데이터 중심 서비스
- 적합한 사용처
- 데이터 분석 및 머신 러닝 프로젝트
- Google 서비스와의 통합이 필요한 경우

- 환경변수 처리 방법과 왜 환경변수로 민감 정보를 가려야 하는가?
- 로컬
1. .env 파일에 진짜 값 숨기기
1. 프로젝트 최상단(루트 디렉토리)에 `.env` 파일을 만들고,
그 안에 외부에 노출되면 안 되는 진짜 값들을 작성한다.

```jsx
# .env 파일
DB_USER=root
DB_PASSWORD=my_super_secret_password!
JWT_SECRET_KEY=very_long_and_secure_random_string
KAKAO_CLIENT_ID=1234567890abcdef
```

2. .gitignore 파일로 깃허브 업로드 차단
1. .gitignore 파일에 추가

```jsx
# .gitignore 파일
.env
```

3. .yml 또는 설정 파일에서 환경 변수 불러오기
1. 스프링은 application.yml

```jsx
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: ${DB_USER} # .env에 있는 DB_USER 값을 가져옴
password: ${DB_PASSWORD} # .env에 있는 DB_PASSWORD 값을 가져옴

jwt:
secret: ${JWT_SECRET_KEY}
```

- 배포 환경에 따른 민감 정보 관리
- Linux 등 서버 직접 실행 시: 서버 터미널에서 실행 명령어와 변수 넘겨준다.
- Docker 사용 시: -e 옵션으로 주입한다.
- Github actions: Settings 가서 민감정보를 직접 등록한다.

- 환경변수 사용 이유
- 버전 관리 시스템 노출 및 해킹 방지
- 소스 코드와의 분리
- DB가 바뀌더라도 서버 환경에 따라 .env 값만 바꾸며 유연하게 대응할 수 있다.
- 빠른 대처와 유지보수에 용이
- 하드코딩이라면 직접 코드를 고치고 빌드하고 깃허브에 올린다.

- yml 환경 분리 방법

Prod, Dev 등 분리 이유:
**각 환경(Prod, Dev, Test)에서는 서로 다른 설정값(DB URL, API KEY..)들이 필요로 하는데, 이런 설정값들을 파일을 분리하여 관리한다면 유지보수 측면에서 매우 편리하다.**

- **application-dev.yml**
- 개발 환경을 뜻하는 문서다.
- **application-local.yml**
- 로컬 개발 환경을 뜻하는 문서다.
- 내 컴퓨터에 깔려있는 DB 주소와, 편하게 개발하기 위해 로그를 자세히 찍는 설정들을
적어둔다. 로컬이므로 비밀번호를 하드코딩하거나 `.env`를 써도 무방하다.
- **application-log.yml**
- 로그에 관한 문서이다.
- **application.yml**
- 공통적인 문서다.
- 만약 다른 폴더에 없이, 문서들이 `application.yml`과 같은 곳에
있다면 `spring.config.import`를 작성할 필요가 없다.
이것은 다른 폴더에 있을 때 스프링이 인식할 수 있도록 하기 위해 작성한 것이다.
- 모든 환경에서 똑같이 적용되는 설정(앱 이름, JWT 만료 시간 등)을 적고, 아무런 설정 없이 서버를 켰을 때 기본으로 실행될 환경을 지정한.
- **application-prod.yml**
- 실제 배포되는 서버의 설정이다.
여기서는 절대 비밀번호를 직접 적지 않고,
앞서 배운 환경변수(`${...}`)를 사용해 완전히 가려준다.

- 원하는 환경으로 실행
- Intellij → 구성 편집 → Active Profiles 칸에서 원하는 환경을 작성한다.
ex) local, prod 등

- Docker와 .jar vs Docker 이미지

Docker

컨테이너 기반 가상화 플랫폼으로, 응용 프로그램과 그 종속성을 격리된 환경인 컨테이너로
패키징하여 실행하는 기술이다.

- 컨테이너
- 가상화 기술을 이용하여 애플리케이션과 개발 환경을 격리된 공간에서 실행하는 단위
- 가상화
- 다른 운영체제를 소프트웨어처럼 사용할 수 있게 하는 기술, 가상 머신이라고 불린다.

⇒ Docker는 가상 머신처럼 하드웨어 장치를 효율적으로 활용할 수 있도록 해주는 프로세스이다.

- Docker Image
- 애플리케이션 실행에 필요한 독립적인 환경을 포함한다. (OS 환경, 런타임, jar 파일)
- 소스 코드, 라이브러리, 종속성, 도구 및 응용 프로그램을 실행하는데 필요한 기타 파일을 포함하는 불변 파일이다.
- 이미지 → 컨테이너
- 읽기 전용 == 스냅샷 / 컨테이너가 시작하면 쓰기 레이어가 생긴다.

- .jar 파일
- 소스 코드 + 관련 라이브러리 파일
- 환경 의존성이 높다. 이식성이 안좋다.
- 파일 용량이 가볍다.

- **jar ⇒ docker file**
- .jar 파일 만들어서 Dockerfile이라는 곳에서 작성하여 Docker Image를 생성한다.
Empty file added mission/chapter10/mission.md
Empty file.