G
YouTube TikTok Games

Java

Java 환경에서 Upbit Open API를 연동하기 위한 개발 환경 설정 방법을 안내합니다.

IDE(IntelliJ IDEA) 환경 설정

IntelliJ IDEA는 JetBrains에서 개발한 통합 개발 환경으로 Java와 Kotlin 개발 환경에서 널리 사용됩니다. 이 가이드에서는 IntelliJ IDEA를 사용해 Java 개발 환경을 구축합니다.

  1. IntelliJ IDEA 설치
    JetBrains 공식 웹사이트에서 IntelliJ IDEA를 설치할 수 있습니다. JetBrains은 Community Edition(무료), Ultimate(유료) 등 2가지 버전의 IntelliJ IDEA를 제공합니다. 사용자의 목적에 맞는 버전을 선택해 설치합니다.

  2. JDK 설치
    Java 개발 환경을 구축하기 위해 JDK(Java Development Kit)를 설치합니다. Amazon, IBM, Microsoft 등 다양한 기관에서 OpenJDK를 제공하고 있으며 사용 환경, 요구 사항에 따라 가장 적합한 배포판을 선택해 설치합니다.

  3. IntelliJ IDEA 설정

    • IntelliJ IDEA를 실행하고 기존 프로젝트를 열거나 새로운 프로젝트를 생성합니다.
    • 상단 메뉴에서 File > Project Structure를 클릭합니다.
    • Project Structure 창의 좌측 메뉴에서 Platform Settings > SDKs를 선택합니다.
    • 설치한 JDK가 목록에 없다면 상단의 + 버튼을 클릭하고 [Add JDK] 버튼을 클릭합니다.
    • JDK 설치 경로를 선택합니다. 운영체제별 일반적인 JDK 설치 경로는 다음과 같습니다.
      • macOS: /Library/Java/JavaVirtualMachines/<jdk-version>/Contents/Home
      • Windows: C:\Program Files\Java\<jdk-version>
        올바르게 경로를 선택하면 IntelliJ IDEA가 자동으로 JDK를 인식해 추가합니다.
    • Project Structure 창 좌측 메뉴에서 Project를 선택합니다.
    • 오른쪽 화면의 Project SDK 드롭다운 메뉴에서 추가한 JDK를 선택합니다.
    • Language level을 프로젝트에 맞는 Java 버전으로 선택합니다.
    • 설정 변경 완료 후 우측 하단의 [OK] 버튼 또는 [Apply] 버튼을 클릭해 설정을 저장하고 창을 닫습니다.
  4. Java 환경 설정 테스트
    JDK 설정을 확인하기 위해 간단한 Java 클래스 코드를 작성해 테스트합니다.

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello, Java!");
    }
}

실행 후 다음과 같은 결과가 출력되면 JDK 설정이 올바르게 완료된 것을 확인할 수 있습니다.

Hello, Java!

HTTP 클라이언트 라이브러리 안내

REST API와 WebSocket을 Java에서 호출하기 위한 대표적인 HTTP 클라이언트 라이브러리들을 소개합니다. 개발 환경 및 Framework에 따라 적합한 라이브러리를 선택하여 사용하십시오.

라이브러리별 특징 및 설치 방법

  1. OkHttp

OkHttp는 널리 사용되는 Java/Android HTTP 클라이언트로, REST API와 WebSocket 통신 모두 지원합니다. 경량이면서 비동기 및 동기 요청 모두 지원하고, 다양한 커스텀 설정에 용이합니다. 아래와 같이 설치 의존성을 설정하거나 직접 다운로드 받을 수 있습니다.

implementation 'com.squareup.okhttp3:okhttp:{version}'
<dependency>
  <groupId>com.squareup.okhttp3</groupId>
  <artifactId>okhttp</artifactId>
  <version>{version}</version>
</dependency>

REST API 호출 및 WebSocket 연결 예제는 아래와 같습니다.

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  	.url("https://api.upbit.com/v1/ticker?markets=KRW-BTC")
		.addHeader("accept", "application/json")
    .build();

try (Response response = client.newCall(request).execute()) {
    System.out.println(response.body().string());
}
import okhttp3.*;

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
    .url("wss://api.upbit.com/websocket/v1")
    .build();

WebSocketListener listener = new WebSocketListener() {
    @Override
    public void onOpen(WebSocket webSocket, Response response) {
        String subscribeMessage = "[{\"ticket\":\"test\"},{\"type\":\"ticker\",\"codes\":[\"KRW-BTC\"]}]";
        webSocket.send(subscribeMessage);
    }
    @Override
    public void onMessage(WebSocket webSocket, String text) {
        System.out.println("Received: " + text);
    }
    @Override
    public void onClosed(WebSocket webSocket, int code, String reason) {
        System.out.println("Closed: " + reason);
    }
    @Override
    public void onFailure(WebSocket webSocket, Throwable t, Response response) {
        t.printStackTrace();
    }
};
client.newWebSocket(request, listener);
client.dispatcher().executorService().shutdown();

  1. Spring WebClient

