← 블로그로 돌아가기
#Linear#프로젝트관리#이슈트래킹#API#MCP#1인개발

Linear 실전 가이드: 혼자서도 체계적으로 — 1인 개발자를 위한 프로젝트 관리

·15분 읽기
TL;DR
  • Linear는 Jira보다 10배 빠르고 Notion보다 체계적인 이슈 트래킹 도구다. 1인 개발자에게 딱 맞는 규모다.
  • 키보드 퍼스트 UI와 사이클(2주 스프린트) 기반 개발로 혼자서도 프로와 같은 개발 리듬을 만들 수 있다.
  • @linear/sdk + GraphQL API + Webhook으로 자동화 파이프라인을 구축할 수 있다.
  • Linear MCP 서버로 Claude Code에서 직접 이슈를 생성·조회·업데이트할 수 있다.
  • 무료 플랜으로도 250개 이슈까지 쓸 수 있어 초기 1인 개발자에게 충분하다.

Jira는 무겁고, Notion은 느리고, GitHub Issues는 부족하다

1인 개발자로 프로젝트를 관리하다 보면 이 세 가지 도구 중 하나에서 막히는 순간이 온다.

Jira를 쓰면 설정하는 데만 하루가 걸린다. 워크플로우, 보드, 스프린트 설정, 권한 관리... 혼자 쓰는데 팀 협업 도구의 무게를 다 짊어져야 한다. 페이지 하나 로딩하는 데 3초씩 걸리는 건 덤이다.

Notion을 쓰면 처음엔 자유도가 매력적이다. 하지만 이슈가 100개를 넘어가면 데이터베이스가 느려지고, 필터를 걸 때마다 짜증이 쌓인다. 이슈 트래킹에 최적화된 도구가 아니라 범용 노트 앱이기 때문이다.

GitHub Issues는 코드와 가깝다는 장점이 있지만 로드맵, 우선순위 관리, 사이클 기반 개발 흐름을 만들기엔 너무 단순하다. 백로그가 200개를 넘으면 관리가 안 된다.

Linear는 이 세 가지 고통을 모두 해결하기 위해 설계됐다. 2019년 Karri Saarinen이 만든 이 도구는 "개발자가 싫어하는 프로젝트 관리 소프트웨어를 다시 만든다"는 목표로 시작했다. 그 결과는 놀랍다.


Linear가 뭔가: 빠름, 키보드, 사이클

Linear의 첫인상은 속도다. 앱을 열었을 때 즉각 반응하는 UI, 이슈를 만들 때 C 한 번으로 열리는 모달, 상태를 바꿀 때 S를 누르면 뜨는 단축키 팔레트. 모든 인터렉션이 50ms 이하로 반응한다. Jira나 Notion에서 5초씩 기다리던 경험이 있다면 처음 쓸 때 충격을 받는다.

핵심 철학: 키보드 퍼스트

Linear는 마우스 없이도 모든 작업을 할 수 있게 설계됐다. 자주 쓰는 단축키만 외워도 속도가 2배 이상 빨라진다.

💡TIP

Linear 필수 단축키 모음

  • C — 새 이슈 생성
  • E — 이슈 편집
  • S — 상태 변경
  • A — 담당자 지정
  • P — 우선순위 변경
  • L — 레이블 추가
  • Cmd+K — 커맨드 팔레트 (뭐든지)
  • G then I — 이슈 목록으로 이동
  • G then B — 백로그로 이동
  • G then C — 현재 사이클로 이동
  • ? — 단축키 전체 목록

커맨드 팔레트(Cmd+K)는 무엇이든 검색하고 실행할 수 있다. 이슈 검색, 팀 이동, 뷰 필터, 설정 변경까지 키보드에서 손을 떼지 않아도 된다.

사이클 기반 개발 리듬

