2P by GN⁺ | ★ favorite | 댓글 1개
  • 2024년 공개된 1996년 9월 Sega Channel 게임 이미지 CD 덕분에, 약 60MB 방송용 이미지에서 게임과 메뉴 데이터를 실제로 꺼내 볼 수 있게 됨
  • Sega Channel은 케이블망으로 Genesis 게임을 반복 송출하던 월정액 서비스였고, 사용자는 어댑터가 연속 데이터 루프에서 원하는 게임을 찾아 내려받는 방식으로 플레이함
  • 이미지 생성 체인은 MENUMAKR, PKSPREAD, NSF로 이어졌으며, 최종 인코딩을 맡은 NSF.EXE에 디버그 심볼이 남아 있어 분석의 돌파구가 됨
  • 복원은 NSF와 동일한 출력을 내는 C 프로그램을 만든 뒤, 역순 디코더로 파일을 분리하고 .SA 압축을 풀어 표준 Genesis ROM을 얻는 흐름으로 진행됨
  • 추출된 콘텐츠에는 Sega Channel 독점 게임 ChessmasterKlondike, 새 빌드, 워터마크가 붙은 ROM, 메뉴와 게임 설명 ROM이 포함됐고 모두 에뮬레이터에서 실행 가능한 상태가 됨

Sega Channel 서비스와 이미지 파일의 배경

  • Sega Channel은 1994년 6월부터 1998년 6월까지 운영된 게임 온디맨드 서비스였음
    • 전국 출시는 1994년 12월에 진행됨
    • 케이블 사업자에 따라 보통 월 10~15달러를 내고 매달 약 50개 Sega Genesis 게임 라이브러리에 접근할 수 있었음
    • 서비스 최고 가입자 수는 약 25만 명 수준이었음
  • 가입자는 Genesis에 연결하는 어댑터 카트리지를 받았고, 이 어댑터는 케이블 TV 선에 연결됨
    • 부팅 시 Sega Channel 신호를 찾고 게임 메뉴를 다운로드함
    • 메뉴 다운로드에는 보통 약 20초가 걸림
    • 게임을 선택하면 어댑터 RAM으로 약 1분 동안 다운로드됨
    • 내려받은 게임은 일반 소매 카트리지처럼 동작함
  • 전원을 끄거나 어댑터의 메뉴 버튼을 누르면 다운로드된 게임은 지워짐
    • 저장 데이터는 사용자가 다른 게임을 다운로드하지 않는 한 유지됨
  • Sega Channel에는 소매 게임 외에 Test Drives 섹션도 있었음
    • 출시 전 게임의 시간 제한 또는 콘텐츠 제한 버전을 플레이할 수 있었음
    • Sega Channel에서만 제공된 게임도 존재함

방송용 이미지가 만들어지고 전달되는 방식

  • Sega Channel 직원은 월별 게임 라인업과 게임 힌트, 매뉴얼, 뉴스, 디지털 팬아트 같은 콘텐츠를 선정함
  • 이후 콘텐츠는 Foley Hi-Tech로 전달됨
    • Foley Hi-Tech는 게임 메뉴 그래픽과 애니메이션을 만들고 월별 콘텐츠를 삽입함
    • 결과물은 약 60MB 크기의 게임 이미지 파일이었음
  • 게임 이미지는 CD로 구워져 콜로라도 덴버의 위성 업링크 시설로 보내짐
    • CD는 업링크 게임 서버 컴퓨터에 설치됨
    • 서버는 게임 데이터를 위성으로 계속 루프 송출함
    • 미국 전역의 케이블 헤드엔드는 위성 신호를 받아 가입자에게 전달함
  • 케이블 TV 사업자가 가입자로부터 데이터를 받을 수 없던 환경에서, 연속 루프 송출이 서비스의 상호작용 방식을 결정함
    • 사용자가 게임을 선택하면 어댑터는 Sega Channel 데이터 스트림에서 해당 게임 데이터를 찾아냄
  • 약 60MB 게임 이미지는 2개의 6Mbps 캐리어를 사용해 약 12Mbps로 전송됨
    • 신호 문제가 없으면 사용자는 데이터 한 루프 안에 선택한 게임을 플레이할 수 있었음
    • 메뉴는 더 빨리 내려받을 수 있도록 데이터 스트림에 중복 사본이 들어감

