IT 직무캠프 4주차 -1

박상현·2025년 9월 10일

IT 직무캠프

목록 보기
6/7
post-thumbnail

어쩌다 보니 4주차 복습이 무려 한 달이나 지난 시점에 이루어졌다. 직무캠프 3주차 복습 끝나던 시점에 PM/PO 인턴을 지원하면서 자소서 쓰고 면접보고 (면접 떨어짐..) 개강 준비하다보니 이제서야 복습하게 됐다.
3주차 과제 피드백 받은 일부분을 소개하자면

ec2를 이중화한 이후에는 alb의 주소를 통해 사용해야 의도한대로 동작하게 됩니다. 만약 이중화한 이후에도 각 ec2의 퍼블릭ip를 사용한다면 이중화한 의미가 없이 각각 사용하게 됩니다. alb의 주소도 퍼블릭이기 때문에 alb주소로도 접근이 가능합니다. alb로 접속이 되면 각 ec2의 퍼블릭IP(탄력적IP)는 제거해도 괜찮습니다. 다만 우리는 구축 초기과정에 있으니 각 ec2에 의도적으로 접근하여 확인하는 용도로 각 ec2의 퍼블릭IP를 유지하고 있습니다.

라고 하셨다.

4주차 기술 업무 목표

  • AWS 네트워크 구성 후 RDS 및 모니터링 도구를 구축한 후, Jmeter를 통해 성능테스트를 수행합니다.
  • Lambda와 Node.js를 통해 API를 개발한 후, postman으로 API를 호출하여 테스트합니다.

그리고 다른 프로젝트 업무로는

아키텍쳐링
다음 요건이 포함된 아키텍쳐 문서를 작성하세요.

  • 3tier : '웹 - 와스 - DB'로 구성
  • 오토스케일링, ELB, Cloudfront 등 확장성이 지원되는 구조
  • 리전간 복제가 가능하고, 계정간 API 통신이 있는 구조

이다.

RDS 모니터링 도구 구축과 Jmeter 성능 테스트

실무에서 운영 중 가장 핵심이 되는 것은 모니터링 도구를 구축하는 것이다. 성능테스트는 TA(Technical Architect)의 업무이지만 자신이 관리하는 서버, 개발한 내용을 테스트하는 것은 전 IT직무의 공통 스킬이 되어야 한다.

다음의 내용을 먼저 구성해보자.

1) VPC와 서브넷 구성
VPC IP: 10.12.0.0/16
서브넷 IP: 10.12.0.0/18, 10.12.64.0/18


인터넷 게이트웨이 생성과 라우팅 테이블 연결도 완료했다.

2) EC2를 위한 보안그룹 생성
인바운드: TCP 3306번 내 IP (MySQL 데이터베이스가 기본적으로 사용하는 네트워크 포트 번호)
아웃바운드: 전체허용

RDS MySQL 구성하기

3주차 내용을 복습하면서 다음을 구성해보자.

1) DB Subnet Grooup 생성
A존, C존을 사용하는 DB 서브넷 그룹을 생성한다.

2) RDS MySQL 구축 -프리티어 옵션으로 생성
3주차 내용과 다른 점은 '퍼블릭 엑세스'를 아니오가 아닌 '예'로 설정해야했다.
보안 그룹: RDS용 보안구룹 (TCP 3306포트가 내 IP로 허용된 보안그룹)
생성된 DB는 상태가 '사용 가능'이어야 한다.

클라우드와치와 대시보드 구성

클라우드와치는 AWS내 리소스를 모니터링할 수 있는 도구입니다. VPC 밖에 존재하기 때문에 VPC간 비교도 가능하도록 되어 있도록, 더 많은 리소스를 동시에 비교할 수 있는 서비스입니다.
운영을 하다보면 서비스의 패턴이 보이게 되고, 패턴에 따라 봐야할 지표가 달라집니다. 보틍은 기본지표로 시작하여 봐야할 지표가 서서히 늘어나는 편입니다. 여기서는 기본지표를 모니터링할 수 있도록 대시보드를 구성합니다.

AWS웹콘솔 > cloudwatch 검색해서 대시보드를 생성한다.
위젯 추가 버튼을 통해서 아무 위젯 유형이나 선택 하고 다음으로 이동한다. (대시보드는 위젯의 모음이라 언제든지 수정할 수 있음!) 원하는 위젯들을 검색창에서 검색해서 추가해봤다.
RDS, CPU 키워드 입력 후 다음 지표들을
대시보드를 구성해봤다.

잊지 말고 저장 버튼 클릭!

로컬 컴퓨터에 MySQL Client 설치

지난 3주차에 EC2에서도 MySQL에 접속하기 위해 mysql client 프로그램을 설치했었다. 이번에는 내 컴퓨터에서도 마찬가지로 MySQL Client가 있어야 접속이 가능하기 때문에 OS와 버전에 맞는 MySQL Client를 다운로드 받고 설치한다.
MySQL client 다운로드
하지만, 나는 Mac이기 때문에 brew install mysql로 설치했음!

Mac터미널에서 MySQL 버젼을 확인하고, EC2와 마찬가지로 접속테스트를 해본다.
접속이 되면 shell 명령어 입력 부분이 'mysql>'로 변경된다.

중간에 MySQL Client가 9버젼으로 설치돼서 버젼이 달라서 로그인이 불가능한 오류가 있었는데,