Linear의 가장 강력한 기능 중 하나는 Cycles다. 2주짜리 스프린트처럼 현재 집중할 이슈를 묶어서 관리한다. 백로그에서 이번 사이클에 할 것을 골라 넣고, 사이클이 끝나면 미완성 이슈가 자동으로 다음 사이클로 넘어가거나 백로그로 돌아간다.

혼자 개발할 때 특히 유용하다. "이번 주에 이것만 한다"는 경계를 명확히 만들어주기 때문이다. 백로그에 200개 이슈가 있어도 사이클에는 10개만 집중하면 된다.


핵심 기능 파헤치기

Issues: 이슈 그 이상

Linear의 이슈는 단순한 할일 목록이 아니다. 각 이슈에는 다음이 붙는다.

  • 상태: Backlog → Todo → In Progress → In Review → Done → Canceled
  • 우선순위: No Priority, Urgent, High, Medium, Low
  • 레이블: 커스터마이징 가능한 태그 시스템
  • 관계: blocks, blocked by, duplicate, related
  • 서브이슈: 큰 이슈를 작은 이슈로 분해
  • 에스티메이트: 시간 또는 스토리 포인트
  • 코멘트 + 멘션: 혼자 써도 스스로 메모 남기기에 좋다

이슈 ID는 팀 접두사가 붙는다. 내 팀 이름이 DEVDEV-1, DEV-2 식으로 자동 번호가 붙는다. GitHub PR 설명에 Fixes DEV-42를 쓰면 PR이 머지될 때 이슈가 자동으로 Done으로 바뀐다.

Projects: 이슈 묶기

프로젝트는 연관된 이슈를 하나의 목표로 묶는 컨테이너다. "v2.0 출시", "결제 시스템 도입", "SEO 개선" 같은 큰 단위의 목표를 만들고 하위 이슈들을 모아서 진행 상황을 %로 추적한다.

Roadmap: 로드맵 시각화

타임라인 뷰에서 프로젝트들의 시작일과 목표일을 설정하고 Gantt 차트처럼 볼 수 있다. 1인 개발자라도 "다음 3개월에 뭘 할 건지" 시각적으로 볼 수 있으면 방향이 잡힌다.

Triage: 들어오는 것 정리

외부에서 버그 리포트나 기능 요청이 들어올 때 Triage 큐에 쌓인다. 직접 확인하고 실제 이슈로 전환하거나 취소할 수 있다. 이메일 인테그레이션이나 웹훅으로 자동화하면 고객 피드백이 자동으로 트리아지 큐에 쌓이게 만들 수 있다.

Views: 나만의 보기

Linear는 여러 보기 옵션을 제공한다.

  • Board: Kanban 보드
  • List: 일반 목록
  • Table: 스프레드시트처럼
  • My Issues: 내가 담당한 이슈만

커스텀 View를 만들면 특정 조건의 이슈만 저장해서 볼 수 있다. "이번 사이클 + 우선순위 High 이상 + 내 담당" 같은 필터를 저장해두면 매번 필터를 다시 설정할 필요 없다.

GitHub 연동

Linear에서 가장 유용한 연동은 GitHub이다. 설정하면 다음이 가능하다.

  • PR 생성 시 연결된 이슈 자동 링크
  • 브랜치 이름을 이슈 ID 기반으로 자동 생성 (feature/dev-42-user-auth)
  • PR 머지 시 이슈 상태 자동 업데이트
  • 커밋 메시지에 이슈 ID 포함 시 자동 참조

설정은 간단하다. Linear → Settings → Integrations → GitHub에서 OAuth로 연결하면 끝이다.


API & SDK: 자동화의 시작

Linear는 개발자 친화적인 API를 제공한다. REST가 아닌 GraphQL을 쓰기 때문에 필요한 데이터만 정확히 요청할 수 있다.

@linear/sdk 설치

npm install @linear/sdk
import { LinearClient } from "@linear/sdk";

const client = new LinearClient({
  apiKey: process.env.LINEAR_API_KEY,
});

// 내 이슈 가져오기
const me = await client.viewer;
const myIssues = await me.assignedIssues();

