๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ/ํ”Œ๋Ÿฌ๊ทธ์ธ๋งŒ๋“ค๊ธฐ

[๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ํ”Œ๋Ÿฌ๊ทธ์ธ๋งŒ๋“ค๊ธฐ] MySQL ์—ฐ๋™ํ•˜๊ธฐ

PPYOM๐ŸŒŸ 2024. 7. 4. 16:43

 

์•ˆ๋…•ํ•˜์„ธ์š” ๋ฟ€์ž…๋‹ˆ๋‹ค!

 

์ด๋ฒˆ์—๋Š” ๋‹ค๋ฅธ ๋ถ€๋ถ„์—์„œ๋„ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ• ๋ฒ•ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค!!!

 

 


 

๋ชฉํ‘œ

DB์— Player ์ •๋ณด ์ €์žฅ

 

์„ค๋ช…

์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ, ์ด์ „์— ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋˜๊ณ ์žˆ๋Š” ๋™์•ˆ๋งŒ ๋ณ€์ˆ˜์— ์ €์žฅ๋˜๊ณ , ์„œ๋ฒ„ ์ข…๋ฃŒ ์‹œ ์‚ญ์ œ๋œ๋‹ค๋Š” ์ ์„ ์•Œ๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์„œ๋ฒ„๊ฐ€ ์ข…๋ฃŒ๋˜๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”๋ฐ ํ•ด๋‹น ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ํฌ๊ฒŒ 2๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ํ…์ŠคํŠธ ํŒŒ์ผ์— ์ €์žฅํ•˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค. CVS, JSON, YAML ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ…์ŠคํŠธ ํŒŒ์ผ์— ์ €์žฅํ•˜๋ฉด ๋‹จ์ˆœํ•˜๊ณ , ํŒŒ์ผ ๋ณต์‚ฌ/๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์–‘์ด ์ ์€ ๊ฒฝ์šฐ์—๋Š” ์ด ๋ฐฉ๋ฒ•๋„ ๊ดœ์ฐฎ์ง€๋งŒ, ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•  ๋•Œ์— ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๋ฉฐ ๋ณด์•ˆ์— ๊ทธ๋ ‡๊ฒŒ ์ข‹์€ ํŽธ์€ ์•„๋‹™๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. MySQL, SQLite, MongoDB ๋“ฑ์˜ DBMS(DataBase Management System)๊ฐ€ ์žˆ์œผ๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์ ธ๋„ ํ…์ŠคํŠธ ํŒŒ์ผ์— ์ €์žฅํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌํ•  ๋•Œ์˜ ์„ฑ๋Šฅ์ด ๊ดœ์ฐฎ์€ ํŽธ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ…์ŠคํŠธ ํŒŒ์ผ์— ๋น„ํ•ด ๋ฆฌ์†Œ์Šค๊ฐ€ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ํŽธ์ด๋ฉฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์œ„ํ•œ ๋ณ„๋„์˜ ์„ค์ •์„ ํ•ด์ฃผ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ธ€์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ ์ค‘ ํ•˜๋‚˜์ธ MySQL์„ ์‚ฌ์šฉํ•ด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋งŒ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๋ฐฉ๋ฒ•

1. MySQL ์„ค์ •

MySQL ๋‹ค์šด๋กœ๋“œ๋Š” ์•„๋ž˜ ๋งํฌ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

 

MySQL 8.0 ๋‹ค์šด๋กœ๋“œ & ์„ค์น˜ํ•˜๊ธฐ

์•ˆ๋…•ํ•˜์„ธ์š” ๋ฟ€์ž…๋‹ˆ๋‹ค! MySQL 8.0 ๋‹ค์šด๋กœ๋“œ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค!!!   ~ ํ•ด๋‹น ๊ธ€์—์„œ๋Š” 8.0.37 ๋ฒ„์ „์„ ๋‹ค์šด๋กœ๋“œ/์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ~  MySQL ๋‹ค์šด๋กœ๋“œ ์‚ฌ์ดํŠธ์— ์ ‘์† - ์„ค์น˜ ํŒŒ

ppyom.tistory.com

1-1. MySQL ์‹คํ–‰

