Pharo 14 — 운영 이미지를 바로 고치는 언어도 원본은 Git에, 디버거는 요청 하나만 세운다
Smalltalk 계열 언어 Pharo 14가 개발 도구, 명령 구조, VM을 손봐서 나왔다. 운영 중에 코드를 고치는 언어가 Git·CI와 어떻게 맞물리는지, 운영 서버에서 디버거를 열면 다른 요청도 멈추는지 짚어 봤다.
Smalltalk 계열 언어 Pharo의 14 버전 릴리스 공지를 읽었다. 운영 환경에서도 컴파일·배포 없이 바로 고친다는 소개가 눈에 띄어서, 실무에서는 어떻게 굴러가는지 이야기해 봤다. 질문은 AI가 내게 빙의해서 했다.
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 릴리스 공지
운영 중에 코드를 바로 고친다면서, Git 리뷰나 CI 배포는 어떻게 맞춰 써?
Pharo는 프로그램의 실행 상태 전체를 "이미지" 파일 하나에 저장해 두고, 그 안에서 개발해요. 운영 중인 이미지를 디버거로 바로 고칠 수 있다는 건 그게 가능하다는 뜻이에요. 실무에서는 원본 코드를 보통 Git에 둬요. 이 부분은 기사에 없고, 일반적인 Pharo 관행이에요.
- Git 연동: 이미지 안의 Iceberg로 커밋, 브랜치, 병합을 해요. 코드는 클래스마다 텍스트 파일 하나씩인 Tonel 형식으로 저장돼서, GitHub PR 리뷰를 보통 코드처럼 할 수 있어요.
- 재현 가능한 빌드: Metacello Baseline에 의존성을 적어 두고, 깨끗한 이미지에 다시 불러와서 같은 상태를 만들어요.
- CI: smalltalkCI가 GitHub Actions 같은 곳에서 이미지를 받아, 설정 파일(
.smalltalk.ston)대로 코드를 불러오고 테스트를 돌려요. 지원 목록에 이미 Pharo64-14가 올라 있어요. 이번 버전의 명령줄 테스트·디버거도 이런 자동화에 힘을 싣는 변화예요.
실제 흐름은 이래요.
- 운영 이미지에서 디버거로 원인을 찾아 고쳐 봐요.
- 같은 변경을 Iceberg로 커밋하고 PR을 올려요.
- CI를 통과하면 새 이미지로 다시 배포해요.
운영 이미지만 고치고 Git에 남기지 않으면, 다음 배포 때 그 수정이 사라져요.
출처: Iceberg · smalltalkCI · Pharo 14 공지
운영 서버에서 디버거를 열면 그동안 다른 요청은 다 멈춰?
기본적으로는 안 멈춰요. 디버거는 문제가 생긴 "프로세스" 하나만 세워요.
- 그린 스레드: Pharo의 Process는 VM 안에서 돌아가는 가벼운 스레드(그린 스레드)예요. Zinc HTTP 서버는 연결마다 작업용 프로세스를 따로 띄워요. 그래서 한 요청이 디버거에 걸려 서 있어도 다른 요청은 계속 처리돼요.
- 운영 기본값: Zinc는 오류가 나면 디버거를 띄우지 않고 500 에러로 응답해요. 디버거로 보고 싶으면 서버의
debugMode를 켜야 해요. - 화면 없는 서버: TelePharo 같은 도구로 원격 이미지에 붙어요. 그러면 원격에서 난 오류를 내 PC의 디버거로 열 수 있어요.
같이 멈추는 경우
- 멈춘 프로세스가 잠금(Mutex)이나 DB 연결을 쥐고 있으면, 그걸 기다리는 요청도 함께 서요.
- 그린 스레드는 결국 OS 스레드 하나 위에서 돌아요. 그래서 CPU를 오래 쓰는 코드나 GC는 이미지 전체를 붙잡아요.
Zinc 동작의 근거는 대부분 몇 년 전 메일링 리스트라, 최신 버전의 세부 동작은 확인하지 못했어요. Pharo 14에 들어간 명령줄 디버거가 이런 운영 상황용인지도 공지만으로는 알 수 없어요.
출처: TelePharo · Zinc 메일링 리스트 · Pharo 14 공지
정리
- Pharo 14는 개발 도구(Mission Control, Pulse), 리팩터링·명령 구조(명령 레지스트리, 명령줄 테스트·디버거), VM(프레임 통합, RISC-V JIT, GC)을 손봤고, 릴리스 시기를 가을로 옮겼다.
- 운영 이미지를 바로 고칠 수는 있지만, 원본 코드는 Git에 둔다. Iceberg로 커밋·PR을 하고, smalltalkCI로 GitHub Actions에서 테스트한 뒤 새 이미지로 배포한다.
- 디버거는 문제가 생긴 프로세스(그린 스레드) 하나만 세운다. Zinc 서버는 연결마다 프로세스를 따로 띄워서 다른 요청은 계속 처리된다.
- 다만 멈춘 프로세스가 잠금이나 DB 연결을 쥐고 있거나, CPU를 오래 쓰거나 GC가 돌면 이미지 전체가 영향을 받는다.
- Zinc 동작의 근거는 몇 년 전 메일링 리스트 자료라, 최신 버전의 세부 동작은 확인하지 못했다.
이 대화, 이어서 해 보기
글 주소와 함께 질문이 채워진 채로 열립니다.