for (const issue of myIssues.nodes) {
  console.log(`${issue.identifier}: ${issue.title} [${issue.state?.name}]`);
}

API 키는 Linear → Settings → API → Personal API Keys에서 발급받는다.

이슈 생성 자동화

// 새 이슈 생성
const issuePayload = await client.createIssue({
  teamId: "TEAM_ID",
  title: "결제 페이지 버그 수정",
  description: "모바일에서 결제 버튼이 클릭되지 않는 문제",
  priority: 2, // 0=None, 1=Urgent, 2=High, 3=Medium, 4=Low
  labelIds: ["LABEL_ID"],
});

const issue = await issuePayload.issue;
console.log(`이슈 생성됨: ${issue?.identifier}`);

GraphQL API 직접 사용

더 복잡한 쿼리가 필요하면 GraphQL을 직접 쓸 수 있다.

const query = `
  query {
    issues(
      filter: {
        state: { type: { eq: "started" } }
        assignee: { isMe: { eq: true } }
      }
    ) {
      nodes {
        identifier
        title
        priority
        state { name }
        cycle { number }
      }
    }
  }
`;

const result = await client.client.rawRequest(query);

Webhooks

이슈가 생성·업데이트·완료될 때 외부 서비스에 알림을 보낼 수 있다. Linear → Settings → API → Webhooks에서 URL과 이벤트 타입을 설정한다.

// Express webhook 핸들러
app.post("/linear-webhook", (req, res) => {
  const { action, type, data } = req.body;

  if (type === "Issue" && action === "create") {
    console.log(`새 이슈: ${data.title}`);
    // Slack DM, Discord 알림, 이메일 등 원하는 액션
  }

  res.sendStatus(200);
});

실용적인 자동화 예시:

  • 이슈가 Done이 되면 Discord 채널에 완료 알림
  • 특정 레이블이 붙은 이슈가 생성되면 즉시 Slack 알림
  • 사이클이 끝날 때 완료된 이슈 목록을 이메일로 정리

AI 에이전트 연동: Linear MCP 서버

Linear는 공식 MCP(Model Context Protocol) 서버를 제공한다. Claude Code에서 자연어로 Linear를 조작할 수 있다.

MCP 설정

Claude Desktop이나 Claude Code를 사용한다면 MCP 설정 파일에 Linear를 추가한다.

{
  "mcpServers": {
    "linear": {
      "command": "npx",
      "args": ["-y", "linear-mcp"],
      "env": {
        "LINEAR_API_KEY": "your-api-key-here"
      }
    }
  }
}

Claude Code에서 할 수 있는 것

MCP가 설정되면 Claude Code에서 이런 것들이 가능해진다.

이슈 생성: "DEV 팀에 로그인 페이지 CSRF 취약점 이슈를 High 우선순위로 만들어줘. 레이블은 security로."

이슈 조회: "이번 사이클에 내가 담당한 In Progress 이슈 목록 보여줘."

상태 업데이트: "DEV-87 이슈를 Done으로 변경하고 코멘트에 '프로덕션 배포 완료'라고 남겨줘."

백로그 정리: "1달 이상 업데이트 없는 Low 우선순위 이슈들 목록 보여줘. 정리가 필요한 것 같아."

코드를 작성하다가 새로운 버그를 발견하면 에디터를 떠나지 않고 Claude에게 "방금 찾은 버그 이슈로 만들어줘"라고 하면 된다. 컨텍스트 스위칭이 줄어든다.

💡TIP

MCP 연동 시 주의사항

Linear MCP에서 이슈 description의 줄바꿈은 \n 이스케이프 시퀀스가 아닌 실제 줄바꿈으로 처리해야 한다. Claude에게 멀티라인 description을 요청할 때 이 점을 명시하면 포맷이 깔끔하게 들어간다.

