n8n과 Google Sheets를 활용한 자동 주식 옵션 만기일 추적 시스템 구축: 실시간 데이터 연동, 알림 설정, 그리고 포트폴리오 관리 자동화

주식 옵션 투자는 복잡하며, 만기일을 놓치는 것은 큰 손실로 이어질 수 있습니다. 이 글에서는 n8n과 Google Sheets를 연동하여 만기일을 자동으로 추적하고, 필요한 알림을 설정하며, 포트폴리오 관리를 자동화하는 시스템을 구축하는 방법을 소개합니다. 이 시스템을 통해 시간과 노력을 절약하고, 투자 결정을 더욱 정확하게 내릴 수 있습니다.

1. The Challenge / Context

주식 옵션 만기일 관리는 투자자에게 매우 중요한 과제입니다. 수많은 옵션 계약을 추적하고, 각 계약의 만기일을 기억하는 것은 쉬운 일이 아닙니다. 특히 여러 증권 계좌를 사용하는 경우, 정보가 분산되어 있어 관리가 더욱 어려워집니다. 만기일을 놓치면 옵션이 휴지 조각이 되어 막대한 손실을 볼 수 있습니다. 이러한 문제를 해결하기 위해 자동화된 시스템이 필요합니다. 기존의 스프레드시트 기반 관리 방식은 수동 업데이트에 의존하며, 오류 발생 가능성이 높습니다. 더 나아가, 실시간 데이터 연동이 어려워 최신 정보를 반영하기 어렵습니다. 따라서 자동화된 시스템은 실시간 데이터 연동, 알림 기능, 그리고 포트폴리오 관리 기능을 통합하여 제공해야 합니다.

2. Deep Dive: n8n과 Google Sheets

n8n은 노드 기반의 워크플로우 자동화 플랫폼입니다. 코딩 경험이 없어도 드래그 앤 드롭 방식으로 다양한 애플리케이션과 서비스를 연결하여 자동화된 워크플로우를 구축할 수 있습니다. n8n은 Google Sheets, API, 데이터베이스 등 다양한 데이터 소스를 지원하며, 웹훅을 통해 실시간 이벤트에 반응할 수 있습니다. 또한, 사용자 정의 함수를 사용하여 복잡한 로직을 구현할 수 있습니다.

Google Sheets는 클라우드 기반의 스프레드시트 프로그램입니다. 간편한 인터페이스와 강력한 협업 기능을 제공하며, API를 통해 외부 시스템과 연동할 수 있습니다. Google Sheets는 데이터를 저장하고 관리하는 데 사용되며, n8n 워크플로우의 데이터 소스 및 대상 역할을 수행합니다.

3. Step-by-Step Guide / Implementation

다음은 n8n과 Google Sheets를 활용하여 자동 주식 옵션 만기일 추적 시스템을 구축하는 단계별 가이드입니다.

Step 1: Google Sheets 설정

먼저, Google Sheets에 옵션 계약 정보를 저장할 스프레드시트를 생성합니다. 스프레드시트에는 다음과 같은 열이 필요합니다:

  • 티커 (Ticker)
  • 만기일 (Expiration Date)
  • 행사가격 (Strike Price)
  • 매수/매도 (Call/Put)
  • 수량 (Quantity)
  • 현재가 (Current Price)
  • 상태 (Status) - 예: "활성", "만료"

스프레드시트 ID를 기록해둡니다. 이는 n8n에서 스프레드시트에 접근하는 데 사용됩니다.

Step 2: n8n 워크플로우 생성

n8n에서 새로운 워크플로우를 생성합니다. 워크플로우는 다음과 같은 노드로 구성됩니다:

  1. Cron 노드 (Trigger): 워크플로우를 주기적으로 실행합니다. 예를 들어, 매일 아침 9시에 실행되도록 설정합니다.
  2. Google Sheets 노드 (Read): Google Sheets에서 옵션 계약 정보를 읽어옵니다. 스프레드시트 ID와 시트 이름을 지정합니다.
  3. Function 노드: 각 옵션 계약의 만기일을 확인하고, 만기일이 임박한 계약을 필터링합니다.
  4. IF 노드: 만기일이 임박한 계약이 존재하는지 확인합니다.
  5. Google Sheets 노드 (Update): 만기된 옵션의 상태를 "만료"로 업데이트합니다.
  6. Email 노드 (Send): 만기일이 임박한 옵션에 대한 알림 이메일을 보냅니다.