brew install mysql-client@8.0
export PATH="/opt/homebrew/opt/mysql@8.0/bin:$PATH"
source ~/.zshrc
source ~/.bash_profile

위 명령어들을 통해서 해결했다!

성능 테스트를 위해 필요한 테이블을 생성한다
MySQL에 접근하 후, 아까 RDS 구축 당시 만들었던 DB 명을 통해 접근한 후 create table 명령어를 통해 데이터를 저장할 공간을 생성한다.

Jmeter 설치

성능테스트에 사용되는 툴은 여러가지가 있지만, 무료버전으로는 Jmeter와 Locust 툴이 많이 사용됩니다. Jmeter는 자바로 만들어졌고, Locust는 Python으로 만들어졌습니다. 여기서는 만들어진 지 가장 오래되어 웬만한 것을 모두 테스트 할 수 있는 Jmeter를 사용해보겠습니다.

사전 설치
Jmeter를 사용하려면 자바 8버젼 이상이 필요하기 때문에 마찬가지로 OS에 맞는 버젼을 다운로드 받아 설치한다.
자바 다운로드
나는 마찬가지로 brew install openjdk@17 로 자바17버전을 설치했다.
이제 jmeter를 which jmeter 명령어를 통해 확인 한다. (/opt/homebrew/bin/jmeter)
open opt/homebrew/bin/jmeter 명령어를 통해 Jmeter를 실행한다.

하나의 터미널이 더 뜨고, 곧 이어 Jmeter가 실행된다.
Jmeter가 MySQL에 접속할 수 있도록 드라이버를 다운로드 받는다
MySQL 드라이버 다운로드
Platform Independent를 선택하면 OS 종류와 상관없이 사용할 수 있다.
ZIP파일을 다운로드 받은 후, 압축 파일을 풀게 되면 .jar로 끝나는 JDBC 드라이버 파일이 있다.

이 .jar 파일을 Jmeter폴더의 lib폴더에 넣어줘야 한다.

이 때 나는 실제 파일 위치와 which jmeter와 경로가 달라서 조금 애를 먹었다. 내 정확한 위치는 /opt/homebrew/Cellar/jmeter/5.6.3/libexec/lib 였다.

Jmeter 설정하기

Jmeter는 크게 Thread Group, Connector, Request, Result View 구성으로 이루어져 있습니다.

  • Thread Group에서 테스트 서버에 접속량과 빈도를 입력합니다.
  • Connector에서는 테스트 서버에 접속정보를 입력합니다.
  • Request에서는 실제 테스트할 로직을 입력합니다.
  • Result View는 테스트 결과를 보여줍니다.
    초보자를 위해서 Jmeter에 미리 구성되어 있는 탬플릿도 제공합니다.

먼저, File에 Templates로 탬플릿을 연다.
이후 상단 select box에서 JDBC Load Test > create로 생성한다.
미리 입력된 샘플들 중 JDBC Connection Configuration을 설정한다.

  • Max Number of Connections를 10으로 변경한다.
    (10개의 커넥션을 최대로 맺겠다는 의미다.)
  • 하단에 DB연결정보를 입력한다. DatabaseURL에 jdbc:postgresql이 아닌 jdbc:mysql로 변경한다.
    hostname은 endpoint 주소로 변경한다.
    port번호는 3306번으로 변경한다.
    dbname은 DB이름으로 변경한다.
    Username은 DB접속 ID인 마스터 사용자를 입력한다.
    Password는 DB접속 마스터 사용자의 비밀번호를 입력한다.

이제 Thread Group을 설정해보자

  • Number of Threads는 요청할 유저의 수를 의미한다.
  • Ramp-up period는 총 진행 시간을 의미한다.
  • Loop Count는 반복횟수를 의미한다.
    따라서 10유저가 30초 안에 모두 실행된다는 의미로, 3초에 한 번씩 10개의 유저가 DB에 요청하고 이 작업을 총 2번 반복한다는 의미다. 따라서 60초 동안 3초에 한 번씩 10개의 요청이 DB에 들어간다는 의미!

JDBC Request에서 요청 내용을 입력한다

insert into cmt_table values('a')
  • Query Type을 Update Statement로 변경하여 insert문이 동작하게끔 한다.
  • 다음 쿼리 문으로 미리 준비한 테이블에 a라는 값을 입력하도록 한다.

이제 JDBC Request를 우클릭한 후, Add > Listener > Summary Report를 눌러서 요약통계를 활성화한다.

Jmeter 테스트하기

이제 상단에 초록색 시작 버튼을 클릭하여 테스트를 시작한다.
View Result Tree를 클릭하여 실시간 결과를 조회한다.

우측 상단에서 진행 중인 요청에 대한 정보를 확인할 수 있다!
(사실 중간에 연결 오류가 있었는데 URL입력 부분에 MySQL로 변경하지 않아서였는듯...)

Summary Report에서도 결과를 확인할 수 있다.

클라우드와치 대시보드로 결과를 확인해보자.

CPU가 10% 넘어서는 구간을 찾아보세요.
어떤 부하를 주었을 때 DB CPU가 가장 많이 올라가는지 확인한다.
(맨토링 때 이부분에 대해서 질문 드렸다... 대시보드 어떻게 보는지 잘 모르겠어서...)
다른 옵션에 대한 설명

여기까지 4주차의 첫 번째 기술 업무를 마무리하고 다음 편에는 Lambda와 Node.js를 통한 API 개발 편으로 이어진다.

profile
안되면 되게하라

0개의 댓글