또한 create_issue, update_issue 같은 write 도구들은 읽기 도구보다 권한이 높다. API 키 발급 시 필요한 권한만 부여하는 것을 권장한다.

코드 리뷰와 이슈 연결

GitHub Actions와 조합하면 강력해진다. PR이 열릴 때 Linear 이슈를 자동으로 In Review 상태로 바꾸고, 머지되면 Done으로 바꾸는 워크플로우다.

# .github/workflows/linear-sync.yml
name: Linear Sync
on:
  pull_request:
    types: [opened, closed]

jobs:
  sync:
    runs-on: ubuntu-latest
    steps:
      - name: Extract Linear issue ID
        id: extract
        run: |
          ISSUE_ID=$(echo "${{ github.head_ref }}" | grep -oE '[A-Z]+-[0-9]+')
          echo "issue_id=$ISSUE_ID" >> $GITHUB_OUTPUT

      - name: Update Linear issue state
        if: steps.extract.outputs.issue_id != ''
        run: |
          # Linear API로 상태 업데이트
          # PR opened → In Review, PR merged → Done

1인 개발자 워크플로우

이론보다 실전이다. 혼자 쓸 때 실제로 효과 있는 루틴을 공유한다.

주간 사이클 세팅

월요일 아침 (15분):

  1. 지난 사이클 회고: 완료된 것 체크, 미완성 이슈 검토
  2. 새 사이클 시작: 백로그에서 이번 주 할 것 10개 이내로 선별
  3. 우선순위 재정비: Urgent/High만 사이클에, 나머지는 백로그로

매일 아침 (5분):

  1. 오늘 할 이슈 2-3개 선택
  2. In Progress로 이동
  3. 작업 시작

매일 저녁 (5분):

  1. 완료한 이슈 Done으로 이동
  2. 중단된 이슈에 코멘트로 컨텍스트 메모
  3. 내일 계속할 이슈 확인

백로그 관리

백로그가 방치되면 쓸모없는 이슈 무덤이 된다. 월 1회 "백로그 그루밍"을 한다.

  • 3개월 이상 업데이트 없고 Low 우선순위 → Canceled
  • 더 이상 필요 없는 이슈 → Canceled
  • 실제 작업 계획 있는 이슈 → 사이클에 추가 예약

Linear에서 Filter → Created date: older than 3 months + Priority: Low로 필터하면 정리할 이슈들이 한 번에 보인다.

버그 수집 자동화

프로덕션에서 에러가 발생하면 Linear 이슈가 자동으로 생성되게 만들 수 있다. Sentry, Datadog 같은 에러 모니터링 도구들이 Linear와 공식 연동을 지원한다. 새벽에 에러가 터져도 아침에 출근하면 이미 이슈가 만들어져 있다.

Sentry 연동이 없다면 직접 만들 수 있다.

// 에러 핸들러에 Linear 연동
async function reportErrorToLinear(error, context) {
  const client = new LinearClient({ apiKey: process.env.LINEAR_API_KEY });

  await client.createIssue({
    teamId: process.env.LINEAR_TEAM_ID,
    title: `[자동] ${error.message}`,
    description: `
**에러**: ${error.stack}

**컨텍스트**:
${JSON.stringify(context, null, 2)}

**발생 시각**: ${new Date().toISOString()}
    `,
    priority: 2, // High
    labelIds: [process.env.LINEAR_BUG_LABEL_ID],
  });
}

가격 비교

도구무료 플랜유료 시작가1인 개발자 적합도
Linear250 이슈$8/월⭐⭐⭐⭐⭐
Jira10명 무료$8.15/월/인⭐⭐ (너무 무거움)
Asana15개 프로젝트 제한$10.99/월/인⭐⭐⭐
Notion기능 제한$10/월/인⭐⭐⭐ (이슈 트래킹엔 부족)
GitHub Issues무제한GitHub Pro 포함⭐⭐⭐ (단순함)

