`구글의 위기`라고 했던 것이 얼마 안된 것 같은데,

최근에는 ChatGPT 대신 Gemini를 구독한다는 사람들이 주위에 종종 있는 것을 보면 정말 구글의 저력이란 !!!

 

AI 개발자들을 위해서 제공해주는 통합 사이트를 방문해보자.

- https://ai.google.dev/ 

 

 

Gemini API 가이드 문서도 여기에서 살펴볼 수 있다.

https://ai.google.dev/gemini-api/docs 

 

 

 

Gemini API를 사용하기 위한 방법을 빠르게 살펴보도록 하자.

- https://ai.google.dev/gemini-api/docs/quickstart 

 

 

Coding Agent의 세상이기에 Skills 설치 가이드를 친절하게 알려주고 있다.

 

Skills 등록하고 Coding Agent에게 알아서 하라고 해도 되겠지만,

우리는 공부하는 입장이니 훌륭한 Human Agent가 되기 위해 하나씩 공부해보자 !!

 

① API Key

API를 사용하겠다라고 하면 제일 먼저 떠오르는 그것 !!!

API Key를 확보해야한다.

 

 

Google AI Studio에서 Key를 받을 수 있다.

- https://aistudio.google.com/app/api-keys

 

 

예전에는 GCP 설정을 포함해서 상당히 복잡했지만,

요즘은 Google AI Studio에서 너무나 편하게 제공해주고 있다.

 

② GenAI SDK

Google에서는 일단 공식적으로 6개 언어를 지원해주고 있다.

https://ai.google.dev/gemini-api/docs/quickstart 

 

 

가장 대중적인, 그리고 내가 사랑하는 Python을 기준으로 살펴보겠다.

 

그런데, Gemini API를 사용하는 방법에 대해 구글링을 하다보면,

상당히 많은 블로그 포스팅 및 가이드에서 generativeai 패키지 이야기를 하고 있다.

- https://pypi.org/project/google-generativeai/

 

 

그렇다 !!

이제는 Deprecated 된 패키지이다.

지금은 genai 패키지를 사용해야 하는 것이다.

- https://pypi.org/project/google-genai/

 

 

 

③ Hands-On

genai 패키지는 Python v3.9 이상부터 지원을 하고 있다.

개인적인 취향 + 최근 트랜드에 맞춰 uv 패키지 관리자를 사용하는 것을 기준으로 실습해보도록 하겠다.

 

> uv python list | grep cpython

 

> uv init {project} --python 3.12
> cd {project}

 

genai 패키지 설치만 하면 된다.

 

> uv add google-genai

 

환경변수로 Key값 설정 후 가이드에 있는 샘플코드를 돌려보면 잘 되는 것을 확인할 수 있다.

 

 

간단하게 살펴보았다 !!

반응형

Git을 이용해서 소스코드 버전 관리를 하며 개발을 한다고 하면서

branch와 code-review(pull-request)를 이야기하지 않으면 안될 것 같다.

 

[ Default Branch ]

Git을 처음 공부하면 기본적으로 main branch를 사용한다고 배울 것이다.

(master branch라고 하면 나이 많이 들었다고 인정하는 것이다 !!! 😅)

 

조금 더 공부하다보면 꼭 "main" 이름이 아니어도 된다는 것을 알 수 있다.

하지만, 그냥 "main"으로 정하는 것이 속편하다는 것도 알게된다.

 

그렇지만 GitHub을 사용한다면, `기본 브랜치(base branch)`를 변경하는 것이 상당히 쉽다.

 

 

 

그럼, 이렇게 설정한 default branch에는 바로 commit을 반영하지 못하고

반드시 Pull-Request를 통해서 approve 받은 내역만 merge가 되도록 설정을 해보자.

 

(오해는 하지 말아야 한다. 반드시 default branch에 대해서만 이렇게 할 수 있는 것은 아니다 !!!)

 

 

[ Branch protection rules ]

Repository의 Settings 메뉴 중 `Branches` 부분을 살펴보도록 하자.

 

 

기존 방식의 `Add classic branch protection rule` 항목이 아직도 보이지만,

현재 새로 힘을 주고 있는 rulesets 방식으로 살펴보도록 하자.

 

`Add branch ruleset` 버튼을 누르고 왼쪽 메뉴를 보면

