
foot for macOS 저장소는 빠르고 가벼운 Wayland 터미널 에뮬레이터 foot를 macOS용 네이티브 앱으로 포팅한 프로젝트다. 아직 개발 중이지만 일상적으로 사용할 수 있으며, 거친 부분이 남아 있을 수 있다고 안내한다. Apple silicon과 Intel을 지원하는 유니버설 앱이며 macOS 14 이상에서 실행된다.
포트는 foot의 터미널 핵심 기능인 VT 파서, 그리드, sixel, 검색, URL 모드 등을 바꾸지 않고 플랫폼 계층만 macOS에 맞게 새로 구현했다. Wayland 컴포지터나 X11, 에뮬레이션을 사용하지 않는다. 화면은 원본과 마찬가지로 pixman을 이용해 CPU에서 렌더링한다. 프로젝트 설명에 따르면 유휴 창은 CPU를 거의 사용하지 않고 깨어남도 없으며, 메모리 사용량은 약 20MB다.
Linux 버전은 Wayland와 wl_shm 버퍼, 프레임 콜백, epoll, fontconfig·FreeType·HarfBuzz 기반 fcft, 컴포지터가 제공하는 xkbcommon 키맵, text-input-v3, Wayland 데이터 장치를 사용한다. macOS 포트는 각각 AppKit과 CALayer 콘텐츠로 쓰는 IOSurface(복사 없는 처리), 유휴 상태거나 숨겨졌을 때 멈추는 CADisplayLink, 메인 실행 루프와 통합된 kqueue, CoreText로 구현한 fcft API, macOS 키보드 배열에서 생성한 xkbcommon 키맵, NSTextInputClient(데드 키와 IME 지원), NSPasteboard로 대체한다.
설치 방법은 두 가지다. Homebrew를 사용하거나 최신 릴리스의 foot-<version>.zip을 내려받아 foot.app을 Applications로 옮기면 된다. 앱은 서명 및 공증됐으며, 최신 릴리스에서 받을 수 있다.
brew install --cask gobijan/tap/foot
앱은 Sparkle을 이용해 자체 업데이트를 지원한다. foot > Check for Updates…에서 업데이트를 확인할 수 있으며, 두 번째 실행 때 하루에 한 번 자동 확인할지 묻는다. Homebrew cask는 foot과 footclient도 $PATH에 설치한다.
빌드하려면 Xcode 또는 Xcode 명령 줄 도구와 Meson, Ninja, Bison이 필요하다. 의존성은 brew install meson ninja bison으로 설치하거나 make deps를 실행한다. 다음 명령은 앱을 빌드해 /Applications에 설치한다.
make install # builds foot.app, and installs it to /Applications
make는 디버그·릴리스 빌드 실행, 테스트, upstream 동기화, CI 등 사용 가능한 명령을 보여준다. Makefile 없이 Meson과 Ninja를 직접 실행할 수도 있다.
meson setup build --native-file macos/native.ini --buildtype=release
ninja -C build
cp -R build/macos/foot.app /Applications/
빌드 결과에는 foot과 footclient이 foot.app/Contents/MacOS/ 안에 들어간다. 설치하지 않고 시험하려면 ./build/macos/foot을 실행한다. pixman, utf8proc, xkbcommon은 모두 소스에서 빌드해 정적으로 연결하며, 결과 바이너리는 시스템 프레임워크에만 의존한다.
macOS에서는 Cmd+C와 Cmd+V로 복사·붙여넣기하고, Cmd+N으로 같은 프로세스 안에 새 창을 연다. Cmd+,는 $EDITOR에서 설정 파일을 열며, Cmd+=, Cmd+-, Cmd+0은 글자 크기를 바꾼다. Ctrl+Cmd+F는 전체 화면을 전환한다. Ctrl+Shift+C 같은 foot 자체 단축키도 계속 사용할 수 있다. 마지막 창을 닫아도 앱은 Cmd+Q를 누를 때까지 실행되고, Dock 아이콘을 누르면 새 창이 열린다. 셸에서 실행한 경우에는 Linux와 마찬가지로 마지막 창을 닫으면 foot 프로세스도 종료된다.
Option 키는 기본적으로 Mac의 일반적인 Option 키처럼 문자를 입력한다. 이를 Alt/Meta로 쓰려면 [main]에 macos-option-as-alt=left|right|both를 설정한다. 설정은 ~/.config/foot/foot.ini에서 읽으며, 새 창을 열 때 다시 읽으므로 앱을 재시작하지 않아도 변경 사항을 적용할 수 있다. 글자 크기는 다른 macOS 앱처럼 포인트 단위이며 기본 글꼴은 13pt SF Mono(monospace)다. 설치된 Nerd Fonts의 아이콘은 자동으로 사용한다.
macOS 자체 텍스트 렌더링처럼 글리프를 굵게 보정하는 글꼴 스무딩을 적용한다. 비 Retina 디스플레이에서 특히 영향을 받는다. [main]의 macos-font-smoothing-strength=0.0-1.0으로 강도를 조정하거나 macos-font-smoothing=no로 끌 수 있다. 기본 색상은 xAI의 Grok 팔레트인 Grok Night(어두운 모드)와 Grok Day(밝은 모드)다. 관련 프로젝트는 grok-build이며 Apache-2.0 라이선스다.
색상 테마는 View > Theme에서 고른다. Catppuccin, Dracula, Gruvbox, Nord, Solarized, Tokyo Night 등 80개 이상의 foot 테마와 Grok 테마가 foot.app/Contents/Resources/themes/에 포함된다. 메뉴에서 테마를 고르면 foot.ini에 include= 줄을 기록하고 나머지 설정은 유지하며, 열린 창에도 즉시 반영한다. Default Colors를 고르면 해당 줄을 제거한다. foot.ini에 직접 지정한 색상이 테마보다 우선한다. foot 형식의 테마는 iTerm2-Color-Schemes 저장소의 foot/ 디렉터리에도 있다.
기본 설정에서 foot는 시스템의 밝고 어두운 모드를 따르며, View > Theme > Follow System Appearance 또는 [main]의 macos-follow-appearance=yes로 동작한다. 이 설정은 기본값이 켜져 있다. 어두운 색만 포함한 테마는 Grok Night를, 밝은 색만 포함한 테마는 Grok Day를 대체한다. 양쪽 모드에서 같은 테마를 쓰려면 시스템 모드 따르기를 끈다. Neovim처럼 테마 변경을 요청하는 프로그램에는 모드 2031 변경을 알린다. 셸은 $PATH를 설정하도록 로그인 셸로 실행하며, TERM=foot를 사용한다. terminfo 항목은 앱에 포함되고 $TERMINFO_DIRS를 통해 검색된다.
포트는 upstream foot와의 병합이 일상적인 작업이 되도록 macOS 전용 코드를 macos/에 두고 upstream 파일은 가능한 한 적게 수정한다. 주간 GitHub 워크플로가 upstream 변경을 병합하고, 빌드와 테스트를 통과하면 pull request를 연다. 자세한 내용은 macOS 포트의 upstream 동기화 문서에 있다. 원본 foot는 Daniel Eklöf와 기여자들이 작성했으며 MIT 라이선스를 따른다. macOS 포트도 upstream 라이선스를 유지한다.
원본 foot의 기능과 설정
원본 foot는 Wayland 네이티브 터미널이며 데스크톱 환경에 종속되지 않는다. 서버·데몬 모드, 사용자가 설정하는 글꼴 대체, 실행 중 글꼴 크기와 DPI 조정, 스크롤백 검색, 키보드로 URL 열기, 컬러 이모지, text-input-v3를 통한 IME, 멀티시트, 24비트 트루컬러, 스타일·색상 밑줄, 동기화 업데이트, Sixel 이미지 표시를 지원한다. 벤치마크는 프로젝트 자료에, 성능 설명은 upstream 위키에 있다.
설정 파일은 $XDG_CONFIG_HOME/foot/foot.ini에 두며, 기본 경로는 ~/.config/foot/foot.ini다. 템플릿은 보통 /etc/xdg/foot/foot.ini나 upstream 설정 파일에서 찾을 수 있다. 자세한 설정은 foot.ini(5) 매뉴얼에 있다. 문제 해결은 upstream 위키를 참고한다.
글꼴은 FreeType으로 불러올 수 있는 것을 지원하며 비트맵 글꼴과 컬러 이모지 글꼴도 포함한다. fontconfig로 글꼴을 찾고 설정하지만, 특히 고정폭 글꼴에서 대체 글꼴 선택이 완벽하지 않을 수 있다. 요청한 글꼴이 고정폭이어도 fontconfig가 고정폭 대체 글꼴을 우선하지 않을 수 있어 사용자가 대체 글꼴을 직접 지정할 수 있다. 각 대체 글꼴의 크기와 기울임 여부도 따로 설정한다. 사용자가 지정한 대체 글꼴 어디에서도 글리프를 찾지 못하면 fontconfig 목록을 사용한다.
기본 단축키는 man foot.ini와 예제 foot.ini에서 바꿀 수 있다. 위·아래 화살표와 Page Up/Down을 이용한 스크롤백 이동에는 Shift를 붙인다. Ctrl+Shift+C는 선택한 텍스트 복사, Ctrl+Shift+V는 클립보드 붙여넣기, Shift+Insert는 기본 선택 영역 붙여넣기다. Ctrl+Shift+R은 스크롤백 검색을 시작한다. Ctrl++ 또는 Ctrl+=는 글꼴을 키우고, Ctrl+-는 줄이며, Ctrl+0은 초기화한다. Ctrl+Shift+N은 새 터미널을 연다. 셸이 OSC 7을 내보내도록 설정되어 있으면 새 창은 현재 작업 디렉터리에서 시작한다. Ctrl+Shift+O는 URL 모드, Ctrl+Shift+U는 유니코드 입력 모드다. Ctrl+Shift+Z와 Ctrl+Shift+X는 각각 이전·다음 프롬프트로 이동하며 셸 통합이 필요하다.
검색 중에는 Ctrl+R과 Ctrl+S로 각각 이전·다음 검색 결과를 찾는다. Ctrl+W는 현재 선택 영역을 단어 끝까지, 또는 커서가 단어 사이 문자에 있으면 다음 단어까지 늘린다. Ctrl+Shift+W는 공백만 단어 구분자로 취급한다. Ctrl+V, Ctrl+Shift+V, Ctrl+Y, XF86Paste는 클립보드 내용을 검색 입력란에 붙이고 Shift+Insert는 기본 선택 영역에서 붙인다. Escape 또는 Ctrl+G는 검색을 취소하며, Return은 검색을 마치고 현재 결과를 기본 선택 영역에 복사한다.
URL 모드에서는 현재 보이는 URL에 밑줄을 긋고 각 URL에 키 입력으로 선택하는 점프 레이블을 붙인다. Ctrl+Shift+O가 기본 진입 단축키다. t는 레이블에 URL을 표시할지 전환한다. Escape, Ctrl+C, Ctrl+G, Ctrl+D는 URL을 열지 않고 모드를 종료한다. URL을 여는 기본 동작은 xdg-open이며 url-launch로 바꿀 수 있다. show-urls-copy를 설정하면 URL을 여는 대신 클립보드에 복사할 수 있지만 기본적으로 단축키가 지정되어 있지 않다. 단축키, 레이블 색, URL 밑줄 색, 레이블에 쓸 문자도 설정할 수 있다.
마우스로 왼쪽 버튼을 한 번 누르고 끌면 텍스트를 선택하며, 버튼을 놓으면 기본 선택 영역에 복사한다. 클라이언트가 마우스 추적을 켠 경우에는 이 기능이 비활성화되고 Shift를 누르면 선택할 수 있다. Ctrl을 누른 채 선택하면 블록 선택을 한다. 두 번 클릭하면 포인터 아래 단어를 선택하고, Ctrl을 누르면 다음 공백까지 선택한다. 세 번 클릭하면 따옴표 안의 내용 또는 따옴표 밖의 행 전체를 선택하며 네 번 클릭하면 행 전체를 선택한다. 가운데 버튼은 기본 선택 영역을 붙이고, 오른쪽 버튼은 선택 영역을 늘린다. Ctrl+오른쪽 버튼은 원래 선택 방식과 관계없이 문자 단위 선택을 강제한다. 휠은 스크롤백을 이동하며 Ctrl+휠은 글꼴 크기를 조정한다. 터치 화면에서 탭은 왼쪽 클릭, 드래그는 스크롤백 이동을 흉내 낸다. 누른 뒤 잠시 기다렸다 드래그하면 왼쪽 버튼을 누른 채 끄는 동작을 흉내 낸다.
일반 실행에서 foot는 한 프로세스에 창 하나를 둔다. 서버 모드에서는 한 프로세스가 여러 창을 호스팅하고 Wayland 통신, VT 파싱, 렌더링을 서버 프로세스에서 처리한다. footclient로 새 창을 열며, 터미널 창이 닫힐 때 클라이언트 프로세스가 종료되고 보통 셸의 종료 값을 반환한다. 서버 모드는 창끼리 글꼴과 글리프 캐시를 공유해 메모리 사용량을 줄이고, 글꼴 로딩과 캐시 준비를 한 번만 해 시작 시간을 줄인다. 반면 모든 창의 입출력이 같은 스레드에서 다중화되므로 한 창이 출력을 많이 내면 다른 창의 성능도 저하될 수 있다. 서버가 충돌하면 모든 창이 사라진다.
전형적인 사용법은 Wayland 컴포지터를 시작할 때(데스크톱에 로그인할 때) foot --server를 실행하고, 터미널이 필요할 때 foot 대신 footclient를 실행하는 것이다. 소켓 활성화를 지원하므로 footclient를 처음 실행할 때 서버를 시작하도록 할 수 있다. systemd 사용자 유닛이 포함되어 있지만 다른 프로세스 감독 도구도 사용할 수 있다.
셸 통합을 설정하면 새 터미널이 현재 작업 디렉터리에서 열리고, 이미 실행한 명령의 프롬프트 사이를 이동할 수 있다. 새 창이 부모 터미널의 현재 디렉터리를 알도록 하려면 셸이 디렉터리 변경을 OSC 7 이스케이프 시퀀스로 알려야 한다. 셸이 기본 지원하지 않더라도 스크립트로 설정할 수 있으며 자세한 방법은 위키에 있다.
Ctrl+Shift+Z와 Ctrl+Shift+X로 프롬프트 사이를 이동하려면 셸이 각 프롬프트 앞에서 OSC-133;A(\E]133;A\E\\)를 내보내야 한다. zsh에서는 다음 precmd 훅을 사용할 수 있다.
precmd() {
print -Pn "\e]133;A\e\\"
}
다른 셸의 예시는 위키에 있다. pipe-command-output 키 바인딩은 마지막 명령의 출력을 원하는 앱으로 보낼 수 있다. 다음 예는 Ctrl+Shift+G를 누르면 출력을 임시 파일에 쓰고 새 footclient에서 emacsclient를 연 뒤, 해당 창이 닫히면 임시 파일을 지운다.
[key-bindings]
pipe-command-output=[sh -c "f=$(mktemp); cat - > $f; footclient emacsclient -nw $f; rm $f"] Control+Shift+g
이 기능을 쓰려면 셸이 명령 출력이 시작되기 전에 OSC-133;C(\E]133;C\E\\), 출력이 끝난 뒤 OSC-133;D(\E]133;D\E\\)를 내보내야 한다. fish에서는 다음 훅을 설정할 수 있다.
function foot_cmd_start --on-event fish_preexec
echo -en "\e]133;C\e\\"
end
function foot_cmd_end --on-event fish_postexec
echo -en "\e]133;D\e\\"
end
다른 셸의 예시는 위키에 있다.
기본적으로 foot는 Meta 문자를 ESC 접두어와 함께 보낸다. 이는 XTerm의 metaSendsEscape=true에 해당하며 \E[?1036l로 비활성화하고 \E[?1036h로 다시 활성화할 수 있다. 끄면 Meta 문자의 8번째 비트를 설정한 뒤 UTF-8로 인코딩한다. 이는 XTerm의 eightBitMeta=true에 해당한다. 이 동작은 rmm(Meta 모드 초기화, \E[?1034l)로 끄고 smm(Meta 모드 설정, \E[?1034h)으로 다시 켤 수 있다.
Backspace는 기본적으로 DEL(^?)을 보낸다. 이는 XTerm의 backarrowKey=false 및 DECBKM 초기화에 해당한다. Ctrl+Backspace를 누르면 BS(^H)를 보낸다. foot는 DECBKM을 구현하지 않으므로 이 동작을 설정으로 바꿀 수 없다. Alt를 누르면 전송되는 바이트 앞에 ESC를 붙인다.
기본적으로 Num Lock은 런타임 키패드 모드 설정을 덮어쓴다. Num Lock이 켜지면 숫자 모드로 고정되며, 이때 키패드는 숫자 또는 커서 이동 키(위·아래·왼쪽·오른쪽, Page Up/Down 등)를 보낸다. \E[?1035l로 이 동작을 끄고 \E[?1035h로 다시 켤 수 있다. 끄면 애플리케이션 모드에서 숫자 대신 사용자 지정 이스케이프 시퀀스를 보낸다.
디스플레이와 터미널 기능
foot의 macOS 포트에서는 글꼴 크기를 포인트로 지정한다. 원본 Wayland 버전은 foot 1.15 이상에서 기본적으로 모니터 DPI 대신 컴포지터의 배율을 사용한다. 컴포지터 배율이 모니터마다 제대로 설정되지 않으면, 같은 거리에서 보는 모니터 사이로 창을 옮길 때 글꼴 크기가 달라 보일 수 있다. foot.ini의 dpi-aware=yes를 설정하면 컴포지터 배율 대신 모니터 DPI로 글꼴 크기를 정하고, 창을 옮길 때 현재 모니터 DPI에 맞춰 갱신한다. pixelsize를 설정한 경우에는 DPI 변경이 글꼴 크기에 영향을 주지 않는다. 픽셀은 언제나 픽셀이다.
Wayland의 Hi-DPI 배율은 보통 1.5나 150% 같은 배율로 지정한다. 한동안은 정수 배율만 제대로 지원해, 분수 배율을 지원하는 컴포지터가 모든 앱에 200%로 렌더링하라고 한 뒤 이미지를 예를 들어 150%로 축소하는 방식으로 처리하기도 했다. 이 방식은 글꼴을 흐리게 만들 수 있다. wayland-protocols 1.32는 컴포지터가 실제 배율을 앱에 전달하는 프로토콜을 도입했다. 앱은 원시 픽셀 버퍼의 배율을 바꾸는 대신 viewport 객체를 이용해 이미지를 조정할 수 있다.
foot는 현재 표시되는 URL을 키보드로 찾는 방식을 쓴다. 기본 단축키 Ctrl+Shift+O를 누르면 URL에 밑줄과 점프 레이블이 표시되고, 레이블의 키 순서(예: AF)를 입력해 URL을 연다. 단축키는 다른 키 바인딩처럼 바꿀 수 있다. URL 열기는 show-urls-launch, 복사는 show-urls-copy와 url-launch 설정으로 조정한다.
foot가 지원하는 OSC(Operating System Command)는 터미널 에뮬레이터에 명령하는 이스케이프 시퀀스다. 지원 항목은 다음과 같다.
OSC 0: 창 아이콘과 제목 변경 요청(실제로 지원하는 것은 제목)OSC 2: 창 제목 변경OSC 4: 색상 팔레트 변경OSC 7: 현재 작업 디렉터리 보고OSC 8: 하이퍼링크OSC 9: 데스크톱 알림OSC 10: 기본 전경색 변경OSC 11: 기본 배경색 변경OSC 12: 커서 색 변경OSC 17: 선택 영역 배경색 변경OSC 19: 선택 영역 전경색 변경OSC 22: 마우스 포인터 설정OSC 52: 클립보드 복사·붙여넣기OSC 104: 색상 팔레트 초기화OSC 110: 기본 전경색 초기화OSC 111: 기본 배경색 초기화OSC 112: 커서 색 초기화OSC 117: 선택 영역 배경색 초기화OSC 119: 선택 영역 전경색 초기화OSC 133: 셸 통합OSC 176: 앱 ID 설정OSC 555: 화면 깜박임(foot 전용)OSC 777: 데스크톱 알림.;notify하위 명령만 지원
전체 제어 시퀀스 목록은 foot-ctlseqs(7) 매뉴얼에 있다.
foot를 식별할 때 TERM 환경 변수에만 의존해서는 안 된다. 사용자가 다른 terminfo를 선택했을 수 있어 foot는 식별용 환경 변수를 설정하지 않는다. 대신 보조·3차 장치 속성(DA) 이스케이프 시퀀스를 요청할 수 있다. 3차 DA 응답은 항상 \EP!|464f4f54\E\\이며, 464f4f54는 16진수로 쓴 FOOT다. 2차 DA 응답은 \E[>1;XXYYZZ;0c 형식으로, XXYYZZ는 주·부·패치 버전을 각각 두 자리 십진수로 나타낸다. 예를 들어 foot 1.4.2는 \E[>1;010402;0c로 응답한다. 모든 터미널이 3차 DA를 구현하는 것은 아니며, 대부분은 2차 DA를 구현하지만 전부는 아니다. 모든 터미널이 기본 DA는 구현해야 하므로 3차, 2차, 기본 DA를 이 순서로 함께 요청한 뒤 응답을 분석하는 방법이 안전하다. 터미널은 인식하지 못하는 시퀀스를 무시해야 한다.
버전 1.7.0부터 XTVERSION도 구현한다. 일반 릴리스 1.8.2는 \EP>|foot(1.8.2)\E\\로, Git 빌드 1.8.2-36-g7db8e06f는 \EP>|foot(1.8.2-36-g7db8e06f)\E\\로 응답한다.
XTGETTCAP은 XTerm이 처음 도입하고 Kitty가 확장한 이스케이프 시퀀스로, 터미널의 terminfo 기능을 질의한다. 이를 쓰는 앱은 파일 기반 terminfo 정의를 사용하지 않아도 된다. 예를 들어 모든 앱이 이 기능을 사용한다면 SSH로 접속한 원격 호스트에 foot의 terminfo를 설치하지 않아도 된다. XTerm-370은 키보드 키 기능과 사용자 지정 기능 TN(터미널 이름), Co(색상 수, colors 별칭), RGB(색상 채널당 비트 수. 파일 기반 terminfo의 RGB와 의미가 다름)를 질의한다. Kitty는 모든 정수·문자열 기능 질의로 이를 확장했다. foot는 여기에 불리언 기능도 더해 foot의 전체 terminfo를 XTGETTCAP으로 질의할 수 있다.
여러 기능을 한 번에 묻는 질의에 대한 응답 방식은 XTerm과 다르다. XTerm은 기능·값 쌍을 세미콜론으로 구분한 단일 DCS 응답을 보낸다. 첫 번째 질의 기능이 잘못된 경우가 아니면 성공·실패 표시는 항상 성공이며, 첫 번째가 아닌 잘못된 기능에는 응답하지 않고 첫 오류에서 응답을 끝낸다. 따라서 여러 기능을 한 번에 질의하면 첫 번째 잘못된 항목 뒤의 결과는 모두 빠진다. Kitty와 foot는 각 기능마다 별도 DCS 응답을 보내 기능별로 성공·실패를 표시하고, 잘못된 기능이 있어도 나머지 질의를 모두 응답한다. 모든 응답은 tigetstr() 형식이며, 같은 기능 이름에 대해 tigetstr()가 반환하는 값과 같다. terminfo 항목 외에 query-os-name 질의에는 uname=$(uname -s) 형식으로 foot를 컴파일한 운영체제 이름을 응답한다.
macOS 포트는 upstream foot와 달리 패치, 문서, 버그 보고서, 이슈·pull request에 대한 의견 등 모든 기여에 생성형 AI와 대규모 언어 모델 사용을 명시적으로 허용한다. 기여자는 제출 내용에 책임을 지며 pull request를 열기 전에 검토하고 시험해야 한다. 원본 foot는 Daniel Eklöf와 기여자들이 작성했고 MIT 라이선스로 배포한다. macOS 포트는 upstream 라이선스를 유지한다.
오류는 저장소 이슈 페이지에 보고한다. 새 이슈를 열기 전에는 열려 있거나 닫힌 기존 버그 보고를 검색하라고 안내한다. 보고에는 foot 버전(foot --version), 다른 터미널에서 foot -d info를 실행해 얻은 로그, macOS 버전(sw_vers), 충돌인 경우 심볼이 포함된 bt full 백트레이스, 재현 단계가 포함되어야 한다.
원본 foot의 이름은 foo terminal에서 footerm, 다시 foot으로 줄인 데서 왔다고 설명한다. foo를 foobar와 같은 방식으로 발음하면 스웨덴어로 ‘발’을 뜻하는 fot와 비슷하게 들린다는 설명도 덧붙인다. 로고는 Ordoviz가 디자인하고 기여했다. 프로젝트는 MIT 라이선스를 따른다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요