From a9fc264c1c023f7309c737ebd51aa1d5b284761c Mon Sep 17 00:00:00 2001 From: migi0401 Date: Tue, 16 Jun 2026 21:51:04 +0900 Subject: [PATCH] =?UTF-8?q?keyword:=2010=EC=A3=BC=EC=B0=A8=20=ED=82=A4?= =?UTF-8?q?=EC=9B=8C=EB=93=9C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- keyword/chapter10/keyword.md | 161 +++++++++++++++++++++++++++++++++++ mission/chapter10/mission.md | 0 2 files changed, 161 insertions(+) create mode 100644 keyword/chapter10/keyword.md create mode 100644 mission/chapter10/mission.md diff --git a/keyword/chapter10/keyword.md b/keyword/chapter10/keyword.md new file mode 100644 index 0000000..1f9bad0 --- /dev/null +++ b/keyword/chapter10/keyword.md @@ -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를 생성한다. \ No newline at end of file diff --git a/mission/chapter10/mission.md b/mission/chapter10/mission.md new file mode 100644 index 0000000..e69de29