`Rules` 항목으로 점프한 것을 볼 수 있을 것이다.

 

요즘 GitHub에서 Rules 부분으로 뭔가 다 모으고 있다.

 

 

`Rulesets` 항목이 여러가지인데,

지금 우리가 진행하는 항목은 `branch ruleset`이다.

 

Ruleset 이름은 편하게 지어주면 되고,

이렇게 만들어진 ruleset은 활성화 여부를 선택할 수 있다. (Enforcement status)

 

사용자들의 다양한 요구사항이 있어서인지

왠지 기존에 GitHub에서 잘 반영해주지 않던 Bypass와 같은 옵션도 추가가 되어 있다.

 

다음으로

어떤 branch에 지금 ruleset을 적용할 것인지 선택해보자.

 

 

pattern을 지원해주면서 정말 자유도가 확! 올라갔다.

지금은 그냐 default branch로 정하고 진행해보자.

 

 

한동안 살펴보지 않은 동안에, 정말 신기하고(?) 요상한 옵션들이 많이 생겼다. 공부 많이 해야할 것 같다😥

 

지금 중요한 옵션은 `Require a pull request before merging` 이다 !!!

 

 

다행히 예전(classic ?) 옵션들과 크게 바뀌지 않았다.

`Required approvals` 부분을 1 이상 값으로 넣어버리자 !!!

 

 

형상관리(소스코드 버전 관리)에서 가장 해로운 행위인 `force push` !!!

기본적으로 설정되어 있는 `Block force pushes` 옵션은 꼭 유지하자 !!!

 

이렇게 해서 만들게 되면 아래와 같이 Rulesets이 저장된다.

 

 

 

[ Practice ]

이렇게 적용하면 어떻게 되는지 살펴보자.

 

기존에 하듯이 commit 작성 후 `main` branch에 push를 하면 reject을 당한다.

 

 

코드리뷰(pull-request)를 받지 않은 commit을 집어넣으려고 하니 거절을 하는 것이다.

 

 

새로운 branch를 만들어서 그렇게 집어넣으면 이것은 잘 들어간다.

이렇게 되면 GitHub에서는 pull-request를 할거냐고 묻게 된다.

 

 

당연히 Pull-Request 생성하면 된다 !!

 

 

이렇게 만들어지면 앞에서 만든 Ruleset에 의해 제약이 걸리게 된다.

 

 

빨간 딱지들을 잘 봐야 한다.

리뷰를 반드시 받아야 하며(approve), 지금은 조건을 충족하지 못했기에 merge가 막혀있다 !!!

 

어?! 그런데, 어떻게 하지!?

나는 Pull-Request를 만든 사람이기에 approval을 할 수가 없다 😅

 

 

다른 누군가가 도와줘야 한다 😍

 

 

혼자서는 ... 코드리뷰를 동반한 S/W개발은 팀으로 해야하는 것이다 !!! ㅋ

 

혼자서라도 어떻게든 되도록 하고자 한다면,

`Required approvals` 값을 0으로 해야 한다.

 

AI Agent 세상에서 코드 리뷰의 필요성은 더욱 더 커졌다.

- 사람이 작성한 코드에 대한 AI 코드 리뷰

- AI가 작성한 코드에 대한 사람의 코드 리뷰

 

이러한 프로세스를 강제화 하고 자동화 하기 위한 기본 개발환경 설정을 살펴보았습니다.

반응형

"한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다."

 

정말 고맙게도 2026년 서평단에 또 선발되었다. `한빛미디어` 정말 사랑해요 !!! 😍

하지만, 개인적으로 조금 아쉬운 점은 올해 부터는 종이책이 아니라 전자책(이북)으로 책을 제공받는다.

쌓여가는 책들을 바라보는 것이 나의 행복이었는데 ... 😥

그래도 우수리뷰어로 3번 선발되면 종이책을 받을 수 있다니까, 열심히 해봐야겠다 !!! 😁

 

이번에 살펴볼 책은 "누구나 아는 나만 모르는 제미나이" 이다.

이북이다보니 모니터 화면으로 책 표지를 찍어어야 했다 😅

 

 

사실 책 표지가 개인적인 취향이 아니었지만(좀 더 예쁘게 만들어주시지 😋),

