Artillery 이용한 다양한 테스트 방법입니다.

config:
  target: "<https://jsonplaceholder.typicode.com>"
  phases:
    - duration: 20         # 첫 번째 단계: 20초 동안 5명의 사용자/초 도착
      arrivalRate: 5
      name: "Warm-up phase"
    - duration: 30         # 두 번째 단계: 30초 동안 20명의 사용자/초 도착
      arrivalRate: 20
      name: "Peak traffic"
    - duration: 10         # 세 번째 단계: 10초 동안 트래픽 급감
      arrivalRate: 2
      name: "Traffic drop-off"
    - duration: 60         # 네 번째 단계: 60초 동안 일정한 트래픽 유지
      arrivalRate: 10
      name: "Sustained load"
scenarios:
  - name: "Fetch posts and details" # 첫 번째 시나리오: 게시글 조회 및 상세 정보 확인
    flow:
      - get:
          url: "/posts"
      - get:
          url: "/posts/1"
  - name: "Create and update post" # 두 번째 시나리오: 게시글 생성 후 업데이트
    flow:
      - post:
          url: "/posts"
          json:
            title: "New Post"
            body: "This is a test post created by Artillery."
            userId: 1
      - put:
          url: "/posts/1"
          json:
            title: "Updated Post"
            body: "This is an updated test post."
  - name: "User flow simulation" # 세 번째 시나리오: 사용자 플로우 시뮬레이션
    flow:
      - get:
          url: "/users/1"
      - get:
          url: "/users/1/posts"
      - post:
          url: "/comments"
          json:
            postId: 1
            name: "Artillery User"
            email: "test@example.com"
            body: "This is a test comment."

 

YML 설명

phases

  1. Warm-up phase:
    • 초기 단계에서 적은 부하로 시스템을 "예열"합니다.
  2. Peak traffic:
    • 최대 트래픽을 주어 서버의 한계를 테스트합니다.
  3. Traffic drop-off:
    • 트래픽이 갑자기 줄어드는 상황을 시뮬레이션합니다.
  4. Sustained load:
    • 일정 부하를 주어 장기적인 안정성을 확인합니다.

scenarios

  1. Fetch posts and details:
    • 모든 게시글을 가져오고, 특정 게시글의 상세 정보를 확인합니다.
  2. Create and update post:
    • 새 게시글을 생성한 후, 이를 업데이트합니다.
  3. User flow simulation:
    • 특정 사용자의 데이터를 조회하고, 댓글을 남기는 전체적인 사용자 플로우를 시뮬레이션합니다.

실행 방법

1. 파일 이름을 advanced-load-test.yml로 저장합니다.

 

 

2. Artillery를 사용해 실행합니다

artillery run advanced-load-test.yml

3. artillery run advanced-load-test.yml

실행 결과

 

다음 블로그에서는 실행 결과를 JSON 파일로 저장한 뒤, HTML로 변환하여 테스트 결과를 시각화하는 과정을 공유하겠습니다.

문제 링크

🔗 Programmers - 아픈 동물 조회 문제


문제 요약

  • 요구사항
    동물 보호소에 들어온 동물 중 아픈 동물의 아이디와 이름을 조회합니다.
    결과는 아이디 순으로 정렬되어야 합니다.
  • 출력 컬럼
    ANIMAL_ID, NAME

문제 내용

동물 보호소에 들어온 동물 중 아픈 동물만 조회하는 SQL문을 작성해 주세요.
조건에 맞는 동물들을 ANIMAL_ID 순으로 정렬합니다.


풀이 과정 및 코드

풀이 과정

  1. 데이터베이스 테이블: ANIMAL_INS
    • 동물의 아이디, 이름, 상태(INTAKE_CONDITION)가 저장된 테이블.
  2. 조회 조건:
    • INTAKE_CONDITION = 'Sick'인 데이터만 조회.
  3. 정렬 기준:
    • ANIMAL_ID 순으로 오름차순(ORDER BY ANIMAL_ID ASC).
  4. 필요한 컬럼:
    • ANIMAL_ID, NAME

SQL 코드

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS 
WHERE INTAKE_CONDITION = 'Sick';