Linear Free 플랜으로 할 수 있는 것:

  • 250개 이슈 (생성/완료 합계가 아닌 현재 열린 이슈 기준)
  • 사이클, 프로젝트, 로드맵 모두 사용 가능
  • GitHub 연동 가능
  • API 사용 가능

250개 이슈면 초기 1인 개발자에게는 충분하다. 이슈를 완료하면 숫자가 줄기 때문에 의미 없는 이슈를 쌓아두지 않고 정리하는 습관도 생긴다.

**Standard 플랜 ($8/월)**이 필요한 시점:

  • 이슈 한도를 초과할 때
  • 어드밴스드 인사이트(번다운 차트, 사이클 통계)가 필요할 때
  • 게스트 접근이 필요할 때 (고객에게 이슈 공유 등)
ℹ️INFO

팀과 함께 쓴다면

Linear는 팀 규모에 따라 합리적인 가격을 유지한다. 2-5명 초기 팀이라면 Standard 플랜 $8/월/인이 Jira($8.15/월/인)보다 저렴하면서 속도는 훨씬 빠르다. 팀이 커질수록 Linear의 속도 이점이 더 크게 느껴진다는 것이 사용자들의 공통된 반응이다.


AI 에이전트 시대에 Linear가 더 강력한 이유

지금까지는 사람이 이슈를 만들고, 상태를 바꾸고, 백로그를 정리했다. 하지만 MCP와 API가 있으면 AI 에이전트가 이 작업을 대신할 수 있다.

시나리오 1: 자동 이슈 생성 코드 리뷰 중 Claude가 잠재적 버그를 발견했다면 그 자리에서 Linear 이슈를 만든다. 개발자는 리뷰에 집중하고, 이슈 관리는 에이전트가 처리한다.

시나리오 2: 주간 리포트 자동화 매주 금요일 Claude에게 "이번 주 완료된 이슈와 다음 주 계획을 요약해서 Slack에 보내줘"라고 시키면 된다. Linear API로 데이터를 가져오고, 포맷해서 Slack webhook으로 보내는 건 15분이면 만들 수 있다.

시나리오 3: 기술 부채 추적 코드베이스를 분석하면서 발견한 TODO 주석, 임시 구현, 성능 문제를 자동으로 Linear 이슈로 변환한다. // TODO: refactor this가 실제 이슈 DEV-143: 결제 로직 리팩토링이 되는 것이다.


시작하는 방법

  1. linear.app에서 무료 계정 생성
  2. 팀 이름 설정 (이슈 ID 접두사가 된다. DEV, APP, WEB 등)
  3. GitHub 연동 설정 (Settings → Integrations → GitHub)
  4. 첫 이슈 몇 개 만들어보기 (C를 눌러서)
  5. 현재 진행 중인 작업을 사이클에 넣기
  6. API 키 발급하고 간단한 자동화 하나 만들기

처음부터 완벽한 워크플로우를 만들려고 하지 말자. 이슈 생성하고 상태 바꾸는 것부터 시작하면 된다. 2주 쓰다 보면 자연스럽게 자신만의 패턴이 생긴다.

Linear는 무거운 프로세스를 강요하지 않는다. 쓰는 만큼만 쓰면 된다. 혼자 쓸 때는 사이클과 이슈만으로도 충분하다. 팀이 생기면 프로젝트와 로드맵을 추가하면 된다. 도구가 개발자의 흐름을 방해하지 않는 것, 그게 Linear의 핵심 가치다.

AI 에이전트와 함께 쓰는 시대에 Linear는 단순한 이슈 트래커를 넘어 개발 워크플로우의 중심 허브가 된다. API와 MCP 덕분에 에이전트가 접근할 수 있고, 빠른 UI 덕분에 사람도 방해받지 않는다. 1인 개발자가 프로답게 일하기 위한 최선의 선택이다.

도구를 알았으면 이제 만들 차례

AI 코파운더와 함께 30일 안에 아이디어를 검증하고 첫 유저를 만나보세요.

무료로 시작하기