간만에 정말 보기 편한 내 입맛에 딱 맞는 책이었다. 그런데 !!!

 

 

이 책이 가장 마음에 드는 이유가 설마, 내 나이가 ... 내 나이가 ... 이런 ... 흑 ... 흑 ... 😥

 

그렇지만, 이 부분을 보고 오해를 하면 안된다 !!!

큰 부담없이 편하게 볼 수 있는 접근성이 좋은 책이라는 이야기이지, 나이든 사람만을 위한 책이라는 말이 아니다 !!!

 


책 제목 부분을 잘 살펴보면 보일텐데 "누", "나"라는 부분이 부각되어 있다.

이 책의 저자가 바로 57만 구독자를 갖고 있는 유튜버 "누나IT" 이다. 나도 오며 가며 여러번 봤던 컨텐츠의 주인공이라니...

 

IT유투버이니만큼 이 책과 관련해서도 컨텐츠를 제공해주고 있다.

  - https://www.youtube.com/playlist?list=PLBkBo__arIECXOtt1EK7NkzZ7Ga9aQvQn

 

 

그런데, 사람들에 따라서 "어?! 나는 ChatGPT 쓰니까 굳이 제미나이까지 살펴봐야 하나?"라는 식으로 생각할 수도 있다.

제미나이 외에도 ChatGPT를 비롯해서 Claude라던지, Perplexity라던지 다른 AI 도구들을 많이 사용할테니 말이다.

 

하지만, 제미나이는 무려 우리 구글님이 제공해주는 도구이다.

다른 도구들을 사용하더라도 편하게 접근할 수 있도록 무료 등급으로도 큰 불편함 없이 사용할 수 있고,

유튜브, 캘린더, 지메일 등의 온갖 구글 생태계에 있는 도구들과의 연계성이 정말 훌륭하기에 사용할만한 가치가 있다.

 

 

사실 나는 이미 구글을 PRO 등급으로 사용하고 있다.

하지만, 그냥 대화방 수준으로만 사용하고 있을 뿐이었다.

 

 

이 책을 보면서 배운 것이 정말 많은데,

만날 보면서도 이게 뭔지 몰랐던 ... `임시 채팅` 버튼을 이번에 처음 알게 되었다.

민감한 정보를 다룰 때, 학습에 사용되지 않으면서 자동으로 삭제되는 채팅 세션이란다.

 

 

그렇다. 사람은 배워야 한다. 🙄 (매뉴얼을 무시하면 안된다. 차근 차근 배워야 한다!)

 

다만, 이 책을 보면서 책이 나온지 얼마 되지 않았는데 벌써 UI가 달라져 버려서 마음이 아팠다.

AI 세계는 정말 너무 빨리 변한다. 쫒아가기에 버겁다.

 

책에서는 이렇게 안내를 해주셨다.

 

 

그런데, 실제 따라해보려 했더니 메뉴 위치가 바뀐 것이다.

 

 

 

그리고, 책에서 `Google Maps` 연결해서 "평점 4.5 이상 설렁탕 맛집 추천"을 할 수 있다고 해서

오늘 점심 먹을 식당을 찾아보려고 했는데,

 

안타깝게도 요즘 Google과 우리나라 지도 반출 문제로 시끄럽더니,

연결된 앱에서 `Google Maps` 항목을 찾을 수가 없었다.

 

 

어?! 그런데, 딱히 앱을 연결하지 않아도 된다 !!!

그냥 채팅창에서 프롬프트를 넣으니 그냥 된다.

 

 

그리고, AI Studio에서도 UI가 좀 바뀌었다.

Playground를 클릭하고 바로 Audio를 선택하면 된다고 나와있지만,

 

 

지금의 AI Studio에서는 오른쪽에 보이는 모델 부분을 클릭해야 한다.

 

 

그러면 Audio 관련 모델을 선택할 수 있도록 나온다.

 

 

이렇게 변경된 부분들이 있다고 해서 책의 가치가 떨어지는 것은 절대 아니다.

 

메뉴의 위치나 사용법이 약간 바뀌었을 뿐이지,

Gemini, Veo, AI Studio, Mix Board 등의 여러 구글 AI 도구들을 이용해서

무엇을 할 수 있고 어떻게 해야하는지에 대한 부분은 여전히 유효하면서 유용하다.

 