SQL 개념 정리

  • WHERE: 조건을 지정하여 데이터를 필터링하는 SQL 명령어.
  • ORDER BY: 정렬을 수행하는 SQL 명령어.
    • 기본값은 오름차순(ASC) 정렬입니다.

문제 링크

🔗 Programmers - 동물 보호소 데이터 조회 문제 (ANIMAL_ID순)


문제 요약

  • 요구사항
    동물 보호소에 들어온 모든 동물의 아이디와 이름을 ANIMAL_ID 순으로 조회합니다.
  • 출력 컬럼
    ANIMAL_ID, NAME

문제 내용

동물 보호소에 들어온 모든 동물의 아이디와 이름을 ANIMAL_ID 순으로 조회하는 SQL문을 작성해 주세요.


풀이 과정 및 코드

풀이 과정

  1. 데이터베이스 테이블: ANIMAL_INS
    • 동물의 아이디와 이름이 저장된 테이블.
  2. 정렬 기준:
    • ANIMAL_ID 순으로 오름차순(ORDER BY ANIMAL_ID ASC).
  3. 필요한 컬럼:
    • ANIMAL_ID, NAME

SQL 코드

SELECT ANIMAL_ID, NAME FROM ANIMAL_INS ORDER BY ANIMAL_ID;
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;​

SQL 개념 정리

  • ORDER BY: 정렬을 수행하는 SQL 명령어.
    • 기본값은 오름차순(ASC) 정렬입니다.
문제 링크

🔗 Programmers - 동물 보호소 가장 먼저 들어온 동물 조회 문제


문제 요약

  • 요구사항
    동물 보호소에 가장 먼저 들어온 동물의 이름을 조회합니다.
  • 출력 컬럼
    NAME

문제 내용

동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL문을 작성해 주세요.


풀이 과정 및 코드

풀이 과정

  1. 데이터베이스 테이블: ANIMAL_INS
    • 동물의 이름과 보호 시작일(DATETIME)이 저장된 테이블.
  2. 정렬 기준:
    • 보호 시작일(DATETIME) 기준 오름차순(ORDER BY DATETIME ASC).
  3. 제한 조건:
    • 가장 먼저 들어온 동물 1마리만 조회(LIMIT 1).
  4. 필요한 컬럼:
    • NAME

SQL 코드

 
SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME ASC LIMIT 1;
SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME ASC LIMIT 1;​

 


SQL 개념 정리

  • ORDER BY: 정렬을 수행하는 SQL 명령어.
    • ASC: 오름차순 정렬(생략가능)
  • LIMIT: 결과의 출력 개수를 제한하는 SQL 명령어.
    • LIMIT 1: 결과를 1개로 제한.

SQL 서브쿼리는 쿼리 내부에 중첩된 또 다른 쿼리입니다. 서브쿼리는 외부 쿼리와 함께 실행되며, 특정 조건을 만족하는 데이터를 조회하거나 값을 계산하는 데 사용됩니다. 이 글에서는 SQL 서브쿼리의 개념과 활용 방법을 살펴보겠습니다.


1. 서브쿼리 개념

  • 서브쿼리(Subquery)는 SQL 쿼리 내부에서 실행되는 쿼리입니다.

서브쿼리는 외부 쿼리(메인 쿼리)의 입력으로 사용되며, SELECT, FROM, WHERE 절 등 다양한 위치에서 활용할 수 있습니다.

기본 문법

SELECT 컬럼명
FROM 테이블명
WHERE 컬럼명 = (서브쿼리);

예제

  • 가장 비싼 트랙의 가격 조회
SELECT MAX(UnitPrice) AS MaxPrice
FROM Track;

  • 가장 비싼 트랙의 가격과 동일한 트랙 조회
SELECT Name, UnitPrice 
FROM Track 
WHERE UnitPrice = (SELECT MAX(UnitPrice) FROM Track);


2. 단일 행 서브쿼리

단일 행 서브쿼리는 하나의 값만 반환합니다. 보통 = 연산자와 함께 사용됩니다.

예제

  • 가장 비싼 트랙의 이름 조회