๋ช…๋ นํ”„๋กฌํ”„ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , mysql -u root -p ๋ฅผ ์ž…๋ ฅํ•ด ๋กœ๊ทธ์ธํ•ด์ค๋‹ˆ๋‹ค.

1-2. User, Database ์ƒ์„ฑ / ๊ถŒํ•œ ๋ถ€์—ฌ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์œ ์ €๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ์œ ์ € ppyom๊ณผ test_plugin_1 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

- ์œ ์ € ์ƒ์„ฑ
create user ์‚ฌ์šฉ์ž์•„์ด๋”” identified by ๋น„๋ฐ€๋ฒˆํ˜ธ;

- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ
create database ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋ฆ„;

- ์œ ์ €์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๊ด€๋ จ๋œ ๋ชจ๋“  ๊ถŒํ•œ ๋ถ€์—ฌ
grant all privileges on ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋ฆ„.* to ์‚ฌ์šฉ์ž์•„์ด๋””;

 

๋ชจ๋‘ ์ƒ์„ฑํ–ˆ๋‹ค๋ฉด exit๋ฅผ ์ž…๋ ฅํ•ด ๋‚˜๊ฐ€์ฃผ์„ธ์š”.

 

1-3. Player Table ์ƒ์„ฑ

์šฐ์„  mysql -u ์‚ฌ์šฉ์ž์•„์ด๋”” -p ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋ฆ„์„ ์ž…๋ ฅํ•ด ์œ„์—์„œ ๋งŒ๋“  ์‚ฌ์šฉ์ž/๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๋กœ๊ทธ์ธํ•œ ๋‹ค์Œ ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•ด ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•ด์ค๋‹ˆ๋‹ค.

create table user (
    id          varchar(36) not null comment 'ํ”Œ๋ ˆ์ด์–ด UUID',
    username    varchar(16) not null comment 'ํ”Œ๋ ˆ์ด์–ด ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ๋‹‰๋„ค์ž„',
    displayName varchar(16) null comment 'ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ง€์ •ํ•œ ๋‹‰๋„ค์ž„',
    constraint player_pk
        primary key (id)
);

 

2. DBConnection์„ ๊ด€๋ฆฌํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์ƒ์„ฑ

์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๋‹ค๋ฅธ ์ž‘์—…์€ ํ•˜์ง€ ์•Š๊ณ  ์˜ค๋กœ์ง€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์—ฐ๊ฒฐ/ํ•ด์ œ ์—ญํ• ๋งŒ ํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ์€ ์•„๋ž˜ ๋งํฌ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

 

[๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ํ”Œ๋Ÿฌ๊ทธ์ธ๋งŒ๋“ค๊ธฐ] IntelliJ ์—†์ด ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑํ•˜๊ธฐ

์•ˆ๋…•ํ•˜์„ธ์š”! ๋ฟ€์ž…๋‹ˆ๋‹ค! ๋‘ ๋ฒˆ์งธ ๊ธ€๋กœ ์›๋ž˜ IntelliJ IDEA์˜ ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ Extension์„ ์‚ฌ์šฉํ•ด์„œ ํ”„๋กœ์ ํŠธ ์…‹์—…ํ•˜๋Š” ๊ธ€์„ ์ž‘์„ฑํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ!!์ธํ…”๋ฆฌ์ œ์ด๊ฐ€ ์œ ๋ฃŒ..๊ธฐ๋„ ํ•˜๊ณ , ๊ทธ๋ƒฅ ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ์ƒํƒœ

ppyom.tistory.com

 

 

[๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ํ”Œ๋Ÿฌ๊ทธ์ธ๋งŒ๋“ค๊ธฐ] IntelliJ ์‚ฌ์šฉํ•ด์„œ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑํ•˜๊ธฐ

