부하 테스트에서 서비스가 1초당 처리할 수 있는 작업량을 보고 Throughput이라고 부른다. 단위는 TPS(Transaction Per Seconds, 1초당 처리한 트랜잭션의 수)를 많이 활용한다.만약 내가 만든 서비스가 1초에 최대 100개의 API 요청을 처리할 수 있다면, 이 서비스의 Throughput은 100 TPS라고 얘기한다. 환경 세팅 (k6)https://velog.io/@ryuneng2/%EB%B6%80%ED%95%98-%ED%85%8C%EC%8A%A4%ED%8A%B8%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-Windows-K6-%EC%84%A4%EC%B9%98-%EB%B0%A9%EB%B2%95 부하 테스트란, 임계값 한계에 도달할 때까지..
✅ 아키텍처 구성 자세한 생성은 https://ehdgus1.tistory.com/110를 참고하자 Spring Boot 서버를 EC2에 배포하기전에 올렸던 게시글에서 인스턴스에 연결하여 우분투 환경에서 진행한다. ✅ 1. Ubuntu 환경에서 JDK 설치하는 법$ sudo apt update && /sudo apt install openjdk-17-jdk -y ✅ 2. 잘 설치됐는 지 확인하기$ java -vehdgus1.tistory.com ✅ EC2 생성보안 그룹 설정에서 8080번 포트 열어주는 것을 깜빡하지 말자. ✅ RDS 생성보안 그룹 설정에서 3306번 포트 열어주는 것 깜빡하지 말자. ✅ EC2에 Redis 설치$ sudo apt update$ sudo apt install redis$ ..
Board 엔티티만들기@Entity@Table(name = "boards")public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; private String content; @CreatedDate @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss") @JsonSerialize(using = LocalDateTimeSerializer.class) @JsonDeserialize(using = LocalDateTimeDeserializer.class) private LocalDateTime createdAt; ..
✅ 캐시(Cache)란?원본 저장소보다 빠르게 가져올 수 있는 임시 데이터 저장소를 의미한다. ✅ 캐싱(Caching)이란?캐시(Cache, 임시 데이터 저장소)에 접근해서 데이터를 빠르게 가져오는 방식을 의미한다. 데이터를 캐싱할 때 사용하는 전략 ✅ Cache Aside (= Look Aside, Lazy Loading) 전략처음 게시판 서비스를 배포했다고 가정하자. 처음 게시판 서비스를 배포했기 때문에 데이터베이스와 레디스에는 아무런 데이터도 저장이 되어있지 않다.일부 사용자가 들어와 게시글 작성을 함으로써 데이터를 저장한다. 이 데이터는 데이터베이스에 저장된다. (레디스에 저장되지 않는다.)사용자가 데이터를 조회하려고 요청한다. 이 때, 데이터베이스로부터 바로 데이터를 조회하기 전에 레디스에..
✅ Redis란?레디스(Redis)는 Remote Dictionary Server의 약자로서, “키-값” 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템(DBMS)이다. 즉, Redis는 데이터 처리 속도가 엄청 빠른 NoSQL 데이터베이스이다. NoSQL 데이터베이스를 풀어서 얘기하자면 Key-Value의 형태로 저장하는 데이터베이스라고 생각하면 된다. ✅ Redis의 장점레디스(Redis)는 인메모리(in-memory)에 모든 데이터를 저장한다. 그래서 데이터의 처리 성능이 굉장히 빠르다. MySQL과 같은 RDBMS의 데이터베이스는 대부분 디스크(Disk)에 데이터를 저장한다. 하지만 Redis는 메모리(RAM)에 데이터를 저장한다. 디스크(Di..
✅ 전체적인 흐름✅ 장점컨테이너 기반의 서버가 여러 대이더라도 쉽게 자동 배포를 구축할 수 있다.쉽게 무중단 배포를 적용시킬 수 있다.✅ 단점CodeDeploy를 사용함으로써 인프라 구조가 복잡해졌다. 구조가 복잡해짐에 따라 관리 비용, 유지보수 비용, 난이도, 트러블 슈팅 어려움, 복잡도가 증가했다. ✅ Github Actions 코드 수정하기 .github/workflows/deploy.yml name: Deploy To EC2on: push: branches: - mainjobs: deploy: runs-on: ubuntu-latest steps: - name: Github Repository 파일 불러오기 uses: actions/checkout..
전체적인 흐름 ✅ 장점Docker 기반으로 서비스를 운영할 때, 가장 간단하게 구성할 수 있는 인프라 구조이다.✅ 단점무중단 배포를 구현하거나 여러 EC2 인스턴스에 배포를 해야 하는 상황이라면, 직접 Github Actions에 스크립트를 작성해서 구현해야 한다. 직접 구현을 해보면 알겠지만 생각보다 꽤 복잡하다. ✅ 1. Docker 기반으로 프로젝트 수정하기Dockerfile 작성하FROM eclipse-temurin:17-jdk-alpineCOPY ./build/libs/*SNAPSHOT.jar project.jarENTRYPOINT ["java", "-jar", "project.jar"] ✅ 2. EC2가 Private ECR에 접근할 수 있게 셋팅하기# Ubuntu일 경우$ sudo apt ..
✅ 1. Ubuntu에서 Docker, Docker Compose 설치하기$ sudo apt-get update && \ sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common && \ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && \ sudo apt-key fingerprint 0EBFCD88 && \ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" &&..
✅ 전체적인 흐름 ✅ CodeDeploy를 사용하는 이유CodeDeploy는 수많은 AWS EC2에 배포를 쉽게 할 수 있도록 도와준다.CodeDeploy에 무중단 배포 기능이 내재되어 있어 손쉽게 무중단 배포를 진행할 수 있다. ✅ 장점서버가 여러 대이더라도 쉽게 자동 배포를 구축할 수 있다.쉽게 무중단 배포를 적용시킬 수 있다.✅ 단점CodeDeploy를 사용함으로써 인프라 구조가 복잡해졌다. 구조가 복잡해짐에 따라 관리 비용, 유지보수 비용, 난이도, 트러블 슈팅 어려움, 복잡도가 증가했다.✅ 이 방법은 언제 주로 쓰는 지서버를 여러 대 이상 구동해야 하거나 무중단 배포가 중요한 서비스일 때 주로 활용한다. 1. appspec.yml, 스크립트 파일 작성하기 appspec.yml은 CodeDepl..
✅ 1. CodeDeploy 역할(Role) 생성하기 Code Deploy가 다른 AWS Resource에 접근하려면 권한이 필요하다. 그 권한을 부여해주는 기능이 IAM의 역할(Role)이다. ✅ 2. CodeDeploy 생성하기1. CodeDeploy 애플리케이션 생성 2. CodeDeploy 배포그룹 생성 ✅ 3. EC2 역할(Role) 생성하기 EC2가 빌드된 파일을 S3로부터 다운받아야 한다. 이 때, EC2가 S3에 접근하려면 권한이 필요하다. 그 권한을 부여해주는 기능이 IAM의 역할(Role)이다. 1. 정책 생성 2. 권한 지정하기 3. 정책 세부 설정 4. 역할 생성 5. EC2에 생성한 IAM 역할 연결하기 참고)혹시나 Code Deploy Agent를 먼저 설치한 뒤에 ..