개발오픈소스PharoSmalltalkIcebergsmalltalkCI라이브 디버깅

Pharo 14 — 운영 이미지를 바로 고치는 언어도 원본은 Git에, 디버거는 요청 하나만 세운다

· 대화 5개

Smalltalk 계열 언어 Pharo 14가 개발 도구, 명령 구조, VM을 손봐서 나왔다. 운영 중에 코드를 고치는 언어가 Git·CI와 어떻게 맞물리는지, 운영 서버에서 디버거를 열면 다른 요청도 멈추는지 짚어 봤다.

Smalltalk 계열 언어 Pharo의 14 버전 릴리스 공지를 읽었다. 운영 환경에서도 컴파일·배포 없이 바로 고친다는 소개가 눈에 띄어서, 실무에서는 어떻게 굴러가는지 이야기해 봤다. 질문은 AI가 내게 빙의해서 했다.

💬 Pharo 14 Released! Andrew Jung, Claude
2026년 10월 27일 화요일
✳
Claude
⌨️ 명령 실행

Smalltalk 계열의 순수 객체지향 언어이자 개발 환경인 Pharo 14가 10월 26일 나왔어요.

  • 개발 도구 현대화: 새 Mission Control, Spotter를 대체하는 Pulse가 들어왔고 Method Browser·Settings Browser를 다시 만들었어요.
  • 리팩터링·명령 구조 재정비: 리팩터링 명령을 하나의 명령 레지스트리로 모으고, 명령줄 테스트와 명령줄 디버거를 추가했어요.
  • 가상 머신 현대화: 실행 프레임 관리를 통합하고, RISC-V용 JIT 컴파일러와 GC 개선을 넣었어요.

이번부터 릴리스 시기를 봄(35월)에서 가을(911월)로 옮겼어요. Pharo 13 이후 본 저장소에 PR 978개를 합쳤고 이슈 616개를 닫았어요. 공지에 성능 수치나 하위 호환성이 깨지는 변경 목록은 없어요.

출처: Pharo 14 릴리스 공지

🤖 AI 빙의

운영 중에 코드를 바로 고친다면서, Git 리뷰나 CI 배포는 어떻게 맞춰 써?

✳
Claude
🔎 웹 검색⌨️ 명령 실행 ×2

Pharo는 프로그램의 실행 상태 전체를 "이미지" 파일 하나에 저장해 두고, 그 안에서 개발해요. 운영 중인 이미지를 디버거로 바로 고칠 수 있다는 건 그게 가능하다는 뜻이에요. 실무에서는 원본 코드를 보통 Git에 둬요. 이 부분은 기사에 없고, 일반적인 Pharo 관행이에요.

  • Git 연동: 이미지 안의 Iceberg로 커밋, 브랜치, 병합을 해요. 코드는 클래스마다 텍스트 파일 하나씩인 Tonel 형식으로 저장돼서, GitHub PR 리뷰를 보통 코드처럼 할 수 있어요.
  • 재현 가능한 빌드: Metacello Baseline에 의존성을 적어 두고, 깨끗한 이미지에 다시 불러와서 같은 상태를 만들어요.
  • CI: smalltalkCI가 GitHub Actions 같은 곳에서 이미지를 받아, 설정 파일(.smalltalk.ston)대로 코드를 불러오고 테스트를 돌려요. 지원 목록에 이미 Pharo64-14가 올라 있어요. 이번 버전의 명령줄 테스트·디버거도 이런 자동화에 힘을 싣는 변화예요.

실제 흐름은 이래요.

  1. 운영 이미지에서 디버거로 원인을 찾아 고쳐 봐요.
  2. 같은 변경을 Iceberg로 커밋하고 PR을 올려요.
  3. CI를 통과하면 새 이미지로 다시 배포해요.

운영 이미지만 고치고 Git에 남기지 않으면, 다음 배포 때 그 수정이 사라져요.

출처: Iceberg · smalltalkCI · Pharo 14 공지

🤖 AI 빙의

운영 서버에서 디버거를 열면 그동안 다른 요청은 다 멈춰?

✳
Claude
🔎 웹 검색 ×2⌨️ 명령 실행

기본적으로는 안 멈춰요. 디버거는 문제가 생긴 "프로세스" 하나만 세워요.

  • 그린 스레드: Pharo의 Process는 VM 안에서 돌아가는 가벼운 스레드(그린 스레드)예요. Zinc HTTP 서버는 연결마다 작업용 프로세스를 따로 띄워요. 그래서 한 요청이 디버거에 걸려 서 있어도 다른 요청은 계속 처리돼요.
  • 운영 기본값: Zinc는 오류가 나면 디버거를 띄우지 않고 500 에러로 응답해요. 디버거로 보고 싶으면 서버의 debugMode 를 켜야 해요.
  • 화면 없는 서버: TelePharo 같은 도구로 원격 이미지에 붙어요. 그러면 원격에서 난 오류를 내 PC의 디버거로 열 수 있어요.

같이 멈추는 경우

  • 멈춘 프로세스가 잠금(Mutex)이나 DB 연결을 쥐고 있으면, 그걸 기다리는 요청도 함께 서요.
  • 그린 스레드는 결국 OS 스레드 하나 위에서 돌아요. 그래서 CPU를 오래 쓰는 코드나 GC는 이미지 전체를 붙잡아요.

Zinc 동작의 근거는 대부분 몇 년 전 메일링 리스트라, 최신 버전의 세부 동작은 확인하지 못했어요. Pharo 14에 들어간 명령줄 디버거가 이런 운영 상황용인지도 공지만으로는 알 수 없어요.

출처: TelePharo · Zinc 메일링 리스트 · Pharo 14 공지

정리

이 대화, 이어서 해 보기

글 주소와 함께 질문이 채워진 채로 열립니다.