팝업스튜디오 FDE 온보딩 & 세션
우리 작업은 내 노트북이 아니라 회사 작업 서버(팀이 함께 쓰는 원격 컴퓨터)에서 합니다. 아무나 들어오지 못하도록, 서버는 허가된 사람만 들여보냅니다. 그 허가 수단이 SSH 키입니다.
SSH 키는 한 쌍으로 만들어집니다.
자물쇠와 열쇠로 비유하면, 공개키는 서버에 거는 자물쇠, 개인키는 그 자물쇠를 여는 열쇠입니다. 이번 강의는 이 한 쌍을 만들고, 자물쇠(공개키)를 관리자에게 넘기는 데까지 합니다.
키는 터미널에서 만듭니다. 터미널은 마우스 클릭 대신 명령을 글자로 입력하는 창입니다. 운영체제에 따라 여는 방법이 다릅니다.
Windows
PowerShell 을 입력해 실행합니다. (Windows 에서는 명령창이 여러 종류인데, 이 강의는 PowerShell 기준입니다.)macOS
Command(⌘) + 스페이스 로 검색창을 열고 터미널 을 입력해 실행합니다.검은(또는 흰) 창이 뜨고 커서가 깜빡이면 준비된 것입니다. 이후 명령은 Windows·macOS 에서 동일하게 입력합니다.
터미널에 아래 한 줄을 입력합니다. -C 뒤에는 회사 이메일의 골뱅이(@) 앞부분(아이디)만 넣습니다. 예를 들어 이메일이 gildong@popupstudio.ai 면 gildong 을 넣습니다.
# 🖥️ 터미널 (Windows·macOS 공통)
ssh-keygen -t ed25519 -C "gildong"
입력하면 세 가지를 순서대로 물어봅니다. 모두 그냥 Enter 로 넘어가면 됩니다 (즉 Enter 를 세 번 누르는 셈입니다).
Enter file in which to save the key ... (키를 저장할 위치): Enter (기본 위치 ~/.ssh/id_ed25519 에 저장됩니다).Enter passphrase (empty for no passphrase): (암호 입력): Enter (비워 둡니다).Enter same passphrase again: (같은 암호 다시 입력, 확인용): Enter.2번과 3번은 암호를 두 번 물어보는 것(입력 + 확인)입니다. 비워 둘 거면 둘 다 그냥 Enter 를 누르면 됩니다. 보안을 위해 2번에서 암호를 직접 입력했다면, 3번에서 같은 암호를 한 번 더 입력합니다(암호를 걸면 접속할 때마다 그 암호를 묻습니다).
Your identification has been saved ... 가 보이면 키 한 쌍이 만들어진 것입니다.
이제 공개키(관리자에게 줄 부분)를 화면에 띄웁니다.
# 🖥️ 터미널 (Windows·macOS 공통)
cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAA... 로 시작하는 한 줄이 나옵니다. 이 한 줄 전체를 그대로 복사합니다.
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... gildong
복사한 공개키 한 줄을 관리자에게 전달합니다(메신저·메일 등 팀이 쓰는 방법으로). 관리자가 이 공개키를 서버에 등록하면, 다음 강의에서 서버에 접속할 수 있습니다.
id_ed25519.pub, 끝이 .pub)입니다.id_ed25519, .pub 없는 파일)는 절대 남에게 보내지 않습니다. 이건 내 컴퓨터에만 있어야 합니다.ssh-keygen -t ed25519)하고, 공개키(cat ~/.ssh/id_ed25519.pub 한 줄)를 관리자에게 제출했습니다..pub 없는 파일)를 보내면 안 됩니다. 관리자에게 주는 것은 .pub 로 끝나는 공개키 한 줄뿐입니다.VS Code(Visual Studio Code)는 코드와 파일을 다루는 편집기입니다. Microsoft 가 무료로 배포합니다. 우리는 이 프로그램으로 회사 작업 서버에 접속해서 일합니다. 이번 강의는 이 프로그램을 내 컴퓨터에 설치하는 것까지 합니다.
브라우저에서 https://code.visualstudio.com 에 접속하면 큰 다운로드 버튼이 있습니다. 운영체제에 맞는 것을 내려받습니다.
Windows
.exe)을 내려받습니다.macOS
.dmg)을 내려받습니다.Windows
.exe)을 더블클릭해 실행합니다.macOS
.dmg 파일을 더블클릭해서 엽니다.VS Code 를 실행해 봅니다.
Windows
Visual Studio Code 를 입력해 실행합니다.macOS
Command(⌘) + 스페이스 로 검색창을 열고 Visual Studio Code 를 입력해 실행합니다.처음 실행하면 환영(Welcome) 탭이 있는 창이 뜹니다. 여기까지 보이면 설치가 정상입니다.
https://code.visualstudio.com 에서 내 운영체제용 VS Code 를 내려받아 설치하고, 실행까지 확인했습니다.gildong. 본인 계정 이름으로 바꿔 넣으세요.)Ctrl+Shift+X / macOS ⌘+Shift+X)Remote - SSH 를 입력합니다.Ctrl+Shift+P / macOS ⌘+Shift+P)Remote-SSH: Open SSH Configuration File 을 입력해 선택합니다./Users/유저명/.ssh/config, Windows 는 C:\Users\내계정\.ssh\config.gildong 두 곳을 내 계정 이름으로 바꿉니다.Host popupstudio-dev-server
HostName 43.200.38.93
User gildong
Host popupstudio-prod-server
HostName 52.79.132.206
User gildong
Ctrl+S / macOS ⌘+S)>< 버튼을 클릭합니다.Connect to Host... → popupstudio-dev-server 를 선택합니다.Linux, 확인창이 뜨면 Continue 를 고릅니다.SSH: popupstudio-dev-server 가 보이면 접속된 것입니다.평소 작업은
popupstudio-dev-server, 배포는 나중에popupstudio-prod-server를 같은 방법으로 고릅니다.
Ctrl+J / macOS ⌘+J)터미널 줄 맨 앞에 gildong@ip-172-31-39-132:~$ 같은 표시가 뜹니다. 각 부분의 뜻은:
gildong : 내 계정 이름 (사람마다 다름)ip-172-31-39-132 : 서버 이름~ : 지금 있는 위치 (~ 는 내 홈 폴더)$ 뒤 : 내가 입력할 명령앞으로 코드에서는 $ 뒤 부분만 칩니다.
3. whoami 를 입력해 내 계정 이름이 나오면 정상입니다.
# 🖥️ 서버 터미널
gildong@ip-172-31-39-132:~$ whoami
Connect to Host... 로 개발 서버에 접속했습니다.앞 강의에서 접속한 VS Code 창(서버에 연결된 창)에서 터미널을 엽니다. 여기서 치는 명령은 모두 서버 안에서 실행됩니다.
Ctrl+J / macOS ⌘+J)우리 코드 저장소는 비공개라, 처음 한 번 GitHub 인증이 필요합니다.
# 🖥️ 서버 터미널
gildong@ip-172-31-39-132:~$ gh auth login
질문이 순서대로 나옵니다. 아래대로 고릅니다.
GitHub.comHTTPSAuthenticate Git with your GitHub credentials? → YesLogin with a web browserhttps://github.com/login/device 에서 그 코드를 입력하고 승인합니다.# 🖥️ 서버 터미널
gildong@ip-172-31-39-132:~$ gh auth status
Logged in to github.com as ... 가 보이면 성공입니다. (최초 1회만 하면 됩니다.)
gh auth login 으로 GitHub 에 로그인하고 gh auth status 로 확인했습니다.Claude Code 는 명령을 대신 수행해 주는 AI 도구입니다. 내 컴퓨터에 설치합니다. 아래 명령 한 줄이면 설치되고, 한 번 설치하면 이후에는 알아서 최신으로 유지됩니다(업데이트를 직접 할 필요가 없습니다).
내 컴퓨터의 운영체제에 맞는 것만 따라 합니다.
Windows
PowerShell 을 입력해 Windows PowerShell 을 엽니다.irm https://claude.ai/install.ps1 | iex
macOS
Command(⌘) + 스페이스 로 검색창을 열고 터미널 을 입력해 터미널(Terminal) 을 엽니다.curl -fsSL https://claude.ai/install.sh | bash
설치가 끝나면 터미널/PowerShell 창을 완전히 닫고 새로 연 뒤 아래를 입력합니다.
claude --version
아래처럼 버전 번호가 나오면 정상입니다.
2.1.211 (Claude Code)
버전이 안 나오고 "명령을 찾을 수 없다"(command not found / not recognized)고 나오면, 창을 새로 열지 않아서입니다. 창을 닫고 다시 열어 한 번 더 실행합니다.
한 번 설치하면 업데이트는 알아서 됩니다. Claude Code 를 켤 때 새 버전이 있으면 내려받아 두고, 다음에 켤 때 최신으로 시작합니다. 따로 할 일은 없습니다.
claude --version 이 안 되면 터미널/PowerShell 창을 닫고 새로 열어야 합니다.Claude Code 는 명령을 대신 수행해 주는 AI 도구입니다. 서버에는 이미 설치돼 있고, 처음 한 번 내 계정으로 로그인만 하면 됩니다.
VS Code 서버 터미널에 아래를 입력합니다.
# 🖥️ 서버 터미널
gildong@ip-172-31-39-132:~$ claude auth login
그러면 터미널에 아래처럼 로그인 링크(URL) 가 나옵니다.
# 🖥️ 서버 터미널 (이런 안내가 나옵니다. 주소는 매번 다릅니다)
Sign in to Claude Code
아래 주소를 브라우저에서 여세요:
https://claude.ai/oauth/authorize?code=AbC123...&state=xyz789...
Paste code here if prompted >
https:// 로 시작하는 줄 전체를 마우스로 드래그해 복사합니다.Paste code here 뒤에 붙여 넣고 Enter 를 누릅니다.# 🖥️ 서버 터미널 (복사한 코드를 붙여 넣고 Enter)
Paste code here if prompted > AbC123XyZ...
Login successful. Welcome!
Claude Code 를 어떤 폴더에서 처음 열면 "이 폴더의 파일을 신뢰하시겠습니까?"(Do you trust the files in this folder?) 라고 물어봅니다. Claude Code 가 그 폴더의 파일을 읽고 다뤄도 되는지 확인하는 보안 질문이라, 무작정 넘기면 안 됩니다. 경로를 먼저 보고 판단합니다.
/home/내계정)이거나 내 프로젝트 폴더이면 내 것이니 신뢰합니다. 방향키로 Yes, proceed 를 골라 Enter./, /etc, /usr 로 시작하는 경로)라면 신뢰하지 말고 No 를 골라 빠져나온 뒤, 올바른 폴더에서 다시 엽니다.지금은 홈 폴더에서 로그인했으니 신뢰해도 됩니다. 다만 매번 경로를 확인하는 습관을 들이세요. 아무 폴더에서나 무작정 신뢰하면 안 됩니다.
claude auth login 으로 로그인하고, "이 폴더를 신뢰하겠냐"는 물음에 신뢰하고 진행을 선택했습니다.standarda-devtools 폴더를 서버 내 홈에 받을 수 있다.프로젝트를 만드는 도구는 standarda-devtools(줄여서 devtools) 라는 폴더에 들어 있습니다. 이 폴더를 서버의 내 홈에 한 번 받아 둡니다.
VS Code 서버 터미널에 아래를 입력합니다.
# 🖥️ 서버 터미널
gildong@ip-172-31-39-132:~$ git clone https://github.com/popupstudio-ai/standarda-devtools.git ~/standarda-devtools
standarda-devtools 폴더로 받습니다(엉뚱한 곳에 받아질 걱정이 없습니다). 명령 끝의 ~ 가 내 홈을 가리킵니다.already exists 오류가 나면 이미 받아 둔 것이니, 새로 받을 필요 없이 넘어갑니다.git clone ... ~/standarda-devtools 로 프로젝트 생성 도구가 든 standarda-devtools 를 내 홈에 받았습니다.standarda-devtools 폴더에서 Claude Code 를 켜고, 만들 프로젝트 이름을 말로 시킵니다. my_project 자리에 원하는 이름을 넣습니다.
# 🖥️ 서버 터미널
gildong@ip-172-31-39-132:~$ cd ~/standarda-devtools
gildong@ip-172-31-39-132:~/standarda-devtools$ claude
Claude Code 가 열리면 아래처럼 자연어로 요청합니다.
create-project 로 'my_project' 만들어줘
프로젝트 한 벌이 내 홈(~/my_project) 에 만들어집니다(서버 포트 할당까지 자동). 다 만들어지면 Claude Code 를 나갑니다.
/exit
(다음 단계부터는 Claude Code 안이 아니라 터미널과 편집기에서 합니다.)
방금 만든 프로젝트 폴더로 들어가 준비 스크립트를 돌립니다. 앞부분은 자동으로 지나가고, 세 군데서 멈추고 물어봅니다(아래 ← 대로 답합니다).
# 🖥️ 서버 터미널
gildong@ip-172-31-39-132:~$ cd ~/my_project
gildong@ip-172-31-39-132:~/my_project$ ./setup.sh
PostgreSQL 'ubuntu' 사용자 비밀번호: ← 관리자에게 받은 DB 비밀번호 (쳐도 화면엔 안 보임)
>>> 나머지 .env 항목(API 키 등)을 편집해주세요: ~/my_project/src/.env
>>> 편집 완료 후 Enter를 누르면 계속 진행합니다. ← 지금은 그냥 Enter (API 키는 개발 챕터에서 채웁니다)
User id: ← 원하는 관리자 아이디 (예: admin)
Password: ← 관리자 비밀번호 (2번, 화면엔 안 보임)
Password (again):
셋업 완료!
Bypass ... [y/N] 를 물어보면 y 를 누릅니다.셋업 완료! 가 뜨면 준비가 끝난 것입니다. API 키(.env)는 나중에 개발 챕터에서 채웁니다.프로젝트 안(src)에서 Claude Code 를 켜고, 개발 서버를 말로 띄웁니다.
# 🖥️ 서버 터미널
gildong@ip-172-31-39-132:~$ cd ~/my_project/src
gildong@ip-172-31-39-132:~/my_project/src$ claude
Claude Code 안에서 자연어로 요청합니다.
개발 서버 띄워줘
끝나면 Claude Code 가 접속 주소를 알려 줍니다. 그 주소를 브라우저에서 열어 화면이 뜨면 성공입니다.
https://my-project-dev.popupstudio.ai 형태입니다. (프로젝트 이름 자리에 본인 이름이 들어가고, 이름 속 _ 는 주소에서 - 로 바뀝니다. 예: my_project → my-project-dev)cd ~/standarda-devtools 에서 claude 로 create-project 실행 → ./setup.sh → 프로젝트 안에서 '개발 서버 띄워줘'로 웹에 띄웠습니다.~/standarda-devtools, 서버를 띄울 때는 ~/my_project/src. 앞에 cd 를 먼저 치는 이유입니다.새로 만드는 것(앞 강의)이 아니라, 이미 GitHub 에 있는 프로젝트(내가 전에 만든 것, 또는 팀의 다른 프로젝트)를 이 서버로 가져올 때 씁니다.
standarda-devtools 폴더에서 Claude Code 를 켜고, 가져올 프로젝트 주소를 말로 시킵니다. 주소(https://github.com/...)는 팀에서 받습니다.
# 🖥️ 서버 터미널
gildong@ip-172-31-39-132:~$ cd ~/standarda-devtools
gildong@ip-172-31-39-132:~/standarda-devtools$ claude
Claude Code 안에서 자연어로 요청합니다.
clone-repo 로 https://github.com/popupstudio-ai/my_project.git 가져와줘
프로젝트가 내 홈(~/my_project/src) 에 표준 구조로 받아지고, 필요한 준비(전용 환경·설치)까지 자동으로 됩니다. 다 받아지면 Claude Code 를 나갑니다.
/exit
가져온 프로젝트에서 작업할 때는 프로젝트 안(src)에서 Claude Code 를 켭니다.
# 🖥️ 서버 터미널
gildong@ip-172-31-39-132:~$ cd ~/my_project/src
gildong@ip-172-31-39-132:~/my_project/src$ claude
cd ~/standarda-devtools 에서 claude 로 clone-repo 를 실행해 기존 프로젝트를 서버로 가져왔습니다.create-project(앞 강의), 이미 있는 프로젝트는 clone-repo(이 강의)입니다.팀원들이 같은 프로젝트를 고쳐 GitHub 에 올리고, 회사 공용 코드·설정도 새 버전이 나옵니다. 그래서 작업을 시작하기 전에 아래를 최신으로 맞춰 둡니다.
standarda-core: AI·구글 연동 코드standarda-template: 공통 설정·규칙standarda-devtools: 프로젝트 생성 도구프로젝트 안(src)에서 Claude Code 를 켜고 요청합니다. my_project 는 본인 프로젝트 폴더 이름입니다.
# 🖥️ 서버 터미널
gildong@ip-172-31-39-132:~$ cd ~/my_project/src
gildong@ip-172-31-39-132:~/my_project/src$ claude
최신 코드 받아줘
끝나면 Claude Code 를 나옵니다.
/exit
프로젝트 생성 도구도 최신으로 받아 둡니다.
# 🖥️ 서버 터미널
gildong@ip-172-31-39-132:~$ cd ~/standarda-devtools
gildong@ip-172-31-39-132:~/standarda-devtools$ git pull
프로젝트 안(src)에서 Claude Code 를 켜고 차례로 요청합니다.
# 🖥️ 서버 터미널
gildong@ip-172-31-39-132:~$ cd ~/my_project/src
gildong@ip-172-31-39-132:~/my_project/src$ claude
standarda-core 를 최신 버전으로 올려줘
update-from-template 로 최신 템플릿 반영해줘
update-from-template 은 무엇을 반영할지 등급(A/B/C) 으로 물어봅니다.
보통 A만 반영하면 됩니다. 내 데이터 구조(모델)는 위험해서 자동으로 제외됩니다.
끝나면 Claude Code 를 나옵니다.
/exit
연습하다 보면 프로젝트를 여러 개 만들게 됩니다. 폴더만 지우면 데이터베이스·포트·도메인 같은 부수 자원이 서버에 남아 쌓입니다. delete-project 는 이걸 한 번에 정리합니다.
지우려는 프로젝트 안에서 Claude Code 를 켜 둔 상태라면, 먼저 나옵니다.
/exit
GitHub 저장소까지 한 번에 지우려면, 먼저 삭제 권한을 더해 둡니다(최초 1회만, 이미 한 적 있으면 건너뜁니다). 터미널에서:
# 🖥️ 서버 터미널
gildong@ip-172-31-39-132:~$ gh auth refresh -h github.com -s delete_repo
(GitHub 로그인 때처럼 브라우저 승인이 한 번 뜹니다.)
standarda-devtools 폴더에서 Claude Code 를 켜고 말로 시킵니다. my_project 는 지울 프로젝트 이름입니다.
# 🖥️ 서버 터미널
gildong@ip-172-31-39-132:~$ cd ~/standarda-devtools
gildong@ip-172-31-39-132:~/standarda-devtools$ claude
delete-project 로 my_project 지워줘
yes
cd ~/standarda-devtools 에서 claude 로 delete-project 를 실행해 프로젝트와 부수 자원을 정리했습니다. 저장소 삭제는 최초 1회 gh auth refresh ... delete_repo.프로젝트로 작업을 시작할 때마다 개발 서버를 켭니다. 개발 서버를 켜면 내가 만든 화면을 브라우저에서 바로 볼 수 있습니다.
프로젝트 안(src)에서 Claude Code 를 켜고, 개발 서버를 말로 띄웁니다. my_project 는 본인 프로젝트 폴더 이름입니다.
# 🖥️ 서버 터미널
gildong@ip-172-31-39-132:~$ cd ~/my_project/src
gildong@ip-172-31-39-132:~/my_project/src$ claude
Claude Code 안에서 자연어로 요청합니다.
개발 서버 띄워줘
실행이 끝나면 화면에 개발 서버 주소(https://my-project-dev.popupstudio.ai 형태)가 표시됩니다. 그 주소를 브라우저에서 엽니다. 화면이 뜨면 개발 서버가 켜진 것입니다.
cd ~/my_project/src 에서 claude 를 켜 '개발 서버 띄워줘'로 개발 서버를 켜고, 표시된 주소로 접속했습니다.~/my_project/src) 에서 켜세요. 다른 폴더에서 켜면 엉뚱한 곳이 잡힙니다. 앞에 cd 를 먼저 치는 이유입니다.이번 강의부터 예시로 기능 하나를 만들어 봅니다: 긴 글을 붙여넣으면 3줄로 짧게 요약해 주는 페이지입니다. 이걸 예제 삼아 "기능을 만드는 과정"을 익힙니다(실무에서 만들 기능도 방식은 똑같습니다). 다음 강의들에서 이 페이지에 계속 살을 붙입니다.
기능은 코드를 직접 짜지 않고 말로 설명하면 됩니다. 무엇을 만들지 설명하고 중간에 나오는 확인 질문에 답하면, 나머지(코드 작성·검증·합치기)는 develop 워크플로우가 알아서 진행합니다. 개발 요청이면 이 워크플로우가 자동으로 적용되니, 무엇을 만들지 말하기만 하면 됩니다.
프로젝트 안(src)에서 Claude Code 를 켭니다. my_project 는 본인 프로젝트 폴더 이름입니다.
# 🖥️ 서버 터미널
gildong@ip-172-31-39-132:~$ cd ~/my_project/src
gildong@ip-172-31-39-132:~/my_project/src$ claude
Claude Code 안에서 위 요약 페이지를 만들어 달라고 자연어로 요청합니다. 기능을 담을 앱 이름과 만들 것을 함께 적습니다.
summarizer 앱에 글을 입력받아 3줄로 요약해 보여주는 페이지 만들어줘
summarizer = 앱 이름(이 기능이 담길 곳).develop 워크플로우는 진행 중에 중간중간 멈추고 물어봅니다. 화면에 보여 주는 내용을 읽고 답하면 됩니다. 그중 꼭 확인할 두 가지는 이것입니다.
이 확인들에 답하면 코드 작성, 자동 검증, 합치기까지 진행됩니다. 끝나면 개발 서버 주소에서 만든 화면을 확인합니다.
{앱 이름} 에 {만들 것} 만들어줘 로 요청하고, 계획과 스펙 확인 질문에 답해 기능 하나를 만들었습니다..env 에 넣을 수 있다.AI 를 쓰려면 API 키(AI 를 쓸 수 있게 해 주는 비밀 열쇠)가 필요합니다. 이 키는 회사 도구 keyforge 에서 직접 발급받습니다. 발급받은 키를 복사해서, 다음 강의에서 쓰도록 프로젝트의 .env 에 넣는 것까지 합니다.
브라우저에서 아래 주소로 들어갑니다.
https://keyforge-dev.popupstudio.ai
각 그림에서 빨간 네모가 누를 곳입니다.
Google 계정으로 계속하기 를 눌러, 회사에서 안내한 Google 계정으로 로그인합니다. (다음 화면에서 회사 계정을 고르고 허용을 누르면 됩니다.)

로그인하면 API 키 관리 화면이 나옵니다. 오른쪽 위의 +새 키 발급 을 누릅니다.

작은 창이 열립니다. 여기서 세 가지를 합니다.
① 발급할 AI 플랫폼을 체크합니다. 지금은 OpenAI 와 LangSmith 두 개만 체크하세요. (OpenAI 는 AI 처리에, LangSmith 는 AI 가 잘 도는지 기록·확인하는 데 씁니다.) 아래 그림에는 네 개가 다 체크돼 있는데, 그건 나중에 여러 플랫폼이 필요할 때의 예시입니다. 앞으로는 그림처럼 필요한 것을 골라 체크하면 되고, 지금은 두 개면 충분합니다.

② 프로젝트 이름을 정해 입력합니다. (영문·숫자와 _ - 만 됩니다. 예: my_project1)

③ 아래쪽 발급 을 누릅니다.

발급되면 아래 목록에 체크한 플랫폼마다 한 줄씩 키가 나타납니다. (그림은 네 개를 다 발급한 예시라 Anthropic 은 승인이 필요해 대기 로, 나머지는 활성 으로 보입니다. 지금 두 개만 체크했다면 OpenAI·LangSmith 두 줄만 나옵니다.) 활성 키 줄에는 아래 세 가지 버튼이 있습니다(그림의 빨간 네모).
발급한 두 키를 다음 단계에서 .env 에 넣습니다. OpenAI 줄의 복사 와 LangSmith 줄의 복사 를 씁니다. 한 번에 하나씩 복사해서 넣고, 다시 와서 다음 키를 복사하면 됩니다.

복사한 키를 프로젝트의 .env 에 붙여넣습니다. (VS Code 에서 합니다.)
my_project 를 선택합니다.src 폴더를 펼치고 .env 를 클릭해 엽니다..env 안에는 아래 같은 줄들이 있습니다. 각 키를 ← 로 표시한 줄의 = 바로 뒤에 붙여넣습니다. (앞뒤 줄을 보고 위치를 찾으세요. 발급 안 한 플랫폼 줄은 비워 둡니다.)# OpenAI API Settings
OPENAI_API_KEY= # ← OpenAI 키를 여기에 (실습 필수)
OPENAI_MODEL=gpt-4o-mini
OPENAI_TEMPERATURE=0.1
# Anthropic (Claude) Configuration
ANTHROPIC_API_KEY= # ← Anthropic 키를 여기에 (관리자 승인 후)
ANTHROPIC_MODEL=claude-sonnet-4-20250514
# Google Gemini Configuration
GOOGLE_API_KEY= # ← Gemini 키를 여기에
GOOGLE_MODEL=gemini-2.5-flash
# LangSmith (optional)
LANGCHAIN_ENDPOINT=https://api.smith.langchain.com
LANGCHAIN_API_KEY= # ← LangSmith 키를 여기에
LANGCHAIN_PROJECT=my_project
Ctrl+S / macOS ⌘+S).키는
.env에만 두고 코드에 직접 쓰지 않습니다..env는 GitHub 에 올라가지 않아 키가 새지 않습니다.
src/.env 의 OPENAI_API_KEY 와 LANGCHAIN_API_KEY 에 각각 넣었습니다..env 에 안 넣거나 앞뒤에 빈칸·오타가 있으면 다음 강의에서 AI 호출이 실패합니다.앞 강의(기능 개발)에서 "글을 넣으면 3줄로 요약해 주는 페이지"의 겉모습을 만들었습니다. 하지만 요약처럼 '생각'이 필요한 일은 AI(LLM) 가 해야 하는데, 아직 그 AI 를 안 붙였습니다. 그래서 지금 페이지에 글을 넣어도 진짜 요약은 안 나옵니다.
이번 강의에서 그 페이지에 진짜 AI 요약을 붙입니다.
프로젝트 안(src)에서 Claude Code 를 켜고, 앞 강의에서 만든 요약 페이지가 진짜 요약을 하도록 요청합니다. 앞 강의에서 OpenAI(ChatGPT 를 만든 곳) 키를 넣었으니, OpenAI 로 하라고 말합니다.
# 🖥️ 서버 터미널
gildong@ip-172-31-39-132:~$ cd ~/my_project/src
gildong@ip-172-31-39-132:~/my_project/src$ claude
요약 페이지의 요약을 OpenAI 로 처리해줘
.env 에 넣은 OpenAI 키로 AI 를 부릅니다.진짜로 되는지 눈으로 봅니다.
https://my-project-dev.popupstudio.ai)를 브라우저에서 엽니다. (안 떠 있으면 개발 서버 실행 강의대로 다시 켭니다.)src/.env 에 제대로 넣었는지 확인합니다. 키가 없거나 오타가 있으면 AI 가 동작하지 않습니다.앞에서 개발한 변경은 develop 이 자동으로 저장(커밋) 해 두지만, 아직 내 서버 안에만 있습니다. 이걸 GitHub 에 올려야(push) 다른 사람과 공유되고, 다음 단계인 배포도 할 수 있습니다.
프로젝트 안(src)에서 Claude Code 를 켜고, 올려 달라고 요청합니다. my_project 는 본인 프로젝트 폴더 이름입니다.
# 🖥️ 서버 터미널
gildong@ip-172-31-39-132:~$ cd ~/my_project/src
gildong@ip-172-31-39-132:~/my_project/src$ claude
지금까지 변경한 내용을 깃허브에 올려줘
Claude Code 가 git push 로 변경을 GitHub 에 올립니다.
올리고 나면 GitHub 저장소(https://github.com/popupstudio-ai/my_project)의 최근 변경 목록에 방금 올린 내용이 보입니다.
git push).배포는 GitHub 에 올린 변경을 실서비스(프로덕션) 에 반영하는 일입니다. 개발 서버(내가 확인하는 곳)와 프로덕션(고객이 쓰는 곳)은 별개라, 개발이 끝나고 GitHub 에 올린 뒤 배포해야 고객 화면에 반영됩니다.
전제: 앞 강의(GitHub 업로드)로 변경을 GitHub 에 올려 두었을 것.
배포하려는 그 프로젝트 안(src) 에서 Claude Code 를 켭니다. gildong 은 본인 계정 이름입니다.
# 🖥️ 서버 터미널
gildong@ip-172-31-39-132:~$ cd ~/my_project/src
gildong@ip-172-31-39-132:~/my_project/src$ claude
gildong 계정으로 배포해줘
배포는 반드시 본인 계정 이름으로 합니다. 누가 언제 무엇을 배포했는지 기록으로 남기기 위해서입니다.
배포 중에 데이터베이스 변경(마이그레이션)이 있으면 되돌리기 어려운 작업이라 한 번 멈추고 목록을 보여 주며 물어봅니다. 목록을 확인하고 진행할지 답합니다(y).
이후 배포가 끝나면 정상 동작 확인(헬스체크) 까지 하고 프로덕션 주소를 알려 줍니다.
{본인 계정} 계정으로 배포해줘 로 실서비스에 배포하고, 마이그레이션 확인 질문에 답했습니다.배포가 끝나면 알려 준 프로덕션 주소(https://my-project.popupstudio.ai 형태)를 브라우저에서 엽니다. 방금 배포한 변경이 화면에 보이면 배포가 정상입니다.
개발 서버 주소(
...-dev.popupstudio.ai)와 프로덕션 주소(...popupstudio.ai)는 다릅니다. 고객이 쓰는 곳은 프로덕션 주소입니다.
화면이 안 뜨거나 이상하면 직접 고치려 하지 말고, 다음을 그대로 캡처해 담당자(또는 팀)에게 알립니다.
배포 중 문제가 있으면 스스로 멈추고 로그 위치를 알려 줍니다. 그 내용도 함께 전달합니다.
docs 에 넣고, 그 스펙대로 개발할 수 있다.프로젝트를 만들기 전에, 무엇을 만들지부터 정리합니다. 그 정리가 스펙(spec) 문서 입니다.
docs 에 넣기 → 그 스펙대로 개발브라우저에서 프로젝트 대시보드로 접속합니다. 로그인은 필요 없습니다.
https://onboarder-dev.popupstudio.ai/projects/dashboard/
프로젝트 목록이 보입니다.

새 프로젝트 를 누릅니다.법인세 보고서 자동화, 설명 세무조정계산서 분석 → 법인세 분석 보고서 생성생성 을 누르면 상세 페이지로 넘어갑니다.
만들 기능과 관련된 참고 자료를 올립니다. AI 가 이걸 읽고 질문을 준비합니다.
실습용 자료는 예제 프로젝트 법인세 보고서 자동화 8 의 내보내기 zip 안 data/ 폴더에 들어 있습니다. 아래 주소로 zip 을 받아 압축을 풀면 data/ 폴더가 나옵니다.
https://onboarder-dev.popupstudio.ai/api/projects/ho91hax3lguqnc15/export/
data/ 안의 파일들을 드래그해서 올립니다.파일 분석 시작 을 누릅니다.
AI 가 만든 질문에 답하면서 빈 곳을 채웁니다.
Q&A 인터뷰 를 누릅니다.질문에 답합니다. 위쪽 충분도 바가 100% 에 가까워지게 합니다.
답변 팁

스펙 문서 생성 을 누릅니다.재생성 을 누릅니다.
스펙 화면의 개발 프로젝트로 내보내기(.zip) 를 눌러 zip 을 내려받습니다.
docs/spec/ 폴더가 있습니다. 그 안의 spec 폴더를 씁니다.src/docs 폴더를 펼칩니다.spec 폴더를 그 src/docs 위로 끌어다 놓습니다(드래그). 서버로 올라갑니다.src/docs/spec/development_spec.md 가 보이면 성공입니다.프로젝트 세션에서 그 스펙대로 만들어 달라고 요청합니다.
# 🖥️ 서버 터미널
gildong@ip-172-31-39-132:~$ cd ~/my_project/src
gildong@ip-172-31-39-132:~/my_project/src$ claude
docs/spec/development_spec.md 스펙대로 개발해줘
docs 에 넣고, 그 스펙대로 개발했습니다. 스펙부터 잡으면 개발이 빠릅니다.지금까지 배운 것을 종합해 스스로 한 바퀴 도는, 본격 실무 전 마지막 연습입니다.
런처에서 Claude Code 를 켜고 생성을 요청합니다.
# 🖥️ 서버 터미널
gildong@ip-172-31-39-132:~$ cd ~/standarda-devtools
gildong@ip-172-31-39-132:~/standarda-devtools$ claude
create-project 로 'tax_report' 만들어줘
/exit
이어서 준비 스크립트를 실행합니다.
# 🖥️ 서버 터미널
gildong@ip-172-31-39-132:~$ cd ~/tax_report
gildong@ip-172-31-39-132:~/tax_report$ ./setup.sh
create-project 는 반드시 런처(~/standarda-devtools)에서 요청합니다. 다른 폴더에서 하면 도구를 못 찾습니다.spec 폴더를 tax_report/src/docs/ 에 복사 → src/docs/spec/development_spec.mdspec 폴더만 넣습니다.# 🖥️ 서버 터미널
gildong@ip-172-31-39-132:~$ cd ~/tax_report/src
gildong@ip-172-31-39-132:~/tax_report/src$ claude
개발 서버 띄워줘
docs/spec/development_spec.md 스펙의 첫 기능부터 만들어줘
지금까지 변경한 내용을 깃허브에 올려줘
앞에서는 프로젝트를 처음부터 만들었습니다. 실무는 대부분 남이 이미 만들어 둔 프로젝트에 합류해 고치는 일입니다.
devtools 런처에서 남의 저장소를 내 서버로 가져옵니다. (참고: CHAP.02 프로젝트 다루기 - L03 프로젝트 가져오기)
# 🖥️ 서버 터미널
gildong@ip-172-31-39-132:~$ cd ~/standarda-devtools
gildong@ip-172-31-39-132:~/standarda-devtools$ claude
clone-repo 로 https://github.com/popupstudio-ai/popax.git 셋업해줘
/exit
~/popax/src 에 준비됩니다..env 가 더 필요하면 Claude Code 가 안내해 줍니다. 안내대로 따르면 됩니다.프로젝트 안에서 개발 서버를 켜고, 어떤 프로젝트인지 눈으로 파악합니다.
# 🖥️ 서버 터미널
gildong@ip-172-31-39-132:~$ cd ~/popax/src
gildong@ip-172-31-39-132:~/popax/src$ claude
개발 서버 띄워줘
같은 프로젝트 세션에서 작은 변경을 요청합니다. 남의 코드이니, 처음부터 큰 걸 건드리지 않습니다.
메인 화면 제목 옆에 짧은 안내 문구 한 줄을 추가해줘
개선을 실제 popax 에 반영합니다. 올리는 방식은 프로젝트의 팀 정책을 따릅니다.
master 에 직접 올려도 되는 프로젝트입니다.standarda-core·standarda-template) 뿐입니다.지금까지 변경한 내용을 깃허브에 올려줘
https://github.com/popupstudio-ai/popax)의 최근 변경 목록에 방금 올린 개선이 보이면 성공입니다.