기본 콘텐츠로 건너뛰기

BitMEX API 연동을 위한 Maven pom.xml 설정 예제 (XChange + Lombok + SLF4J)

BitMEX API 연동을 위한 Maven pom.xml 설정 예제 (XChange + Lombok + SLF4J)

자바로 암호화폐 거래소(BitMEX) API에 연동하려면 가장 먼저 Maven 프로젝트 설정(pom.xml)이 제대로 잡혀 있어야 합니다. 이 글에서는 org.knowm.xchange 라이브러리를 활용해 BitMEX에 연동하는 실전 pom.xml 예제를 분석하고, 각 의존성이 어떤 역할을 하는지 자세히 설명합니다.


1. 프로젝트 개요 및 pom.xml 전체 구조

이 예제는 BitMEX 거래소 시세/주문 연동을 목표로 한 bitmexXchange라는 Maven 프로젝트의 pom.xml입니다.

  • groupId : bitmexXchange
  • artifactId : bitmexXchange
  • version : 0.0.1-SNAPSHOT (개발 중인 초기 버전)
  • build : 소스 디렉터리와 컴파일러 플러그인 설정
  • dependencies : XChange(BitMEX), Lombok, SLF4J, commons-lang3 등

즉, 이 pom.xml 하나로 BitMEX API 연동 + 로그 출력 + 유틸리티 사용을 위한 기본적인 개발 환경이 갖춰지도록 설계되어 있습니다.


2. 빌드 설정: maven-compiler-plugin과 JDK 버전


<build>
  <sourceDirectory>src</sourceDirectory>

  <plugins>
    <plugin>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.8.0</version>
      <configuration>
        <source>1.8</source>
        <target>1.8</target>
      </configuration>
    </plugin>
  </plugins>
</build>
    

빌드 섹션에서는 maven-compiler-plugin을 사용해 JDK 1.8 기준으로 컴파일이 되도록 지정하고 있습니다.

  • <source>1.8</source> : 소스 코드의 문법 버전 (Java 8)
  • <target>1.8</target> : 생성되는 바이트코드의 호환 버전
  • <sourceDirectory>src</sourceDirectory> : 소스 루트 디렉터리를 기본값(src/main/java)이 아닌 src로 사용

만약 일반적인 Maven 구조(src/main/java)를 사용한다면 sourceDirectory는 생략 가능하지만, 레거시 프로젝트나 커스텀 구조에서는 이렇게 명시적으로 지정해 줍니다.


3. XChange BitMEX 연동 관련 의존성

이 프로젝트의 핵심은 XChange 라이브러리를 이용해 BitMEX와 통신하는 것입니다. 관련 의존성은 다음과 같습니다.


<dependency>
  <groupId>org.knowm.xchange</groupId>
  <artifactId>xchange-bitcoincharts</artifactId>
  <version>4.4.1</version>
</dependency>

<dependency>
  <groupId>org.knowm.xchange</groupId>
  <artifactId>xchange-core</artifactId>
  <version>4.4.1</version>
</dependency>

<dependency>
  <groupId>org.knowm.xchange</groupId>
  <artifactId>xchange-bitmex</artifactId>
  <version>4.4.1</version>
</dependency>
    
  • xchange-core XChange의 공통 코어 모듈로, 거래소 공통 인터페이스, DTO, 유틸을 포함합니다.
  • xchange-bitmex BitMEX 전용 구현체로, BitMEX의 REST API, 마켓 데이터, 주문 체결 등을 처리하는 모듈입니다.
  • xchange-bitcoincharts 비트코인 차트 관련 데이터 제공자 연동 모듈로, 시세/차트 데이터를 활용하고 싶을 때 함께 사용합니다.

이 세 가지를 함께 추가해 두면, 코어 인터페이스 + BitMEX 구현 + 차트 데이터까지 한 번에 사용할 수 있는 구조가 됩니다.


4. 기타 공통 유틸/로그 관련 라이브러리

4-1. iBatis (ibatis-common)


<dependency>
  <groupId>com.ibatis</groupId>
  <artifactId>ibatis-common</artifactId>
  <version>1.3.1</version>
</dependency>
    

오래된 레거시 프로젝트에서 여전히 볼 수 있는 iBatis 공통 모듈입니다. 간단한 DAO 레이어나 SQL 매핑에 사용될 수 있으며, 최근 MyBatis로 넘어간 경우에도 기존 코드 호환 때문에 남아 있는 경우가 많습니다.

