SDK ์—ฐ๋™

๐Ÿ“˜

Java/Kotlin SDK๋Š” JDK 8 ์ด์ƒ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.


์˜์กด์„ฑ ์ถ”๊ฐ€

SDK ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

repositories {
  mavenCentral()
}

dependencies {
  implementation 'io.hackle:hackle-server-sdk:2.31.0'
}


SDK ์ดˆ๊ธฐํ™”

โ—๏ธ

HackleClient๋Š” ๋ฐ˜๋“œ์‹œ ์‹ฑ๊ธ€ํ†ค์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

HackleClient๋Š” ํ˜ธ์ถœ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋ธ”๋กํ‚น ํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ํ…Œ์ŠคํŠธ ๊ทธ๋ฃน์„ ๋ถ„๋ฐฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๋ถ€์ ์œผ๋กœ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฅผ ์œ„ํ•ด ์ถ”๊ฐ€์ ์ธ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด ์ƒˆ๋กœ์šด ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ธ์Šคํ„ด์Šคํ™” ํ•˜์ง€ ์•Š๊ณ  ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ๋ช…์ฃผ๊ธฐ ๋™์•ˆ ์‹ฑ๊ธ€ ์ธ์Šคํ„ด์Šค๋กœ ๊ด€๋ฆฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

HackleClient๋Š” SDK ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ๋“ค์„ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

SDK ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” HackleClinet ์ดˆ๊ธฐํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šคํ™”

SDK ํ‚ค๋ฅผ ์ „๋‹ฌํ•˜์—ฌ HackleClient๋ฅผ ์ธ์Šคํ„ด์Šคํ™” ํ•ฉ๋‹ˆ๋‹ค.
HackleClient๋Š” ํ•„์š”ํ•œ ์ •๋ณด๋“ค์„ ์–ป๊ธฐ ์œ„ํ•ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์œผ๋กœ ํ•ตํด ์„œ๋ฒ„์™€ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

  • SDK ํ‚ค๋Š” ํ•ตํด ์„œ๋น„์Šค์˜ ๋Œ€์‹œ๋ณด๋“œ ์•ˆ์— ์œ„์น˜ํ•œ SDK ์—ฐ๋™ ์ •๋ณด์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
import io.hackle.sdk.HackleClient
import io.hackle.sdk.HackleClients

// YOUR_SERVER_SDK_KEY ์ž๋ฆฌ์— SDK ํ‚ค๋ฅผ ๋„ฃ์Šต๋‹ˆ๋‹ค.
HackleClient hackleClient = HackleClients.create(YOUR_SERVER_SDK_KEY);
import io.hackle.sdk.HackleClient
import io.hackle.sdk.HackleClients
  
// YOUR_SERVER_SDK_KEY ์ž๋ฆฌ์— SDK ํ‚ค๋ฅผ ๋„ฃ์Šต๋‹ˆ๋‹ค.
val hackleClient = Hackle.client(YOUR_SERVER_SDK_KEY)


์ข…๋ฃŒ

์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ข…๋ฃŒ๋  ๋•Œ close() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ด ๊ณผ์ •์„ ํ†ตํ•ด ์‚ฌ์šฉ ์ค‘์ธ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ˜๋‚ฉํ•˜๊ณ  ๋‚จ์•„์žˆ๋Š” ์ด๋ฒคํŠธ๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

โ—๏ธ

close() ํ˜ธ์ถœ ์—†์ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ข…๋ฃŒ๋˜๋ฉด ์ด๋ฒคํŠธ๊ฐ€ ๋ˆ„๋ฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import io.hackle.sdk.HackleClient  

hackleClient.close();
import io.hackle.sdk.HackleClient  
  
hackleClient.close()

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๋Š” ๊ฒฝ์šฐ

HackleClient๋ฅผ ๋นˆ(bean)์œผ๋กœ ๋“ฑ๋กํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ๋ช…์ฃผ๊ธฐ ๋™์•ˆ ์‹ฑ๊ธ€ ์ธ์Šคํ„ด์Šค๋กœ ๊ด€๋ฆฌ๊ฐ€ ๋˜๋ฉฐ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ ์‹œ close()๊นŒ์ง€ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

Hackle Client ๋ฅผ wrapping ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์‹œ๋Š” ๊ฒฝ์šฐ

wrapping ํด๋ž˜์Šค์— AutoClosable implementation ํ•˜์‹œ๊ณ  close() ์‹œ์— HackleClient ์˜ close()๋ฅผ ํ˜ธ์ถœ ํ•˜์‹œ๋Š” ๋ฐฉ๋ฒ•์„ ๊ถŒ์žฅ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

import io.hackle.sdk.HackleClient

public class CustomHackleClient implements AutoCloseable {

    private final HackleClient hackleClient;

    public CustomHackleClient(HackleClient hackleClient) {
        this.hackleClient = hackleClient;
    }

    @Override
    public void close() throws Exception {
        hackleClient.close();
    }
}
import io.hackle.sdk.HackleClient

class CustomHackleClient(private val hackleClient: HackleClient): AutoCloseable {
    
    override fun close() {
        hackleClient.close()
    }
}