1996년 9월 게임 이미지 CD 발견

  • 2024년 11월 Sonic Retro 포럼 사용자 RisingFromRuins가 오래전 구입한 PC 장비 더미를 확인하던 중 1996년 9월 Sega Channel 게임 이미지 CD를 발견함
  • 그는 CD 사진을 올리고 디스크의 게임 이미지 파일 사본을 업로드함
  • 분석 목표는 이미지 파일에서 데이터를 추출해 독점 게임이나 프로토타입 게임이 있는지 확인하는 것이었음
  • 처음에는 헥스 에디터로 이미지 파일을 확인함
    • Genesis 게임에는 표준 ASCII 헤더가 있고, 게임 힌트와 다운로드 가능한 매뉴얼도 읽을 수 있을 것으로 예상했음
    • 실제 파일에서는 읽을 수 있는 문자열이 보이지 않음
    • 이미지 파일이 스크램블되었거나 암호화되었을 가능성이 커짐

개발 도구 CD에서 찾은 이미지 생성 체인

  • 2017년 사용자 tdijital이 Foley Hi-Tech의 Sega Channel 개발 자료 백업 CD를 공개한 것이 중요한 단서가 됨
    • 이 CD에서는 Primal Rage 콘테스트 버전, 일본판 Sega Channel 퀴즈 게임, 1994년 12월~1996년 1월 메뉴 데모 ROM 등이 확인된 적이 있었음
    • 개발 도구 자체는 깊게 분석되지 않은 상태였음
  • Genesis 쪽 다운로드 코드를 역공학하는 대신, 게임 이미지를 만든 도구를 역공학하는 접근을 택함
  • 이미지 생성 흐름은 세 단계였음
    • MENUMAKR: 게임, 설명, 뉴스 텍스트, 아트, 음악 등을 추가해 메뉴 바이너리와 MENUSPIN.BAT 스크립트 파일을 만듦
    • PKSPREAD: Scientific Atlanta가 만든 프로그램으로, MENUSPIN.BAT 내용을 검증하고 PMAP.DAT를 출력함
    • NSF: PMAP.DAT를 사용해 입력 파일을 인코딩하고 최종 게임 이미지 파일을 생성함
  • Scientific Atlanta는 Sega Channel 방송 장비와 카트리지 어댑터 제작에서 Sega와 협력한 케이블 장비 회사였음
  • 분석의 핵심 대상은 최종 이미지 파일을 만드는 NSF.EXE였음

NSF.EXE 리버스 엔지니어링

  • NSF.EXE는 디버그 모드로 컴파일되어 있었고 최적화가 꺼져 있었으며 심볼도 실행 파일에 포함되어 있었음
    • Borland C++ 4.1로 컴파일된 프로그램이었음
    • IDA Pro가 디버그 심볼을 자동으로 인식하지 못해 Turbo Debugger에서 심볼을 확인하고 수동으로 옮김
  • 바로 디코더를 작성하지 않고, 먼저 NSF.EXE와 동등한 프로그램을 작성함
    • DOS NSF.EXE가 만든 이미지와 바이트 단위로 동일한 출력을 만들 수 있으면 알고리듬을 올바르게 파악한 것으로 볼 수 있었음
    • 테스트 게임 이미지 파일을 만들고 출력이 일치하도록 구현함
  • 하루 작업과 며칠 저녁 디버깅 끝에 NSF.EXE와 같은 출력을 내는 C 프로그램을 작성함
    • IDA와 Visual Studio를 함께 열고 어셈블리에 최대한 가깝게 맞추는 방식으로 구현함
    • 원본과 같은 컴파일 바이너리를 만드는 데는 목표를 두지 않았음
    • 구현에는 C99 선언과 stdint.h 타입을 사용했기 때문에 Borland C++ 4에서 그대로 컴파일되지 않을 가능성이 있음

