메이플스토리 분류

SQL로 아이템 지급하기

컨텐츠 정보

본문

이번 강의에서는 실제 서버 운영 시 가장 많이 사용하는 작업 중 하나인 "아이템 지급" 방법을 알아보겠습니다.

이 강의는 SQL을 처음 접하는 분들도 따라할 수 있도록 최대한 쉽게 설명하겠습니다.

아이템 지급 원리 이해하기


예를 들어 캐릭터가 아이템을 가지고 있다는 것은

DB 어딘가에

캐릭터번호 : 1001
아이템번호 : 182400001
수량 : 10

이 저장되어 있다는 의미입니다.

즉,

우리가 직접 DB에 데이터를 추가하면 게임 안에서도 아이템이 보이게 됩니다.

작업 전 준비

먼저 HeidiSQL 또는 Navicat을 실행합니다.

서버 DB에 접속합니다.

일반적으로 다음과 같은 테이블이 존재합니다.

accounts
players
inventory
item_instance
warehouse

서버팩마다 이름은 다를 수 있습니다.

STEP 1. 캐릭터 정보 확인

먼저 아이템을 지급할 캐릭터를 찾습니다.

SELECT *
FROM players
WHERE name='테스트';

결과 예시

id = 1001
name = 테스트
level = 80

여기서 가장 중요한 것은

id = 1001

입니다.

대부분의 서버는 캐릭터 ID를 기준으로 아이템을 연결합니다.

STEP 2. 지급할 아이템 찾기

이번에는 아이템 번호를 찾습니다.

예시

SELECT *
FROM item_templates
WHERE name LIKE '%강화석%';

결과

item_id = 182400001
item_name = 최상급 강화석

이제

캐릭터ID = 1001
아이템ID = 182400001

을 확보했습니다.

STEP 3. 현재 인벤토리 확인

수정 전에 반드시 확인합니다.

SELECT *
FROM inventory
WHERE player_id = 1001;

이 작업을 통해

데이터 구조
컬럼 이름
기존 저장 방식

을 확인할 수 있습니다.

STEP 4. 아이템 지급

가장 기본적인 형태입니다.

INSERT INTO inventory
(player_id,item_id,count)
VALUES
(1001,182400001,10);

의미

1001번 캐릭터에게

182400001번 아이템

10개 지급
지급 후 확인
SELECT *
FROM inventory
WHERE player_id = 1001;

정상적으로 추가되었다면

새로운 데이터가 보입니다.

가장 많이 하는 실수
1. 캐릭터 ID 착각

초보 운영자들이 자주 하는 실수입니다.

캐릭터명 : 테스트

계정명 : admin

을 혼동하여

잘못된 캐릭터에게 지급하는 경우가 있습니다.

반드시 player_id를 확인하세요.

2. 수량 오입력
INSERT INTO inventory
(player_id,item_id,count)
VALUES
(1001,182400001,100000);

처럼 너무 큰 수량을 입력하면

서버 오류가 발생하거나 DB가 꼬일 수 있습니다.

3. 아이템 코드 실수
182400001

182400011

한 자리만 달라도 완전히 다른 아이템입니다.

반드시 조회 후 사용하세요.

여러 유저에게 한번에 지급하기

이벤트 보상 지급 시 자주 사용됩니다.

예시

UPDATE inventory
SET count = count + 10
WHERE item_id = 182400001;

의미

해당 아이템을 보유한 모든 유저에게

10개 추가 지급

하지만 초보자는 이런 일괄 수정은 추천하지 않습니다.

실수하면 전체 유저 데이터가 영향을 받기 때문입니다.

지급 취소하기

잘못 지급했다면 삭제할 수 있습니다.

DELETE FROM inventory
WHERE player_id = 1001
AND item_id = 182400001;

해당 아이템만 삭제됩니다.

운영자들이 실제로 사용하는 방법

대부분의 운영자는

1. SELECT로 확인

2. INSERT 또는 UPDATE

3. SELECT로 재확인

4. 게임 접속 후 최종 확인

순서로 작업합니다.

바로 수정하지 않고

반드시 조회 → 수정 → 검증 과정을 거칩니다.

작업 전 백업은 필수

실제 운영 중에는

mysqldump -u root -p gamedb > backup.sql

로 백업 후 작업하세요.

5초의 실수가 몇 달간 운영한 데이터를 날릴 수도 있습니다.

관련자료

댓글 0
등록된 댓글이 없습니다.
전체 911 / 1 페이지
번호
제목
이름
MMOZONE (0명)
🏆 포인트 랭킹 TOP 10
순위 닉네임 포인트
1 no_profile 냥집사쪽지보내기 자기소개 아이디로 검색 전체게시물 371,838
2 no_profile 불멸의행복쪽지보내기 자기소개 아이디로 검색 전체게시물 324,814
3 no_profile 보거스쪽지보내기 자기소개 아이디로 검색 전체게시물 311,522
4 no_profile 하용쪽지보내기 자기소개 아이디로 검색 전체게시물 306,961
5 no_profile 개굴개굴쪽지보내기 자기소개 아이디로 검색 전체게시물 250,794
6 no_profile 코오롱쪽지보내기 자기소개 아이디로 검색 전체게시물 215,217
7 no_profile Omega쪽지보내기 자기소개 아이디로 검색 전체게시물 205,872
8 no_profile 하늘아리쪽지보내기 자기소개 아이디로 검색 전체게시물 189,598
9 no_profile Gatchaman쪽지보내기 자기소개 아이디로 검색 전체게시물 186,434
10 no_profile 타키야겐지쪽지보내기 자기소개 아이디로 검색 전체게시물 179,590
알림 0