4-2. Lombok


<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.18.10</version>
  <scope>provided</scope>
</dependency>
    

Getter/Setter, Builder, 로그 필드 등을 자동 생성해 주는 Lombok입니다. <scope>provided</scope>로 설정되어 있어, 컴파일 시에는 필요하지만 실제 런타임 배포물에는 포함되지 않도록 되어 있습니다.

4-3. Google Collections


<dependency>
  <groupId>com.google.collections</groupId>
  <artifactId>google-collections</artifactId>
  <version>1.0-rc2</version>
</dependency>
    

Guava의 전신인 Google Collections 라이브러리입니다. 컬렉션 유틸, 불변 컬렉션 등 고급 컬렉션 기능을 제공하지만, 최근에는 Guava를 사용하는 것이 일반적입니다. 레거시 코드 호환 목적 또는 기존 유틸 의존성이 있을 때 사용합니다.

4-4. Apache Commons Lang3


<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-lang3</artifactId>
  <version>3.9</version>
</dependency>
    

문자열, 숫자, 날짜 처리 등 자바 표준 라이브러리에서 부족한 유틸 기능을 채워주는 필수급 라이브러리입니다. StringUtils, EqualsBuilder, ToStringBuilder 등은 거의 표준처럼 쓰입니다.

4-5. SLF4J 로그 설정


<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.5</version>
</dependency>

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>1.6.4</version>
</dependency>
    
  • slf4j-api : 로그 인터페이스 (LoggerFactory, Logger 등)
  • slf4j-simple : 콘솔에 간단하게 로그를 찍어주는 구현체

XChange나 기타 라이브러리에서 SLF4J를 통해 로그를 출력하므로, slf4j-api + 구현체(slf4j-simple) 세트를 같이 넣어두면 바로 콘솔 로그를 확인할 수 있습니다. 나중에 Logback, Log4j2 등으로 바꾸고 싶다면 구현체만 교체하면 됩니다.


5. BitMEX 연동용 pom.xml 전체 코드 정리

마지막으로, 위에서 설명한 내용을 포함한 전체 pom.xml 예제를 한 번에 정리합니다.


<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>bitmexXchange</groupId>
  <artifactId>bitmexXchange</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <dependencies>

    <dependency>
      <groupId>org.knowm.xchange</groupId>
      <artifactId>xchange-bitcoincharts</artifactId>
      <version>4.4.1</version>
    </dependency>

    <dependency>
      <groupId>org.knowm.xchange</groupId>
      <artifactId>xchange-core</artifactId>
      <version>4.4.1</version>
    </dependency>

    <dependency>
      <groupId>org.knowm.xchange</groupId>
      <artifactId>xchange-bitmex</artifactId>
      <version>4.4.1</version>
    </dependency>

    <dependency>
      <groupId>com.ibatis</groupId>
      <artifactId>ibatis-common</artifactId>
      <version>1.3.1</version>
    </dependency>

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.10</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>com.google.collections</groupId>
      <artifactId>google-collections</artifactId>
      <version>1.0-rc2</version>
    </dependency>

    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.9</version>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.5</version>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-simple</artifactId>
      <version>1.6.4</version>
    </dependency>

  </dependencies>

</project>
    

이 설정 그대로 Maven 프로젝트를 생성하면, BitMEX API 연동, 로그 출력, 유틸리티 활용을 위한 기본 골격이 완성됩니다. 이후에는 XChange의 Exchange, MarketDataService, TradeService 등을 사용해 실제 시세 조회·주문 로직을 구현해 나가면 됩니다.


정리하자면, 위 pom.xml은 BitMEX와 같은 암호화폐 거래소를 자바로 연동하려는 개발자가 가장 먼저 참고할 만한 실전 예제입니다. 프로젝트 성격에 맞게 JDK 버전, 라이브러리 버전, 로그 구현체 등을 조정하면 바로 트레이딩 봇·시세 수집기·모니터링 서비스 개발에 활용할 수 있습니다.

댓글

이 블로그의 인기 게시물

Java Servlet Request Parameter 완전 정복 — GET/POST 모든 파라미터 확인 & 디버깅 예제 (Request Parameter 전체보기)

