전체 글 98

10/8 로드 밸런싱과 CDN

로드 밸런서와 ALB로드 밸런서는 트래픽을 받아 서버에 분배하는 장치EC2 IP를 직접 노출하는 대신 로드 밸런서를 앞에 두면, HTTPS처리, 헬스체크, 서버 확장이 가능Target (= EC2 or Fargate)이라는 서비스가 존재ALB가 트래픽을 감추어진 EC2보다 먼저 받는 것을 Proxy라고 한다. 즉 대신 받아주고 분배한다는 뜻이다. AWS의 관리형 로드밸런서가 ELB(Elastic Load Balancer)가 있는데 이중에 기본적으로 ALB를 사용한다.이것들도 AWS의 로드 밸런서 종류의 속하는 것들인데, 중요한 것은 ALB가 ELB에 속한 로드 밸런서 서비스 이다. (말고 NLB, GLB 등이 있다)지금 ALB를 검색해서 들어간 항목이다. 생성하면 이런 항목이 나온다.CDNCDN(Cont..

10/7 NAT Gateway & 서버리스

NAT Gateway란?Private Subnet에 있는 리소스가 인터넷으로 나가는 통신(outbound)만 가능하게 해주는 AWS 관리형 서비스다. 외부에서 들어오는 연결(inbound)은 막는다.Public Subnet에 생성하고, Elastic IP(고정 공인 IP)를 붙인다.Private Subnet의 라우팅 테이블에 0.0.0.0/0 → NAT Gateway를 추가한다.흐름: Private 리소스 → NAT Gateway → Internet Gateway → 인터넷AZ 단위 리소스다. 고가용성이 필요하면 AZ마다 하나씩 둔다.언제 쓰나? Private Subnet의 EC2, RDS, Lambda 등이 외부 API 호출, 패키지 설치, 외부 서비스 연동을 해야 할 때 쓴다.서버리스(Lambda)와..

10/6 CICD

CI & CD우리가 프로그램을 만들고 배포할 때 자신이 직접 배포하고 출시해야 했다. CI는 개발된 코드를 자동으로 빌드하고 테스트하여 무결성을 검사하는 과정이고CD는 완성된 앱을 실제 환경에 맞게 배포하는 과정 형태CI & CD 는 개발부터 최종까지 반복하면서 진행되는 과정이다.ECRAWS에서 제공하는 Docker이미지 저장소이다. 완성된 jar프로그램을 EC2에 직접 옮기는 과정을 Docker Image를 통해 배포해주는게 기본적이다. 한쪽에서 이미지를 push하면, 다른 쪽에서 pull해서 실행하는 구조이다.EC2에 별도 로그인 없이 이미지를 가져올 수 있다는 장점이 있다.즉 S3의 Docker Image 버전 저장소라 생각하면 된다. 여기서 리포지토리 URI에서 (AWS 어카운트 ID)383688..

10/2 게임 결과 연출 및 서버 구현 계획

1. 오늘 개발한 내용게임 결과 화면 연출게임이 종료되었을 때 결과 수치가 한 번에 표시되는 것이 아니라, 0부터 최종 결과값까지 증가하는 연출을 구현했다.대상 데이터는 다음과 같다.AsteroidPlanetStarGoldTotal각 수치는 최종 결과값을 기준으로 0부터 증가하도록 만들었으며, Lerp 함수를 활용해 현재 값에서 목표 값까지 자연스럽게 증가하도록 구현했다.특히 단순히 텍스트의 숫자만 변경하는 것이 아니라 숫자가 증가하는 동안 강조 효과를 적용하여 실제 게임의 결과를 정산하는 듯한 느낌을 주도록 구현했다.게임 중도 포기 시 Gold 정산 방지기존에는 게임을 진행하다가 일시정지 메뉴에서 타이틀 화면으로 이동하는 경우에도 해당 게임에서 획득한 Gold가 최종적으로 정산될 수 있는 문제가 있었다..

10/1 S3 & RDS 실습

S3우선 S3를 요약해 설명하자면, 외부 스토리지를 관리하는 역할이다. 실습으로 생성한 S3에 파일을 업로드 하였다. (파일 또는 폴더 업로드 가능하다) 여기서 파일을 받으면 올렸던 파일이 정상적으로 받아진다.다음으로 인텔리제이로 S3을 연동하기 위해서 의존성에implementation platform('io.awspring.cloud:spring-cloud-aws-dependencies:4.1.1')이 코드를 추가해주고 (사용버전은 4.1.1) 환경변수를 추가해야 하는데, 기본적인 application.properties의 환경변수를 설정하고별도의 application-local.properteis를 추가하고 환경변수를 설정한다. aws.s3.bucket에 생성했던 S3 이름을 설정한다 (유의할 점은 ..

9/30 팀프로젝트 클라이언트 개발

우리 팀 프로젝트에서 만들 게임은 방치형 주제로 만들계획이었는데,아이디어 수집 중 "블랙홀 키우기"라는 뱀서라이크 게임을 만들자는 결과가 나와 방치형이랑 거리가 있는 게임이 결정되었다.레퍼런스 링크 : https://aarimous.itch.io/a-game-about-feeding-a-black-hole 그래도 팀원들이 이 게임이 간단하고 추가할 것이 있어서 만들기 괜찮을것 같다고 해서 만들기로 했다.(그러나 튜터님의 많은 피드백이 있었지만) 아무튼, 게임에 가장 핵심인 요소는 화면을 터치하면 블랙홀 주변에 잔해들을 파괴하고 한 판이 끝나고 업그레이드 화면으로 노드 트리로 구성된 스탯을 업데이트 하여 강화를 하는 게임이다여기서 내가 맡은 역할은 한판 결과 처리한 수와 획득받은 보상의 수치를 0부터 해당..

9/29 AWS EC2 및 IAM Role 실습

오늘 배운 내용1. EC2 인스턴스 생성AWS EC2 인스턴스를 생성하면서 다음 설정을 진행했다.이름 태그: 인스턴스를 쉽게 구분하기 위한 이름 지정AMI 선택: EC2에서 사용할 운영체제 및 기본 환경 선택인스턴스 유형: CPU, 메모리 등의 컴퓨팅 자원 선택키 페어: EC2에 SSH로 접속할 때 사용하는 인증 키 설정 (한번 밖에 발급이 안되니 관리를 잘하자)네트워크 설정: VPC, 서브넷, 보안 그룹 등의 네트워크 환경 설정2. IAM Role 설정EC2가 AWS의 다른 서비스에 접근할 수 있도록 IAM Role을 설정했다.IAM Role을 사용하면 EC2 내부에 AWS 액세스 키를 직접 저장하지 않고도 필요한 AWS 서비스에 권한을 부여할 수 있다.3. EC2 보안 및 권한 설정생성한 EC2의 보..

9/28 AWS, AIM 그리고 Spring Boot Actuator

AWS란Amazon Web Service로 아마존사가 제작한 클라우드 서비스다. 현재 서버 개발도구 1위이며 국내에서도 사용한다.전 세계에서 분산된 데이터를 가지고 있으며 사용하고 싶은 위치를 사용할 수 있다. AWS의 기본적인 서비스EC2 (Elastic Compute Cloud) : AWS에 제공하는 클라우드 컴퓨팅 서비스 내가 원하는대로 서버를 세팅할 수 있다.환경변수를 아마존 데이터 센터로 옮길 수 있는 원격 컴퓨터.EC2의 인스턴스유형family (용도), generation(세대 "높을수록 좋음"), additional capability(g가 있으면 Arm, 없으면 x86 또는 x64)size(사양) nano 보통 small이상을 사용한다.상태타입설명EC2 비용Public IP데이터Pendi..

9/22 과제를 마치며

오늘은 Lua Script활용과 멀티서버를 구현했다. 완성한 결과 Redis Lua Script로 채팅 횟수 제한문제기존에는 Redis에서 채팅 횟수를 조회하고 INCR하는 작업을 별도로 수행했다.동시에 요청이 들어오면 두 요청이 같은 횟수를 읽어 5회를 초과해서 허용할 수 있는 문제가 있었다.해결Lua Script를 사용하여 다음 작업을 하나의 원자적인 작업으로 처리했다.local value = redis.call('GET', KEYS[1])local count = tonumber(value or '0')if count >= 5 then return 0endlocal updated = redis.call('INCR', KEYS[1])if updated == 1 then redis.call('..

9/21 채팅 메시지 저장 오류 / 접속자 목록 조회 / Redis를 이용한 최근 채팅 캐시 구현

Lv13. WebSocket 채팅 메시지 저장 오류 분석 1. 문제 상황WebSocket을 이용한 채팅 기능을 구현하고 테스트하는 과정에서 다음과 같은 오류가 발생했다.Cannot invoke "ChatMessageResponse.getSender()"because "saved" is null 디버깅 로그에서는 다음과 같이 확인되었다.saved [worldId, nickname, content] : 42, Alice, null 즉, createResponse()에서 사용하는 content 값이 null이 되었고, 그 결과 ChatService.saveMessage()의 반환값인 saved도 null이 되어 NPE가 발생했다.2. 원인 분석처음에는 DB 저장 과정이나 ChatResponse의 문제라고 생각..