美国科技巨头在布鲁塞尔游说变得更活跃 Google与欧盟官员会面次数居首
cnBeta.COM.TW
一项对欧盟透明度登记册、欧洲议会和欧盟委员会会面数据库的分析显示,美国大型科技公司在布鲁塞尔的政策影响活动明显活跃,花费更多游说资金、与欧盟决策者会面也更频繁。 阅读全文
Балл: 53.37Уверенность: 49%
ПодробнееЗагружаем каталог…
НАВИГАТОР ПО ВОЗМОЖНОСТЯМ ИИ
Найдите свой ИИ-инструмент. Бесплатный доступ, пробные периоды и кредиты — в одном месте.
cnBeta.COM.TW
一项对欧盟透明度登记册、欧洲议会和欧盟委员会会面数据库的分析显示,美国大型科技公司在布鲁塞尔的政策影响活动明显活跃,花费更多游说资金、与欧盟决策者会面也更频繁。 阅读全文
Балл: 53.37Уверенность: 49%
ПодробнееcnBeta.COM.TW
苹果首款折叠屏手机iPhone Duo发布后,不仅在开发者社区引发热烈讨论,也让不少曾参与微软Surface Duo项目的现任和前任员工感慨万千。随着越来越多开发者展示围绕新形态打造的应用体验,一场关于“微软是否过早放弃Surface Duo”的讨论再次升温。 阅读全文
Балл: 53.37Уверенность: 49%
ПодробнееcnBeta.COM.TW
微软已将WSL Containers从公开预览版转为正式可用版本。用户运行“wsl --update”即可获得相关功能,包括命令行工具wslc.exe和WSL Containers API。虽然该正式版在GitHub上的版本号为WSL 3.0.1,但这并不代表微软推出了WSL 3;微软此前已否认存在这一新版本。 阅读全文
Балл: 53.37Уверенность: 49%
Подробнееhacker-news-frontpage
103 points · 32 comments · by RickJWagner
Балл: 51.84Уверенность: 46%
Подробнееhacker-news-frontpage
197 points · 107 comments · by suopspaces
Балл: 51.84Уверенность: 46%
ПодробнееAIタグが付けられた新着記事 - Qiita
舞台脚本を書くためのWebサービス、 「戯台(ぎだい)」というものを作りました。 https://gidai.shitai.co.uk/ SNSで投稿したところ、970いいねをいただけるほどの反響をいただきました。 一言でいうと、**「舞台のための脚本OS」**みたい...
Балл: 57.34Уверенность: 54%
Подробнее掘金
会议转写最让人头疼的往往不是普通话,而是“AC-42”“Responses API”这类业务词。模型可能把它们写成发音相近的普通词,后续搜索和纪要就一起失效。这个教程用Java 17上传一段已录完的音频,调用gpt-tr
Балл: 57.32Уверенность: 54%
ПодробнееReadhub
微软官方 X 账号遭未经授权访问,攻击者发布不实推文称点赞达 50 万就让 Clippy 回归,还关注相关主题账号、更换账号头像,整个过程持续约 30 分钟。微软已保护账号、删除不实内容,正开展调查,同时明确表示不支持任何相关加密代币,将采取法律行动要求移除相关内容。
Балл: 57.23Уверенность: 54%
Подробнееvelog
Notion - Tracking plan 실습 결과물 바로가기 문제 정의 프레임워크 MECE(Mutually Exclusive Collectively Exhaustive) : 상호 배타적이고 전체를 포괄하는 것 Logic Tree : MECE의 관점으로 Tree 형태로 정리한 것 예) 이익 개선 방안 - 매출 증가, 비용 감소 So What? Why So? 로그 설계 프로세스 로그 설계 : 로그 개발을 위한 기획 단계 지표 기획 → 로그 설계 → 로깅(로그 개발) → QA 분석에 활용할 수 있는 데이터 서비스 운영용 데이터 : 서비스가 제대로 돌아가기 위해서 반드시 기록 되어야만 하는 정보 → 데이터베이스 예) 고객의 회원가입 정보, 상품의 이름 가격 정보 등 사용자 행동 데이터(로그 데이터) : 사용자가 서비스 내에서 돌아다니면서 남긴 행동과 관련된 정보 → 파일 예) 고객의 페이지 방문 정보, 버튼 클릭 정보 등 사용자 행동 데이터 사용자 행동 데이터 : 어떤 특성의 유저가, 어떤 행동을 했는가에 대한 데이터 User Property : 어떤 특성의 유저가 Event Property : 어떤 행동을 했는가 누가, 언제, 어디서, 무엇을, 어떻게, 왜 Event, Attribute, Trigger Tracking Plan Tracking Plan : 전사적인 로그 통일성을 지키기 위해서 로그 설계 내용을 체계적으로 정리해두는 문서 Event : 어떤 행동에 대한 로그인지 예) 상품 노출, 상품 클릭 등 Attribute : Event의 부가 속성 예) 상품 ID Trigger : 해당 로그 데이터를 어느 시점에 발생시켜야 하는지 예) 상품 이미지의 60% 이상이 화면에 노출될 때
Балл: 54.4Уверенность: 49%
Подробнееvelog
Podman 정리 — 데몬 없는 컨테이너와 쿠버네티스, 그리고 예약 API에 적용해 보기 목차 Podman 개요 Podman의 정의 데몬리스(daemonless) 구조 루트리스(rootless) 컨테이너 Pod 개념과 Infra 컨테이너 기존 쿠버네티스 환경과의 차이 컨테이너 엔진과 오케스트레이터의 계층 차이 Podman Pod와 Kubernetes Pod의 책임 범위 비교 kube generate / kube play를 통한 YAML 연동 systemd + Quadlet 기반 단일 머신 운영 장점과 단점 장점 단점 Docker와 Podman 비교표 실제 프로젝트 적용: 스터디룸 예약 API 설치와 첫 실행 이미지 빌드와 FROM 이미지 이름 정규화 podman compose로 기존 compose.yaml 실행 Pod 구성 전환: 서비스 이름에서 localhost로 kube generate / kube play 기반 쿠버네티스 YAML 작성 Quadlet 기반 단일 서버 배포 GitHub Actions podman 잡 추가 Podman 환경의 Testcontainers 적용 변경 범위 정리 헷갈리기 쉬운 부분 Podman과 쿠버네티스의 관계 rootless와 컨테이너 내부 UID의 관계 podman.sock과 Docker 데몬의 차이 kube play 실행과 클러스터 배포의 차이 Pod 내부 통신 주소(localhost) 마무리 참고 자료 Spring Study Week E에서 스터디룸 예약 API를 Docker 이미지로 묶고, GitHub Actions에서 MySQL과 같이 띄워 헬스 체크까지 자동으로 돌렸다. 그런데 회고를 쓰면서 한 가지가 계속 걸렸다. docker compose up 을 칠 때마다 뒤에서 항상 떠 있는 dockerd 라는 데몬이 뭘 하는지, 왜 root 권한이 필요한지는 한 번도 열어 보지 않았다는 것. 그러다 Red Hat 쪽 문서와 사내 인프라 글들에서 자주 보이는 Podman 이 "데몬 없이, root 없이 Docker랑 같은 명령어로 컨테이너를 돌린다"고 소개하는 걸 봤다. 다음 목표로 적어 둔 Testcontainers와 CD 파이프라인도 결국 컨테이너 런타임 위에서 도는 거라, 이번 기회에 Docker 말고 다른 런타임은 어떻게 생겼는지 한번 정리해 보기로 했다. 사실 여러 대안 중에 Podman을 고른 데는 개인적인 이유도 있다. 평소 오픈소스에 관심이 많아서, 도구를 고를 때 기능만큼 "누가, 어떤 방식으로 만들고 관리하는가"를 같이 보는 편이다. Podman은 Apache 2.0 라이선스로 공개돼 있고, Podman Desktop은 CNCF sandbox 프로젝트 로 특정 회사가 아닌 커뮤니티 중심으로 운영된다. 릴리스 노트, 이슈, 설계 논의가 전부 GitHub에 열려 있어서 이번 글도 공식 문서뿐 아니라 릴리스 노트와 이슈를 함께 읽으며 정리했다. 언젠가는 읽는 데서 그치지 않고 작은 기여까지 해 보는 게 목표다. 이 글에서는 Podman이 무엇인지(데몬리스·루트리스·Pod), 쿠버네티스와 같은 "Pod"라는 단어를 쓰면서 무엇이 다른지, 장단점은 뭔지 정리하고, 마지막으로 Week E에서 만든 예약 API를 Docker 대신 Podman으로 띄운다면 코드가 어떻게 바뀌는지 직접 옮겨 본다. 결론부터 말하면 Dockerfile은 이미지 이름 표기 정도만 손보면 그대로 쓰고, 바뀌는 건 "누가 컨테이너를 실행하고 관리하느냐"다. 1. Podman 개요 1) Podman의 정의 Podman(POD MANager) = 컨테이너, 이미지, 볼륨, 그리고 컨테이너 묶음인 Pod를 관리하는 OCI 컨테이너 엔진. 상주 데몬 없이 동작하고, 일반 사용자 권한(rootless)으로 컨테이너를 실행할 수 있다. Podman 공식 README 는 Podman을 컨테이너·이미지·볼륨·Pod를 관리하는 도구로 소개하고, 리눅스에서 직접 돌거나 Mac·Windows에서는 Podman이 관리하는 VM 위에서 돈다고 설명한다. 내부적으로는 컨테이너 생명주기를 관리하는 libpod 라이브러리 위에 만들어져 있다. 2026년 기준 최신 메이저는 6.x로, Podman 6.0이 2026년 6월에 나왔고 8월에 6.1.0이 나왔다. 핵심은 Docker와 같은 이미지, 같은 명령어 를 쓴다는 점이다. Podman은 OCI(Open Container Initiative) 표준 이미지를 그대로 다루기 때문에 Docker Hub의 이미지를 pull하고, 우리가 Week E에서 쓴 Dockerfile 로 그대로 빌드할 수 있다. 대부분의 명령은 바이너리 이름만 바뀐다. # Docker 명령어를 그대로 옮기면 된다 podman pull docker.io/library/mysql:8.0 podman images podman run -d --name db -e MYSQL_ROOT_PASSWORD=secret -p 3306:3306 docker.io/library/mysql:8.0 podman ps # 손에 익은 docker를 계속 치고 싶다면 alias docker=podman 2) 데몬리스(daemonless) 구조 데몬리스 = 컨테이너를 대신 관리해 주는 상주 프로세스(데몬) 없이, CLI가 직접 자식 프로세스를 만들어(fork/exec) 컨테이너를 실행하는 방식 Docker는 클라이언트-서버 구조다. 내가 치는 docker CLI는 클라이언트일 뿐이고, 실제 일은 root 권한으로 항상 떠 있는 dockerd 가 한다. CLI는 /var/run/docker.sock 소켓으로 요청만 보낸다. Podman은 이 중간 계층을 없앴다. podman run 을 치면 Podman 프로세스가 직접 OCI 런타임( crun 또는 runc )을 호출해 컨테이너를 띄우고, 컨테이너마다 conmon 이라는 작은 감시 프로세스가 붙어 로그와 종료 코드를 챙긴다. [Docker] docker CLI → /var/run/docker.sock → dockerd(root, 상주) → containerd → runc → 컨테이너 [Podman] podman CLI → (fork/exec) → conmon → crun/runc → 컨테이너 └ 명령이 끝나면 podman 프로세스는 종료, conmon만 남아 컨테이너를 지켜봄 데몬이 없다면 무엇이 좋아지는지는 반대로 생각하면 된다. dockerd 가 죽으면 그 데몬이 관리하던 컨테이너 관리 경로 전체가 영향을 받는다. 또 docker 그룹에 속한 사용자는 이 root 데몬에게 "호스트 / 를 마운트한 특권 컨테이너를 띄워 줘"라고 요청할 수 있어서, Docker 공식 문서도 이 점을 사실상 root 권한에 가깝다고 경고한다 . Podman은 실행한 사용자의 권한 그대로 컨테이너를 띄우기 때문에 이런 "권한 대행자"가 애초에 없다. 3) 루트리스(rootless) 컨테이너 루트리스 컨테이너 = 관리자 권한이 없는 일반 사용자가 만들고 실행하는 컨테이너. 컨테이너 안에서는 UID 0(root)처럼 보여도, 호스트에서는 user namespace를 통해 권한 없는 일반 UID로 매핑된다. # 지금 rootless로 돌고 있는지 확인 podman info --format '{{.Host.Security.Rootless}}' # true # 컨테이너 안의 UID가 호스트의 어떤 UID로 매핑되는지 확인 podman unshare cat /proc/self/uid_map # 0 1000 1 ← 컨테이너 안 root(0) = 호스트의 내 계정(1000) # 1 100000 65536 ← 나머지는 /etc/subuid에 할당된 범위 컨테이너 안 프로세스: "나는 root(UID 0)다" → user namespace가 UID 0을 호스트 UID 1000(내 계정)으로 변환 → 컨테이너 탈출이 일어나도 호스트에서는 일반 사용자 권한만 가짐 → 이미지·컨테이너 저장소도 /var/lib/containers가 아니라 ~/.local/share/containers/storage Red Hat Developer의 rootless 입문 글 은 이 방식의 장점으로, 컨테이너 엔진이나 런타임이 뚫려도 공격자가 호스트 root를 얻지 못한다는 점과 한 서버에서 여러 일반 사용자가 각자 컨테이너를 돌릴 수 있다는 점을 꼽는다. 다만 완벽한 경계는 아니다. 컨테이너가 뚫리면 그 사용자가 원래 접근할 수 있는 파일과 서비스에는 여전히 접근할 수 있다. 4) Pod 개념과 Infra 컨테이너 Pod(Podman) = 하나의 네트워크 네임스페이스(그리고 선택적으로 IPC·PID 네임스페이스)를 공유하는 컨테이너 묶음. 같은 Pod 안의 컨테이너끼리는 localhost 로 통신한다. 이름부터 "Pod Manager"다. Docker에는 docker pod 같은 명령이 없다. Docker는 컨테이너를 하나씩 띄우고 네트워크로 이어 붙이지만, Podman은 쿠버네티스처럼 여러 컨테이너를 하나의 실행 단위로 묶을 수 있다. 출처: Podman: Managing pods and containers in a local container runtime — Red Hat Developer 그림에서 파란색 Infra Container 가 핵심이다. podman pod create 를 하면 아무 일도 하지 않고 네임스페이스만 붙잡고 있는 작은 컨테이너가 먼저 뜬다. 이후 --pod 옵션으로 추가하는 컨테이너들은 이 네임스페이스에 합류한다. 쿠버네티스의 pause 컨테이너와 같은 역할이다. podman pod create --name myapp -p 8080:8080 podman run -d --pod myapp --name db -e MYSQL_ROOT_PASSWORD=secret docker.io/library/mysql:8.0 podman run -d --pod myapp --name api localhost/reservation-api:latest podman ps -a --pod # CONTAINER ID IMAGE NAMES POD NAME # a1b2... localhost/podman-pause:6.1.0 myapp-infra myapp ← Infra 컨테이너 # c3d4... docker.io/library/mysql:8.0 db myapp # e5f6... localhost/reservation-api api myapp podman pod create → Infra 컨테이너 생성(네트워크 네임스페이스 소유, 포트 8080 바인딩) → db, api 컨테이너가 --pod myapp으로 같은 네임스페이스에 합류 → api에서 DB 주소는 db:3306이 아니라 localhost:3306 출처: Podman: from Docker networks to pods, kube play, and going rootless — Podman Desktop Blog (2026.09) Pod 개념이 없다면, 로컬에서는 Compose로 컨테이너를 서비스 이름( db )으로 이어 붙여 개발하다가 쿠버네티스에 올릴 때는 localhost 로 통신하는 Pod 구조로 다시 바꿔야 한다. Podman Pod는 로컬에서부터 운영 환경과 같은 묶음 방식으로 개발하게 해 준다. 2. 기존 쿠버네티스 환경과의 차이 처음에 제일 헷갈렸던 건 "Podman도 Pod를 만들고 쿠버네티스도 Pod를 만드니까, Podman이 작은 쿠버네티스인가?"였다. 결론부터 말하면 아니다. 둘은 서로 다른 층의 도구 다. 1) 컨테이너 엔진과 오케스트레이터의 계층 차이 컨테이너 엔진 = 한 대의 머신에서 이미지를 받고, 컨테이너를 만들고, 실행·중지하는 도구 (Docker, Podman) 오케스트레이터 = 여러 대의 머신(노드)을 하나의 클러스터로 묶고, 어떤 컨테이너를 어느 노드에 몇 개 띄울지 결정하고, 죽으면 다시 살리는 시스템 (Kubernetes) 출처: Kubernetes Components — Kubernetes Docs , CC BY 4.0 그림을 보면 쿠버네티스의 각 Node 안에는 "container runtime"이라는 칸이 따로 있다. 쿠버네티스는 컨테이너를 직접 실행하지 않고, kubelet이 CRI(Container Runtime Interface)로 containerd나 CRI-O 같은 런타임에게 일을 맡긴다. Podman은 이 런타임 칸에 들어가는 도구가 아니라, 개발자가 한 대의 머신에서 직접 쓰는 엔진이다. 다만 CRI-O와 Podman은 같은 containers 생태계의 이미지·스토리지 라이브러리를 공유하는 형제 프로젝트라, 로컬에서 Podman으로 만든 이미지가 CRI-O 기반 클러스터(OpenShift 등)에서 같은 방식으로 다뤄진다. [로컬 개발] [운영 클러스터] 개발자 → podman build/run kubectl apply → API server → scheduler(노드 선택) → 내 노트북 1대에서 실행 → kubelet → CRI(containerd/CRI-O) → runc/crun → 여러 노드에 분산 실행, 죽으면 컨트롤러가 재생성 2) Podman Pod와 Kubernetes Pod의 책임 범위 비교 출처: Viewing Pods and Nodes — Kubernetes Docs , CC BY 4.0 "컨테이너 여러 개가 네트워크 네임스페이스를 공유하고 localhost 로 통신한다"는 Pod의 정의 자체는 같다. 1장의 Infra 컨테이너와 쿠버네티스의 pause 컨테이너도 같은 역할이다. 차이는 Pod 바깥에서 누가 무엇을 책임지느냐 다. 구분 Podman Pod Kubernetes Pod 실행 범위 명령을 친 머신 1대 클러스터의 여러 노드 중 scheduler가 고른 노드 누가 띄우나 사용자가 podman 명령 또는 systemd(Quadlet) kubelet이 API server의 선언을 보고 죽으면 restart policy 또는 systemd가 같은 머신에서 재시작 ReplicaSet·Deployment 컨트롤러가 다른 노드에서라도 재생성 스케일 아웃 직접 Pod를 하나 더 만들어야 함 replicas: 3 , HPA로 자동 서비스 디스커버리·로드밸런싱 없음(포트 publish 정도) Service, Ingress, DNS 상태 저장소 로컬 디스크의 Podman 상태(데몬 없음) etcd 기본 권한 rootless 가능(사용자 권한) 노드의 kubelet·런타임은 보통 root, Pod는 securityContext로 제한 Podman: "이 머신에서 이 Pod를 지금 띄워라" → 명령형(imperative) Kubernetes: "이 Pod가 항상 3개 떠 있는 상태여야 한다" → 선언형(declarative), 컨트롤러가 계속 맞춰 줌 이 차이를 모르면 Podman Pod를 띄워 두고 "죽으면 알아서 살아나겠지"라고 착각하기 쉽다. Podman에는 원하는 상태와 현재 상태를 계속 비교해 주는 컨트롤 루프가 없다. 그 역할을 한 대 머신 범위에서 대신 맡는 게 뒤에서 볼 systemd + Quadlet이다. 3) kube generate / kube play를 통한 YAML 연동 podman kube generate = 로컬에서 돌고 있는 Podman 컨테이너·Pod를 쿠버네티스 YAML로 내보내는 명령 podman kube play = 쿠버네티스 YAML을 읽어 로컬에서 Podman Pod와 컨테이너로 실행하는 명령 층이 다른 두 도구를 이어 주는 것이 이 두 명령이다. 예전 이름은 podman generate kube , podman play kube 였고, 지금은 podman kube 아래로 모였지만 옛 이름도 별칭으로 동작한다. # 1. 로컬에서 손으로 만든 Pod를 쿠버네티스 YAML로 추출 podman kube generate myapp -f myapp.yaml # 2. 그 YAML(또는 동료가 준 매니페스트)을 로컬에서 그대로 실행 podman kube play myapp.yaml # 3. 같은 YAML 기준으로 정리 podman kube down myapp.yaml # 4. 같은 파일을 실제 클러스터에 적용 kubectl apply -f myapp.yaml podman run --pod ... (손으로 구성) → podman kube generate → myapp.yaml → podman kube play로 로컬 재현 / kubectl apply로 클러스터 배포 → 하나의 YAML이 로컬과 클러스터 양쪽의 기준이 됨 출처: Podman Desktop Blog (2026.09) 다만 kube play 는 쿠버네티스를 흉내 내는 것이지 쿠버네티스가 아니다. podman-kube-play 매뉴얼 에 정리된 지원 kind는 Pod, Deployment, PersistentVolumeClaim, ConfigMap, Secret, DaemonSet, Job 정도이고, Service·Ingress·HPA처럼 클러스터가 있어야 의미가 있는 오브젝트는 목록에 없다. Podman Desktop 블로그 도 kube play 는 쿠버네티스의 admission 정책(예: Pod Security Standard의 non-root 강제)을 검사하지 않으므로, 그건 Kind 같은 실제(로컬) 클러스터에서 확인하라고 짚는다. 4) systemd + Quadlet 기반 단일 머신 운영 Quadlet = .container , .pod , .kube 같은 선언형 파일을 읽어 systemd 서비스 유닛으로 자동 변환해 주는 Podman의 systemd generator 쿠버네티스가 없는 서버 한 대에서 "부팅하면 자동으로 뜨고, 죽으면 다시 살리고, 로그는 journald로"를 원한다면 Quadlet이 답이다. podman-systemd.unit 문서 에 따르면 rootless는 ~/.config/containers/systemd/ , rootful은 /etc/containers/systemd/ 아래의 파일을 읽어 같은 이름의 .service 를 만든다. # ~/.config/containers/systemd/hello.container [Unit] Description=Hello container [Container] Image=docker.io/library/nginx:1.27 PublishPort=8080:80 [Service] Restart=always [Install] WantedBy=default.target hello.container 저장 → systemctl --user daemon-reload (Quadlet generator 실행) → hello.service 자동 생성 → systemctl --user start hello → 컨테이너가 죽으면 systemd가 Restart=always에 따라 재시작, 로그는 journalctl --user -u hello 정리하면, 쿠버네티스에서 컨트롤러·kubelet이 하던 "원하는 상태 유지"를 한 대 머신 범위에서는 systemd가 맡는 구조다. 노드가 여러 대로 늘어나고 자동 스케일링·롤링 업데이트가 필요해지는 순간이 쿠버네티스로 넘어갈 시점이다. 3. 장점과 단점 한 줄로 요약하면 보안과 라이선스, 쿠버네티스 친화성은 Podman이 낫고, 생태계와 "그냥 되는" 경험은 아직 Docker가 낫다. 1) 장점 1 보안: 데몬 없음 + rootless가 기본값. 1장에서 본 것처럼 root로 상주하는 데몬이 없고, podman CLI와 podman machine init 은 기본이 rootless다. Docker도 Engine 20.10부터 rootless 모드를 제공하지만 직접 켜야 한다 . "기본값이 안전한 쪽"이라는 차이가 크다. 2 라이선스와 비용. Podman과 Podman Desktop은 Apache 2.0 오픈소스이고, Podman Desktop은 CNCF sandbox 프로젝트 다. 반면 Docker Desktop은 직원 250명 이상 또는 연 매출 1천만 달러 이상 기업이 업무에 쓰면 유료 구독이 필요하다 . 학생인 지금은 상관없지만, 회사에서 Docker Desktop 대신 Podman Desktop을 표준으로 깔아 주는 이유가 대부분 이것이다. 참고로 이 조건은 Docker Desktop에만 해당하고, 서버의 Docker Engine(CLI)은 해당되지 않는다. 3 쿠버네티스 친화성. Pod 개념, kube generate / kube play 로 로컬과 클러스터가 같은 YAML을 공유할 수 있다. Pod
velog
체리영어 운영팀이 만든 개발자 업무 영어 연습 자료입니다. 아래 티켓과 상황은 가상 예시입니다. 스탠드업에서 I'm working on it 만 반복하면 작업이 진행 중이라는 사실은 전달되지만, 동료가 도울 지점은 보이지 않습니다. 막힌 원인과 필요한 입력을 따로 말해 보세요. 1. 완료한 범위 I finished the unit tests for the parser. 파서의 단위 테스트를 마쳤습니다. 완료한 범위를 한 문장으로 제한합니다. 테스트가 끝났다는 말과 기능 전체가 배포됐다는 말은 다릅니다. 2. 현재 막힌 입력 I'm blocked on the staging credentials. 스테이징 접속 정보가 없어 막혀 있습니다. I'm blocked on + 필요한 것 으로 시작할 수 있습니다. 실제 비밀번호나 토큰을 회의 채팅·공개 글에 붙여 넣지 말고 팀에서 승인한 접근 절차를 요청합니다. 3. 상대에게 필요한 행동 Could someone from the platform team help me get the approved access? 플랫폼 팀에서 승인된 접근 권한을 받을 수 있도록 도와주실 수 있나요? 누가 도울 수 있는지, 무엇이 필요한지 드러냅니다. 상대 이름을 모른다면 담당자를 먼저 확인합니다. 4. 입력이 오면 할 다음 작업 Once I have access, I'll run the integration tests. 접근 권한을 받으면 통합 테스트를 실행하겠습니다. 접근 권한이 언제 올지 모르는 상태에서 완료 시각까지 단정할 필요는 없습니다. 조건이 바뀌면 진행 상황을 다시 알립니다. 네 문장을 한 번에 I finished the unit tests for the parser. I'm blocked on the staging credentials. Could someone from the platform team help me get the approved access? Once I have access, I'll run the integration tests. 팀에서 쓰는 정해진 형식이 있다면 그 형식을 먼저 따릅니다. 이 템플릿은 반드시 외워야 하는 공식이 아니라 모호한 상태를 작은 정보로 나누는 연습입니다. 3분 역할극 동료 역할에게 답변을 바꿔 달라고 합니다. I can help after lunch 라면 가능한 시간을 확인하고, Please ask the platform lead 라면 담당자에게 넘길 내용을 한 줄로 정리합니다. 같은 대본을 읽는 대신 받은 답에 맞춰 다음 행동을 말합니다. 가상 정보만 쓰세요. 체리영어는 강사를 직접 선택하는 1:1 화상영어입니다. 강사 소개와 가능한 시간을 확인하고 업무 상황을 역할극으로 연습하고 싶다고 알려 보세요. 실제 팀의 비공개 정보 대신 가상의 작업을 쓰면 됩니다. 체리영어 강사와 수업 안내 AI 보조로 구성한 학습 예시입니다. 취업·업무 성과나 영어 능력 향상을 보장하지 않습니다.
Балл: 54.4Уверенность: 49%
Подробнееvelog
평균 효과만 보면 놓치게 되는 것 지난 글에서는 Actor의 Belief를 그냥 prompt 안의 문장이 아니라: 저장 가능한 structured state 로 만들고, 가장 먼저: Known Belief ↓ Later Decision 이 가능한지부터 확인하기로 했다. 아직 Observation으로 Belief를 만드는 것도 아니고, Persistence를 보는 것도 아니었다. 질문은 단순했다. Belief 값만 바꿨을 때, 실제 선택도 예측 가능한 방향으로 달라지는가? 그리고 첫 결과만 봤을 때는 꽤 잘 된 것처럼 보였다. 1. 첫 실험은 1,664번 실행했다 구조는 꽤 크게 잡았다. Primary는: 32 parent scenarios × 5 belief levels × 2 decision contexts × 4 presentations = 1,280 calls 이었다. Belief level은: .1 .3 .5 .7 .9 다. 여기에: ABSENT diagnostic = 256 rule comprehension control = 64 belief-irrelevant control = 64 를 추가했다. 전체: 1,280 + 256 + 64 + 64 = 1,664 generations 이었다. 2. 기술적으로는 완벽하게 실행됐다 먼저 중요한 것. planned = 1664 attempted = 1664 committed = 1664 valid = 1664 invalid = 0 였다. Retry도 없었다. retry = 0 timeout = 0 missing = 0 duplicate = 0 즉 이후 이상한 결과를: JSON이 깨졌다 parser가 잘못 읽었다 응답이 누락됐다 같은 이유로 설명할 수는 없었다. 모델은 1,664번 모두 정상 형식으로 답했다. 3. 전체 효과만 보면 굉장히 좋아 보였다 Primary metric은: E_READ = R(.9) - R(.1) 이었다. 즉 Belief가 강한 FALSE 쪽일 때와, 강한 TRUE 쪽일 때 TRUE-aligned action 선택률이 얼마나 달라지는지 봤다. 결과: E_READ = 0.4921875 = +49.22pp 였다. 95% bootstrap interval도: [0.4648, 0.5195] 였다. 대략: +46.5pp ~ +52.0pp 범위였다. 처음 숫자만 봤을 때는 꽤 강해 보였다. 4. 32개 parent가 전부 같은 방향이었다 더 좋아 보이는 결과도 있었다. positive parents = 32 / 32 였다. 즉 32개의 parent scenario 모두, aggregate 기준으로는: HIGH belief > LOW belief 방향이었다. Family별 결과도 모두 양수였다. Family HIGH–LOW effect B1 +59.38pp B2 +51.56pp B3 +42.19pp B4 +43.75pp 이 정도만 보면: Belief State가 실제 행동에 꽤 잘 먹히는 것 아닌가? 라고 생각할 수 있다. 나도 처음에는 그렇게 봤다. 문제는 두 decision context를 따로 봤을 때 시작됐다. 5. 같은 Belief를 두 종류의 결정에 사용했다 지난 글에서 설명했듯, 하나의 Belief를 단순히 같은 형태의 문제에만 쓰지 않았다. 예를 들어: P = 북쪽 통로가 연결되어 있다 라는 Belief가 있다면, 첫 번째 context는: 연결된 통로를 선택한다 였다. 이 경우: P = TRUE → NORTH 가 맞다. 두 번째 context는 반대로: 연결되지 않은 통로를 선택한다 같은 구조였다. 이 경우: P = TRUE → SOUTH 가 맞다. 즉 같은 proposition을 사용하지만, 현재 goal에 따라 적절한 행동이 달라지게 만들었다. 이를: C1 C2 두 context로 나눴다. 6. C1은 거의 너무 잘 작동했다 C1의 endpoint 결과는: LOW belief (.1) = 0 / 128 = 0% HIGH belief (.9) = 128 / 128 = 100% 였다. 따라서: C1 effect = +100pp 였다. 말 그대로 완벽한 separation이었다. Belief LOW → FALSE 쪽 행동 Belief HIGH → TRUE 쪽 행동 이 정확하게 갈렸다. 이것만 보면 Belief Read는 성공처럼 보인다. 7. 그런데 C2는 거의 움직이지 않았다 C2는 완전히 달랐다. TRUE-aligned action rate: LOW belief (.1) = 119 / 128 = 92.97% HIGH belief (.9) = 117 / 128 = 91.41% 따라서: C2 effect = -1.56pp 였다. 즉: LOW ≈ HIGH 였다. Belief를 .1 에서 .9 로 바꿔도 C2에서는 선택이 거의 바뀌지 않았다. 8. +49%p의 정체는 ‘두 context에서 +49%p’가 아니었다 여기서 전체 결과를 다시 보면 이해가 된다. C1 = +100pp C2 = -1.56pp 두 context를 같은 비중으로 평균내면: (+100 - 1.56) / 2 ≈ +49.22pp 가 된다. 즉 전체: E_READ = +49.22pp 은 사실: 모든 상황에서 약 +49pp 정도의 안정적인 효과 가 아니었다. 실제 구조는: Context 1 → 완벽한 효과 Context 2 → 사실상 효과 없음 이었다. 이 차이가 이번 실험에서 가장 중요한 결과였다. 9. 32 / 32 positive parents 도 다시 봐야 했다 처음에는: positive parents = 32 / 32 가 굉장히 강한 generalization evidence처럼 보였다. 그런데 C1이 거의 모든 parent에서: +100pp 에 가까우면 이야기가 달라진다. 각 parent의 pooled effect가: (C1 effect + C2 effect) / 2 라면, C2가 거의 0이어도: (+100 + 0) / 2 = +50pp 가 된다. 즉 C1이 너무 강하면: C2가 실패해도 parent 전체 effect는 positive 가 될 수 있다. 그래서: 32 / 32 positive 는 실제 결과이지만, 이걸: 32개 scenario 모두에서 multi-context transfer가 성공했다. 라고 해석하면 안 됐다. 10. Family별로 C2만 봐도 같은 문제가 보였다 전체 family effect는 모두 좋아 보였다. Family Pooled effect B1 +59.38pp B2 +51.56pp B3 +42.19pp B4 +43.75pp 그런데 C2만 분리하면: Family C2 effect B1 +18.75pp B2 +3.13pp B3 −15.63pp B4 −12.50pp 였다. 원래 context effect 기준은: >= +20pp 였다. 따라서 C2 기준으로는: 0 / 4 families PASS 였다. 즉: 특정 family 하나가 문제였다 고 보기도 어려웠다. C2라는 구조 자체에서 광범위하게 문제가 나타났다. 11. Belief 값별 결과도 단순한 직선은 아니었다 전체 TRUE-aligned rate: Belief Rate .1 46.48% .3 45.70% .5 83.20% .7 97.66% .9 95.70% 단순한: .1 < .3 < .5 < .7 < .9 형태는 아니었다. 오히려 대략: .1 ≈ .3 ↓ 큰 점프 ↓ .5 ↓ .7 ≈ .9 에 가까웠다. Adjacent difference를 보면: .3 - .1 = -0.78pp .5 - .3 = +37.5pp .7 - .5 = +14.45pp .9 - .7 = -1.95pp 였다. 그래도 사전에 정의한: systematic middle reversal 기준에는 해당하지 않았다. 따라서 이걸 결과를 본 뒤: 새로운 실패 조건 으로 추가하지는 않았다. 그냥 중요한 diagnostic으로 남겼다. 12. 재미있는 결과 하나: ABSENT와 .5는 정말 달랐다 또 하나 꽤 흥미로운 결과가 있었다. BELIEF_ABSENT = 50.0% 반면: credence .5 = 83.20% 였다. 차이: ABSENT - .5 = -33.20pp 였다. 처음 설계할 때: BELIEF_ABSENT != credence .5 라고 정의했는데, 실제 behavior에서도 둘은 꽤 달랐다. 즉: 이 proposition에 대한 상태가 아예 없음 과: 이 proposition을 알고 있지만 현재 unresolved 상태 는 모델에게 동일하게 처리되지 않았다. 이건 main qualification을 살려주지는 못했지만, 구조적으로는 꽤 의미 있는 diagnostic이었다. 13. 단순한 A/B 코드나 위치 문제는 아니었다 Presentation도 따로 봤다. Presentation Success rate P1 69.38% P2 74.69% P3 71.88% P4 79.06% Nuisance gap은: code gap = 3.44pp position gap = 6.25pp 였다. 둘 다 큰 편은 아니었다. 또: belief-irrelevant endpoint gap = 0pp 였다. 즉 Belief 값을 넣기만 하면 아무 행동이나 밀어주는 식의 단순한 global effect도 관찰되지 않았다. 14. 그런데 rule comprehension이 또 실패했다 별도로: Belief 없이 주어진 rule과 state만 보고 정답 행동을 선택할 수 있는가? 를 확인하는 control을 넣었다. 결과: correct = 49 / 64 = 76.56% 였다. Frozen requirement는: >= 95% 였다. 즉: FAIL 이었다. 이 결과가 중요했다. C2가 안 움직인 이유가: Belief를 못 읽어서인지 아니면: Belief를 읽은 뒤 적용해야 하는 decision rule 자체를 잘 못 풀어서인지 분리하기 어려워졌기 때문이다. 15. 그래서 최종 판정은 성공이 아니었다 Frozen gate를 그대로 적용한 결과: ALL_FAILURES = [ C2_EFFECT, RULE_COMPREHENSION ] 였다. 최종 classification: MEASUREMENT_LIMITED 였다. 그리고: T2_ELIGIBLE = FALSE 가 됐다. 즉 다음 단계였던: Observation → Belief Write 실험으로 넘어가지 않았다. 16. 중요한 건 ‘Belief가 실패했다’는 결과가 아니라는 점이다 이번 결과를: Belief State는 안 된다 라고 해석하면 안 된다. 실제로는: C1 = +100pp 처럼 Belief와 행동 사이에 아주 강한 separation이 나타난 조건도 있었다. 문제는: C2 ≈ 0 Rule comprehension = 76.56% 였다. 따라서 정확한 결론은: structured Belief-associated behavior는 일부 조건에서 강하게 관찰됐지만, clean multi-context Belief Read를 검증하기 위한 measurement가 충분히 qualification되지 않았다. 이다. 다시 말하면: MEASUREMENT FAILURE != BELIEF FAILURE 이다. 17. 그래서 Observation → Belief 실험은 아직 시작하지 않았다 원래 다음 단계는: Observation ↓ Belief Update Proposal ↓ Commit ↓ Fresh Session ↓ Decision 이었다. 하지만 Read Path에서: Belief를 읽는 문제 vs Decision Rule을 이해하는 문제 가 분리되지 않은 상태에서 Write까지 넣으면, 원인을 더 알기 어려워진다. 그래서: Write = NOT_EVALUATED Persistence = NOT_EVALUATED Revision = NOT_EVALUATED 상태로 그대로 멈췄다. 이 세 개가 실패한 것이 아니다. 아직 시험하지 않은 것이다. 18. 이제 가장 먼저 확인해야 할 것이 바뀌었다 처음 질문은: Belief를 넣으면 행동이 달라지는가? 였다. 1,664번 실행한 뒤 질문은 달라졌다. C2 결과가 이상한 이유가 정말 모델 behavior 때문인가? 아니면: 정답 mapping이 틀렸나? scorer가 잘못됐나? A/B presentation이 뒤집혔나? C2 rule 자체가 모호했나? generator와 scorer가 같은 잘못된 가정을 공유하고 있나? 부터 확인해야 했다. 즉 새 실험을 바로 돌리는 대신, 이미 나온: 1,664 responses 를 전부 다시 뜯어보기로 했다. 다음 편 결과가 이상해서 1,664개 응답을 전부 다시 뜯어봤다 다음에는 model을 다시 돌리지 않았다. 대신: 실제 prompt public rule physical action A/B mapping raw response production scorer 를 처음부터 독립적으로 다시 연결했다. 결과는 조금 의외였다. mapping mismatch = 0 scoring mismatch = 0 ambiguous context = 0 production / independent agreement = 1664 / 1664 였다. 즉 처음 의심했던: “그냥 실험 코드가 잘못된 것 아니야?” 라는 설명이 점점 어려워졌다.
Балл: 54.4Уверенность: 49%
Балл: 54.4Уверенность: 49%