본문 바로가기

인프라11

NFS를 이용해 로깅 파일을 관리하기 NFS Network File System NFS란? 한줄로 요약하면, 유닉스 시스템에서의 저장공간 공유를 위한 프로토콜입니다. A라는 인스턴스에 unluckyJung이라는 디렉토리를 만들어두면 B, C라는 인스턴스에서도 A의 unluckyJung 디렉토리에 접근할수 있게 해주는 분산 파일시스템 프로토콜을 이야기합니다. 사용한 이유 Scale Out 작업을 수행하면서 Babble 인프라내 WAS가 N개로 늘어나게 되었습니다. 각 WAS별로 찍히는 로그를 CloudWatch를 통해서 확인하려면 WAS의 개수에 맞춰 N개의 추가 설정이 필요했습니다. 즉 WAS가 100개가 된다면, CloudWatch로 추적되는 화면이 100개가 되겠죠. 이것은 로그 추적에 있어서도 불편함을 야기하게 되었고, NFS를 이용해.. 2021. 10. 27.
(구구만 고생하신) SonarCloud 적용기 summary 우아한테크코스 레벨4 HTTP 서버 구현하기 미션을 진행하던 중이었다. 미션대로 구현을 완료하고 PR(Pull Request)를 작성했는데 정적분석 툴 SonarQube 가 자동으로 동작하고, 분석 결과도 PR 페이지에서 곧장 보여주고 있었다?! 자세히보니 SonarQube가 아니라 SonarCloud 였다! SonarQube에서 제공하는 Github 연동 서비스는 유료로 알고 있는데, SonarCloud의 경우 무료로 이용할 수 있었다!! 마침 Babble 팀에서도 배포 했을 때가 아닌 PR을 작성 했을 때 정적분석이 이뤄지길 바라고 있었고, 분석 결과를 PR 페이지에서 곧바로 확인할 수 있다는게 너무 멋져서 도입을 고려하게 되었다. SonarCloud에 대해 조사하다보니, SonarCl.. 2021. 9. 23.
NGINX 다중 서버 upstream 설정 summary 기존 Web-server (Reverse-proxy) 역할로 사용자와 WAS(Web Application Server)간 통신을 이어주던 NGINX에서 소나큐브 서버도 통신을 지원하도록 설정하고 싶었다. 그림으로 표현하자면 아래와 같다. nginx.conf 설정 # nginx.conf events {} http { # -------------------- spring-boot WAS -------------------- upstream app { server 192.168.1.20:8080; } # Redirect all traffic to HTTPS server { listen 80; server_name api.babble.gg; return 308 https://$host$reques.. 2021. 8. 25.
Github-actions 작업간 독립성 summary 스프링부트 서버 빌드와 소나큐브 서버 빌드를 하나의 workflow.yml 파일로 관리하던 중, 소나큐브 서버 빌드시 동작하는 jacoco가 스프링부트 서버 빌드에서 진행되는 테스트코드 결과물(부산물)을 필요로 한다는 걸 깨닫고 스프링부트 서버 빌드가 소나큐브 서버 빌드보다 먼저 실행되도록 needs 키워드를 통해 의존성을 부여했다. ...(생략) jobs: deploy-build: runs-on: deploy steps: - uses: actions/checkout@v2 - name: Set up JDK 8 uses: actions/setup-java@v2 with: java-version: '8' distribution: 'adopt' - name: gradlew 권한 변경 workin.. 2021. 8. 23.
소나큐브 설치하기 이 글에서는 현재 최신버전인 9.0버전이 아니라, LTS버전인 8.9버전을 사용했다! 소나큐브는 프로그래밍 언어에서 버그, 코드 악취, 보안 취약점을 발견할 목적으로 정적 코드 분석으로 자동 리뷰를 수행하기 위한 지속적인 코드 품질 검사용 오픈 소스 플랫폼이다. 중복 코드, 코딩 표준, 유닛 테스트, 코드 커버리지, 코드 복잡도, 주석, 버그 및 보안 취약점의 보고서를 제공한다. Summary 백엔드 정적 분석 리포트를 공유한다. CloudWatch logs 대시보드를 구성한다. 정적 분석 리포트를 공유한다는 요구사항이 등장했다. '정적 분석 리포트가 뭘까...' 궁금해하고 있을 때 나봄이 질문을 던져줬고, 구구께서 "소나큐브를 적용해보면 된다." 라는 답변을 주셨다. 그리하여 소나큐브 트러블 슈팅 대단.. 2021. 8. 23.
도커, 스프링부트 타임 존 설정 도커 컨테이너 타임 존 설정 도커 컨테이너 위에서 동작하면서 별도의 타임 존 설정이 없는 프로그램들의 경우 docker-compose.yml 파일의 타임 존 설정에 따라 시간이 설정된다. # cat docker-compose.yml # 버전 정의 (yml 버전) version: '3.7' # service 정의 # docker-compose로 생성 할 container의 옵션을 정의 services: # 생성 할 container 변수 지정 nignx: # container 이름 지정 container_name: test-nginx # container 생성시 사용 할 이미지 이름 지정 및 등록([이미지 이름]:[버전]) image: reverse-proxy:0.0.4 ...(생략) environment.. 2021. 8. 21.
도커 컨테이너 IP 주소 트러블 슈팅 첫 번째 이슈 - Summary babble 프로젝트를 진행하면서, 상용 서버에서 릴리즈 테스트를 진행하지 말고 별도의 테스팅 서버를 만들어서 릴리즈 테스트를 진행하고자 했다. 상용 서버와 온전히 같은 환경을 갖추기 위해 EC2 인스턴스를 추가로 3~4개 개설하면서 테스팅 서버를 개설할까 고민해봤지만, 도커를 사용해서 각 계층을 독립시키면 EC2 인스턴스 1개만으로도 충분히 테스트가 가능할 것 같았다. (추후 인스턴스를 제거하기도 편하고) 결국 위 그림과 같은 형태로 도커 위에 3개의 컨테이너를 올렸다. web-server는 nginx로 구성하여 외부(public IP)로 부터 전달되는 요청을 바로 옆 WAS 컨테이너로 전달한다. 요청을 전달 받은 WAS는 로직을 수행하고, 영속성이 부여된 데이터가 필요.. 2021. 8. 21.
Invalidations를 이용한 CloudFront 캐싱 컨트롤 summary 3차 데모데이에 맞춰 프론트엔드 쪽에 새로운 요구사항이 등장했다. • AWS로 이전 • 시맨틱 버저닝 추가 • 사용자가 배포된 기준으로 항상 최신 버전을 봐야됨 나는 사용자가 배포된 기준으로 항상 최신 버전을 봐야됨 요구사항을 CloudFront 가 갖고 있는 캐싱 정책을 변경해서, 항시 원본 저장소(S3 버킷)를 참조하라는 것으로 해석했다. 때문에 CloudFront - Edit behavior - Cache key and origin requests - Cache policy 설정에서 기본 설정인 CachingOptimized를 CachingDisabled로 바꿔 CloudFront가 캐싱을 진행하지 않도록 하고자 했다. 그런데 루트가 CloudFront - Invalidations 설.. 2021. 8. 20.
CloudFront 도메인 이름 변경하기 summary DNS를 활용하는데 2가지 방법이 있다. Route 53로 DNS를 발급 받아 사용한다. (TLS 인증서 등록 과정이 생략된다.) 외부 DNS를 발급 받은 다음, SSL(TLS) 인증서를 ACM(Amazon Certificate Manager)를 통해 등록해서 사용한다. 1번 방법은 사실 AWS의 울타리 안에서 모든게 이루어지는 방법이므로 크게 신경쓸 것이 없다. 2번 방법은 DNS 사에 따라서 조금씩 방법이 달라진다. 나는 내도메인.한국과 namecheap DNS를 기준으로 작성할 것이다. 선행 작업 - S3 CloudFront와 연결되어 있는 S3 버켓 쪽에 정적 웹 사이트 호스팅을 진행 할 것임을 설정해주어야 한다. 정적 웹 사이트 호스팅 활성화 후, 인덱스 문서도 지정해준다. 지정하.. 2021. 8. 20.