거의 매뉴얼 수준으로 Gemini의 각 기능을 설명해주고

보면서 그냥 그대로 따라하면 되는 수준으로 사용법을 설명해주고

유튜브 영상을 통해 보충 수업까지 해주는 정말 편하게 공부할 수 있는 훌륭한 책이다.

 

Gemini에 대해서 대화방처럼만 사용해본 사람들이라면

그리고 Google 생태계에 있는 도구나 서비스들을 사용하고 있는 사람이라면

이 책을 통해서 AI를 이용해 얼마나 편해질 수 있는지, 역량향상을 할 수 있는지 경험해보기 바란다.

반응형

Local LLM을 직접 띄워서 공부하려는데,

GPU를 갖고 있지 않다고 시작도 하기 전에 포기하는 분들이 의외로 많은 것 같다.

 

사실 인내심만 충분히 있다면 CPU로도 맛보기는 가능한데도 이를 모르는 경우도 많은 것 같고,

 

또 하나! 우리의 구글님께서는 아름다운 Colab을 무료로 제공해주고 있기에

이를 이용하면 어지간한 그래픽카드에서도 어려운 모델들을 이용할 수 있게 된다.

 

[ Gemma ]

이번에 사용해볼 모델은 구글님이 우리에게 은혜를 내려주신 Gemma 이다.

https://deepmind.google/models/gemma/

 

 

구글님이 상업적으로도 사용할 수 있도록 `open-weights`로 공개해준 모델로써,

그다지 많은 인기가 높지는 않지만 구글님이 꾸준히 신경써주셔서 성능도 어지간히 나오는 괜찮은 모델이다.

 

다양한 유형의 다양한 크기 모델을 제공해주기 때문에, 상황에 맞게 골라서 사용하면 된다.

- https://ai.google.dev/gemma/docs/get_started?hl=ko

 

 

다만, 상업용으로도 사용할 수 있는 괜찮은 라이선스 조건이지만

일반적인 라이선스 유형은 아니고 'Gemma License'라는 특화된 라이선스이기에 주의를 하기는 해야 한다.

 

[ Ollama ]

LLM 모델을 serving하기 위해서는 사실 공부해야할 것도 많고,

 vLLM이나 SGLang같은 솔루션들을 살펴보고 이를 실행해야하는 등 어려움이 많다.

 

하지만, Local LLM을 사용하는 사람들을 위해 은혜로운 솔루션이 등장했으니,

그것이 바로 Ollama이다 !!! 그것도 MIT 라이선스로 !!!

https://ollama.com/

 

 

사용법은 더 이상 쉬운 방법이 없을 정도이다.

홈페이지에서의 가이드도 너무나 깔끔하다.

https://ollama.com/library/gemma3:12b 

 

 

[ Ollama on Colab ]

Colab에서 GPU 리소스를 사용하도록 하자.

https://colab.research.google.com/

 

 

Ollama 설치를 위해서 기본적인 패키지들을 미리 설치해주자.

!sudo apt-get install zstd lshw

 

 

Ollama 설치 자체는 너무나 쉽다.

!curl -fsSL https://ollama.com/install.sh | sh

 

 

서비스 실행은 직접 해줘야 한다.

!nohup ollama serve > ollama.log 2>&1 &

 

 

실제 실행에는 소요시간이 조금 필요하다. 2~3초 정도!?

 

여기까지만 하면 기본적인 준비는 끝이다 !!! 너무 쉽지 않은가!?

 

이제 다양한 활용 방법을 알아보자.

 

 

[ Ollama CLI ]

Gemma3 12B 모델을 이용해서 질문을 해보자.

!ollama run gemma3:12b "한국의 수도는 어디야?"

 

 

잘 대답을 하기는 하는데, 첫 실행에는 3분 정도 소요가 된다.

Gemma3 12B 모델을 다운로드 받는 것에 시간이 걸리는 것이다.

 

다시 같은 질문을 해보자.

!ollama run gemma3:12b "동탄이 어디인지 알아?"

 

 

이번에는 13초 정도만에 답변을 해준다.

 

간단한 Local LLM 사용 ... 정말 쉽지 않은가?!

 

 

[ with Python ]

Python으로 LLM을 이용하도록 해보자.

 