SELECT Name 
FROM Track 
WHERE UnitPrice = (SELECT MAX(UnitPrice) FROM Track);

  • 가장 최근에 등록된 고객의 이름 조회
SELECT FirstName, LastName
FROM Customer
WHERE CustomerId = (SELECT MAX(CustomerId) FROM Customer);


3. 다중 행 서브쿼리

다중 행 서브쿼리는 여러 개의 값을 반환합니다. 주로 IN, ANY, ALL 등의 연산자와 함께 사용됩니다.

예제

  • 특정 가격($1.99, $2.99) 이상의 트랙 조회
SELECT Name, UnitPrice 
FROM Track 
WHERE UnitPrice IN (SELECT DISTINCT UnitPrice FROM Track WHERE UnitPrice >= 1.99);

  • 모든 트랙보다 비싼 가격의 트랙 조회
SELECT Name, UnitPrice 
FROM Track 
WHERE UnitPrice > ALL (SELECT UnitPrice FROM Track);

  • 어떤 트랙보다 비싼 가격을 가진 트랙 조회
SELECT Name, UnitPrice
FROM Track
WHERE UnitPrice > ANY (SELECT UnitPrice FROM Track WHERE GenreId = 1);


4. EXISTS와 NOT EXISTS

EXISTS는 서브쿼리의 조건에 맞는 데이터가 존재하는지 확인하며, NOT EXISTS는 데이터가 존재하지 않을 경우를 확인합니다.

기본 문법

SELECT 컬럼명
FROM 테이블명
WHERE EXISTS (서브쿼리);

예제

  • 청구서가 있는 고객 조회
SELECT FirstName, LastName 
FROM Customer 
WHERE EXISTS (SELECT 1 FROM Invoice WHERE Customer.CustomerId = Invoice.CustomerId);

  • 청구서가 없는 고객 조회
SELECT FirstName, LastName 
FROM Customer 
WHERE NOT EXISTS (SELECT 1 FROM Invoice WHERE Customer.CustomerId = Invoice.CustomerId);


서브쿼리 사용 위치

1. SELECT 절에서 서브쿼리

서브쿼리를 SELECT 절에서 사용하여 계산된 값을 출력할 수 있습니다.

예제

  • 각 트랙의 가격이 가장 비싼 트랙의 몇 퍼센트인지 계산:
SELECT Name,
	   UnitPrice,
       (UnitPrice / (SELECT MAX(UnitPrice) FROM Track)) * 100 AS PricePercentage 
FROM Track;


2. FROM 절에서 서브쿼리

서브쿼리를 FROM 절에서 사용하여 임시 테이블처럼 활용할 수 있습니다.

예제

  • 장르별 평균 가격 계산:
SELECT GenreId, AVG(UnitPrice) AS AvgPrice 
FROM (SELECT GenreId, UnitPrice FROM Track) AS Subquery 
GROUP BY GenreId;


3. WHERE 절에서 서브쿼리

서브쿼리를 WHERE 절에서 사용하여 특정 조건에 맞는 데이터를 필터링합니다.

예제

  • 가장 높은 평균 가격을 가진 장르의 트랙 조회:
SELECT Name 
FROM Track 
WHERE GenreId = (SELECT GenreId FROM Track GROUP BY GenreId ORDER BY AVG(UnitPrice) DESC LIMIT 1);


요약

  • 단일 행 서브쿼리: 하나의 값을 반환하며, = 연산자와 함께 사용.
  • 다중 행 서브쿼리: 여러 값을 반환하며, IN, ANY, ALL과 함께 사용.
  • EXISTS와 NOT EXISTS: 조건 존재 여부를 확인하여 데이터를 필터링.
  • 사용 위치: SELECT, FROM, WHERE 절 등 다양한 위치에서 활용 가능.

서브쿼리는 데이터 조회를 보다 정교하게 수행할 수 있도록 도와줍니다. 다음 글에서는 SQL 복합 쿼리를 통해 여러 쿼리를 조합하는 방법을 학습하겠습니다.

'SQL > 학습정리' 카테고리의 다른 글

SQL 트랜잭션과 롤백  (1) 2024.12.15
SQL 복합 쿼리  (0) 2024.12.14
SQL Join  (0) 2024.12.11
SQL 집계함수  (0) 2024.12.10
SQL 기본 문법 2  (0) 2024.12.09

