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

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

PPYOM๐ŸŒŸ 2024. 7. 13. 15:27

 

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

 

๋ธ”๋กœ๊ทธ ๋ฐฉ๋ฌธ์ž ๊ฒ€์ƒ‰์–ด๋ฅผ ๊ตฌ๊ฒฝํ•˜๋‹ค๊ฐ€ SQLite๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ์ ‘์†ํ•˜์‹  ๋ถ„์ด ๊ณ„์‹ ๊ฑธ ์•Œ๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์›๋ž˜ ๋‹ค๋ฅธ ๊ธ€์„ ์ž‘์„ฑํ•˜๊ณ ์žˆ๋‹ค๊ฐ€ ํ˜น์‹œ๋ผ๋„!! ํ•„์š”ํ•œ ๋ถ„์ด ๋” ๊ณ„์‹ค ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ์ƒ๊ฐ์— ์ด ๊ธ€์„ ๋จผ์ € ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค!!

 

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

 

 


์ด์ „์— ์ž‘์„ฑํ•œ ์ฝ”๋“œ์—์„œ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

์ฝ”๋“œ๋Š” ์•„๋ž˜ ๋งํฌ๋“ค ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!!

 

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

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

ppyom.tistory.com

 

 

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

์•ˆ๋…•ํ•˜์„ธ์š” ๋ฟ€์ž…๋‹ˆ๋‹ค! ์ด๋ฒˆ์—๋Š” ๋‹ค๋ฅธ ๋ถ€๋ถ„์—์„œ๋„ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ• ๋ฒ•ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค!!!   ๋ชฉํ‘œDB์— Player ์ •๋ณด ์ €์žฅ ์„ค๋ช…์„œ๋ฒ„์—

ppyom.tistory.com

 

 

 

๋ชฉํ‘œ

SQLite๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ”Œ๋Ÿฌ๊ทธ์ธ ์ˆ˜์ •

 

์„ค๋ช…

์ €๋ฒˆ์— MySQL์„ ์—ฐ๋™ํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ MySQL์€ ๋ณ„๋„๋กœ ์„ค์น˜ํ•ด์•ผ๋˜๊ณ  ์„ค์ • ๋ฐ ๊ด€๋ฆฌ๊ฐ€ (๋น„๊ต์ ) ๋ณต์žกํ•œ ํŽธ์ž…๋‹ˆ๋‹ค. ๋Œ€๊ทœ๋ชจ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ๋Š” MySQL์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์ง€๋งŒ, ์ผ๋ฐ˜ ์†Œ๊ทœ๋ชจ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋ผ๋ฉด ๊ฐ€๋ณ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” SQLite๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

SQLite๋Š” MySQL๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋ณ„๋„๋กœ ์„ค์น˜ํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ณ , ๋ณ„๋„๋กœ ์„ค์ •ํ•ด์•ผํ•˜๋Š”๊ฒŒ ์—†์Šต๋‹ˆ๋‹ค. ๊ฐ€๋ณ๊ณ  "์†Œ๊ทœ๋ชจ"์—์„œ ๋งค์šฐ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๋ณด์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋งŽ์€ ์—ฐ๊ฒฐ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— write ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ณด์•ˆ ๊ธฐ๋Šฅ์ด ์ œํ•œ์ ์ด๋ผ์„œ ๋ณด์•ˆ์ด ์ค‘์š”ํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์‚ฌ์šฉ์„ ์ง€์–‘ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ๋ฐ”๋กœ ๋งŒ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

 

๋ฐฉ๋ฒ•

!! ์ œ๊ฐ€ ํ•œ ๋ฐฉ๋ฒ•์ด ๋ฌด์กฐ๊ฑด ์ •๋‹ต์€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์€ ์–ธ์ œ๋‚˜ ๊ธฐ์–ตํ•˜๊ณ  ๊ณ„์…จ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค. !!

!! ํ˜น์‹œ๋ผ๋„ ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋ฉด ์ €ํ•œํ…Œ๋„.. ๋Œ“๊ธ€๋กœ..!! ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค !!

์„œ๋ฒ„ ํด๋” - plugins/ํ”Œ๋Ÿฌ๊ทธ์ธํด๋”/config.yml ์ˆ˜์ •

๊ธฐ์กด์— MySQL๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ž‘์„ฑํ•ด๋‘” config ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด์ „๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ์•ž์œผ๋กœ๋Š” ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ์ง€ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•ด type์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

database:
  type: sqlite
  url: jdbc:sqlite:plugins/DBConnectionPlugin/database.db

 

DBConnectionPlugin ์ˆ˜์ •

์ด์ œ MySQL ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ SQLite๋„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ž…๋ ฅ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํƒ€์ž…์€ DBConnectionPlugin ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€์ˆ˜๋กœ ์ €์žฅํ•ด๋‘๊ณ  getConnection์ฒ˜๋Ÿผ ๊ฐ€์ ธ๊ฐ€์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