Spring WebClient는 Spring 5부터 제공되는 Reactive HTTP/WebSocket 클라이언트입니다. 비동기 및 스트림 기반 처리에 최적화되어 있어 대용량, 고성능 API 연동에 적합합니다. Spring Boot 2.0 이상을 사용하는 경우 REST, WebSocket 모두 손쉽게 사용할 수 있습니다. 아래와 같이 설치 의존성을 설정하거나 직접 다운로드 받을 수 있습니다.

implementation 'org.springframework.boot:spring-boot-starter-webflux'
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

REST API 호출 및 WebSocket 연결 예제는 아래와 같습니다

import org.springframework.web.reactive.function.client.WebClient;

WebClient client = WebClient.create();
String response = client.get()
  	.uri("https://api.upbit.com/v1/ticker?markets=KRW-BTC")
		.header("accept", "application/json") 
    .retrieve()
    .bodyToMono(String.class)
    .block();
System.out.println(response);
import org.springframework.web.reactive.socket.client.ReactorNettyWebSocketClient;
import org.springframework.web.reactive.socket.WebSocketHandler;
import org.springframework.web.reactive.socket.WebSocketSession;
import reactor.core.publisher.Mono;

import java.net.URI;

ReactorNettyWebSocketClient client = new ReactorNettyWebSocketClient();
client.execute(
        URI.create("wss://api.upbit.com/websocket/v1"),
        session -> session.send(
                Mono.just(session.textMessage(
                        "[{\"ticket\":\"test\"},{\"type\":\"ticker\",\"codes\":[\"KRW-BTC\"]}]"
                ))
            ).thenMany(session.receive()
                .map(msg -> {
                    System.out.println("Received: " + msg.getPayloadAsText());
                    return msg;
                })
            ).then()
).block();

  1. Retrofit

Retrofit은 OkHttp 기반의 REST API 클라이언트로, 인터페이스로 API 명세를 정의한 뒤 gson 라이브러리와 함께 사용하여 DTO 자동 매핑, 비동기 호출 등을 쉽게 구현할 수 있습니다. 응답을 객체로 역직렬화하거나, API 명세 관리가 중요한 프로젝트에 유용합니다. WebSocket은 직접 지원하지 않으나 OkHttp를 기반으로 하는 라이브러리이므로 OkHttp의 WebSocket 기능을 활용할 수 있습니다.

implementation 'com.squareup.retrofit2:retrofit:2.11.0'
implementation 'com.squareup.retrofit2:converter-gson:2.11.0'
<dependency>
  <groupId>com.squareup.retrofit2</groupId>
  <artifactId>retrofit</artifactId>
  <version>2.11.0</version>
</dependency>
<dependency>
  <groupId>com.squareup.retrofit2</groupId>
  <artifactId>converter-gson</artifactId>
  <version>2.11.0</version>
</dependency>

REST API 호출 예제는 아래와 같습니다.

import retrofit2.Call;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.http.GET;
import retrofit2.http.Query;

import java.util.List;
import java.util.Map;

public interface UpbitService {
  	@GET("v1/ticker")
		@Headers("accept: application/json")
    Call<List<Map<String, Object>>> getTicker(@Query("markets") String markets);
}

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("https://api.upbit.com/")
    .addConverterFactory(GsonConverterFactory.create())
    .build();

UpbitService service = retrofit.create(UpbitService.class);
Call<List<Map<String, Object>>> call = service.getTicker("KRW-BTC");
List<Map<String, Object>> response = call.execute().body();
System.out.println(response);

  1. Java 표준 HttpClient (Java 11+)

Java 11 이상에서 내장되는 표준 HTTP 클라이언트로, 별도의 외부 라이브러리 설치 없이 REST API 연동이 가능합니다. HTTP/2, 비동기, 동기 모두 지원하며 간단한 REST 연동 시 간편하게 사용할 수 있습니다. WebSocket도 지원하나 사용법은 상대적으로 복잡합니다.

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
  	.uri(URI.create("https://api.upbit.com/v1/ticker?markets=KRW-BTC"))
		.header("accept", "application/json")
    .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.WebSocket;
import java.util.concurrent.CompletionStage;

HttpClient client = HttpClient.newHttpClient();
WebSocket webSocket = client.newWebSocketBuilder()
    .buildAsync(URI.create("wss://api.upbit.com/websocket/v1"), new WebSocket.Listener() {
        @Override
        public void onOpen(WebSocket webSocket) {
            String subscribeMessage = "[{\"ticket\":\"test\"},{\"type\":\"ticker\",\"codes\":[\"KRW-BTC\"]}]";
            webSocket.sendText(subscribeMessage, true);
            WebSocket.Listener.super.onOpen(webSocket);
        }
        @Override
        public CompletionStage<?> onText(WebSocket webSocket, CharSequence data, boolean last) {
            System.out.println("Received: " + data);
            return WebSocket.Listener.super.onText(webSocket, data, last);
        }
        @Override
        public void onError(WebSocket webSocket, Throwable error) {
            error.printStackTrace();
        }
    }).join();

Did this page help you?
※ This English version is a translation of the original Korean version of the Upbit Developer Center, generated using a third-party tool. In the event of any discrepancies, the Korean version shall take precedence.