문제 링크

🔗 Programmers - 동물 보호소 데이터 조회 문제


문제 요약

  • 요구사항
    동물 보호소에 들어온 모든 동물의 이름보호 시작일을 조회합니다.
    결과는 ANIMAL_ID를 기준으로 내림차순(역순)으로 정렬되어야 합니다.
  • 출력 컬럼
    NAME, DATETIME

문제 내용

동물 보호소에 들어온 모든 동물의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요.
결과는 ANIMAL_ID의 역순으로 정렬되어야 합니다.


풀이 과정 및 코드

풀이 과정

  1. 데이터베이스 테이블: ANIMAL_INS
    • 동물의 이름과 보호 시작일이 저장된 테이블.
  2. 정렬 기준:
    • ANIMAL_ID를 기준으로 내림차순(ORDER BY ANIMAL_ID DESC).
  3. 필요한 컬럼:
    • NAME, DATETIME.

SQL 코드

SELECT NAME, DATETIME
FROM ANIMAL_INS 
ORDER BY ANIMAL_ID DESC;​

 

문제 링크

🔗 Programmers - 동물 보호소 이름 정렬 문제


문제 요약

  • 요구사항
    동물 보호소에 들어온 모든 동물의 아이디, 이름, 보호 시작일을 이름 순으로 정렬하여 조회합니다.
    이름이 같은 동물이 있을 경우, 보호를 나중에 시작한 동물이 먼저 나오도록 설정해야 합니다.
  • 출력 컬럼
    ANIMAL_ID, NAME, DATETIME

문제 내용

동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순으로 조회하는 SQL문을 작성해 주세요.
단, 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 합니다.


풀이 과정 및 코드

풀이 과정

  1. 데이터베이스 테이블: ANIMAL_INS
    • 동물의 아이디, 이름, 보호 시작일이 저장된 테이블.
  2. 정렬 기준:
    • 이름 순으로 오름차순(ORDER BY NAME ASC).
    • 같은 이름일 경우, 보호 시작일을 기준으로 내림차순(ORDER BY DATETIME DESC).
  3. 필요한 컬럼:
    • ANIMAL_ID, NAME, DATETIME.

SQL 코드

SELECT ANIMAL_ID, NAME, DATETIME 
FROM ANIMAL_INS
ORDER BY NAME, DATETIME DESC;

 

SQL 개념 정리

  • ORDER BY: 정렬을 수행하는 SQL 명령어.
    • ASC: 오름차순 정렬.
    • DESC: 내림차순 정렬.

SQL의 Join은 여러 테이블 간의 관계를 결합하여 데이터를 조회할 때 사용됩니다. Join을 통해 서로 다른 테이블의 데이터를 결합해 원하는 결과를 얻을 수 있습니다. 이번 글에서는 INNER JOIN, LEFT JOIN 등 주요 Join의 개념과 활용 방법을 살펴보겠습니다.


1. JOIN의 기본 개념

Join은 테이블 간의 공통된 컬럼을 기준으로 데이터를 결합하는 기능입니다. 예를 들어, 고객 테이블과 주문 테이블이 있다고 가정했을 때, 고객 ID(CustomerId)를 기준으로 결합하여 고객별 주문 내역을 조회할 수 있습니다.

기본 문법

SELECT 컬럼명 
FROM 테이블1 JOIN 테이블2 ON 테이블1.컬럼명 = 테이블2.컬럼명;

2. INNER JOIN

INNER JOIN은 두 테이블 간의 교집합 데이터를 반환합니다. 즉, 조건에 일치하는 데이터만 결합됩니다.

예제

  • 고객(Customer) 테이블과 청구서(Invoice) 테이블 결합
     
    고객의 이름과 청구서 금액을 결합하여 조회합니다.
SELECT Customer.FirstName, Customer.LastName, Invoice.Total
FROM Customer INNER JOIN Invoice ON Customer.CustomerId = Invoice.CustomerId;

 


3. LEFT JOIN

LEFT JOIN왼쪽 테이블의 모든 데이터를 반환하며, 오른쪽 테이블에 매칭되지 않는 데이터는 NULL로 채워집니다.