Step 3: Cron 노드 설정

Cron 노드를 더블 클릭하여 설정을 엽니다. "Expression" 필드에 원하는 실행 주기를 지정합니다. 예를 들어, 매일 오전 9시에 실행하려면 "0 9 * * *"를 입력합니다.

// 매일 오전 9시 실행
0 9 * * *

Step 4: Google Sheets 노드 (Read) 설정

Google Sheets 노드를 더블 클릭하여 설정을 엽니다. "Operation"을 "Get All"로 설정하고, "Spreadsheet ID" 필드에 스프레드시트 ID를 입력합니다. "Sheet Name" 필드에 시트 이름을 입력합니다. 인증 정보 (Google Sheets API credentials)를 설정해야 합니다.

Step 5: Function 노드 설정 (만기일 확인 및 필터링)

Function 노드를 더블 클릭하여 설정을 엽니다. 다음과 같은 JavaScript 코드를 입력하여 만기일을 확인하고, 만기일이 임박한 계약을 필터링합니다.

const today = new Date();
const imminentExpiration = [];

for (let i = 0; i < $input.all().length; i++) {
  const item = $input.all()[i].json;
  const expirationDate = new Date(item["만기일"]); // Google Sheets 열 이름 사용
  const daysUntilExpiration = (expirationDate - today) / (1000 * 60 * 60 * 24);

  if (daysUntilExpiration <= 7 && daysUntilExpiration >= 0 && item["상태"] !== "만료") { // 만기 7일 이내, 아직 만료되지 않은 옵션
    imminentExpiration.push(item);
  }
}

return imminentExpiration.map(item => ({json: item}));

이 코드는 Google Sheets에서 읽어온 각 옵션 계약의 만기일을 확인하고, 만기일이 7일 이내인 계약을 `imminentExpiration` 배열에 추가합니다. `daysUntilExpiration`이 0보다 작으면 이미 만료된 옵션이므로 필터링됩니다. Google Sheets의 열 이름("만기일", "상태")을 정확하게 사용해야 합니다.

Step 6: IF 노드 설정

IF 노드를 더블 클릭하여 설정을 엽니다. "Value 1"을 `$node["Function"].json.length`로 설정하고, "Operator"를 "Greater Than"으로 설정하고, "Value 2"를 "0"으로 설정합니다. 이 노드는 만기일이 임박한 계약이 존재하는 경우 다음 노드를 실행합니다.

Step 7: Google Sheets 노드 (Update) 설정

Google Sheets 노드를 더블 클릭하여 설정을 엽니다. "Operation"을 "Update"로 설정하고, "Spreadsheet ID" 필드에 스프레드시트 ID를 입력합니다. "Sheet Name" 필드에 시트 이름을 입력합니다. "Value Input Mode"를 "JSON"으로 설정합니다. 다음 JSON 구조를 사용하여 업데이트할 데이터를 지정합니다.

[
  {
    "range": "D2", // 만료된 옵션의 상태 열 (예: D2)
    "values": [["만료"]]
  }
]

주의: 실제 워크플로우에서는 만료된 각 옵션의 행을 찾아 해당 행의 "상태" 열을 업데이트해야 합니다. 이는 Function 노드를 사용하여 각 옵션의 행 번호를 추출하고, 해당 행 번호를 `range`에 동적으로 삽입해야 합니다. 예시 JSON은 단순화를 위해 하나의 행만 보여줍니다.

Step 8: Email 노드 설정

Email 노드를 더블 클릭하여 설정을 엽니다. 이메일 서버 설정을 완료하고, "To", "Subject", "Body" 필드를 채웁니다. "Body" 필드에는 만기일이 임박한 옵션 정보를 포함합니다. 예를 들어 다음과 같습니다.

<p>다음 옵션 계약의 만기일이 임박했습니다:</p>
<ul>
  <li>티커: {{$json["티커"]}}</li>
  <li>만기일: {{$json["만기일"]}}</li>
  <li>행사가격: {{$json["행사가격"]}}</li>
  <li>매수/매도: {{$json["매수/매도"]}}</li>
  <li>수량: {{$json["수량"]}}</li>