Java Servlet Request Parameter 완전 정복 — GET/POST 모든 파라미터 확인 & 디버깅 예제 Java Servlet Request Parameter 완전 정복 웹 애플리케이션에서 클라이언트로부터 전달되는 Request Parameter 를 확인하는 것은 필수입니다. 이 글에서는 Java Servlet 과 JSP 에서 GET/POST 요청 파라미터를 전체 출력하고 디버깅하는 방법을 다양한 예제와 함께 소개합니다. 1. 기본 예제: getParameterNames() 사용 Enumeration<String> params = request.getParameterNames(); System.out.println("----------------------------"); while (params.hasMoreElements()){ String name = params.nextElement(); System.out.println(name + " : " + request.getParameter(name)); } System.out.println("----------------------------"); 위 코드는 요청에 포함된 모든 파라미터 이름과 값을 출력하는 기본 방법입니다. 2. HTML Form과 연동 예제 <form action="CheckParamsServlet" method="post"> 이름: <input type="text" name="username"><br> 이메일: <input type="email" name="email"><b...

PostgreSQL 달력(일별,월별)

SQL 팁: GENERATE_SERIES로 일별, 월별 날짜 목록 만들기 SQL 팁: GENERATE_SERIES 로 일별, 월별 날짜 목록 만들기 데이터베이스에서 통계 리포트를 작성하거나 비어있는 날짜 데이터를 채워야 할 때, 특정 기간의 날짜 목록이 필요할 수 있습니다. PostgreSQL과 같은 데이터베이스에서는 GENERATE_SERIES 함수를 사용하여 이 작업을 매우 간단하게 처리할 수 있습니다. 1. 🗓️ 일별 날짜 목록 생성하기 2020년 1월 1일부터 12월 31일까지의 모든 날짜를 '1 day' 간격으로 생성하는 쿼리입니다. WITH date_series AS ( SELECT DATE(GENERATE_SERIES( TO_DATE('2020-01-01', 'YYYY-MM-DD'), TO_DATE('2020-12-31', 'YYYY-MM-DD'), '1 day' )) AS DATE ) SELECT DATE FROM date_series 이 쿼리는 WITH 절(CTE)을 사용하여 date_series 라는 임시 테이블을 만들고, GENERATE_SERIES 함수로 날짜를 채웁니다. 결과 (일별 출력) 2. 📅 월별 날짜 목록 생성하기 동일한 원리로, 간격을 '1 MONTH' 로 변경하면 월별 목록을 생성할 수 있습니다. TO...

CSS로 레이어 팝업 화면 가운데 정렬하는 방법 (top·left·transform 완전 정리)

레이어 팝업 센터 정렬, 이 코드만 알면 끝 (CSS 예제 포함) 이벤트 배너나 공지사항을 띄울 때 레이어 팝업(center 정렬) 을 깔끔하게 잡는 게 생각보다 어렵습니다. 화면 크기가 변해도 가운데에 고정되고, 모바일에서도 자연스럽게 보이게 하려면 position , top , left , transform 을 정확하게 이해해야 합니다. 이 글에서는 아래 내용을 예제로 정리합니다. 레이어 팝업(center 정렬)의 기본 개념 자주 사용하는 position: absolute / fixed 정렬 방식 질문에서 주신 스타일 top: 3.25%; left: 50%; transform: translateX(-50%) 의 의미 실무에서 바로 쓰는 반응형 레이어 팝업 HTML/CSS 예제 1. 레이어 팝업(center 정렬)이란? 레이어 팝업(레이어 팝업창) 은 새 창을 띄우는 것이 아니라, 현재 페이지 위에 div 레이어를 띄워서 공지사항, 광고, 이벤트 등을 보여주는 방식을 말합니다. 검색엔진(SEO) 입장에서도 같은 페이지 안에 HTML이 존재 하기 때문에 팝업 안의 텍스트도 정상적으로 인덱싱될 수 있습니다. 즉, “레이어 팝업 센터 정렬”, “레이어 팝업 만드는 방법”과 같이 관련 키워드를 적절히 넣어주면 검색 노출에 도움이 됩니다. 2. 질문에서 주신 레이어 팝업 스타일 분석 질문에서 주신 스타일은 다음과 같습니다. <div class="layer-popup" style="width:1210px; z-index:9001; position:absolute; top:3.25%; left:50%; transform:translateX(-50%);"> 레이어 팝업 내용 <...