Gemini CLI로 간단하고 심플하게 설명을 받는 명령어

4 min

language: ja bn de en es fr hi ko pt ru zh-cn zh-tw

안녕하세요, 무능입니다.
오랜만입니다. 에너지를 모으고 있었습니다. 농담이고 그냥 게으름을 피웠을 뿐입니다. 죄송합니다.

그래서 너무 사소한 이야기지만, Gemini CLI가 출시되어서 CLI 사용자들에게는 희소식입니다.

저는 이것만.bashrc에 넣어봤습니다.

ghelp() {
 (echo "이것을 설명해 줘" ; cat $1 ) | gemini
}

별다른 건 없지만 원래 브라우저를 한 번 거쳐서 코드 설명을 LLM에게 시키는 과정이 사라져서 편해졌습니다.
이런 경우라면
[curljs]

thepassenger:[haturatu]:~/git/curljs$ ghelp curl.js 
이 코드는 [Puppeteer](https://pptr.dev/)라는 라이브러리를 사용하여 지정된 웹 페이지의 콘텐츠를 가져오는 Node.js 스크립트입니다.

아래에 코드의 각 부분이 무엇을 하는지 설명합니다.

1.  **`const puppeteer = require('puppeteer');`**
    *   Puppeteer 라이브러리를 로드합니다. 이 라이브러리는 프로그램에서 Chrome 또는 Chromium 브라우저를 조작하는 데 사용됩니다.

2.  **`(async () => { ... })();`**
    *   이것은 '즉시 실행 비동기 함수'입니다. 코드 전체를 비동기 함수로 감싸서 내부에서 `await` 키워드를 사용할 수 있도록 합니다. `await`는 시간이 오래 걸리는 처리(브라우저 시작 또는 페이지 로드 등)가 완료될 때까지 기다리는 데 필요합니다.

3.  **`const url = process.argv[2];`**
    *   명령줄에서 전달된 세 번째 인수를 `url` 변수에 저장합니다.
    *   예: `node script.js https://example.com`과 같이 실행했을 때, `process.argv[2]`에는 `https://example.com`이 들어갑니다.

4.  **`if (!url) { ... }`**
    *   URL이 지정되지 않은 경우 오류 메시지를 표시하고, `process.exit(1)`로 스크립트를 비정상 종료시킵니다.

5.  **`const browser = await puppeteer.launch({ headless: true });`**
    *   새 브라우저 인스턴스를 시작합니다.
    *   `headless: true`는 브라우저 UI(화면)를 표시하지 않고 백그라운드에서 실행하는 설정입니다. 디버깅 시와 같이 브라우저 동작을 눈으로 확인하고 싶을 때는 `false`로 설정합니다.

6.  **`const page = await browser.newPage();`**
    *   시작된 브라우저에서 새 탭(페이지)을 엽니다.

7.  **`await page.goto(url, { waitUntil: 'networkidle2' });`**
    *   지정된 URL로 이동합니다.
    *   `waitUntil: 'networkidle2'`는 페이지 로드를 기다리기 위한 중요한 옵션입니다. 이는 네트워크 연결이 2개 이하가 된 후 500밀리초 동안 새로운 연결이 없는 상태가 될 때까지 대기합니다. JavaScript에 의해 동적으로 콘텐츠를 로드하는 현대적인 웹사이트(SPA 등)를 올바르게 표시하는 데 도움이 됩니다.

8.  **`await new Promise(resolve => setTimeout(resolve, 5000));`**
    *   페이지 로드가 완료된 후, 추가로 5초 동안 대기합니다.
    *   `networkidle2`만으로는 로드가 완료되지 않는 애니메이션이나 특정 작업 후에 표시되는 콘텐츠 등을 기다리기 위해 추가 대기 시간으로 삽입되었습니다.

9.  **`const html = await page.content();`**
    *   페이지의 완전한 HTML 콘텐츠를 가져옵니다. 여기에는 JavaScript에 의해 동적으로 생성된 모든 HTML 요소도 포함됩니다.

10. **`console.log(html);`**
    *   가져온 HTML을 콘솔에 출력합니다.

11. **`await browser.close();`**
    *   브라우저 인스턴스를 닫고 리소스를 해제합니다. 이를 잊으면 프로세스가 종료되지 않고 계속 남아있을 수 있습니다.

### 요약

이 스크립트는 **'명령줄에서 지정된 URL의 웹 페이지를 JavaScript 실행이 완료된 최종 상태로 가져와서, 그 HTML을 표준 출력으로 표시하는'** 처리를 수행합니다.

이는 단순한 HTTP 요청으로는 가져올 수 없는, JavaScript로 동적으로 렌더링되는 웹사이트(SPA 등)의 정보를 가져오고 싶을 때(웹 스크래핑 등) 매우 유용한 방법입니다.

이런 식으로 출력해 줍니다.
뭐, 그게 다지만요....

Related Posts