S3
S3는 늘 켜져 기다리는 서버이고, 나는 버킷 안의 파일만 관리한다
질문은 「내 미니 PC 대신 S3에 파일을 두면 무엇이 달라지나」였다. 내 PC에 Floci를 띄워 두고, 명령을 직접 쳐 보며 답을 세웠다.
처음 짐작은 「내 PC의 hello.txt를 남이 받아 가려면 웹서버가 있어야 한다」였다. 내 PC 쪽은 그대로 맞다. 그래서 S3 쪽도 내가 무언가를 띄워야 할 거라고 생각했다.
버킷을 만들기도 전에 대답이 왔다. 명령이 제대로 안 먹어서 버킷이 없는 채로 브라우저에서 http://localhost:4566/my-bucket/hello.txt를 열었는데, 이게 왔다.
<Error>
<Code>NoSuchBucket</Code>
<Message>The specified bucket does not exist.</Message>
<BucketName>my-bucket</BucketName>
...
</Error>
나는 웹서버를 띄우지 않았다. 그런데도 누군가 「그런 버킷은 없다」고 대답했다. 그래서 첫 답이 섰다. S3는 이미 켜져서 요청을 기다리고 있고, 나는 버킷을 만들어 그 안의 파일만 관리한다. aws s3 mb s3://my-bucket으로 버킷을 만들고 aws s3 cp로 파일을 올리자, 같은 주소에서 파일 내용 hello가 그대로 왔다.
두 번째 짐작은 「웹서버는 사람이 쓰고, S3는 프로그램이 쓴다」였는데, 반만 맞았다. 파일 이름을 빼고 버킷 주소 http://localhost:4566/my-bucket을 열자, 사람이 보는 화면이 아니라 정해진 양식의 XML이 왔다.
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Name>my-bucket</Name>
<Contents>
<Key>hello.txt</Key>
<LastModified>2026-11-06T13:01:05Z</LastModified>
<Size>16</Size>
...
</Contents>
</ListBucketResult>
이건 프로그램이 읽으라고 만든 양식이다. 그런데 바로 전에 파일 내용 hello는 사람인 나에게도 그대로 왔다. 그래서 고쳤다. 파일은 누구에게나 그대로 오고, 파일 목록이나 에러 같은 S3의 대답은 프로그램이 읽는 양식으로 온다.
그 양식을 읽어 주는 프로그램은 내 PC에 있었다. 같은 목록을 aws s3 ls s3://my-bucket으로 물으니 터미널에는 한 줄만 나왔다.
2026-11-06 22:01:05 16 hello.txt
이름과 크기는 XML과 같았다. 시간은 처음에 같다고 봤는데, 「시」 자리만 다시 보니 XML은 13, 터미널은 22였다. 9시간 차이다. XML 끝의 Z는 UTC라는 표시이고, 한국은 UTC보다 9시간 빠르다. 그러니까 S3는 UTC로 보냈고, 내 PC의 AWS CLI가 그 XML을 읽어 한국 시간으로 바꾸고 필요한 칸만 골라 한 줄로 보여 줬다.
정리하면 내 PC와 S3는 이렇게 다르다.
| 내 PC에 파일을 둘 때 | S3에 둘 때 | |
|---|---|---|
| 요청을 받는 서버 | 내가 띄운다 | S3가 이미 켜져 기다린다 |
| 내가 하는 일 | 서버와 파일 둘 다 | 버킷과 그 안의 파일만 |
| 목록 · 에러의 모양 | 내 웹서버가 정한다 | S3가 정한 XML 양식 |
| 사람이 보기 좋게 바꾸는 쪽 | 웹서버 | 내 PC의 프로그램(AWS CLI) |
- 웹서버를 띄우지 않았는데 S3가 대답한다. 버킷이 없으니 NoSuchBucket
- AWS CLI로 버킷을 만들고 hello.txt 를 올린다. 서버는 만들지 않았다
- 파일 주소로 물으면 파일 내용 hello 가 그대로 온다
- 버킷 주소로 물으면 사람이 보는 화면이 아니라 XML 목록이 온다. 시간은 UTC
- 같은 XML을 내 PC의 AWS CLI가 받아 한국 시간 한 줄로 바꿔 보인다
여기서 Claude가 알려 준 것은 두 가지다. 시간이 같다고 봤을 때 「시 자리만 다시 보라」고 짚어 준 것, 그리고 XML 끝의
Z가 UTC 표시라는 것이다. 「AWS는 UTC로 보낸다」와 「바꿔 준 건 내 PC의 AWS CLI다」는 내가 냈다. 실제 AWS의 S3에서 같은 결과가 나오는지는 아직 확인하지 않았다.
S3에서 아직 안 본 것
- 지금은 비어 있다. S3 섹션을 닫다가 생긴 「키도 없이
hello.txt가 열렸다, 실제 AWS에서도 그럴까」는 IAM에서 닫았다