...
private String databaseType;
...
public String getDatabaseType() {
    return databaseType;
}
...

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด ์ž…๋ ฅ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋งž๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์ž‘์„ฑํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ databaseType์ด ์šฐ๋ฆฌ๊ฐ€ ์ง€๊ธˆ ๋งŒ๋“œ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํƒ€์ž…์ด๋ผ๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ค‘์ง€์‹œํ‚ค๋„๋ก ์„ค์ •ํ•ด๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

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

    String url = config.getString("database.url");
    databaseType = config.getString("database.type");

    if(url == null) {
        getLogger().severe("Database URL์€ null์ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
        getServer().getPluginManager().disablePlugin(this);
        return;
    }

    try {
        if("mysql".equalsIgnoreCase(databaseType)) {
            connection = DriverManager.getConnection(
                    url,
                    config.getString("database.username"),
                    config.getString("database.password")
            );
        } else if("sqlite".equalsIgnoreCase(databaseType)) {
            connection = DriverManager.getConnection(url);
        } else {
            getLogger().severe("์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํƒ€์ž…์ž…๋‹ˆ๋‹ค.");
            getServer().getPluginManager().disablePlugin(this);
            return;
        }

        getLogger().info("๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์— ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.");
        getLogger().info(String.format("Database Type = %s", databaseType));
    } catch(SQLException e) {
        e.getStackTrace();
        getLogger().severe("๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.");
    }
}

์ตœ์ข… ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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;
    private String databaseType;

    @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");
        databaseType = config.getString("database.type");

        if(url == null) {
            getLogger().severe("Database URL์€ null์ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
            getServer().getPluginManager().disablePlugin(this);
            return;
        }

        try {
            if("mysql".equalsIgnoreCase(databaseType)) {
                connection = DriverManager.getConnection(
                        url,
                        config.getString("database.username"),
                        config.getString("database.password")
                );
            } else if("sqlite".equalsIgnoreCase(databaseType)) {
                connection = DriverManager.getConnection(url);
            } else {
                getLogger().severe("์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํƒ€์ž…์ž…๋‹ˆ๋‹ค.");
                getServer().getPluginManager().disablePlugin(this);
                return;
            }

            getLogger().info("๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์— ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.");
            getLogger().info(String.format("Database Type = %s", databaseType));
        } catch(SQLException e) {
            e.getStackTrace();
            getLogger().severe("๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.");
        }
    }

    public Connection getConnection() {
        return connection;
    }

    public String getDatabaseType() {
        return databaseType;
    }
}

 

PlayerInformationPlugin ์ˆ˜์ •

์ €๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” MySQL์—์„œ ๋ฏธ๋ฆฌ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋ณดํ†ต ์„œ๋ฒ„ ๊ฐœ๋ฐœ์ž๋Š” ์ด๋ ‡๊ฒŒ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๊ณ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ SQLite๋Š” ๋Œ€์ฒด๋กœ ํด๋ผ์ด์–ธํŠธ์ธก ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†Œ์Šค์ฝ”๋“œ์—์„œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•ด์„œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์†Œ์Šค์ฝ”๋“œ์— ํ…Œ์ด๋ธ” ์ƒ์„ฑํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š”๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™์•„ MySQL๊ณผ SQLite ๋ชจ๋‘ ์†Œ์Šค์ฝ”๋“œ์— ์ž‘์„ฑํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ €๋Š” ํ…Œ์ด๋ธ”์„ ๋งŒ๋“œ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋ณ„๋„์˜ ํด๋ž˜์Šค์ธ UserTableCreator๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

package com.ppyom.user.dao;

import com.ppyom.PlayerInformationPlugin;
import org.bukkit.plugin.Plugin;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

public class UserTableCreator {
	private final Connection connection;
	private final String databaseType;
	public UserTableCreator(Connection connection, String databaseType) {
		this.connection = connection;
		this.databaseType = databaseType;
	}

	public void create() {
		String query;
		
		try (Statement statement = connection.createStatement()) {
			if("mysql".equalsIgnoreCase(databaseType)) {
				query = "CREATE TABLE IF NOT EXISTS user (" +
								"id varchar(36) primary key," +
								"username varchar(16) not null," +
								"displayName varchar(16)" +
						");";
			} else if("sqlite".equalsIgnoreCase(databaseType)) {
				query = "CREATE TABLE IF NOT EXISTS user (" +
								"id text primary key," +
								"username text not null," +
								"displayName text" +
						");";
			} else { // ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํƒ€์ž…์ธ ๊ฒฝ์šฐ
				throw new IllegalArgumentException(databaseType);
			}
			statement.execute(query);
		} catch (SQLException | IllegalArgumentException e) {
			Plugin plugin = PlayerInformationPlugin.getPlugin(PlayerInformationPlugin.class);
			if(e instanceof SQLException) { // SQLException
				plugin.getLogger().severe("๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฒ˜๋ฆฌ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.");
			} else { // IllegalArgumentException
				plugin.getLogger().severe(String.format("ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํƒ€์ž…์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. %s", e.getMessage()));
				plugin.getServer().getPluginManager().disablePlugin(plugin);
			}
		}
	}
}

๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ๋ฉ”์ธ ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

// TableCreator๋ฅผ ์ƒ์„ฑํ•˜๊ณ , create ๋ฉ”์„œ๋“œ ์‹คํ–‰
UserTableCreator tableCreator = new UserTableCreator(
        connection,
        dbConnectionPlugin.getDatabaseType()
);
tableCreator.create();

์ตœ์ข… ๋ฉ”์ธ ํด๋ž˜์Šค ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

package com.ppyom;

import com.ppyom.user.command.DisplayNameCommand;
import com.ppyom.user.dao.UserDao;
import com.ppyom.user.dao.UserTableCreator;
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();
            UserTableCreator tableCreator = new UserTableCreator(
                    connection,
                    dbConnectionPlugin.getDatabaseType()
            );
            tableCreator.create();

            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