์•ˆ๋…•ํ•˜์„ธ์š”! ๋ฟ€์ž…๋‹ˆ๋‹ค! ์ €๋ฒˆ ๊ธ€์—์„œ ๋ง์”€๋“œ๋ ธ๋“ฏ..! ์ด๋ฒˆ์—๋Š” IntelliJ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•ด ํ”„๋กœ์ ํŠธ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค..!๋งŒ์•ฝ IntelliJ๊ฐ€ ์—†์œผ์‹œ๋‹ค๋ฉด ์•„๋ž˜ ๊ธ€์„ ํ™•์ธํ•ด์ฃผ์„ธ์š”~! [๋งˆ

ppyom.tistory.com

2-1. build.gradle์— maven ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์ฝ”๋“œ ์ถ”๊ฐ€

๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด maven local repository์— ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

build.gradle์— ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.

plugins {
    id 'java'
    id 'maven-publish' // maven publish๋ฅผ ์œ„ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ
}

...

// publish๋ฅผ ์œ„ํ•œ ์ฝ”๋“œ
publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
}

์ด๋ ‡๊ฒŒ ์ˆ˜์ •ํ•˜๊ณ  [Gradle ๋ณ€๊ฒฝ ๋‚ด์šฉ ๋กœ๋“œ]๋ฅผ ํด๋ฆญํ•˜๋ฉด Gradle ๋ฉ”๋‰ด์˜ Tasks์— publishing์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. publishing - publishToMavenLocal์„ ๋”๋ธ”ํด๋ฆญํ•˜๋ฉด maven local repository์— ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ๋ฐฐํฌ๋œ ํŒŒ์ผ์€ C:\Users\์‚ฌ์šฉ์ž์ด๋ฆ„\.m2\repository\...ํŒจํ‚ค์ง€... ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2-2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •ํŒŒ์ผ ์ž‘์„ฑ

์„œ๋ฒ„ ํด๋” - plugins์— ํ”„๋กœ์ ํŠธ ์ด๋ฆ„๊ณผ ๊ฐ™์€ ํด๋”๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ํ•ด๋‹น ํด๋”์— config.yml ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

database:
  url: jdbc:mysql://localhost:3306/๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋ฆ„
  username: ์‚ฌ์šฉ์ž์•„์ด๋””
  password: ๋น„๋ฐ€๋ฒˆํ˜ธ

2-3. ์ฝ”๋“œ ์ž‘์„ฑ

ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ์„œ๋ฒ„๊ฐ€ ์—ฐ๊ฒฐ๋  ๋•Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ , ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ์ด ํ•ด์ œ๋œ๋‹ค๋ฉด ์—ฐ๊ฒฐ์„ ํ•ด์ œํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์„œ๋ฒ„์— ์—ฐ๊ฒฐ๋  ๋•Œ ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ์ธ onEnable์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๊ฒฐํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ์ด ํ•ด์ œ๋  ๋•Œ ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ์ธ onDisable์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์„ ํ•ด์ œํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์œผ๋กœ ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

package com.ppyom;

import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.java.JavaPlugin;

