본문 바로가기

👾 Server28

[서버 장애] HTTPS -> HTTP 통신 불가(웹 브라우저의 Mixed Content 차단) 사건의 개요 토이 프로젝트(FE 서버, BE 서버) 진행 중에 문제가 발생했다. 프론트 서버 https 배포, 백엔드 서버 http 배포 후 프론트 -> 백엔드 요청 시 Midxed Content 차단됐다. - 프론트(react) 배포 : AWS CloudFront + S3 사용한 HTTPS 지원 - 백엔드(spring) 배포 : AWS ec2 DNS 사용 X, HTTP 만 지원 사건의 근본 원인 웹브라우저(크롬, 파이퍼폭스 등) 자체에서 Mixed Content 차단하여 HTTP 서버인 백엔드로 부터 API를 받을 수 없었다. Mixed Content(혼합 콘텐츠)란 보안되지 않은 HTTP 프로토콜을 사용하여 리소스 요청하는 경우 해커(공격자)가 네트워크 연결을 도청 하고 중간자 공격(man-in-th.. 2022. 7. 2.
Git Submodules를 활용한 secret, config 파일 관리, 배포 (feat. SpringBoot, GitHub Actions) 잘못된 내용이나 다른 의견 있다면 편하게 말씀해주세요 🙏🏻 이전 글 secret, config 파일 관리 방법 소개(feat. SpringBoot의 application.*) 에서 소개한 방법 3 : Git Submodules를 활용한 방법 예제를 소개한다. Git Submodules Git Submodules란 저장소 안에 다른 저장소를 원하는 디렉토리를 복제하는 기능이다. 예를 들어 A,B 프로젝트에서 공통되게 사용하는 모듈(라이브러리, 설정 값 등) C가 있다고 하자. A,B,C 모두 저장소이다. 이때 A, B 저장소에 C 소스 코드가 중복될 수 있다. 이를 A,B 저장소에 C를 서브 모듈로 두어 공통되게 사용할 수 있다. C가 수정되면 A,B 모두 수정된 코드를 사용할 수 있다. (생활 코딩 : .. 2022. 7. 2.
secret, config 파일 관리 방법 소개(feat. SpringBoot의 application.*) 잘못된 내용이나 다른 의견 있다면 편하게 말씀해주세요 🙏🏻 들어가며 SpringBoot 프로젝트를 GitHub public repo에서 작업 후 배포한다고 가정하자. SpringBoot의 설정 파일은 application.* 또는 DB 초기 설정을 위한. sql 등이 있다. application.* 파일에는 DB 접속 정보(url, username, password)나 secret key 관리 등 많은 파일이 들어있다. 이를 public repo에 공개하면 문제가 발생할 수 있다. 외부 노출을 막고 배포하는 방법을 알아보자 방법 방법 1 : 로컬 개발 환경에서 application.* 설정 파일 그대로 사용하고 외부 저장소 노출을 막기 위해. gitignore 설정, 배포 시 application.yml.. 2022. 7. 1.
GitHub Actions를 활용해 React를 S3, CloudFront를 사용해 배포하기 이 글은 AWS의 S3, CloudFront를 사용해 리액트 프로젝트를 배포한다. 이 과정을 Github Actions를 활용해 자동 배포를 소개하고자 한다. 잘못된 내용이 있다면 편하게 말씀해주세요 🙏🏻 들어가기에 앞서 배포 방법은 다음과 같다. React 프로젝트의 빌드 결과는 정적 리소스 파일(.html, .js, .css ...)이다. 이를 S3에 올린다. 정적 리소스 파일이기에 S3의 baseURL에 index.html를 연결시켜주면 클라이언트는 baseURL에 들어왔을 때 index.html를 받게 된다. 이때 보통 CSR(클라이언트 사이드 렌더링)로 작동하기에 클라이언트의 브라우저는 S3에 필요한 리소스(. js,. css...)를 요청한다. 마치 nginx가 정적 리소스 전달하는 것처럼 보.. 2022. 6. 14.
[서버 장애] AWS 프리티어 배포 후 장애 - CPU 사용률 100%, 크레딧 0개 이후 ssh 접속도 안되는 상황과 해결 (HW / SW(페이징 limit 문제) 상황 ec2 환경 ec2 : AWS 프리티어 t2.micro app : Docker 위에 Spring Server + Nginx 외부 DB : 약 10만개 데이터가 있는 MySQL airbnb와 유사한 숙박 앱 프로젝트를 했다. DB에 약 10만여개 더미 데이터를 넣고 배포했다. AWS 프리티어 ec2에 spring 배포하여 사용하던 중 클라이언트의 많은 요청 이후 서버가 아예 멈춰 응답을 해주지 않았고 ssh 접속도 되지 않았다. 문제 클라이언트의 많은 요청으로 CPU 사용률이 90% 이상으로 사용하다 CPU 크레딧을 모두 사용하여 CPU 성능이 떨어져 서버 응답이 매우 늦거나 아예 ssh 접속까지 안 되는 상황 발생 해결하기 위한 시도 HW적 해결 1 : CPU 크레딧 초기화하기 위한 단순한 방법 (.. 2022. 6. 9.