imple
Simple Software Developer
Click here to view the English version of the content below.

크롬 확장 프로그램 개발 시작하기

크롬 확장 프로그램(Chrome Extensions)은 브라우저의 기능을 확장하고 웹 경험을 향상시키는 강력한 도구입니다. 개발자로서 자신만의 확장 프로그램을 만드는 것은 실용적인 문제를 해결하거나 개인 워크플로우를 개선하는 좋은 방법이 될 수 있습니다. 이 글에서는 크롬 확장 프로그램 개발을 시작하는 방법부터 배포까지의 전체 과정을 안내해 드리겠습니다.

크롬 확장 프로그램이란?

크롬 확장 프로그램은 기본적으로 HTML, CSS, JavaScript로 구성된 웹 애플리케이션입니다. 일반 웹 페이지와 다른 점은 크롬 브라우저와 상호작용할 수 있는 특별한 권한과 API를 가지고 있다는 것입니다. 확장 프로그램은 다음과 같은 다양한 형태로 구현될 수 있습니다:

  • 브라우저 toolbar에 버튼 추가
  • 웹페이지 콘텐츠 수정 또는 향상
  • 개발자 도구에 기능 추가
  • 새로운 탭 페이지 커스터마이징
  • 백그라운드 작업 처리

기본 구조 이해하기

모든 크롬 확장 프로그램은 manifest.json 파일로 시작합니다. 이 파일은 확장 프로그램의 메타데이터와 필요한 권한, 사용할 리소스 등을 정의합니다. Manifest V3는 현재 권장되는 최신 버전입니다.

{
  "manifest_version": 3,
  "name": "My First Extension",
  "description": "A simple Chrome extension",
  "version": "1.0",
  "action": {
    "default_popup": "popup.html",
    "default_icon": {
      "16": "images/icon16.png",
      "48": "images/icon48.png",
      "128": "images/icon128.png"
    }
  },
  "permissions": ["storage", "activeTab"],
  "background": {
    "service_worker": "background.js"
  },
  "content_scripts": [
    {
      "matches": ["https://*.example.com/*"],
      "js": ["content.js"]
    }
  ]
}

주요 구성 요소

크롬 확장 프로그램은 다음과 같은 주요 구성 요소로 이루어집니다:

1. 팝업(Popup)

사용자가 확장 프로그램 아이콘을 클릭할 때 나타나는 UI입니다. popup.html과 연결된 JavaScript, CSS 파일로 구성됩니다.

<!-- popup.html -->
<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" href="popup.css">
  </head>
  <body>
    <h1>My Extension</h1>
    <button id="changeColor">Change Color</button>
    <script src="popup.js"></script>
  </body>
</html>

2. 백그라운드 스크립트(Background Script)

확장 프로그램의 이벤트 핸들러 역할을 하며, 브라우저가 실행되는 동안 지속적으로 또는 필요에 따라 실행됩니다.

// background.js
chrome.runtime.onInstalled.addListener(() => {
  chrome.storage.sync.set({ color: '#3aa757' });
  console.log('Default background color set to green.');
});

3. 콘텐츠 스크립트(Content Scripts)

웹 페이지의 컨텍스트에서 실행되어 페이지의 DOM에 접근하고 수정할 수 있습니다.

// content.js
// 페이지의 모든 <p> 태그 배경색을 변경
const paragraphs = document.getElementsByTagName('p');
for (let i = 0; i < paragraphs.length; i++) {
  paragraphs[i].style.backgroundColor = 'yellow';
}

4. 옵션 페이지(Options Page)

사용자가 확장 프로그램을 커스터마이징할 수 있는 설정 페이지입니다.

// manifest.json에 추가
"options_page": "options.html"

첫 번째 확장 프로그램 만들기: 웹 페이지 색상 변경기

간단한 예제로 웹 페이지의 배경색을 변경하는 확장 프로그램을 만들어 보겠습니다.

1. 프로젝트 폴더 구조 만들기

color-changer/
  ├── manifest.json
  ├── popup.html
  ├── popup.js
  ├── popup.css
  ├── content.js
  └── images/
      ├── icon16.png
      ├── icon48.png
      └── icon128.png

2. manifest.json 작성

{
  "manifest_version": 3,
  "name": "Page Color Changer",
  "description": "Change the background color of web pages",
  "version": "1.0",
  "action": {
    "default_popup": "popup.html",
    "default_icon": {
      "16": "images/icon16.png",
      "48": "images/icon48.png",
      "128": "images/icon128.png"
    }
  },
  "permissions": ["storage", "activeTab", "scripting"],
  "host_permissions": ["<all_urls>"]
}

3. popup.html 작성