import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public final class DBConnectionPlugin extends JavaPlugin {
    private Connection connection;

    @Override
    public void onEnable() {
        getLogger().info("DBConnectionPlugin onEnable");
        saveDefaultConfig();
        connectDatabase();
    }

    @Override
    public void onDisable() {
        getLogger().info("DBConnectionPlugin onDisable");
        if(connection != null) {
            try {
                connection.close();
                getLogger().info("๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์ด ํ•ด์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
            } catch (SQLException e) {
                getLogger().severe(e.getMessage());
            }
        }
    }

    private void connectDatabase() {
        File configFile = new File(getDataFolder(), "config.yml");
        FileConfiguration config = YamlConfiguration.loadConfiguration(configFile);

        String url = config.getString("database.url");
        String username = config.getString("database.username");
        String password = config.getString("database.password");

        try {
            connection = DriverManager.getConnection(url, username, password);
            getLogger().info("๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์— ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.");
        } catch(SQLException e) {
            e.getStackTrace();
            getLogger().severe("๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.");
        }
    }

    public Connection getConnection() {
        return connection;
    }
}

์œ„ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ๋‹ค์Œ maven local repository์— ๋ฐฐํฌ(publishToMavenLocal)ํ•˜๊ณ  ๋นŒ๋“œ(build)ํ•ฉ๋‹ˆ๋‹ค.

๋นŒ๋“œ๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„œ๋ฒ„์— ์ ์šฉ์‹œํ‚ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์—ฐ๊ฒฐ์— ์„ฑ๊ณตํ–ˆ๋‹ค๋Š” ๋กœ๊ทธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

3. PlayerInformationPlugin ์ˆ˜์ •

์ด์ „ ํ”„๋กœ์ ํŠธ์—์„œ ์ด์–ด์„œ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

[๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ํ”Œ๋Ÿฌ๊ทธ์ธ] ๋‹‰๋„ค์ž„ ๋ณ€๊ฒฝ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋งŒ๋“ค๊ธฐ

์•ˆ๋…•ํ•˜์„ธ์š” ๋ฟ€์ž…๋‹ˆ๋‹ค! ์ด๋ฒˆ์—๋Š” ์„œ๋ฒ„์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ• ๋ฒ•ํ•œ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ธ ๋‹‰๋„ค์ž„ ๋ณ€๊ฒฝ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค!!!   ๋ชฉํ‘œํ”Œ๋ ˆ์ด์–ด Display Name ๋ณ€๊ฒฝ ์ปค๋งจ๋“œ ๋งŒ๋“ค๊ธฐ ์„ค

ppyom.tistory.com

3-1. ํ”„๋กœ์ ํŠธ ์„ค์ •ํŒŒ์ผ ์ˆ˜์ •

plugin.yml

๋‹ค๋ฅธ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์˜์กดํ•ด์•ผํ•  ๋•Œ์—๋Š” ํ•ด๋‹น ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์˜์กดํ•œ๋‹ค๋Š” ๋‚ด์šฉ์„ ๋ณ„๋„๋กœ ์•Œ๋ ค์ฃผ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”.

...

depend:
  - DBConnectionPlugin

...

 

build.gradle

์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ gradle์— dependency์ถ”๊ฐ€๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”.

...

repositories {
    mavenCentral()
    mavenLocal()
    ...
}
dependencies {
    compileOnly "io.papermc.paper:paper-api:1.20.4-R0.1-SNAPSHOT"
    compileOnly "๋ณธ์ธ์˜ํŒจํ‚ค์ง€.DBConnectionPlugin:1.0-SNAPSHOT"
}
...

 

3-2. ์ฝ”๋“œ ์ˆ˜์ •

UserDao.java

UserDao ์ž…๋‹ˆ๋‹ค.

๊ธฐ์กด์— ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ž‘์„ฑํ–ˆ๋˜ ๋ถ€๋ถ„์„ DB๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

package com.ppyom.user.dao;

import com.ppyom.common.dao.Dao;
import com.ppyom.user.domain.User;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;

public class UserDao implements Dao<User> {
	private final Connection connection;

	public UserDao(Connection connection) {
		this.connection = connection;
	}

	@Override
	public User findById(String id) {
		String query = "SELECT * FROM user WHERE id = ?";
		try (PreparedStatement statement = connection.prepareStatement(query)) {
			statement.setString(1, id.toString());
			ResultSet resultSet = statement.executeQuery();
			if(resultSet.next()) {
				return extractUser(resultSet);
			}
		} catch (SQLException e) {
			//
		}
		return null;
	}

	@Override
	public List<User> findAll() {
		List<User> users = new ArrayList<>();
		String query = "SELECT * FROM user";
		try (PreparedStatement statement = connection.prepareStatement(query)) {
			ResultSet resultSet = statement.executeQuery();
			if(resultSet.next()) {
				users.add(extractUser(resultSet));
			}
		} catch (SQLException e) {
			//
		}
		return users;
	}

	@Override
	public void create(User user) {
		String query = "INSERT INTO user (id, username) VALUES (?, ?)";
		try (PreparedStatement statement = connection.prepareStatement(query)) {
			statement.setString(1, user.getId().toString());
			statement.setString(2, user.getUsername());
			statement.executeUpdate();
		} catch (SQLException e) {
			//
		}
	}

	@Override
	public void update(User user) {
		String query = "UPDATE user SET username = ?, displayName = ? WHERE id = ?";
		try (PreparedStatement statement = connection.prepareStatement(query)) {
			statement.setString(1, user.getUsername());
			statement.setString(2, user.getDisplayName());
			statement.setString(3, user.getId().toString());
			statement.executeUpdate();
		} catch (SQLException e) {
			//
		}
	}

	@Override
	public void delete(User user) {
		String query = "DELETE FROM user WHERE id = ?";
		try (PreparedStatement statement = connection.prepareStatement(query)) {
			statement.setString(1, user.getId().toString());
			statement.executeUpdate();
		} catch (SQLException e) {
			//
		}
	}

	private User extractUser(ResultSet resultSet) throws SQLException {
		UUID id = UUID.fromString(resultSet.getString("id"));
		String username = resultSet.getString("username");
		String displayName = resultSet.getString("displayName");
		return new User(id, username, displayName);
	}
}

 

PlayerInformationPlugin.java

๋ฉ”์ธ ํ”Œ๋Ÿฌ๊ทธ์ธ์ž…๋‹ˆ๋‹ค.

DBConnectionPlugin์„ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด์— ์ด๋ฒคํŠธ, ์ปค๋งจ๋“œ๋ฅผ ๋“ฑ๋กํ•˜๋˜ ๋ถ€๋ถ„์„ ๋ชจ๋‘ ํ•ฉ์ณ์„œ initPlugin ๋ฉ”์„œ๋“œ๋กœ ํ†ตํ•ฉํ•ด์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

package com.ppyom;

import com.ppyom.user.command.DisplayNameCommand;
import com.ppyom.user.dao.UserDao;
import com.ppyom.user.event.JoinListener;
import com.ppyom.user.service.UserService;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.PluginCommand;
import org.bukkit.event.Listener;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;

import java.sql.Connection;

public final class PlayerInformationPlugin extends JavaPlugin {
    @Override
    public void onEnable() {
        getLogger().info("PlayerInformationPlugin onEnable");
        initPlugin();
    }

    @Override
    public void onDisable() {
        getLogger().info("PlayerInformationPlugin onDisable");
    }

    private void initPlugin() {
        Plugin plugin = Bukkit.getPluginManager().getPlugin("DBConnectionPlugin");
        
        if(plugin instanceof DBConnectionPlugin dbConnectionPlugin) {
            Connection connection = dbConnectionPlugin.getConnection();
            UserDao userDao = new UserDao(connection);
            UserService userService = new UserService(userDao);

            // ์ด๋ฒคํŠธ ๋“ฑ๋ก
            registerEvent(new JoinListener(userService));

            // ์ปค๋งจ๋“œ ๋“ฑ๋ก
            registerCommand("display-name", new DisplayNameCommand(userService));
        } else {
            getLogger().severe("DBConnectionPlugin์ด ์—†๊ฑฐ๋‚˜ ์‹คํ–‰๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.");
            Bukkit.getPluginManager().disablePlugin(this);
        }
    }

    private void registerEvent(Listener listener) {
        getServer().getPluginManager().registerEvents(listener, this);
    }

    private void registerCommand(String name, CommandExecutor commandExecutor) {
        PluginCommand pluginCommand = getServer().getPluginCommand(name);
        if(pluginCommand != null) {
            pluginCommand.setExecutor(commandExecutor);
        }
    }
}

 

 

๊ฒฐ๊ณผ

์œ„ ์‚ฌ์ง„์ฒ˜๋Ÿผ ๋‹‰๋„ค์ž„์„ ๋ณ€๊ฒฝํ•˜๊ณ , ์„œ๋ฒ„๋ฅผ ์žฌ์‹œ์ž‘ํ•ด๋„ ๋‹‰๋„ค์ž„์ด ๊ทธ๋Œ€๋กœ ๋‚จ์•„์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!!!

 

 


 

 

์ž˜ ์ฝ์–ด๋ณด์…จ๋‚˜์š”?

 

๋‹ค์Œ์—๋„ ์œ ์šฉํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ๊ฐ€์ ธ์™€๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

๊ถ๊ธˆํ•œ ์  ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ์ตœ๋Œ€ํ•œ ์—ด์‹ฌํžˆ ๋‹ต๋ณ€ํ•ด๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค!!

์ดํ›„ ๋‹ค๋ฅธ๊ฒƒ๋“ค ๋ณด๊ณ ์‹ถ์œผ๋ฉด ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์„ธ์š”~~!!

 

๋ฟ€์ด์˜€์Šต๋‹ˆ๋‹ค! ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

 

 

728x90