NSF의 전송용 인코딩 방식

  • NSF의 GetData 함수는 PMAP.DAT에서 패킷별 입력 파일, 파일 내 위치, Sega Channel 메타데이터를 가져옴
    • 메타데이터에는 파일 ID와 시간 제한 데모의 플레이 가능 시간 등이 포함됨
    • 이후 데이터 파일에서 246바이트 청크를 읽음
  • LoadFrame 함수는 데이터 패킷 앞에 헤더를 붙이고 모든 데이터 바이트를 뒤집음
    • 바이트 반전은 데이터 전송 관련 처리이거나 패킷 내용을 가리기 위한 처리일 수 있음
    • 게임 데이터 중간에는 BCH 오류 정정 코드와 패리티 비트가 삽입됨
    • 그 결과 246바이트 데이터가 288바이트로 확장됨
  • 헤더에는 여러 필드가 들어감
    • GameTimeSyncGameTimeBit는 게임 시간 제한 값을 비트 단위로 전달함
    • ServiceID는 보통 1이며, Express Games와 관련이 있을 가능성이 있음
    • FileID는 게임 이미지 안의 각 파일을 고유하게 식별하며 메뉴는 항상 파일 0임
    • Address는 어댑터가 파일을 RAM 어디에 다운로드할지를 나타냄
    • HeaderCRCHeader Copy도 포함됨
  • InterLeave 함수는 패킷을 450비트 청크로 나누고 각 청크의 비트를 섞음
    • 버스트 오류를 더 고르게 분산해 오류 정정이 잘 동작하게 하려는 처리로 보임
  • 이 과정은 10개 패킷 단위로 반복됨
    • 10개 패킷은 2880바이트 프레임으로 묶임
    • 프레임은 패킷 0의 첫 2바이트, 패킷 1의 첫 2바이트처럼 데이터를 엮은 뒤 디스크에 기록됨
    • 같은 처리가 전체 이미지 파일이 생성될 때까지 이어짐

디코딩과 압축 해제

  • NSF 동작을 파악한 뒤, 과정을 역순으로 되돌리는 디코더 프로그램을 작성함
    • 디코더는 이미지에서 개별 데이터 파일들을 추출함
  • 처음 나온 디코더 출력은 유효한 Genesis ROM 데이터가 아니었음
    • 게임 데이터가 전송 전에 압축되어 있었기 때문임
  • ROM 압축 도구는 Foley Hi-Tech CD 안의 GAMEEDIT.EXE였음
    • 이 도구 자체를 다시 역공학할 필요는 없었음
    • GitHub 사용자 Octocontrabass가 이미 .SA 압축 형식을 역공학해 둔 상태였음
  • Octocontrabass의 unsa 도구로 .SA 파일을 표준 ROM 파일로 압축 해제함

1996년 9월 이미지에서 나온 게임과 콘텐츠

  • 가장 눈에 띄는 결과는 1996년 9월 방송된 Sega Channel 독점 게임 2개였음
    • Chessmaster: 1990년대 여러 플랫폼에 있었지만 Genesis에는 없던 체스 게임
    • Klondike: Sega가 Sega Channel용으로 의뢰했고 Pitfall로 알려진 David Crane이 프로그래밍한 솔리테어 게임
  • 이미지 안의 게임은 여러 범주로 분류됨
    • 독점 콘텐츠: Chessmaster, Klondike, Olympic Summer Games - Test Drive, Sega Channel Game Guide
    • 새 빌드: Bugs Bunny in Double Trouble, OutRunners, Super Volleyball, World Series Baseball '96
    • 기존 덤프와 패딩만 다른 항목: Flashback, Phantasy Star II, The Punisher
    • 워터마크가 추가된 기존 덤프: Alex Kidd in the Enchanted Castle, Ecco - The Tides of Time, Sonic & Knuckles 등
    • 기존 덤프와 일치하는 다수의 게임: Castlevania - Bloodlines, Streets of Rage 2, ToeJam & Earl, X-Men, Ys III 등
  • Sonic Retro의 Black Squirrel은 1996년 9월 메뉴를 에뮬레이터에서 실행하는 방법을 찾음
    • Sega Channel 데모 카트리지 ROM의 0-0x1003FF 바이트를 복사하고, 게임 이미지의 메뉴 데이터를 뒤에 붙이는 방식임
    • 다운로드 기능은 동작하지 않지만 메뉴는 둘러볼 수 있음
  • 마지막 콘텐츠는 게임 설명 ROM이었음
    • 일반 Genesis ROM처럼 보였지만 에뮬레이터에서 실행하면 검은 화면만 나왔음
    • 원인은 일반 카트리지처럼 주소 0 기준이 아니라 0x100000 기준으로 링크되어 있었기 때문임
    • Sega Channel 어댑터 메모리에서 직접 실행되도록 만들어진 것으로 보임
    • 헤더 뒤에 0을 추가해 코드가 헤더의 벡터와 맞게 정렬되도록 하자 에뮬레이터에서 실행됨
    • 실행 후에는 각 게임의 내부 이름이 보이는 개발자용 메뉴가 나타남
  • 이 과정을 거쳐 게임 이미지 파일의 모든 콘텐츠를 에뮬레이터에서 실행할 수 있게 됨