예제

  • 고객 테이블과 청구서 테이블 결합 (청구서 없는 고객 포함)
     
     
    모든 고객을 조회하며, 청구서가 없는 고객은 NULL 값으로 표시됩니다.
SELECT Customer.FirstName, Customer.LastName, Invoice.Total 
FROM Customer LEFT JOIN Invoice ON Customer.CustomerId = Invoice.CustomerId;

 


4. JOIN 조건

Join을 사용할 때 조건을 명확히 지정해야 데이터가 올바르게 결합됩니다. SQL에서는 ON 절과 USING 절을 통해 Join 조건을 설정할 수 있습니다.

ON 절

ON 절은 두 테이블의 결합 기준이 되는 컬럼을 명시적으로 지정합니다.

예제

  • ON 절 사용
     
     
    앨범 제목과 아티스트 이름을 결합하여 조회합니다.
SELECT Album.Title, Artist.Name 
FROM Album INNER JOIN Artist ON Album.ArtistId = Artist.ArtistId;


USING 절

USING 절은 양쪽 테이블에 동일한 이름의 컬럼이 있을 때 사용합니다. 간결한 문법으로 결합 조건을 지정할 수 있습니다.

예제

  • USING 절 사용
SELECT Album.Title, Artist.Name 
FROM Album INNER JOIN Artist USING (ArtistId);


JOIN 비교

Join 유형설명예제 활용

INNER JOIN 두 테이블 간 공통된 데이터를 결합 고객과 청구서 데이터
LEFT JOIN 왼쪽 테이블의 모든 데이터와 매칭되지 않은 데이터 포함 고객과 청구서 데이터
RIGHT JOIN 오른쪽 테이블의 모든 데이터와 매칭되지 않은 데이터 포함 거의 사용되지 않음
FULL OUTER JOIN 양쪽 테이블의 모든 데이터를 결합, 매칭되지 않는 데이터 포함 MySQL 기본 미지원

JOIN 예제 활용

1. 특정 국가의 고객과 주문 내역 조회

SELECT Customer.FirstName, Customer.LastName, Invoice.Total 
FROM Customer INNER JOIN Invoice ON Customer.CustomerId = Invoice.CustomerId 
WHERE Customer.Country = 'USA';

2. 주문이 없는 고객 목록 조회

SELECT Customer.FirstName, Customer.LastName
FROM Customer LEFT JOIN Invoice ON Customer.CustomerId = Invoice.CustomerId
WHERE Invoice.CustomerId IS NULL;

요약

  • INNER JOIN: 두 테이블 간 공통된 데이터를 결합합니다.
  • LEFT JOIN: 왼쪽 테이블의 모든 데이터와 매칭되지 않은 데이터를 포함합니다.
  • ON 절: 결합 조건을 명시적으로 지정합니다.
  • USING 절: 동일한 이름의 컬럼을 기준으로 결합합니다.

SQL Join은 데이터 간의 관계를 이해하고 활용할 때 필수적인 도구입니다. 이를 통해 여러 테이블의 데이터를 효과적으로 결합하여 다양한 분석을 수행할 수 있습니다. 다음 글에서는 SQL 서브쿼리를 다뤄보겠습니다.

'SQL > 학습정리' 카테고리의 다른 글

SQL 복합 쿼리  (0) 2024.12.14
SQL 서브쿼리  (0) 2024.12.12
SQL 집계함수  (0) 2024.12.10
SQL 기본 문법 2  (0) 2024.12.09
SQL 기본 문법 1  (0) 2024.12.09

SQL 집계 함수는 데이터를 요약하고 통계 정보를 도출할 때 사용됩니다. 예를 들어, 총합, 평균, 최댓값, 최솟값 등을 계산하거나 데이터를 그룹화하여 분석할 수 있습니다. 이 글에서는 SQL 집계 함수와 그룹화(Grouping), 집계 조건 필터링(HAVING)을 다루어 보겠습니다.

 


1. 집계 함수의 종류

SQL 집계 함수는 데이터를 요약하여 하나의 결과값으로 반환합니다. 주로 데이터의 수를 세거나 합계, 평균, 최댓값, 최솟값을 계산할 때 사용됩니다.