그렇게 하기 위해서는 우선 필요한 Local LLM 다운로드를 먼저 해야한다.

!ollama list
!ollama pull gemma3:12b

 

 

`ollama list`를 이용해서 필요한 모델이 있는지 먼저 확인을 해보고

없으면 pull을 이용해 다운로드를 받으면 된다.

 

다운로드를 받았다면 이렇게 확인이 된다.

 

 

Python을 이용해서 ollama 활용을 하기 위해서는 패키지 설치가 필요하다.

!pip install ollama

 

 

이제 준비는 모두 끝났다.

코딩을 해보자.

import ollama 

try : 
    response = ollama.generate( 
        model= "gemma3:12b" , 
        prompt= "대한민국의 제2의 수도는 어디인가요?"
     ) 
    print (response[ "response" ]) 

except Exception as e: 
    print ( f"오류가 발생했습니다: {e} " )

 

 

순차적으로 문장을 생성하는 LLM 특성을 반영해서

stream 방식으로 처리하도록 해보자.

import ollama 

try : 
    client = ollama.Client() 
    stream = client.generate( 
        model= "gemma3:12b" , 
        prompt= "대한민국의 제3의 수도는 어디인가요?" ,
        stream= True
     ) 

    print ( "Stream:" ) 
    for chunk in stream: 
        print (chunk[ 'response' ], end= '' , flush= True ) 
    print ()

except Exception as e: 
    print ( f"스트리밍 중 오류가 발생했습니다: {e} " )

 

 

 

[ REST API ]

Ollama는 실제로 REST API 방식으로 서빙이 된다.

그렇기에 `curl`을 통해서도 접근을 할 수가 있다.

!curl http://localhost:11434/api/generate -d '{ \
  "model": "gemma3:12b", \
  "prompt":"경기도의 대표 도시는 어디야?" \
}'

 

 

generate 방식 말고 chat 방식도 지원을 해준다.

!curl http://localhost:11434/api/chat -d '{ \
  "model": "gemma3:12b", \
  "messages": [ \
    { "role": "user", "content": "경기도의 대표 도시는?" } \
  ] \
}'

 

 

어!? 그렇다면,

Colab으로 서비스를 띄워놓고 내 PC에서 원격으로 사용할 수는 없을까!?

 

있다!!!! 가능하다!!!

 

 

[ ngrok ]

Colab에서 띄워놓은 서비스를 외부에서 접근할 수 있도록 하기 위해서

명시적인 주소를 하나 할당해주는 것이 필요하다.

- https://ngrok.com/

 

 

가입만 하면 무료로 사용할 수 있는 아주 아름다운 서비스이다.

하지만, 당연하게도 token 발급을 해야한다 ^^

https://dashboard.ngrok.com/get-started/your-authtoken

 

 

Colab에 어떻게 설치를 하면 좋을까!?

ngrok은 아주 친절하게 다양한 설치 방법을 제공해준다.

우리는 Download 방식으로 해보겠다.

https://ngrok.com/download/linux?tab=download

 

 

파일을 다운로드 받을 수 있는 주소를 먼저 확보해보자.

 

 

이제 Colab에서 설치를 진행하면 된다.

!wget <URL>

!tar -xvzf ngrok-v3-stable-linux-amd64.tgz ngrok

!./ngrok config add-authtoken <TOKEN>

!ollama serve & ./ngrok http 11434 --host-header="localhost:11434" --log stdout & sleep 5s && ollama run gemma3:12b

 

 

ngrok을 실행하면 URL 주소를 하나 알려준다. 메모하자.

 

 

 

[ Remote Connect with Python ]

집에 있는 내 PC에서 접근해보기 위해서 일단 Python 실행 환경을 확보하자.

최근 유행에 맞춰 `uv`를 이용해 보도록 하겠다.

> uv init gemma --python 3.12

> cd gemma

> uv add langchain_ollama

 

 

소스 코드는 단순하다.

from langchain_ollama import ChatOllama

model = ChatOllama(
       model="gemma3:12b",
       temperature=0,
       base_url="URL"
       )

response = model.invoke("대한민국의 수도는 어디야?")
print(response)

 

 

너무나 잘 된다 !!!

 

