모듈 3 — 주식 현재가 시세 조회

이 모듈에서 할 일 모듈 2에서 발급받은 토큰을 사용해 삼성전자(또는 원하는 종목)의 현재가·등락률·거래량을 조회하고, 응답 JSON에서 필요한 필드만 추려 다음 모듈에서 쓰기 좋은 형태로 정리합니다. 이 모듈에서 처음으로 노드 간 데이터 전달 표현식이 등장합니다.

현재가 시세 API 응답 JSON 구조 📤 요청 (Request) GET /uapi/domestic-stock/v1/ quotations/inquire-price Headers authorization: Bearer ... appkey: PSxxxxxxxxxx appsecret: Sxxxxxxxxxx tr_id: FHKST01010100 custtype: P Query Parameters FID_COND_MRKT_DIV_CODE: J FID_INPUT_ISCD: 005930 (삼성전자) 시장구분 J=KOSPI · 종목코드 6자리 📥 응답 (Response · output 객체) { "rt_cd" : "0", // 성공 "output" : { "stck_prpr" : "75300" 현재가 "acml_vol" : "12345678" 누적거래량 "prdy_vrss" : "1500" 전일대비 "prdy_ctrt" : "2.03" 등락률 % "stck_oprc" : "73900" 시가 "stck_hgpr" : "75500" 고가 "stck_lwpr" : "73800" 저가 ... (200+ 필드) } } 파란색 = 가격 핵심필드 · 코랄색 = 거래량 (다음 모듈에서 사용)

현재가 시세 API 요청·응답 구조


0. 이 모듈의 흐름

flowchart TD
    A[1.API 문서 읽기] --> B[2.HTTP Request1<br/>추가]
    B --> C[3.Method·URL]
    C --> D[4.Query Parameters]
    D --> E[5.Headers<br/>토큰 전달]
    E --> F[6.실행·응답 해석]
    F --> G[7.Edit Fields<br/>필드 정제]
    G --> H[8.검증]

이번 모듈을 마치면 워크플로는 4개 노드가 됩니다.

flowchart TD
    A[Schedule Trigger] --> B[HTTP Request<br/>토큰]
    B --> C[HTTP Request1<br/>현재가]
    C --> D[Edit Fields<br/>5개 필드]

1. API 문서 읽기 — 호출하기 전에 먼저 알아야 할 것

1.1 왜 문서를 먼저 읽어야 하나요?

API 호출은 빈칸 채우기 시험과 비슷합니다. URL·헤더·쿼리·바디 각 칸에 정확한 값을 채워야 정상 응답이 옵니다. 어떤 칸이 있는지, 무엇이 필수인지는 API 문서에만 적혀 있습니다.

1.2 어디로 가나요?

🌐 한국투자 Open API 개발자센터: apiportal.koreainvestment.com

다음 경로로 들어갑니다.

[API 문서] → [국내주식] 기본시세 → [주식현재가 시세]
flowchart TD
    A[API 문서] --> B[OAuth인증]
    A --> C[국내주식 주문·계좌]
    A --> D[국내주식 기본시세]
    D --> E[주식현재가 시세<br/>v1_국내주식-008]
    D --> F[주식현재가 시세2]
    D --> G[주식현재가 체결]
    D --> H[국내주식기간별시세<br/>모듈 4용]

[주식현재가 시세] 페이지를 클릭하면 호출에 필요한 모든 정보가 표 형태로 정리되어 있습니다.

1.3 문서에서 확인할 4가지 영역

flowchart TD
    A[API 문서 페이지] --> B[기본정보<br/>Method·URL·TR ID]
    A --> C[Header<br/>인증·식별 정보]
    A --> D[Query Parameters<br/>조회 조건]
    A --> E[응답<br/>받게 될 데이터]
영역 확인할 것 본 모듈에서 사용
기본정보 Method, URL, TR ID, Format URL과 TR ID가 핵심
Header content-type·authorization·appkey 등 6개 필수 모두 입력
Query Parameters 시장 코드·종목 코드 2개 모두 입력
응답 (Body) 어떤 필드로 데이터가 오는지 Edit Fields 단계에서 사용

1.4 문서에서 본 모듈 핵심 정보

항목
Method GET
실전 URL /uapi/domestic-stock/v1/quotations/inquire-price
실전 Domain https://openapi.koreainvestment.com:9443
모의 Domain https://openapivts.koreainvestment.com:29443
실전 TR ID FHKST01010100
모의 TR ID FHKST01010100 (동일)
Format JSON
Content-Type application/json; charset=utf-8

💡 TR ID란? 한투 API가 어떤 거래(Transaction)를 처리하는지 구분하는 코드입니다. 같은 URL이라도 TR ID에 따라 처리 로직이 달라질 수 있습니다. 본 강의에서 사용하는 시세 조회 TR ID는 실전·모의가 같지만, 주문 API는 실전·모의 TR ID가 다릅니다.

⚠️ 함정 — Required 컬럼 문서의 Header·Query Parameters 표에 Required 컬럼이 있습니다. Y로 표시된 항목은 필수입니다. 본 강의는 필수 항목만 입력합니다(N 항목은 선택).


2. HTTP Request1 노드 추가

2.1 어디에 추가하나요?

캔버스에서 모듈 2의 HTTP Request 노드(토큰 발급용) 우측 [+] 아이콘을 클릭합니다.

검색창에 "http" 입력 → [HTTP Request] 선택

n8n이 자동으로 노드 이름을 HTTP Request1로 부여합니다(첫 번째 HTTP Request 노드는 그대로 “HTTP Request”).

2.2 노드 이름 그대로 둡니다

⚠️ 함정 — 노드 이름 변경 시 표현식 수정 필요 n8n 표현식은 노드 이름으로 다른 노드의 데이터를 참조합니다. 본 강의는 HTTP Request·HTTP Request1 같은 기본 이름을 그대로 사용합니다. 만약 이름을 바꾼다면 모든 표현식의 노드명도 같이 바꿔야 합니다.

2.3 워크플로 위치 확인

flowchart TD
    A[Schedule Trigger] --> B[HTTP Request<br/>POST 토큰]
    B --> C[HTTP Request1<br/>GET 현재가<br/>← 지금 추가]

3. Method와 URL 설정

3.1 Method를 GET으로

필드
Method GET

토큰 발급(POST)과 달리 시세 조회는 데이터를 가져오는 동작이라 GET을 사용합니다.

3.2 URL 입력

🔀 환경별 URL 모듈 2에서 선택한 환경에 맞는 URL을 사용하세요. 도메인·포트만 다르고 경로(/uapi/domestic-stock/...)는 동일합니다.

환경 URL
🟢 실전 https://openapi.koreainvestment.com:9443/uapi/domestic-stock/v1/quotations/inquire-price
🟡 모의 https://openapivts.koreainvestment.com:29443/uapi/domestic-stock/v1/quotations/inquire-price

3.3 URL 구조 분해

flowchart TD
    A[전체 URL] --> B[Domain<br/>openapi.koreainvestment.com:9443]
    A --> C[경로]
    C --> D[/uapi/domestic-stock]
    C --> E[/v1]
    C --> F[/quotations]
    C --> G[/inquire-price]
경로 부분 의미
/uapi Open API 진입점
/domestic-stock 국내 주식 카테고리
/v1 API 버전
/quotations 시세 관련
/inquire-price 현재가 조회 엔드포인트

이 구조 덕분에 다른 시세 API의 URL도 짐작이 가능합니다. 예를 들어 모듈 4의 기간별 시세는 /inquire-daily-itemchartprice로 끝납니다.

3.4 Authentication 유지

필드
Authentication None

모듈 2와 마찬가지로 None입니다. 인증은 헤더에 토큰을 넣어 처리합니다.


4. Query Parameters 설정

4.1 Query Parameters란?

URL 끝에 ?key=value&key2=value2 형태로 붙는 조회 조건입니다. n8n은 별도 입력 필드로 받아서 자동으로 URL 끝에 붙여줍니다.

flowchart TD
    A[기본 URL] --> B[+ Query Parameters]
    B --> C[?FID_COND_MRKT_DIV_CODE=J<br/>&FID_INPUT_ISCD=005930]
    C --> D[전체 URL 완성]

4.2 Send Query Parameters 토글 ON

기본은 비활성입니다. 토글을 ON으로 바꿉니다.

4.3 Specify Query Parameters 방식

필드
Specify Query Parameters Using Fields Below

폼처럼 Name·Value 쌍으로 입력합니다.

4.4 [Add Parameter]로 2개 필드 만들기

[Add Parameter] 버튼을 2번 눌러 다음 2개 필드를 만듭니다.

# Name Value 의미
1 FID_COND_MRKT_DIV_CODE J 시장 분류 코드
2 FID_INPUT_ISCD 005930 종목코드

4.5 시장 분류 코드 J·NX·UN

flowchart TD
    A[FID_COND_MRKT_DIV_CODE] --> B[J<br/>KRX 한국거래소]
    A --> C[NX<br/>NXT 넥스트레이드]
    A --> D[UN<br/>KRX+NXT 통합]
    B --> E[코스피·코스닥<br/>대부분 종목]
    C --> F[ATS<br/>일부 종목만]
    D --> G[시세조회만 가능<br/>주문은 제한]
코드 의미 사용 빈도
J KRX (한국거래소·코스피·코스닥) 본 강의 기본
NX NXT (넥스트레이드·ATS 대체거래소) 일부 종목만
UN KRX + NXT 통합 통합 시세 조회용

💡 일반 개인 투자자가 보는 코스피·코스닥 종목은 모두 J입니다. NXT는 2025년 등장한 대체거래소로, 일부 종목에 한해 거래되며, 일반적인 종목 모니터링에는 거의 사용하지 않습니다.

4.6 종목 코드 입력

FID_INPUT_ISCD는 6자리 종목 코드입니다.

종목 코드
삼성전자 005930
SK하이닉스 000660
LG에너지솔루션 373220
카카오 035720
네이버 035420

⚠️ 함정 — 앞 0 누락 종목코드는 항상 6자리입니다. 삼성전자를 5930으로 입력하면 오류납니다. 반드시 005930처럼 앞에 0을 채워주세요.

💡 ETN 종목 입력 ETN은 6자리 코드 앞에 Q를 붙여 7자리로 입력합니다(예: Q500001). 본 강의는 일반 주식만 다루므로 신경 쓸 필요 없습니다.

체크포인트 3-1 Query Parameters 영역에 2개 필드(FID_COND_MRKT_DIV_CODE=J, FID_INPUT_ISCD=005930)가 채워졌나요?


5. Headers 설정 — 가장 중요한 단계

5.1 왜 Header가 중요한가?

이전 노드(토큰 발급)에서 받은 access_token을 이 노드의 헤더에 전달하는 것이 본 모듈의 핵심입니다. 이 연결이 안 되면 다음 모든 모듈이 작동하지 않습니다.

flowchart TD
    A[HTTP Request<br/>토큰 발급] --> B[output<br/>access_token]
    B --> C[HTTP Request1<br/>현재가 조회]
    C --> D[Header<br/>authorization]
    D --> E[Bearer eyJ0eXAi...]

5.2 Send Headers 토글 ON

토글을 ON으로 바꿉니다.

필드
Specify Headers Using Fields Below

5.3 [Add Parameter]로 6개 필드 만들기

문서에서 Required = Y인 항목만 입력합니다. 총 6개입니다.

# Name Value 비고
1 content-type application/json; charset=utf-8 문서 명시값 그대로
2 authorization Bearer {{ $node["HTTP Request"].json["access_token"] }} 표현식 — 다음 절 상세
3 appkey (App Key) 모듈 1에서 발급받은 값
4 appsecret (App Secret) 모듈 1에서 발급받은 값
5 tr_id FHKST01010100 실전·모의 공통
6 custtype P P=개인, B=법인

5.4 authorization 필드 상세 — 표현식 첫 등장

이 강의에서 처음 등장하는 n8n 표현식입니다. 차분히 읽어주세요.

5.4.1 입력해야 할 정확한 값

Bearer {{ $node["HTTP Request"].json["access_token"] }}

⚠️ 하나도 빠뜨리지 마세요

  • Bearer 다음에 공백 한 칸
  • {{ ... }} 중괄호 두 개씩
  • $node 앞에 달러 기호 필수
  • "HTTP Request" 양쪽 쌍따옴표
  • 문자열 사이에 공백·줄바꿈 없음

5.4.2 각 부분의 의미

flowchart TD
    A[Bearer] --> B[OAuth 표준 접두사]
    C["{{ }}"] --> D[표현식 시작·종료]
    E[$node] --> F[다른 노드 참조]
    G["HTTP Request"] --> H[참조할 노드 이름]
    I[.json] --> J[그 노드 출력의 JSON]
    K[access_token] --> L[가져올 필드명]
부분 의미
Bearer OAuth 표준 인증 스키마 — 이 토큰을 가진 사람을 인증된 사용자로 간주
{{ }} n8n 표현식 구분자. 중괄호 안은 JavaScript 코드처럼 평가됨
$node 다른 노드의 출력을 참조하는 키워드
["HTTP Request"] 참조할 노드의 이름
.json 노드 출력의 JSON 본문
["access_token"] JSON에서 꺼낼 키

5.4.3 Fixed mode와 Expression mode

n8n의 Value 입력 칸은 두 모드가 있습니다.

flowchart TD
    A[Value 입력 칸] --> B[Fixed mode<br/>고정 텍스트]
    A --> C[Expression mode<br/>표현식]
    B --> D[그대로 보냄]
    C --> E["{{ }}안의 코드 평가"]
모드 표시 사용
Fixed 일반 텍스트 입력 정적 값 (App Key 등)
Expression fx 아이콘 표시 동적 값 (토큰 등)

authorization Value 칸 좌측의 fx 아이콘을 클릭하면 Expression mode로 전환됩니다. Expression mode 상태에서 위 표현식을 입력하세요. 정상 인식되면 입력 칸 아래에 현재 평가된 결과가 회색으로 미리 보입니다.

Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...

5.4.4 더 짧은 버전도 가능

다음 두 표현식은 결과가 동일합니다.

{{ $node["HTTP Request"].json["access_token"] }}
{{ $node["HTTP Request"].json.access_token }}
형태 특징
["access_token"] 키에 특수문자·공백이 있어도 안전
.access_token 짧고 읽기 좋음

본 강의는 가독성을 위해 점 표기(.access_token)를 권장합니다.

체크포인트 3-2 authorization 필드 아래에 Bearer eyJ0eXAi...로 시작하는 회색 미리보기가 표시되나요? 표시되면 표현식이 정상입니다.

5.5 나머지 5개 필드

5.5.1 content-type

application/json; charset=utf-8

; 다음 공백 한 칸을 지우지 마세요. 문서 명시값 그대로입니다.

5.5.2 appkey·appsecret

모듈 1에서 발급받은 값을 그대로 입력합니다. Fixed mode입니다.

5.5.3 tr_id

환경
🟢 실전 FHKST01010100
🟡 모의 FHKST01010100

💡 현재가 조회는 환경 공통 시세 조회 API의 TR ID는 실전·모의가 동일합니다. 모듈 4(기간별 시세)도 동일하지만, 주문·잔고 등 거래 API는 환경별로 다릅니다. 본 강의의 시세 조회 범위에서는 환경 간 TR ID 차이가 없습니다.

5.5.4 custtype

의미
P 개인 (Personal)
B 법인 (Business)

본 강의는 개인 계좌 기준이므로 P입니다.


6. 노드 실행과 응답 해석

6.1 [Execute step] 클릭

설정이 모두 끝났으면 노드 패널 우측 상단의 [Execute step]을 클릭합니다.

6.2 정상 응답의 모양

OUTPUT의 Schema 탭에서 다음 구조를 확인할 수 있습니다.

flowchart TD
    A[output1 = 1 item] --> B[rt_cd<br/>0=성공]
    A --> C[msg_cd<br/>응답코드]
    A --> D[msg1<br/>응답메시지]
    A --> E[output<br/>실제 시세 데이터]
    E --> F[stck_prpr<br/>주식 현재가]
    E --> G[prdy_ctrt<br/>전일 대비율]
    E --> H[acml_vol<br/>누적 거래량]
    E --> I[기타 50+ 필드]

6.3 응답 필드가 너무 많아서 당황하지 마세요

응답에는 50개 이상의 필드가 있습니다. 모두 알 필요는 없습니다. 본 강의에서 사용하는 것은 다음 4개뿐입니다.

응답 필드 한글명 우리가 만들 이름
output.stck_shrn_iscd 종목 단축 코드 종목코드
output.stck_prpr 주식 현재가 현재가
output.prdy_ctrt 전일 대비율 등락률
output.acml_vol 누적 거래량 오늘거래량

6.4 응답 필드 이름 해독법

한투 API 응답 필드는 약어로 되어 있어 처음엔 어렵습니다. 패턴을 알면 추측할 수 있습니다.

flowchart TD
    A[필드명 패턴] --> B[stck_<br/>주식 stock]
    A --> C[prdy_<br/>전일 previous day]
    A --> D[d250_<br/>250일]
    A --> E[w52_<br/>52주]
    A --> F[acml_<br/>누적 accumulated]
    A --> G[hgpr<br/>고가 high price]
    A --> H[lwpr<br/>저가 low price]
약어
stck stock (주식)
prpr present price (현재가)
prdy previous day (전일)
ctrt contract rate (등락률)
acml accumulated (누적)
vol volume (거래량)
hgpr high price (고가)
lwpr low price (저가)
d250 250일
w52 52주

조합 예시:

  • stck_prpr = stock present price = 현재가
  • prdy_ctrt = previous day contract rate = 전일 대비 등락률
  • w52_hgpr = 52주 고가
  • acml_vol = 누적 거래량

응답 필드 이름이 외계어처럼 보였다면, 이 패턴을 한 번만 외워두면 됩니다.

6.5 응답에서 가장 자주 쓰는 필드들

필드 의미 단위
stck_prpr 현재가
prdy_vrss 전일 대비 (가격)
prdy_vrss_sign 등락 부호 (1=상한, 2=상승, 3=보합, 4=하한, 5=하락) -
prdy_ctrt 전일 대비율 %
acml_vol 누적 거래량
acml_tr_pbmn 누적 거래 대금
stck_oprc 시가
stck_hgpr 당일 고가
stck_lwpr 당일 저가
per PER
pbr PBR
eps EPS
bps BPS

본 강의 범위 밖이지만, PER·PBR·EPS·BPS도 응답에 포함되어 있어 확장 분석에 활용 가능합니다.

6.6 검증 체크리스트

체크포인트 3-3 다음 4가지가 모두 충족되면 호출이 정상입니다.

  • OUTPUT에 output1이 표시된다
  • rt_cd 값이 0이다 (성공)
  • msg1 값이 정상처리되었습니다. 류이다
  • output.stck_prpr에 현재가가 들어 있다

6.7 시간대에 따른 값 차이

flowchart TD
    A[조회 시점] --> B[장중 09:00~15:30]
    A --> C[장 마감 직후]
    A --> D[장 종료 후]
    B --> E[실시간 가격 변동]
    C --> F[종가 확정 중]
    D --> G[당일 종가 고정]
시점 stck_prpr의 의미
장중 마지막 체결가 (실시간 변동)
장 마감 후 당일 종가
다음 날 장 시작 전 어제 종가

본 강의 워크플로는 16:00에 호출하므로 당일 종가를 받게 됩니다.


7. Edit Fields 노드 추가 — 응답 정제

7.1 왜 정제가 필요한가?

응답에 50개 이상의 필드가 있어 그대로 다음 노드로 흘려보내면 워크플로가 복잡해집니다. 필요한 5개만 골라 깔끔한 형태로 만들어 다음 모듈에 넘깁니다.

flowchart TD
    A[원본 응답<br/>50+ 필드] --> B[Edit Fields<br/>5개로 정제]
    B --> C[종목코드]
    B --> D[현재가]
    B --> E[등락률]
    B --> F[오늘거래량]
    B --> G[날짜]

7.2 노드 추가

HTTP Request1 우측 [+] → 검색 edit fields[Edit Fields] 선택. n8n 버전에 따라 Set이라는 이름일 수도 있습니다(같은 노드).

7.3 Mode 설정

필드
Mode Manual Mapping

7.4 [Add Field]로 5개 필드 만들기

각 필드는 이름(Name), 타입(Type), 값(Value) 3가지로 구성됩니다.

# Name Type Value (Expression)
1 종목코드 String {{ $json.output.stck_shrn_iscd }}
2 현재가 Number {{ $json.output.stck_prpr }}
3 등락률 Number {{ $json.output.prdy_ctrt }}
4 오늘거래량 Number {{ $json.output.acml_vol }}
5 날짜 String {{ new Date().toISOString().slice(0, 10) }}

7.5 표현식 변형 — $node vs $json

지난 절(Header 설정)에서 $node["HTTP Request"]를 썼는데, 여기서는 $json만 씁니다. 차이는 다음과 같습니다.

flowchart TD
    A["$json"] --> B[바로 직전 노드<br/>출력]
    C["$node 노드명"] --> D[지정한 이름의<br/>노드 출력]
    B --> E[Edit Fields는<br/>HTTP Request1 다음]
    E --> F["$json = HTTP Request1"]
표현식 의미 사용 시점
$json 바로 직전 노드의 출력 일반적
$node["이름"] 특정 이름의 노드 출력 직전이 아닌 다른 노드 참조 시

Edit Fields 노드의 직전 노드는 HTTP Request1(현재가 조회)이므로 $json은 그 출력을 가리킵니다.

⚠️ 함정 — 같은 표현식이 모듈 2 토큰을 가리키지 않습니다 토큰을 참조하려면 직전이 아니므로 $node["HTTP Request"]를 써야 합니다. 본 모듈에서는 토큰 참조가 필요 없으므로 $json만 씁니다.

7.6 타입을 Number로 지정해야 하는 이유

flowchart TD
    A[원본 응답] --> B["문자열 117000"]
    B --> C[Number 타입 강제]
    C --> D[숫자 117000]
    D --> E[모듈 4에서<br/>나눗셈 계산 가능]

응답의 stck_prpr문자열로 옵니다("117000"). 그대로 두면 다음 모듈에서 나누기·곱하기 같은 산술 연산이 안 되거나 문자열 결합으로 처리됩니다.

필드 타입 이유
종목코드 String 005930의 앞 0이 보존되려면 문자열
현재가 Number 차후 비교·계산
등락률 Number 차후 비교·계산
오늘거래량 Number 모듈 4에서 평균거래량과 나눗셈
날짜 String 2026-05-03 같은 텍스트

오늘거래량을 Number로 지정하지 않으면 모듈 5의 거래량 비율 계산이 동작하지 않습니다. 가장 자주 빠뜨리는 함정입니다.

7.7 날짜 표현식 풀이

{{ new Date().toISOString().slice(0, 10) }}
flowchart TD
    A["new Date()"] --> B[현재 시각<br/>객체]
    B --> C["toISOString()"]
    C --> D["2026-05-03T14:30:25.123Z"]
    D --> E["slice(0, 10)"]
    E --> F["2026-05-03"]
단계 결과 예시
new Date() 현재 시각 객체
.toISOString() 2026-05-03T14:30:25.123Z
.slice(0, 10) 2026-05-03

왜 ISO 문자열인가? 정렬 가능하고, 나라마다 형식이 달라 혼란스러운 5/3/26 같은 표현 대신 표준 형식(YYYY-MM-DD)을 쓰기 위함입니다.

⚠️ 함정 — UTC 자정 부근 toISOString()UTC 기준입니다. 한국 시간 09:00 이전이면 UTC 기준 어제 날짜가 나올 수 있습니다. 본 강의 워크플로는 16:00 실행이라 문제없지만, 새벽에 수동 실행하면 어제 날짜가 잡힐 수 있습니다.

7.8 [Execute step] 후 결과

필드 예시 값
종목코드 005930
현재가 117000
등락률 5.31
오늘거래량 34018174
날짜 2026-05-03

체크포인트 3-4 Edit Fields의 OUTPUT에 정확히 5개 필드가 표시되고, 현재가·등락률·오늘거래량 옆에 # 아이콘(Number 타입 표시)이 보이나요? 종목코드·날짜 옆은 AB(String) 아이콘이어야 합니다.


8. 워크플로 현재 상태

이 모듈을 완료하면 워크플로는 4개 노드입니다.

flowchart TD
    A[Schedule Trigger] --> B[HTTP Request<br/>POST 토큰]
    B --> C[HTTP Request1<br/>GET 현재가]
    C --> D[Edit Fields<br/>5개 필드]

다음 모듈에서 Edit Fields 뒤에 HTTP Request2(기간별 시세 35일)와 Code in JavaScript(평균거래량 계산)를 붙입니다.


9. 다른 종목으로 바꿔보기 — 학습 도전

9.1 1분 도전

Query Parameters의 FID_INPUT_ISCD 값만 바꾸고 [Execute step]을 다시 누르면 다른 종목 시세가 즉시 조회됩니다.

종목 코드 예상 현재가 (참고용)
SK하이닉스 000660 시점에 따라 변동
LG에너지솔루션 373220 시점에 따라 변동
카카오 035720 시점에 따라 변동
네이버 035420 시점에 따라 변동
셀트리온 068270 시점에 따라 변동

9.2 종목 코드 찾는 법

한국거래소 또는 증권사 HTS의 종목 검색에서 6자리 코드를 확인할 수 있습니다. 또는 Q + 종목명 검색으로 빠르게 찾을 수 있습니다.

💡 검증 팁 익숙한 종목으로 호출해보고, 응답의 현재가가 실제 시세(네이버 금융·다음 금융 등)와 일치하는지 확인하면 워크플로가 제대로 동작하는지 빠르게 검증할 수 있습니다.


10. 자주 발생하는 오류

증상 원인 해결
401 Unauthorized 토큰 누락·만료, Bearer 누락 Header authorization 필드와 표현식 재확인
403 Forbidden App Key·Secret 헤더 누락 appkey·appsecret 필드 추가
EGW00123 응답 tr_id 잘못됨 FHKST01010100 정확히 입력
output이 비어있음 종목코드 잘못 (0 누락 등) 6자리 코드 확인
Number 타입인데 NaN 응답 필드 경로 오타 $json.output.stck_prpr 경로 확인
날짜가 어제로 나옴 UTC 기준 자정 이전 실행 실제 운영 시간(16:00)에는 문제없음
종목코드가 5930으로 표시 Number 타입으로 지정해 앞 0 손실 String 타입으로 변경
표현식 미리보기에 [Object: ...] 경로가 객체를 가리킴 마지막 키까지 다 적었는지 확인

10.1 401 발생 시 추가 체크

flowchart TD
    A[401 발생] --> B[1.토큰 노드<br/>먼저 실행했나?]
    B --> C[2.Bearer<br/>공백 확인]
    C --> D[3.표현식 미리보기<br/>토큰 보이나?]
    D --> E[4.appkey·appsecret<br/>실전·모의 일치?]

순서가 중요합니다. HTTP Request 노드(토큰)를 먼저 실행하지 않으면 그 출력이 없으므로 표현식이 빈 값으로 평가됩니다. 캔버스에서 한 번에 모두 실행하거나, 두 노드를 순차적으로 [Execute step] 하세요.


11. 30초 점검 — 모듈 4로 넘어갈 자격

# 체크 항목 ✅/❌
3-1 HTTP Request1 노드의 Method=GET, URL이 정확하다  
3-2 Query Parameters에 시장 코드와 종목 코드를 입력했다  
3-3 Headers에 6개 필수 항목을 모두 입력했다  
3-4 authorization 표현식 미리보기에 Bearer eyJ...가 보인다  
3-5 [Execute step] 후 OUTPUT에 stck_prpr가 표시된다  
3-6 Edit Fields로 5개 필드(종목코드·현재가·등락률·오늘거래량·날짜)가 정제됐다  
3-7 현재가·등락률·오늘거래량은 Number, 종목코드·날짜는 String 타입이다  

12. 자주 묻는 질문

Q1. 토큰 표현식을 $node["HTTP Request"] 대신 더 짧게 쓸 수 있나요? 바로 직전 노드라면 $json.access_token도 가능합니다. 단 본 모듈에서 HTTP Request1의 직전은 토큰 노드이므로 $json이 작동하지만, 모듈 4에서는 직전이 Edit Fields가 되어 토큰을 참조하려면 반드시 $node["HTTP Request"]로 명시해야 합니다. 헷갈림을 피하려면 토큰 참조는 항상 $node["HTTP Request"]로 통일하는 것이 안전합니다.

Q2. 응답 필드를 더 추가하고 싶어요. 예를 들어 PER도 받아오려면? Edit Fields에 새 필드 PER을 추가하고 Type=Number, Value={{ $json.output.per }}로 입력하면 됩니다. 응답에는 PER·PBR·EPS·BPS·52주 고저가 등 다양한 정보가 이미 들어 있어 추가 호출 없이 활용 가능합니다.

Q3. 매번 [Execute step]을 누르기 번거로워요. 캔버스 우측 상단의 [Execute Workflow] 버튼을 누르면 트리거부터 끝까지 한 번에 실행됩니다. 다만 Schedule Trigger가 있는 워크플로는 수동 실행도 트리거에서 시작됩니다.

Q4. 종목명도 응답에 있나요? 직접적인 한글 종목명 필드는 없습니다. 대신 별도의 [상품기본조회] API를 호출하면 종목명을 받을 수 있습니다. 본 강의는 종목코드만 사용하지만, 실제 알림 메시지에는 한글명이 보이는 것이 좋아 모듈 6에서 다시 다룹니다.

Q5. Number 타입인데 응답값이 너무 커서 정확도를 잃지 않나요? JavaScript의 Number는 약 9,007조까지 정수를 정확히 표현합니다. 거래량(수천만~수억)·금액(수십억)은 모두 안전 범위입니다.

Q6. tr_id 표는 어디서 보나요? 한투 개발자센터의 각 API 문서 페이지 상단에 명시되어 있습니다. 시세 API는 실전·모의가 같지만, 주문·잔고는 다릅니다. 의심스러우면 항상 문서에서 재확인하세요.


13. 다음 모듈 미리보기

모듈 4 — 기간별 시세 + 평균거래량 계산

다음 모듈에서는 HTTP Request2(기간별 시세 35일)와 Code in JavaScript(평균거래량 계산) 두 노드를 추가합니다. 동적 날짜 계산(오늘 기준 35일 전), output1과 output2의 차이, JavaScript 코드로 배열 처리하는 패턴을 학습합니다.

flowchart TD
    A[모듈 3<br/>현재가 정제 완료] --> B[모듈 4<br/>HTTP Request2]
    B --> C[GET 기간별 시세]
    C --> D[35일치 일봉 데이터]
    D --> E[Code in JavaScript]
    E --> F[최근 20일<br/>평균거래량]

준비가 되었다면 모듈 4로 이동하세요.