댓글과 토론

Hacker News 의견들
  • 이 시스템은 방송 TV 신호의 수직 귀선 구간에 데이터를 실어 보내고, 이를 지원하는 TV나 하드웨어가 해석하던 Teletext와 꽤 비슷함
    Teletext는 1980~1990년대 유럽 전역에서 널리 쓰였고, 보통 뉴스·날씨 같은 정보 페이지를 TV에서 바로 보는 용도였음. BBC의 Ceefax Teletext 서비스는 적절한 Teletext Adapter를 장착한 BBC Micro에 소프트웨어를 배포하는 데도 쓰였음
    Sega Channel처럼 Teletext도 반복 루프로 데이터를 방송했고, 뉴스·날씨처럼 인기 있는 페이지는 자주 반복돼 빨리 로드됐으며 덜 인기 있는 페이지는 다음 루프를 기다리느라 더 오래 걸렸음
    Sega 시스템의 비트레이트가 1990년대 중반 기준으로 꽤 높아 보이는 8Mbps였다는 점이 흥미로웠는데, 약 15년 더 오래된 PAL 방송용 Teletext도 거의 7Mbps였음
    https://en.wikipedia.org/wiki/Teletext
    https://en.wikipedia.org/wiki/Ceefax
    https://en.wikipedia.org/wiki/BBC_Micro_expansion_unit#Telet...
    • Teletext의 순간 비트레이트는 6.9Mbit였지만, 수직 귀선 구간의 프레임당 몇 줄에서만 동작했음
      연속 대역폭은 324Kbit에 불과했고, Sega Channel과 비슷한 당시 접근법의 핵심 혁신은 TV 채널 하나 전체를 데이터 전용으로 할당한 데 있었음
    • 독일에서는 Teletext가 아직도 매우 활발해서 거의 모든 채널이 제공함
      온라인에서 더 찾아볼 만한 헤드라인이나 스포츠 결과를 빠르게 확인하려고 거의 매일 쓰는데, 망가진 뉴스 웹사이트들보다 더 빠르고 탐색하기 쉬운 경우가 많다는 점이 재미있음
    • Sega 시스템의 8Mbps는 케이블 TV 기반이라 일반 방송 TV에 비해 그렇게 얻기 어려운 속도는 아니었음
      이 시기 케이블 인터넷도 6MHz 채널당 하향 40Mbps 수준으로 출시됐음
    • “Digitiser”에 대한 오래된 기억이 떠올랐고, 여기까지 찾아가게 됨
      https://teletextart.co.uk/artists/paul-rose-mr-biffo
  • 초등학생 때 어떻게 부모님을 설득해서 이걸 설치했는지 모르겠지만, 이후 만난 사람 중 이걸 들어본 사람이 한 명도 없었음
    흥미로운 기술이 들어간 줄도 몰랐고, 위성을 썼다는 것도 전혀 몰랐음. 버지니아에선 적어도 내 기준으로는 서비스가 정말 불안정해서, 사용한 1~3개월 동안 고객지원에 계속 전화해야 했음
    인용된 설명에 따르면 모든 콘텐츠를 Foley Hi-Tech에 보내면 게임 메뉴 그래픽·애니메이션과 월간 콘텐츠를 넣어 약 60MB짜리 “game image” 파일을 만들고, 이를 CD로 구워 콜로라도 덴버의 위성 업링크 시설로 보냈음. 이 CD를 업링크 게임 서버 컴퓨터에 넣으면 게임 데이터가 위성으로 반복 전송됐고, 미국 전역의 케이블 헤드엔드가 이를 받아 가입자에게 보냈음. 당시 케이블 TV 사업자는 모든 가입자에게 데이터를 보낼 수는 있었지만 특정 가입자가 어떤 게임을 내려받고 싶은지 같은 상향 데이터는 받을 수 없었기 때문에, 이런 반복 루프 전송으로 “상호작용성”을 구현했음
    • 이건 흥미롭지만 거의 틈새에 가까운 물건이었음
      사촌들이 기기와 서비스를 갖고 있어서 자주 했지만, 몇 년 뒤 학교 친구들에게 설명하려 하면 아무도 들어본 적이 없어서 어려웠음. 솔직히 그 시점엔 Genesis가 뭔지 아는지도 반반이었고, 고등학교 때쯤 사진이 딸린 제대로 된 설명을 온라인에서 찾고 나서야 Sega Channel이라는 이름을 알게 됨
    • Sega Channel을 가진 사람은 한 명도 몰랐고, 존재를 알게 된 것도 출시 즈음 Sega Power를 구독하고 있어서 잡지에서 다뤘기 때문이었음
      기사에서는 정점에 가입자 25만 명이 있었다고 하지만, 내 작은 세계에서는 사실상 0명이나 마찬가지였음. 서비스 가입자가 25만 명이나 되는데 실제로 쓰는 사람이 있다는 증거를 거의 못 보는 상황은 지금이라면 상상하기 어려움
      오늘 Sega Channel이 출시됐다면 그 25만 명은 소셜미디어에 올리고, 전용 서브레딧을 만들고, YouTube 리뷰 영상을 올리고, Twitch에서 생중계했을 것임. 조금이라도 관심 있는 사람이라면 사용자들이 만든 콘텐츠를 접했을 테니, 인터넷이 세상을 정말 작게 만들었음
    • 게임 데이터를 위성으로 전송한 건 아주 이국적인 선택까지는 아니었을 것 같음
      케이블 헤드엔드들은 이미 위성으로 전달되는 전국 채널을 받도록 구성돼 있었을 테니 그렇게 한 듯함. 게임 서버를 중앙에서 제어하면 대회 같은 시간 한정 이벤트용 게임 이미지도 바꿀 수 있었음
      미국 외 지역에서는 Sega가 더 단순하게 각 헤드엔드에 게임 서버를 두고 매달 CD를 우편으로 보내는 방식을 썼음. 당시 케이블 TV는 아날로그였기 때문에 Sega Channel이 나오기 전까지는 케이블 사업자들이 신호 잡음을 심각하게 신경 쓸 필요가 별로 없었고, 특정 지역에서 불안정했던 것도 말이 됨
  • 6학년 때 친구가 갖고 있던 Sega Channel이 기억남
    BBS를 접하며 자라진 않았고, 인터넷도 전년도에 같은 친구를 통해 처음 알았기 때문에 게임을 내려받는다는 발상이 꽤 충격적이었음. 그 서비스는 시대를 한참 앞서 있었음
    기억하기로는 월 15달러였고, 게임은 월간 또는 주간으로 바뀌었으며 출시 전 게임도 일부 포함됐음. 한때 Vectorman을 매장에 막 나왔거나 정식 출시 직전에 플레이했던 것 같음
  • BillyTime! Games가 공개하는 여러 Sega Channel 관련 자료를 따라보고 있음
    서비스가 살아 있을 때 친구가 TWC를 통해 쓰는 걸 봤고 정말 멋지다고 생각했음
    시스템 구성, 특히 대역 외 신호가 쓰였는지 같은 세부 정보가 더 나오면 좋겠음. 그래야 dreampi가 webtv를 “재활성화”하게 해준 것처럼 이 서비스도 실제로 재현 가능할지도 모름
  • 1990년대에 한두 달 정도 써봤는데 정말 대단했지만 조금 까다로웠음
    이웃이 바깥에서 케이블을 분기하자 작동이 멈췄고, apparently 전용 회선이 필요했던 듯함
    • Sega Channel과 다른 상호작용형 서비스가 등장하면서 케이블 설비 유지보수가 강제로 밀려나듯 개선됐음
      작은 파란 고슴도치가 케이블 인터넷의 길을 닦았다고 누가 생각했겠음 ;)
  • 하드웨어에는 궁금한 사람을 위해 말하자면 4MB RAM이 들어 있었던 듯함
    • 4MB는 콘솔의 ROM 주소 공간 최대 크기라서, 4MB를 넘기려고 뱅크 전환을 쓴 몇몇 게임, 사실상 Super Street Fighter II 정도를 빼면 어떤 Genesis 게임도 이 서비스로 배포할 수 있었을 것임
      1994년에 비교적 저렴한 소비자 전자기기에 4MB RAM을 넣는 건 꽤 큰 비용이었으니, 일부는 Sega가 보조하고 나머지는 구독료로 회수해야 했을 것 같음
    • 그 정도면 꽤 큼
      당연히 전체 게임은 기본 내장 64KB 일반 RAM에 들어갈 수 없었으니 어딘가에 넣어야 했음
      Sega Channel은 한 번밖에 못 써봤음. 잡지를 읽어서 알고는 있었는데, 추수감사절 가족 모임에 갔더니 사촌들이 갖고 있었음. 테스트 시장이었는지는 모르겠고, 몇 년도였는지도 기억나지 않아 전국 배포 전이었는지도 모르겠음
      당시엔 작동 방식을 이해했는지 모르겠음. 케이블 모뎀이 이미 존재하기 시작했을 수도 있어서, 실제 양방향 통신이라고 생각했을 가능성이 큼
      집에 있었다면 정말 갖고 싶었을 것임. Sonic 3-D Blast를 처음 플레이한 곳이 Sega Channel이라서, 내 기억 속에서는 둘이 항상 연결돼 있음
  • 채널을 예를 들어 5분 정도 녹화해뒀다가 게임을 로드하고 싶을 때 재생할 수 있었을지 궁금함
    매달 새 게임이 들어온다고 가정하면, VHS 하나에 1년치 게임을 넣을 수 있었을지도 모름
    • VCR로는 신호를 잡을 수 없었을 것임. TV까지 도달하는 형태가 아니었기 때문임
      케이블 박스에 들어가기 전의 변조된 케이블 신호를 어떻게든 녹화해야 했을 것임
    • Teletext와 비슷하다면 일반 VHS에는 대역폭이 부족했을 것임
      SVHS라면 어느 정도 가능성이 있었겠지만, Teletext와 달리 정상적인 TV 신호 프레임 구조가 아닐 수도 있어서 일반 튜너나 녹화 회로도 문제가 생겼을 수 있음
    • 진짜 채널이 아니었기 때문에 불가능했음
      케이블 시스템에서 6MHz “채널” 두 개에 해당하는, 케이블 TV 주파수 계획 안의 6MHz 폭 두 지점을 차지하긴 했지만, 실제 RF 변조는 NTSC 튜너에는 잡음 말고는 알아볼 수 없는 형태였을 것임
    • 일반 VHS 카세트로는 안 됐을 것임. 수직 귀선 구간에도 데이터를 전송했기 때문임
      채널 신호를 원시 형태로 캡처할 방법이 있었다면 가능했을 수 있지만, 1995년 기준으로는 꽤 비싼 하드웨어가 필요했을 것임
  • SNES에도 일본에서만 제공된 StellaView라는 비슷한 서비스가 있었음
    기억하기로는 실시간 farro와 시간 제한 Legend of Zelda 1 완주 같은 게 있었음
    예전에 이 게임들의 ROM을 해본 적이 있는데, Legend of Zelda 버전은 A Link to the Past 그래픽으로 다시 만들어져 꽤 잘 나왔음
    https://en.m.wikipedia.org/wiki/Satellaview_games_from_The_L...
  • Nabu 컴퓨터가 작동하던 방식과 공통점이 많아 보임
    특히 케이블 회사로 데이터를 다시 업로드할 수 없다는 한계를 피하려고 프로그램을 연속 루프로 흘려보낸 점이 비슷해서 정말 멋짐
  • 아버지가 General Instrument에서 Sega Channel 작업을 했지만, 아이러니하게도 우리 집 케이블 사업자가 형편없어서 실제로는 서비스를 쓸 수 없었음
    • 기사에서는 업로드된 게임 이미지 CD가 그 서비스의 Scientific Atlanta 버전이어서 그쪽에만 집중했음
      개발 도구 CD의 데이터를 보면 General Instrument용 게임 CD는 게임 ROM 파일이 들어 있는 비밀번호 걸린 ZIP 파일만 담고 있었던 것 같음. 처리, 스크램블링 같은 작업은 CD에서 서버 하드디스크로 데이터를 읽어 들일 때 게임 서버 쪽에서 모두 수행했을 듯함