이제는 Colab에 나만의 LLM Server를 두고, 마음껏 LLM API를 사용할 수 있게 되었다 !!!

 

 

가난한 개발자의 몸부림은 계속 됩니다 !!! ^^

반응형

Google Colab을 사용하려면

Chrome 같은 브라우저를 실행하고 https://colab.research.google.com/ 사이트에 방문해야만 한다.

 

그런데, Colab을 그냥 내 PC에 설치된 VS Code에서 바로 사용할 수 있다면 얼마나 편하고 좋을까 ?!

그 방법을 알아보자 !!!

 

[ Google Colab is Coming to VS Code ]

25년 11월 13일에 구글에서는 새로운 VS Code Extexsion을 공개했다.

- https://developers.googleblog.com/en/google-colab-is-coming-to-vs-code/

 

 

귀염뽀짝한 하트가 눈길을 붙잡네!? 😅

 

구글에서 공식 배포하고 있으면서 별이 4.5개나 되는 괜찮은 평가를 받고 있는 extension 이다.

https://marketplace.visualstudio.com/items?itemName=Google.colab

 

 

공개 발표만 하고 버려둔 프로젝트가 아니라

아직 상당히 활발하게 계속 기능 추가 등 개발이 이루어지고 있다.

 

[ Install ]

VS Code가 설치되어 있다면, 편하게 extension을 설치할 수 있다.

Marketplace에서 `colab` 검색해서 설치하면 끝이다.

 

 

Jupyter Notebook 파일 하나 만들어서 불러오면 바로 살펴볼 수 있다.

 

 

그런데, 바로 사용할 수 있는 것은 아니고

어떤 kernel을 사용할 것인지 선택을 먼저 해야 한다.

 

kernel이 뭐냐면 작성한 코드를 실행해주는 환경을 의미한다.

 

[ Kernel - Local ]

먼저, 내 PC에 설치된 kernel로 선택하는 것에 대해서 알아보자.

 

`Select Kernel`을 선택하면 나오는 메뉴에서 `Python Environments…` 항목을 선택하자.

 

 

`Create Python Environment` 항목을 선택하면 새로운 Python 가상환경을 구성하도록 해주지만,

지금은 일단 전역 환경(Global Environment)으로 되어 있는 Python을 선택하자.

 

 

Colab 환경에서는 ipykernel 패키지가 필요하다.

 

 

이렇게 하면 로컬 환경에서 Colab 인터페이스를 사용할 수 있게 되지만,

사실 우리가 원하는 것은 로컬 환경이 아니라 구글의 Colab 환경을 사용하려는 것이니... 😍

 

[ Kernel - Colab(CPU) ]

kernel 부분을 클릭하면 다시 Kernel을 선택하는 메뉴가 나온다.

`Select Another Kernel...` 항목을 선택하자.

 

 

`Colab`을 선택해보자.

 

 

`Auto Connect`를 선택해보자.

 

 

Colab 인증이 필요하기에 많은 팝업창들이 뜰 것이다. 진행하면 된다.

 

 

인증 및 권한 허용을 모두 마쳤으면, `Python 3(ipykernel)`을 선택하자.

 

 

지금 내가 선택한 것이 Colab 것인지 의심이 간다면,

kernel 부분을 선택하면 확인 된다.

 

 

어?! 그런데 사실 Colab을 사용하는 중요한 이유 중의 하나는 GPU를 사용해보기 위해서인데 ...

 

 

지금 환경은 CPU 환경인 것이다 !!!

 

[ Kernel - Colab(GPU) ]

GPU를 사용할 수 있는 Kernel로 바꿔보자.

Kernel 부분을 클릭 후 `Select Another Kernel...` 항목을 선택하자.

 

 

`Colab`을 선택

 

 

이번에는 `New Colab Server` 항목을 선택해야 한다.

 

 

`GPU - T4`를 차례대로 선택하면 된다.

 

 

이렇게 만들고 있는 server의 별칭을 지어주면 된다. 귀찮으면 그냥 바로 엔터 !

 

 

이렇게 만들어진 GPU server의 kernel을 선택해주면 된다.

 

 

`!nvidia-smi` 실행해보면 GPU가 붙어 있는 리소스임을 알 수 있다.

 

 

이제, 마음껏 GPU 가지고 놀면 된다 !!!

 

[ File in Colab ]

