콘텐츠로 이동

2021 08 23 학습로그 데모데이2

2021-08-23 학습로그 데모데이 2

웹훅

  • 왜 필요한가? - 웹훅은 웹앱에서 발생한 이벤트 정보를 "실시간"으로 제공하기 위해서 필요함 - 클라이언트 측에서 필요한 정보를 서버 측에 계속 물어보는 방식(Polling)이 아닌,
    서버 측에서 클라이언트에게 필요한 정보가 도착하면 알려주는 방식(Webhooks)
  • 사용처 - 깃헙에서 PR이 머지되면 젠킨스가 해당 리포를 새롭게 빌드하여 배포하도록 설정 - 젠킨스(클라이언트) <- 깃헙(서버) - Error 레벨의 로그가 발생하면 슬랙에 알림 전송 - 슬랙(클라이언트) <- 놀토 EC2(서버)

CI/CD

  • 왜 필요한가? - 서버에서 돌릴 수 있는 jar 파일로 만들어 배포를 해야함 - 하지만 해당 작업은 단순 반복이 많음 - 반복되는 과정의 자동화 필요 + 휴먼 에러를 없애야 함 - CI가 왜 필요한가? - 팀원들이 나누어 개발하던 것을 하나로 합치는 과정에서 문제 발생할 수 있음 - 코드 작성이 완료되면 바로 합쳐 오류에 대한 피드백 받을 수 있음 - 애자일하게 기능 개발을 완료하는 개발 문화와 잘 어울림 - CD가 왜 필요한가? - 실제로 배포하는 과정에서 휴먼 에러가 발생 가능 - 이를 잡아줌
  • 젠킨스 - 자바 기반의 자동화 CI/CD 툴 - 다양한 플러그인을 활용해 효과적인 자동화 가능
  • 놀토 젠킨스 - 도커에 젠킨스 설치하여 사용 - Freestyle Project로 구성 - 플러그인 설치 - git pull request builder (github 리포에서 코드 pull 받아 올 수 있도록 설정) - publish over ssh (jar 파일을 WAS EC2에 전송) - 깃헙에서 젠킨스 관련 필요 설정 해주기 - 젠킨스 workspace/repository/ <- 해당 디렉토리에서 빌드 작업 진행 - 이후 jar 파일을 WAS EC2에 전송 - WAS EC2에서 실행시킬 쉘 스크립트를 실행

S3

  • 왜 필요한가? - 놀토 서비스 특성상 많은 사진들을 저장해야 했음 - 파일 서버의 역할을 하는 S3가 적격 - 파일 서버 트래픽 증가 시 장비 증설 대행 - 저장 파일의 갯수를 계속해서 늘릴 수 있음 - 다른 파일 서버들과 비교해보진 않았지만 다음과 같은 장점이 있다고 함 - 내구성이 좋음 (클라이언트 파일 유실 X) - 저렴한 비용 (사용한 만큼만 지불) - 가용성 (파일 서비스 중단 거의 없음) - 보안 (SSL을 통한 안전한 운반)
  • 놀토의 S3 사용법 - S3 버킷 만들기 - 유일한 이름으로 만들어야 함 - 퍼블릭으로 공개하지 않음 - 따라서 Cloudfront CDN을 통해 접근해야함 - 어떤 S3 버킷에 대한 CDN인지 설정 - S3 bucket access "Origin Access Identity"를 사용하여 Cloudfront에서는 S3에 접근 가능하게 설정 - bucket policy도 곁들여서 업데이트 해주자
  • 스프링에서 S3 버킷에 접근하기 - access-key, secret-key를 발급하여 BasicAWSCredentials을 활용하여 S3에 접근 가능 - 하지만 이는 발급 금지 - WAS EC2에 IAM 권한을 부여하여 S3에 접근 가능하였음 - ec2-s3-deploy

OAuth

  • 왜 필요한가? - 패스워드 없이 사용자 인증이 가능함 - 놀토 서버에서 사용자의 비밀번호를 관리할 필요 없이 서비스 제공 가능
  • 놀토의 OAuth 사용법 - 구글, 깃헙 OAuth를 활용 - 각각 총 3개의 OAuth 클라이언트를 만듦 - develop: localhost:9000으로 redirectUrl 전송 (프론트 개발용) - qa: https://d2y0p6hv0hkdrd.cloudfront.net로 redirectUrl 전송 (QA 용) - main: https://nolto.app로 redirectUrl 전송 (실 서비스용) - client_id와 client_secret은 민감정보이기에 깃헙에 올리지 않고 EC2 인스턴스 내부에서 yml파일로 관리

도커

  • 왜 필요한가? - snowflake server 이슈 방지 - 특정 환경에 종속되지 않은 어플리케이션을 띄우는 것이 목표 - 어플리케이션만 배포하면 되는데 OS 자체를 띄우는 VM을 설치하는 것은 오버 엔지니어링