프로젝트 15

[HongsamIDE] 컴파일러 및 실행 환경 개발

- 요구사항 분석 컴파일 환경 구축 클라이언트 측에서 코드 에디터 라이브러리를 통해 작성한 코드를 문자열 형태로 받아온다. 해당 문자열을 자바 파일로 변환한다. Java Compiler API를 사용해 해당 파일을 컴파일한다. 실행 환경 구축 컴파일에 성공할 경우, 해당 파일을 실행한다. 실행 결과를 사용자에게 반환한다. - 개발 및 배포 환경 Java : 11 SpringBoot : 2.7.XX Build : Gradle 배포 : AWS Lambda - 컴파일러 File javaFile = new File("/tmp/" + questionId + ".java"); // 만들어놓은 .java 파일 불러오는 부분 JavaCompiler compiler = ToolProvider.getSystemJavaCo..

[Hongflix] AWS 인프라 구조

* Hongflix의 배포 환경, 인프라에 대한 정리글입니다. 24시간 돌릴 서버로 사용할 PM도 없었고, 다양한 AWS 리소스와 연동하고 테스트해보고 싶어서 모든 서버 및 리소스를 AWS EC2로 생성했다. 아키텍처를 아래 사진과 같이 구성한 이유에 대해 하나씩 정리해보고자 한다. - 개발환경 Java : 11 SpringBoot : 2.7.XX Build : Gradle DB : MySQL - 최종 AWS 아키텍처 - Web Server / WAS VPC를 분리한 이유 AWS에서 제공하는 고정 IP주소인 탄력적 IP를 프론트, 백엔드 서버에 각각 연결할 계획이었다. 하지만 하나의 계정에서 오직 하나의 탄력적 IP만 무료였다. 과금을 방지하기 위해서는 여러 개의 계정에서 리소스를 나눠서 관리하는 방식이..

[Hongflix] CDN을 활용한 성능 최적화

S3 버킷에 스트리밍 파일을 보관해 클라이언트에게 전달할 수 있게 되었지만 몇 가지 생각해볼 점이 남아있었다. 동영상 저장소인 S3에 직접적으로 접근해 스트리밍 파일 및 썸네일 이미지를 받아온다 -> 원본 서버에 대한 보안이 취약해질 수 있다. 매번 오리진 서버에서 파일을 받아오므로, 고용량의 데이터가 오고가는 상황에서 비용을 무시할 수 없다. 오리진 서버와 지리적인 거리가 멀다면 데이터 전송시간이 길어져 클라이언트 측의 불만이 생길 수 있을 것이다. 위 고민들을 해결할 솔루션으로 CDN 서비스를 사용하기로 결정했다. AWS CloudFront는 전 세계 곳곳에 엣지 로케이션(캐시 서버)을 배치해, 클라이언트가 어디에 있던 상관없이 정말 빠른 속도로 데이터를 받아볼 수 있도록 한다. CloudFront를..

[Hongflix] 원본 비디오 업로드 --> 스트리밍 파일, 썸네일 생성

OTT 서비스를 만드는 것이 목적이기 때문에 관리자 페이지에서 서비스할 동영상을 업로드하면 외부 저장소로 비디오가 업로드되는 기능을 만들어야한다. 비디오를 외부 저장소에 성공적으로 저장했다 해도, 비디오의 용량이 커질수록 클라이언트 입장에서 응답받는 시간이 길어져 서비스에 불편 함이 있을 것이라 판단했다. 따라서 클라이언트의 요청에는 원본 비디오가 아닌 스트리밍 파일을 전송하도록 그림을 그려봤다. 서비스의 흐름은 크게 두 가지 경우로 생각해봤다. 관리자 페이지에서 비디오 업로드 -> 파일 변환 라이브러리를 사용해 스트리밍 파일 생성 -> 프로젝트 디렉토리에 비디오 저장 관리자 페이지에서 비디오 업로드 -> AWS S3 버킷(클라우드 저장소)에 동영상 업로드 -> AWS Lambda를 통해 MediaCon..

[HongsamSNS] 젠킨스로 구축한 CI/CD 파이프라인

* 파이프라인을 구축하는 자세한 방법이 아닌 전체적인 흐름과 배운점에 대해 서술합니다. - HongsamSNS 인프라 구조 - CI/CD 파이프라인 구축 젠킨스 설치 및 환경설정 EC2에 젠킨스를 직접 설치하지 않고 도커 이미지를 통해 설치했다. 직접 설치하는 과정에서 환경설정하는 부분이 많아 세팅이 완료되어 있는 도커 이미지를 통해 설치하는 방법을 선택했다. 설치 이후 젠킨스 웹에 접속해 회원가입하고 기본 플러그인을 자동으로 설치한다. 다음으로 깃허브 연결을 위해 토큰을 받아 젠킨스에 등록한다. - BE 파이프라인 GitHub의 WebHooks를 활용해, develop 브랜치에 푸시가 발생했을 때 DB 연결 테스트 및 빌드를 진행하고 실제 운영 서버로 배포하는 파이프라인을 구축했다. 백엔드 운영서버에서..