주요 집계 함수

함수 설명

COUNT 행(Row)의 개수를 반환
SUM 값(Value)의 합계를 반환
AVG 값(Value)의 평균을 반환
MAX 값(Value) 중 최대값을 반환
MIN 값(Value) 중 최소값을 반환

예제

  • 트랙의 총 개수 조회
SELECT COUNT(*) AS TotalTracks 
FROM Track;

  • 총 가격 합계 계산
SELECT SUM(UnitPrice) AS TotalPrice
FROM Track;

  • 평균 가격 계산
SELECT AVG(UnitPrice) AS AveragePrice 
FROM Track;

  • 최대 및 최소 가격 조회
SELECT MAX(UnitPrice) AS MaxPrice, MIN(UnitPrice)
AS MinPrice FROM Track;


2. GROUP BY

GROUP BY 절은 데이터를 특정 기준으로 그룹화하여 집계 함수와 함께 사용합니다. 예를 들어, 트랙을 장르별로 그룹화하여 각 장르의 총 트랙 수를 계산할 수 있습니다.

기본 문법

SELECT 컬럼명, 집계함수
FROM 테이블명
GROUP BY 그룹화할 컬럼명;

예제

  • 장르별 트랙 수 계산
SELECT GenreId, COUNT(*) AS TrackCount
FROM Track 
GROUP BY GenreId;

  • 트랙별 평균 가격 계산
SELECT TrackId, AVG(UnitPrice) AS AveragePrice 
FROM Track
GROUP BY TrackId;


GROUP BY와 NULL 처리

  • GROUP BY에서 NULL 값은 하나의 그룹으로 처리됩니다.
  • 예를 들어, 특정 컬럼에 NULL 값이 포함된 경우 해당 그룹도 집계에 포함됩니다.

예제

  • NULL 값이 포함된 그룹 집계
SELECT Composer, COUNT(*) AS TrackCount 
FROM Track 
GROUP BY Composer;


3. HAVING

HAVING 절은 GROUP BY 결과에 조건을 추가할 때 사용됩니다. WHERE 절은 그룹화 이전의 데이터를 필터링하고, HAVING 절은 그룹화 이후의 데이터를 필터링합니다.

기본 문법

SELECT 컬럼명, 집계함수
FROM 테이블명
GROUP BY 그룹화할 컬럼명
HAVING 조건;

예제

장르별 트랙 수가 10개 이상인 데이터 조회

SELECT GenreId, COUNT(*) AS TrackCount 
FROM Track 
GROUP BY GenreId 
HAVING COUNT(*) >= 10;

트랙별 평균 가격이 $1.50 이상인 데이터 조회

SELECT ArtistId, AVG(UnitPrice) AS AveragePrice 
FROM Track 
GROUP BY ArtistId 
HAVING AVG(UnitPrice) >= 1.50;


HAVING과 WHERE의 차이

조건절 사용 위치 적용 범위

WHERE 그룹화 이전에 조건을 적용 개별 행(Row)에 대한 필터링
HAVING 그룹화 이후에 조건을 적용 그룹(Group)에 대한 필터링

예제 비교

WHERE 사용 (그룹화 이전)

가격이 $1.00 이상인 트랙만 그룹화하여 장르별 트랙 수를 계산합니다.

SELECT GenreId, COUNT(*) AS TrackCount 
FROM Track 
WHERE UnitPrice > 1.00
GROUP BY GenreId;

HAVING 사용 (그룹화 이후)

그룹화된 장르 중에서 트랙 수가 10개를 초과하는 데이터만 조회합니다.

SELECT GenreId, COUNT(*) AS TrackCount 
FROM Track 
GROUP BY GenreId 
HAVING COUNT(*) > 10;


요약

집계 함수: 데이터를 요약하여 통계를 도출합니다.

  • 주요 함수: COUNT, SUM, AVG, MAX, MIN.

GROUP BY: 데이터를 특정 컬럼 기준으로 그룹화하여 집계합니다.

  • NULL 값도 그룹화의 일부로 포함됩니다.

