전체 글
[Docker] Github Actions, Docker, AWS EC2 사용한 CI/CD (Spring Boot)
0. 환경 Spring Boot 3.xx Java17 JDK corretto17 1. AWS EC2 인스턴스 생성 1) 이름 입력, Amazon Linux 선택 2) 키페어 생성 생성한 키페어는 따로 저장해서 보관해두자 3) 스토리지 구성 프리티어 기준 최대 용량인 30GB로 바꿔준다. 4) 인스턴스 생성 2. 보안그룹(인바운드) 규칙 편집 1) 인스턴스 ID를 클릭 2) 보안 탭 > 보안그룹 클릭 3) 인바운드 규칙 편집 클릭 4) 규칙 추가 다음 세 가지 규칙을 추가해준다. 꼭 MySQL일 필요는 없고, 자신이 사용하는 것에 맞게 선택해주면 된다. 없다면 사용자 지정 TCP를 선택해서 포트 범위를 직접 설정해준다 (ex. MongoDB라면 27017) 규칙을 모두 추가했으면 우측 하단의 '규칙 저장'..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FATj96%2Fbtst6piKsIi%2FNrBKsouXZYMKTb9QlNq5U1%2Fimg.png)
[TIL - 20230914~15] Github Actions+Docker CI/CD 트러블슈팅
배포 자동화 과정 배포 자동화 과정은 다음 게시글에서 확인할 수 있다. [Docker] Github Actions, Docker, AWS EC2 사용한 CI/CD (Spring Boot) 0. 환경 Spring Boot 3.xx Java17 JDK corretto17 1. AWS EC2 인스턴스 생성 1) 이름 입력, Amazon Linux 선택 2) 키페어 생성 생성한 키페어는 따로 저장해서 보관해두자 3) 스토리지 구성 프리티어 기준 최대 용량인 yeon-dev.tistory.com 💻문제점1 ssh -i ~/.ssh/my-ec2-key.pem 유저명@퍼블릭IPv4 AWS EC2 리눅스에 접속하기 위해서 처음에는 우분투 접속하는 것 처럼 ssh -i ~/my-ec2-key.pem 퍼블릭IPv4 형식으..
[Docker] AWS EC2 + Docker를 사용한 Spring Boot 프로젝트 배포
0. 환경 Spring Boot 3.xx Java 17 JDK corretto17 1. 스프링 부트 프로젝트 1) TestController 생성 참고: build.gradle 의존성은 다음과 같다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-validation' compileOnly 'org.projectlombok:lombok' runtimeOnly 'org.maria..
[WebFlux] Reactive Streams
Reactive Streams is an initiative to provide a standard for asynchronous stream processing with non-blocking back pressure. Reactive Streams는 논블로킹 백프레셔를 이용해 비동기 스트림 처리를 위한 표준을 제공한다. (리액티브 프로그래밍에 대한 인터페이스만을 제공) Reactive Streams 인터페이스 Reactive Streams의 주요 인터페이스는 다음과 같다. 1) Publisher 데이터를 생성하고, Subscriber에게 데이터를 발행한다. subscribe subscribe메서드에 인자로 Subcriber를 전달하여 등록한다. Publisher는 Subscriber에게 순차적으로 데..
Reactive Programming이란
reactive programming is a declarative programming paradigm concerned with data streams and the propagation of change. "리액티브 프로그래밍은 데이터 흐름과 변화의 전파와 관련된 선언적 프로그래밍 패러다임이다." 명령형 프로그래밍 vs 선언형 프로그래밍 명령형 프로그래밍은 작업을 '어떻게' 할 것인가에 초점을 맞춰 실행할 동작을 구체적으로 명시하지만, 선언형 프로그래밍은은 '무엇을' 할 것인가에 초점을 맞춰 어떻게 그 목표를 달성할지는 추상화 된다. 여기서 알아둬야 할 점은, 선언형 방식을 사용하기 위해서는 명령형 방식으로 '어떻게' 할 것인지가 추상화 되어있어야 한다는 점이다. List에 있는 숫자 중 짝수들의 ..
[Spring] 의존성 주입(DI: Dependency Injection)
의존성 주입, 왜 필요할까? 의존성 주입의 필요성을 이야기하기 위해, 객체지향 설계의 SOLID 원칙을 간단히 언급하고 넘어가겠다. SOLID 원칙 SRP(Single Responsibility Principle): 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. OCP(Open/Closed Principle): 개방-폐쇄 원칙 클래스는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. LSP(Liskov Substitution Principle): 리스코프 치환 원칙 하위 타입은 상위 타입을 대체할 수 있어야 한다. ISP(Interface Segregation Prinicple): 인터페이스 분리 원칙 인터페이스를 클라이언트의 용도와 목적에 맞게 작게 분리하여 제공해야 한다. DIP(Depe..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fds5eyh%2FbtsmlnNdaHv%2Fr0wFO51m1kKjamCCaFNrf0%2Fimg.png)
[커뮤 프로젝트] 영상 파일 삭제 로직 (동기, 비동기 처리)
💻문제점1영상관련 파일과 썸네일은 도커 볼륨에 저장된다. 원활한 스트리밍을 위해서는 m3u8파일과 재생목록에 대응되는 ts 파일을 지속적으로 수신해 재생해야 하는데, 데이터가 계속 쌓이면서 문제가 발생했다. 클라이언트가 올바른 m3u8 파일을 받지 못해 정상적으로 재생이 되지 않는 것이다. K6를 통해 테스트하고, Grafana를 통해 시각화하였다. 시나리오는 다음과 같다.한 명의 스트리머가 방송을 송출하고, 방송 시청을 보내는 가상 유저 1000명, Duration 5분으로 테스트 해보았다. 그랬더니, 다음과 같이 성공률이 23%로 매우 낮은 성능을 보였다. 실시간 스트리밍 서비스는 '스트리밍 서비스'라는 특성 상, 시간이 지나면 영상 데이터는 사용 가치가 없어지는 단발적이고 소모적인 일회성 성질이 ..