최종 프로젝트에서 각 코인 거래소 API 데이터를 받아와야하기 때문에 우선 국내 대표 거래소 업비트, 빗썸, 코인원 거래소 API 레퍼런스를 찾아보고 비교해보았다.
1. 요청 방식
- 업비트와 빗썸의 API 레퍼런스는 비교적 유사한 구조를 가진다.
업비트 & 빗썸
- RESTful API를 기본으로 사용하며, JSON 형식의 응답을 제공
- query string 파라미터를 많이 사용함
코인원
- RESTful API 사용하지만, 몇몇 경우 POST 요청에 JSON 본문을 보내야함
- URL 구성 및 파라미터 전달 방식이 상대적으로 다름
2. 보안 방식
업비트
- HMAC-SHA512 알고리즘을 사용한 JWT 토큰 기반 인증
- 인증 키 발급 및 관리가 명확하게 정의되어 있음
JWT 간단 설명 참고자료

인증 방식
- JWT(JSON Web Token) 기반 인증을 사용합니다.
- JWT는 세 가지 구성 요소(헤더, 페이로드, 서명)를 포함하며, HMAC-SHA256으로 서명합니다.
구성
- 헤더(Header)
- alg: 서명 알고리즘(HMAC-SHA256 사용)
- type: JWT 타입
{
"alg": "HS256",
"typ": "JWT"
}
- 페이로드(Payload)
- accessKey: API 키
- nonce: 고유 요청 식별자(UUID)
- (선택)쿼리 문자열 해시 및 알고리즘 정보
{
"access_key": "your_access_key",
"nonce": "unique-uuid-string",
"query_hash": "optional-query-hash",
"query_hash_alg": "SHA512"
}
- 서명(Signature)
- header와 payload를 Base64로 인코딩한 후, 비밀 키를 사용하여 HMAC-SHA256으로 서명합니다.
- 결과:
<Base64(header)>.<Base64(payload)>.<signature>
요청 헤더
- Authorization: Bearer 형식으로 JWT 토큰을 전달합니다.
빗썸
- 업비트와 비슷하게 HMAC-SHA512 방식 사용
- 요청시 api_key와 함께 signature를 포함

인증 방식
- JWT 기반 인증을 사용하며, 업비트와 유사합니다.
- 하지만 요청 파라미터(쿼리 문자열)에 대해 SHA512 해시를 추가로 생성해야 합니다.
- alg: HMAC-SHA256 알고리즘
- tpy: JWT 타입
{
"alg": "HS256",
"typ": "JWT"
}
2. 페이로드(Payload):
- access_key: API 키
- nonce: 고유 요청 식별자(UUID 또는 밀리초 기반 타임스탬프)
- timestamp: 현재 시간(밀리초 단위)
- (선택) 쿼리 해시 정보
{
"access_key": "your_access_key",
"nonce": "unique-uuid-string",
"timestamp": 1673701000123,
"query_hash": "hashed-query-parameters",
"query_hash_alg": "SHA512"
}
3. 서명(Signature):
- JWT의 서명 부분은 업비트와 동일하게 생성됩니다.
4. 쿼리 해시(Query Hash):
- 요청 파라미터가 있을 경우, JSON 형태의 쿼리 문자열을 SHA512로 해싱하여 query_hash 필드에 추가합니다.
- 예: { "currency": "BTC" } → SHA512로 해시.
요청 헤더
- Authorization: Bearer 형식으로 JWT 토큰을 전달합니다.
코인원
- API 키와 함께 X-COINONE-PAYLOAD 헤더를 추가로 요구
- payloads는 Base64 인코딩을 통해 전달, 업비트/빗썸과 다름



인증 방식
- HMAC-SHA512 기반의 커스텀 인증 방식을 사용합니다.
- 요청 본문을 Base64로 인코딩하여 X-COINONE-PAYLOAD 헤더로 전달합니다.
- 인코딩된 Payload를 사용해 HMAC-SHA512 서명을 생성한 후, 이를 X-COINONE-SIGNATURE 헤더에 포함합니다.
1. Payload:
- 요청 본문(JSON 데이터)에 고유 nonce와 access_token을 포함합니다.
2. 서명(Signature):
- X-COINONE-PAYLOAD를 생성한 후, 비밀 키를 사용하여 HMAC-SHA512로 서명합니다.
- 생성된 서명은 X-COINONE-SIGNATURE로 전달됩니다.
요청 헤더
- X-COINONE-PAYLOAD: Base64로 인코딩된 JSON 본문.
- X-COINONE-SIGNATURE: HMAC-SHA512 서명 값.
3. 데이터 구조 및 응답
업비트
- 통일된 JSON 형식의 응답 구조를 제공하며, market 기준 데이터가 잘 정리되어 있음
1. 업비트 KRW 마켓 모든 종목 리스트

2. 업비트 특정 종목(비트코인)에 대한 원화 시세

3. 마켓 단위 모든 시세 정보

4. 업비트 KRW-BTC 마켓에 가장 최근 1분봉 1개를 요청

빗썸
- 시장별 응답 형식이 다소 단순하며, 가독성이 좋음
1. 빗썸 KRW 마켓 모든 종목 리스트

2. 빗썸 특정 종목(비트코인)에 대한 원화 시세

3. 빗썸 KRW-BTC 마켓에 가장 최근 1분봉 1개를 요청

코인원
- 응답 데이터에서 errorCode를 통해 에러를 관리하며, 상태 코드와 별도로 에러 정보를 제공
- 응답 형식이 조금 더 세분화되어 있으나, 직관성은 떨어짐
1. 코인원 KRW 마켓 모든 종목 리스트

2. 코인원 특정 종목(비트코인)에 대한 원화 시세

3. 마켓 단위 모든 시세 정보

4. 코인원 KRW-BTC 마켓에 가장 최근 1분봉 1개를 요청

코인원은 간단하게 업비트와 빗썸과 다르게 KRW 마켓의 종목의 한국이름, 영어이름으로 제공하지 않음, 빗썸은 마켓 단위 모든 종목 가격정보를 제공하고 있지 않음, 개별로 다 요청해야함, 코인원 특정 종목에 대한 원화 시세, 캔들 조회가 업비트, 빗썸이랑 조금 다름