그런데, 가지고 놀던 중 이상한(?) 상황을 만나게 되었다.

 

Notebook이 있는 디렉토리에 같이 있는 파일을 인식을 못하는 것이다.

 

 

Notebook 파일이나 텍스트 파일은 현재 로컬에 위치하고 있지만

코드를 실행하고 있는 kernel은 원격에 있는 Colab의 것을 사용하고 있기에 맞지 않는 것이다.

 

[ Settings of Colab extension ]

Colab extension의 Settings 항목을 살펴보자.

 

 

아직 한창 개발 중이라서 그런 것인지 대부분의 옵션이 Experimental 항목이다.

 

 

Terminal, Uploading 항목을 활성화 하자.

 

[ Uploading ]

직관적이다 !

로컬에 있는 파일에 오른쪽 버튼 메뉴를 살펴보면, `Upload to Colab` 항목이 있다. 선택 !

 

 

이제는 정상 동작 한다.

 

 

정말 파일이 있는지 확인해보자.

 

 

기본 파일 위치는 `/content` 디렉토리 밑이다.

업로드 잘 되어 있는 것이 보인다.

 

[ Terminal ]

Colab에 있는 server의 terminal에 접근해보자.

상단에 있는 메뉴 버튼 중 가운데에 있는 `Colab`을 선택해보자.

 

 

팝업으로 나오는 메뉴 중 `Open Terminal` 항목을 선택해보자.

 

 

서버가 한 대 생겨버렸다 !!!

 

 

정말 괜찮은 extension을 하나 찾은 것 같다.

회사에서도 사용할 수 있으면 좋겠는데 ... 집에서라도 잘 갖고 놀아야겠다.

반응형

최근 AI 에이전트를 이용하여 코딩 작업을 하면서

병렬로 동시에 여러 작업을 하는 경우에 유용한 기능으로 git worktree가 각광을 받고 있다.

 

git worktree가 어떤 기능을 제공해주는지

어떤 상황에서 필요로 하는지에 대해서 알아보고자 한다.

 

[ 준비 ]

실습을 해보기 위해서 저장소 하나를 clone 받아서 준비해보자.

 

[ 문제 상황 ]

feature-1 작업을 수행하기 위해 브랜치(branch)를 하나 생성해서 새로운 파일을 하나 만들었다고 해보자.

 

 

그런데, 갑자기 급하게 보안 이슈가 발생하여 hotfix 작업을 해야한다고 해보자.

 

feature-1 작업은 아직 진행 중이기에 commit까지 할 상황은 아니지만

지금까지 작업한 내용은 계속 보관을 하고 싶다고 하면 어떻게 해야할까?

 

