본문 바로가기

전체 글176

VPC Endpoint(엔드포인트) 이전 글 2022.03.31 - [👾 Server/☁️AWS] - AWS - VPC(Virtual Private Cloud)이란? : AWS에서 독립된 가상 네트워크 만들기에 이어 VPC 고급, 엔드 포인트에 대해 알아보고자 한다. VPC Endpoint(엔드포인트)란? 사용자가 생성한 VPC에서 AWS 퍼블릭 서비스와 통신 하거나 다른 VPC 통신이 필요한 경우 일반적으로 외부 인터넷 구간(퍼블릭 네트워크)를 통해 통신이 이루어진다. 하지만 보안과 직결된 통신에서는 외부 인터넷 구간 없이 통신이 필요할 때가 많다. 이때 VPC 엔드포인트를 사용하면 된다. VPC 엔드포인트란 AWS의 퍼블릭 서비스나 직접적으로 생성한 AWS 서비스에 대해 외부 인터넷 구간을 통한 접근이 아닌 직접적으로 접근할 수 있는 .. 2022. 7. 11.
[서버 장애] 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.
Testcontainers에서 MySQL 사용해보기 (테스트 환경에서 자동으로 MySQL 컨테이너 띄우고 내리기) 이 글은 이전 글 Testcontainers 사용하기까지 에서 이어졌습니다. 잘못된 내용이나 의견 있다면 편하게 말씀해주세요 🙏🏻 Testcontainers 간단 소개 Testcontainers 라이브러리는 도커 컨테이너를 자바 코드로 조작할 수 있다. 다시 말해 자바 코드로 특정 도커 이미지를 실행하고 끌 수 있다. 일반 도커 컨테이너와 마찬가지로 네트워크 통신, 스토리지 조작, 환경변수 설정을 할 수 있다. 이를 DB 테스트 환경에 도입하면 다음과 같다. 인메모리 DB로 테스트하는 것이 아닌 실제 운영 DB와 동일한 환경을 외부 인스턴스에 띄우지 않고 로컬 도커 컨테이너에서 테스트할 때마다 DB 컨테이너를 띄우고 테스트가 끝나면 컨테이너를 내리는 작업을 자동화할 수 있다. CI 환경에 도커만 설치되어.. 2022. 6. 23.
[의사결정] Testcontainers 사용하기까지 잘못된 내용이나 의견 있다면 편하게 말씀해주세요 🙏🏻 사건의 개요 Spring 프로젝트를 했다. DB와 관련된 통합 테스트 작성하였고 모두 통과하였다. 실제 운영 DB 설정을 위해, 테스트 코드에서 작성한 더미 데이터 스크립트(. sql)를 사용하지 못해 재작성하였다. 사건의 원인 테스트 DB 환경 : 인메모리(H2) DB 실제 운영 DB 환경 : MySQL 8.0 테스트와 배포 DB 환경이 달랐다. JPA가 제공해주는 Dialet(방언) 기능을 사용하면 두 DB 간 문제가 없었지만, 방언 기능을 사용하지 않는 퓨어 .sql 스크립트에서 문제가 발생했다. (더미 데이터 .sql 스크립트 재사용 못함) 방언 기능을 사용하지 않는 SQL은 없었지만 만약 있었다고 한다면 문제가 발생할 수 있다.(사실 몇 문제.. 2022. 6. 21.