<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" href="popup.css">
  </head>
  <body>
    <h2>Choose a background color:</h2>
    <div class="color-options">
      <button class="color-btn" data-color="#e8f5e9">Light Green</button>
      <button class="color-btn" data-color="#ffebee">Light Red</button>
      <button class="color-btn" data-color="#e3f2fd">Light Blue</button>
      <button class="color-btn" data-color="#ffffff">Reset</button>
    </div>
    <script src="popup.js"></script>
  </body>
</html>

4. popup.css 작성

body {
  width: 200px;
  padding: 10px;
  font-family: Arial, sans-serif;
}

h2 {
  font-size: 14px;
  margin-bottom: 10px;
}

.color-options {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.color-btn {
  padding: 6px;
  border: 1px solid #ccc;
  border-radius: 4px;
  cursor: pointer;
}

5. popup.js 작성

document.addEventListener('DOMContentLoaded', function() {
  const colorButtons = document.querySelectorAll('.color-btn');
  
  colorButtons.forEach(button => {
    button.addEventListener('click', function() {
      const color = this.dataset.color;
      
      chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
        chrome.scripting.executeScript({
          target: {tabId: tabs[0].id},
          function: changeBackgroundColor,
          args: [color]
        });
      });
    });
  });
});

function changeBackgroundColor(color) {
  document.body.style.backgroundColor = color;
}

6. 확장 프로그램 로드 및 테스트

  1. 크롬 브라우저에서 chrome://extensions로 이동
  2. 개발자 모드 활성화
  3. “압축해제된 확장 프로그램을 로드합니다” 버튼 클릭
  4. 프로젝트 폴더 선택

이제 아무 웹 페이지에 가서 확장 프로그램 아이콘을 클릭하고 색상을 선택하면 페이지 배경색이 변경됩니다!

고급 기능 구현하기

1. 저장 기능 추가

사용자가 선택한 색상을 기억하도록 Chrome Storage API를 활용할 수 있습니다.

// popup.js에 추가
chrome.storage.sync.get('lastColor', function(data) {
  if (data.lastColor) {
    // 마지막으로 선택한 색상 표시
    document.getElementById('lastUsed').style.backgroundColor = data.lastColor;
  }
});

// 색상 선택 시 저장
chrome.storage.sync.set({lastColor: color});

2. 컨텍스트 메뉴 추가

우클릭 메뉴에 옵션을 추가하려면:

// manifest.json에 권한 추가
"permissions": ["contextMenus", "storage", "activeTab", "scripting"]

// background.js
chrome.runtime.onInstalled.addListener(() => {
chrome.contextMenus.create({
id: "changeColor",
title: "Change background to blue",
contexts: ["page"]
});
});

chrome.contextMenus.onClicked.addListener((info, tab) => {
if (info.menuItemId === "changeColor") {
chrome.scripting.executeScript({
target: {tabId: tab.id},
function: () => {
document.body.style.backgroundColor = '#e3f2fd';
}
});
}
});

배포 과정

완성된 확장 프로그램을 Chrome Web Store에 배포하는 방법은 다음과 같습니다:

  1. 확장 프로그램을 zip 파일로 압축
  2. Chrome Developer Dashboard에 계정 등록 (일회성 $5 개발자 등록비 필요)
  3. “새 항목” 버튼 클릭
  4. 필요한 정보 입력 (스크린샷, 자세한 설명, 카테고리 등)
  5. zip 파일 업로드
  6. 검토 및 발행하기 버튼 클릭

심사 과정은 보통 몇 일이 소요되며, 승인되면 Chrome Web Store에 공개됩니다.

디버깅 팁

크롬 확장 프로그램 개발 시 유용한 디버깅 방법을 소개합니다:

  1. console.log()를 적극 활용하세요.
  2. 백그라운드 스크립트는 확장 프로그램 관리 페이지에서 “백그라운드 페이지 검사” 링크를 클릭하여 디버깅할 수 있습니다.
  3. 팝업은 팝업 창을 오른쪽 클릭하고 “검사”를 선택하여 디버깅할 수 있습니다.
  4. 콘텐츠 스크립트는 웹 페이지의 개발자 도구에서 디버깅할 수 있습니다.

마치며

크롬 확장 프로그램 개발은 웹 개발 기술을 활용하여 브라우저의 기능을 확장하는 재미있는 방법입니다. 이 글에서 소개한 기본 구조와 예제 코드를 바탕으로 여러분만의 아이디어를 구현해 보세요.

다음과 같은 아이디어로 시작해 볼 수 있습니다:

  • 웹 페이지의 특정 콘텐츠를 하이라이트하는 도구
  • 개발자를 위한 특정 사이트의 스타일 수정기
  • 생산성 향상을 위한 북마크 관리 도구
  • 특정 웹사이트의 사용자 경험을 개선하는 도구

행운을 빕니다! 멋진 확장 프로그램을 만들어 보세요.

imple © 2026····