[ 솔루션 #1 - new branch ]

그냥 다른 브랜치(branch)로 이동하면 되는 것 아닐까?

 

 

잠시 main 브랜치로 이동을 해보면 알겠지만,

feature-1 브랜치에서 작업하던 내용이 그대로 딸려온다.

 

여기에서 hot-fix-1 브랜치를 새로만들어도 마찬가지이다.

즉, 전에 작업하던 것을 잠시 치워놓고 다른 일을 할 수 있는 상황은 아니라는 것이다.

 

[ 솔루션 #2 - stash ]

이럴 때 가장 먼저 생각나는 방법은 `git stash` 명령어일 것이다(git 공부를 했다면 '이어야 한다'! ^^).

임시 보관이라는 말이 딱 어울리는 명령어이다.

 

 

변경 사항들을 모두 stash 명령어를 통해 따로 저장해놓으면,

현재 working directory는 깨끗해지게 된다.

 

`-u` 옵션은 추적하지 않는(untracked) 파일도 모두 stash 저장하라는 것이고,

`-m` 옵션은 stash 저장할 때 메모를 하도록 하기 위해 사용하는 것이다(여러 stash 저장 목록 구분을 위해).

 

이제 급한 hot-fix 업무를 처리한 후에

다시 돌아와서 전에 작업하던 내역을 불러와 계속 이어서 작업을 하면 되는 것이다.

 

 

그런데,

이렇게 좋은 stash 기능도 원하는 상황에 따라서는 충분하지 않을 수도 있다.

 

[ `새로운` 문제 상황 ]

`git stash` 기능이 정말 유용하긴 하지만,

만약 한 번에 하나의 작업이 아니라 동시에 여러 작업을 해야 한다고 하면 어떻게 해야할까?

 

앞서 말한 AI 에이전트가 동시에 여러 기능을 개발하도록 하고 싶은 경우,

여러 디렉토리에 각각 git clone 받아서 개발하도록 하면 될까?

그런데, 서로 개발 중인 내용을 주고 받는 것도 해야한다고 하면?

 

`stash`가 아니라 새로운 기능이 필요하다 !!!

 

[ 솔루션 #3 - worktree ]

현재 상태를 먼저 점검해보고, worktree를 사용해보자.

 

 

feature-1 브랜치에서 기존 파일 수정도 하고, 새로운 파일을 생성도 하던 중

긴급히 hot-fix를 진행해야 하는 상황에서 worktree를 사용하면 된다.

 

 

'git worktree add {디렉토리 경로} -b {새 브랜치 이름}` 형태로 사용하면 된다.

 

지정한 디렉토리 경로에 새로운 작업 공간을 마련하게 되기에

현재 디렉터리 하위 보다는 상위 경로로 지정해주는 것을 권장한다.

 

기존 branch를 사용할 때에는 `-b` 옵션을 사용하지 않아도 되지만

새로운 branch를 생성하도록 할 때에 `-b` 옵션을 사용하면 된다.

 

 

그런데, 여러 디렉토리에 각각 clone 받은 것과 어떤 차이가 있을까?

 

아래 예시를 자세히 살펴보자.

 

worktree로 생성된 hot-fix-1 작업 공간에서 새로운 작업을 하고 commit까지 했다.

`git log`를 통해서 당연히 새로운 commit까지 이력이 확인 된다.

 

그런데, 기존 디렉토리로 돌아가서 `git log`를 했는데 새로운 이력이 여기에서도 그대로 나온다.

 

 

그렇다!

worktree로 연결되어 있는 작업 공간끼리는 서로 공유 된다.

`git stash`로 잠시 저장해 놓은 이력들도 서로 공유하면서 이용할 수 있다.

 

삭제는 `git worktree remove {경로}` 명령어를 사용하면 된다.

 

 

AI 에이전트에서 이를 어떻게 활용하면 좋을지에 대해서는

각 AI 에이전트에 대해서 실습하면서 공부해보도록 하겠다.

반응형

저장소를 만든 후에 이름을 바꾸고 싶은 경우에 대해서 알아보자.

 

이번에도 저장소의 Settings 메뉴를 선택하면 된다.

 

 

제일 앞에 이름을 변경할 수 있는 부분이 보인다.

변경 후에 "Rename" 버튼만 누르면 된다.

 

 

끝났다 !!!

너무나 간단하다 !!!

 

GitHub에서 저장소 이름을 변경한다는 것은

저장소의 URL도 같이 변경된다는 것을 의미한다.

 

그러면, 저장소 이름을 변경하기 전에 이미 clone을 받은 사람은 어떻게 할까?

 

URL이 바뀌었기에 push, pull, fetch 등의 작업을 할 때 주소를 못찾게 된다 !

그렇기에 변경된 URL을 알려줘야만 한다.

 

 

바뀐 주소만 넣어주면 끝 !!! 😅

 

반응형

저장소를 생성했으면 삭제하는 방법도 알아보자.

 

삭제하고자 하는 저장소의 메뉴 중에서 Settings를 선택해보자.

 

 

제일 밑에 위치하고 있는 Delete this repository 부분을 찾으면 된다.

 

 

저장소를 삭제하면 복구가 안되기 때문에 뭔가 단계(절차)가 많다.

 

정말 삭제할 것이냐고 묻는다.

 

 

삭제하게 되면 어떤 일이 벌어지는 것인지 정말 이해하고 있냐고 묻는다.

 

 

그래도, 한 번 더 확인을 위해 번거롭지만 직접 저장소 이름을 타이핑하도록 하고 있다.

 

 

개인마다 상황이 다르겠지만, Passkey를 등록해놓은 경우 Passkey를 또 확인하고 있다.

 

 

이렇게 힘든 과정을 거쳐야지만 비로소 repository가 삭제 된다.

 

 

힘들다 !!! 😅

반응형

+ Recent posts