HAVING: 그룹화된 데이터에 조건을 추가하여 필터링합니다.

  • WHERE는 그룹화 이전, HAVING은 그룹화 이후 조건 적용.

이 문법들을 활용하면 SQL을 통해 데이터를 효과적으로 요약하고, 원하는 통계 정보를 추출할 수 있습니다. 다음 글에서는 SQL Join을 통해 여러 테이블을 결합하여 데이터를 조회하는 방법을 학습하겠습니다.

'SQL > 학습정리' 카테고리의 다른 글

SQL 서브쿼리  (0) 2024.12.12
SQL Join  (0) 2024.12.11
SQL 기본 문법 2  (0) 2024.12.09
SQL 기본 문법 1  (0) 2024.12.09
데이터베이스 및 SQL 기본 개념 정리  (1) 2024.12.09

AWS RDS와 MySQL Workbench를 연결하려고 시도했지만, 연결이 제대로 이루어지지 않아 한참 헤맸습니다. 이 글에서는 제가 겪었던 문제와 이를 해결한 방법, 그리고 RDS에 대한 기본적인 개념과 추가적으로 알아두면 좋은 정보들을 정리해 보았습니다.


문제 상황

AWS RDS에서 MySQL 데이터베이스를 생성한 후, MySQL Workbench를 통해 연결하려고 했습니다.

그러나 다음과 같은 에러가 발생하며 연결에 실패했습니다:

" Failed connect to MySQL server"

 


해결 방법

문제를 해결하기 위해 다음 단계를 진행했습니다

 

1. RDS 콘솔로 이동

2. AWS Management Console에서 RDS 서비스로 이동했습니다.

 

RDS page

3. DB 인스턴스 수정

4. 연결하려는 DB 인스턴스를 선택한 후, 상단 메뉴에서 수정 버튼을 클릭했습니다.

5. 추가 구성 설정 변경

6. 추가 구성 섹션으로 스크롤을 내린 후, 퍼블릭 액세스 가능 옵션을 로 변경했습니다.

 

7. 변경사항 적용 후 재시작

 

설정 변경을 저장하고, DB 인스턴스를 재시작하니 MySQL Workbench에서 연결이 정상적으로 이루어졌습니다.


RDS에 대한 기본 개념

  • AWS RDS(Amazon Relational Database Service)는 클라우드에서 관계형 데이터베이스를 쉽게 설정, 운영, 확장할 수 있는 서비스입니다.

다음은 RDS의 주요 특징입니다:

  • 지원 데이터베이스 엔진: MySQL, PostgreSQL, MariaDB, Oracle, SQL Server 등을 지원.
  • 자동 백업: 자동 백업 및 복구 기능을 제공해 데이터 손실 위험을 최소화.
  • 확장성: 필요에 따라 쉽게 스토리지와 성능을 확장 가능.
  • 보안: VPC(가상 사설 클라우드) 내에서 DB를 호스팅 하여 네트워크 접근을 제어.

추가적으로 알아두면 좋은 설정

  1. 보안 그룹(Security Group) 설정 확인보안 그룹 설정에서 인바운드 규칙에 MySQL/Aurora(3306)을 추가하고, 소스를 내 IP 또는 특정 IP로 제한하세요.
  2. 퍼블릭 액세스를 허용했더라도 보안 그룹에서 포트(기본 3306)가 열려있지 않으면 연결이 불가능합니다.
  3. 엔드포인트와 포트 확인 Workbench의 호스트 주소에 RDS 엔드포인트를 입력하고, 포트 번호는 기본적으로 3306을 사용합니다.
  4. RDS에서 생성된 엔드포인트포트 번호를 정확히 확인해야 합니다.
  5. DB 사용자 권한 확인명령어로 확인 가능:
  6. SHOW GRANTS FOR 'your-username'@'%';
  7. MySQL 데이터베이스에 연결하려면 올바른 사용자 이름과 비밀번호가 필요하며, 해당 사용자가 연결 권한을 가지고 있는지 확인해야 합니다.

참고 자료


이 글이 AWS RDS와 MySQL Workbench 연결에 어려움을 겪는 분들에게 도움이 되길 바랍니다! 🎉

 

+ Recent posts