</ul>

이 코드는 각 옵션의 정보를 이메일 본문에 삽입합니다. `{{$json["티커"]}}`와 같은 표현식은 n8n에서 데이터를 동적으로 삽입하는 데 사용됩니다.

4. Real-world Use Case / Example

저는 개인적으로 이 시스템을 사용하여 옵션 투자를 관리하고 있습니다. 과거에는 스프레드시트에 수동으로 만기일을 기록하고 관리했지만, 정보가 누락되거나 업데이트를 잊어버리는 경우가 많았습니다. 이로 인해 만기일을 놓쳐 손실을 본 적도 있습니다. n8n과 Google Sheets를 연동한 후, 매일 아침 자동으로 만기일이 임박한 옵션에 대한 알림을 받게 되었습니다. 이를 통해 만기일을 놓치는 실수를 줄이고, 투자 결정을 더욱 신중하게 내릴 수 있게 되었습니다. 특히 여러 계좌에 분산된 옵션 계약을 한 곳에서 관리할 수 있다는 점이 가장 큰 장점입니다. 과거에는 스프레드시트 업데이트에 1시간 이상 소요되었지만, 이제는 자동화되어 시간을 절약할 수 있습니다. 주말에는 포트폴리오 전체를 점검하고, 필요한 경우 추가 투자를 결정하는 데 이 정보를 활용합니다.

5. Pros & Cons / Critical Analysis

  • Pros:
    • 만기일 자동 추적 및 알림: 옵션 만기일을 놓치는 실수를 방지합니다.
    • 실시간 데이터 연동: 최신 정보를 기반으로 투자 결정을 내릴 수 있습니다.
    • 포트폴리오 관리 자동화: 여러 계좌의 옵션 계약을 한 곳에서 관리할 수 있습니다.
    • 시간 절약: 수동 업데이트 작업 시간을 줄입니다.
    • 유연성 및 확장성: n8n은 다양한 애플리케이션과 연동할 수 있어 시스템을 확장하기 용이합니다.
  • Cons:
    • 초기 설정 복잡성: n8n 워크플로우를 설정하고 Google Sheets API를 연동하는 데 약간의 기술적인 지식이 필요합니다.
    • 유지 관리 필요: API 키가 만료되거나 Google Sheets의 구조가 변경될 경우 워크플로우를 업데이트해야 합니다.
    • n8n 서버 운영 비용: n8n 클라우드 서비스를 사용하거나 자체 서버를 운영하는 데 비용이 발생할 수 있습니다.
    • 데이터 보안: Google Sheets에 저장된 옵션 계약 정보에 대한 보안 관리가 필요합니다.

6. FAQ

  • Q: n8n은 무료로 사용할 수 있나요?
    A: n8n은 오픈 소스 프로젝트이며, 자체 서버에 설치하여 무료로 사용할 수 있습니다. 또한, n8n 클라우드 서비스를 유료로 사용할 수도 있습니다.
  • Q: Google Sheets API 사용량 제한이 있나요?
    A: Google Sheets API에는 사용량 제한이 있습니다. API 사용량이 많을 경우, Google Cloud Platform에서 API 사용량 제한을 늘릴 수 있습니다.
  • Q: n8n 워크플로우를 다른 사람과 공유할 수 있나요?
    A: 네, n8n 워크플로우를 JSON 파일로 내보내거나, n8n 클라우드 서비스에서 워크플로우를 공유할 수 있습니다.
  • Q: 이 시스템을 주식 포트폴리오 관리에도 사용할 수 있나요?
    A: 네, Google Sheets에 주식 보유 정보를 저장하고, n8n 워크플로우를 수정하여 주식 포트폴리오 관리에 사용할 수 있습니다.

7. Conclusion

n8n과 Google Sheets를 연동하여 자동 주식 옵션 만기일 추적 시스템을 구축하면 시간과 노력을 절약하고, 투자 결정을 더욱 정확하게 내릴 수 있습니다. 이 시스템은 옵션 투자를 효율적으로 관리하는 데 필수적인 도구입니다. 지금 바로 n8n을 설치하고, 이 가이드를 따라 워크플로우를 구축하여 자동화된 옵션 관리 시스템을 경험해보세요. n8n 공식 문서에서 더 자세한 정보를 확인할 수 있습니다.