오늘은 주로 AWS EKS를 구축하기 위해 시도를 해보았습니다. 그러나 현재 minikube로 구현되어있기도 하고, 기존의 작업물을 날려야하기 때문에 따로 적용하진 않았습니다.
오늘 네트워크 관리사 2급 시험이 있어서 일찍 일어났습니다.
이후에 AWS 콘솔에서 직접 설정하는 방식을 조사하여 설정을 진행하였습니다.
운동
AWS EKS 도입 공부 및 세팅
NHN은 1차 프리테스트(코테)에서 떨어졌다.

EKS를 적용하려면 기존의 minikue로 작업한 EC2에서 작업해야하는데, 그전 작업물을 날려야하기 때문에 EKS 세팅만 해두고 더이상 진행하지 않았습니다. 그래도 AWS 세팅 연습을 해보았고, 추후에 어떤식으로 전개해야하는지 깨달았기 때문에 좋은 경험이었습니다. 밑의 과정대로 설정하였습니다.
EKS는 AWS의 다른 서비스들과 통신하기 위해 권한이 필요합니다. 먼저 EKS 클러스터와 워커 노드(EC2)를 위한 IAM 역할을 2개 만들어야 합니다.
AWS 서비스EKS를 선택하고, 아래에서 EKS - Cluster를 선택 후 [다음] 클릭.AmazonEKSClusterPolicy가 이미 선택되어 있습니다. [다음] 클릭.EKSClusterRole 이라고 입력하고 [역할 만들기] 클릭.AWS 서비스EC2를 선택 후 [다음] 클릭.AmazonEKSWorkerNodePolicyAmazonEC2ContainerRegistryReadOnly (ECR에서 이미지를 가져올 권한)AmazonEKS_CNI_PolicyEKSNodeRole 이라고 입력하고 [역할 만들기] 클릭.이제 애플리케이션이 실행될 쿠버네티스 클러스터의 "두뇌" 부분을 만듭니다.
my-clusterEKSClusterRole을 선택합니다.EKSNodeRole을 선택합니다.퍼블릭을 선택합니다.활성으로 바뀔 때까지 기다려주세요.클러스터의 "두뇌"가 완성되었으니, 이제 실제 애플리케이션 컨테이너가 실행될 "일꾼" EC2 서버들을 추가합니다.
my-cluster를 클릭하여 상세 페이지로 들어갑니다.standard-workersEKSNodeRole을 선택합니다.t3.medium을 선택합니다.2 (처음에 2대의 EC2 서버를 생성)13kubectl 연결 설정EKS 클러스터는 AWS 콘솔이 아닌, kubectl이라는 명령어로 관리하는 것이 표준입니다. 이 단계에서는 딱 한 번만 AWS CLI를 사용하여 로컬 PC의 kubectl이 EKS 클러스터를 바라보도록 설정해야 합니다.
로컬 PC 또는 EC2 터미널에서 아래 명령어를 실행하세요.
aws eks update-kubeconfig --region ap-northeast-2 --name my-cluster
이 명령어를 실행하면 ~/.kube/config 파일에 EKS 클러스터 접속 정보가 자동으로 추가됩니다. 이제 kubectl get nodes를 실행했을 때, 방금 만든 EC2 노드 2개가 보이면 성공입니다.
이제 도커 이미지를 저장할 ECR(Elastic Container Registry) 저장소를 만듭니다.
my-frontend를 입력하고 생성을 완료합니다. 같은 방식으로 my-backend 리포지토리도 생성합니다.Minikube에서 사용했던 .yaml 파일들을 EKS 환경에 맞게 최종 수정합니다.
Service.yaml: 프론트엔드와 백엔드 서비스의 type을 모두 *LoadBalancer로 변경합니다. (이것이 port-forward를 대체합니다.)Deployment.yaml:image 경로를 방금 푸시한 ECR 이미지 주소로 변경합니다.frontend-deployment.yaml의 NEXT_PUBLIC_API_URL 환경 변수 값을 백엔드의 내부 서비스 주소인 http://backend-service:5000으로 설정합니다. EKS 내부에서는 서비스 이름으로 서로 통신할 수 있습니다.수정이 완료되면, kubectl이 설정된 터미널에서 아래 명령어로 배포합니다.
kubectl apply -f .
배포 후 몇 분 정도 기다리면 AWS 로드 밸런서가 생성됩니다. 아래 명령어로 서비스 상태를 확인하세요.
kubectl get service
minikube와 비교했을때, AWS EKS가 제공하기 때문에 세팅하기에 용이한 것 같습니다. 제공하는 기능이나 연동성이 굉장히 좋습니다. 다음 프로젝트 진행시에 EKS로도 세팅을 해보면 좋을 것 같습니다.
스마일게이트, 펄어비스의 이력서 기본적인 부분 작성완료
코딩테스트 1문제를 풀었습니다.
https://school.programmers.co.kr/learn/courses/30/lessons/12906
중복되는 숫자를 제거하고 하나만 남기면 됩니다. 그러나 배열의 순서는 유지를 해야한다고 합니다. 예를 들어 [1,1,3,3,0,1,1]라면 답은 [1,3,0,1]이 되어야합니다.
처음에 Set으로 잘못풀어서 List로 다시 풀게 되었습니다. 또한 size와 length를 잘못 사용했습니다.
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
// 결과를 저장한 ArrayList 생성
ArrayList<Integer> tempList = new ArrayList<>();
// 이전에 추가된 값을 저장할 변구
// 배열의 원소 범위가 0 ~ 9 이므로 -1은 절대 나올 수 없는 값으로 초기화
int lastNum = -1;
for(int num : arr) {
// 현재 숫자가 이전 추가 숫자와 다를 경우만 추가
if (lastNum != num) {
tempList.add(num);
lastNum = num; // 마지막으로 추가된 숫자를 현재 숫자로 업데이트
}
}
// ArrayList를 int[] 배열로 반환
int[] answer = new int[tempList.size()];
for (int i = 0; i < tempList.size(); i++) {
answer[i] = tempList.get(i);
}
return answer;
}
}
이번에는 length와 size()에 대한 의문이 있어서 조사를 하게 되었습니다.
length (속성)length는 배열의 길이를 저장하고 있는 속성 또는 필드 입니다. 한번 생성되면 그 크기가 변하지 않는 배열의 고정된 길이를 나타냅니다.int[] numbers = new int[5]; // 길이가 5인 배열
System.out.println(numbers.length); // 출력: 5
size() (메서드)ArrayList, List, HashSet 등)size()는 컬렉션에 실제로 저장된 원소의 개수를 반환하는 메서드입니다. 컬렉션은 크기가 동적으로 변할 수 있으므로, 현재 몇 개의 원소가 들어있는지 함수를 통해 확인합니다.ArrayList<Integer> tempList = new ArrayList<>();
tempList.add(10);
tempList.add(20);
System.out.println(tempList.size()); // 출력: 2
| 구분 | 사용 대상 | 형태 | 설명 |
|---|---|---|---|
| length | 배열 (int[], String[] 등) | 속성 (변수) | 배열의 고정된 '길이' |
| size() | 컬렉션 (ArrayList, HashSet 등) | 메서드 (함수) | 저장된 '원소의 개수' |