스크립트 유형 및 위치

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

많은 개발자에게 Roblox 스크립팅에 적응하는 기본적인 도전 과제는 파일 위치와 Script.RunContext 속성의 중요성입니다. 스크립트 유형, Explorer 내 위치 및 실행 컨텍스트에 따라 스크립트는 매우 다르게 동작할 수 있습니다. 특정 메서드 호출이 실패할 수 있으며, 게임 내 객체에 접근할 수 없거나 스크립트가 전혀 실행되지 않을 수 있습니다.

이러한 복잡성의 이유는 Roblox 게임이 기본적으로 멀티플레이어이기 때문입니다. 스크립트는 서버에서만 실행되거나 클라이언트에서만 실행되거나 두 곳에서 모두 공유될 수 있는 능력이 필요합니다. 시간이 지남에 따라 Roblox 플랫폼의 발전은 상황을 더욱 복잡하게 만들었습니다.

스크립트 유형

Roblox에는 세 가지 유형의 스크립트가 있습니다:

  • Script - 위치와 Script.RunContext 속성에 따라 서버 또는 클라이언트에서 실행되는 코드입니다.
  • LocalScript - 클라이언트에서만 실행되는 코드입니다. 실행 컨텍스트가 없습니다.
  • ModuleScript - 다른 스크립트에서 재사용할 수 있는 코드입니다. 실행 컨텍스트가 없습니다.

Script를 생성할 때 기본 실행 컨텍스트는 Legacy입니다. 즉, a) 서버 측 스크립트이며 b) ServerScriptService 또는 Workspace와 같은 서버 컨테이너에 있을 때만 실행됩니다.

  • 스크립트의 실행 컨텍스트를 Server로 변경하면 이제 ReplicatedStorage에서도 실행할 수 있지만, 권장하지 않습니다. 해당 위치의 내용은 클라이언트에 복제되므로 서버 측 스크립트에 적합하지 않습니다.
  • 스크립트의 실행 컨텍스트를 Client로 변경하면 ReplicatedStorage에서 실행할 수 있습니다. 또한 StarterCharacterScripts 및 StarterPlayerScripts에서도 실행할 수 있습니다. 그러나 스타터 컨테이너는 클라이언트에 복사되므로 원본 스크립트 및 복사본이 실행되며, 이는 바람직하지 않습니다.

스크립트 실행 컨텍스트를 변경하려면 Explorer에서 선택하고 Properties 창에서 값을 변경하십시오.

스크립트에 대해 표시된 RunContext 속성.

권장 사항

  • RunContext가 Client인 단일 Script를 ReplicatedStorage에 넣으십시오.

  • RunContext가 Server인 단일 Script를 ServerScriptService에 넣으십시오.

  • 가능한 한 많은 클라이언트 및 서버 코드를 위해 ModuleScripts를 사용하십시오. 이러한 모듈을 클라이언트 스크립트와 서버 스크립트에서 요구하십시오.

    이 접근 방식은 클라이언트와 서버 측에서 코드의 단일 진입점을 제공하여 조직을 단순화하고 문제 있는 모듈을 격리하거나 비활성화하기 쉽게 만듭니다. 각 ModuleScript에 start() 함수를 추가하여 모든 모듈이 코드 실행을 시작하기 전에 로드되도록 하십시오:

    샘플 서버 스크립트
    --!strict
    local ServerScriptService = game:GetService("ServerScriptService")
    local SampleModule = require(ServerScriptService.SampleModule)
    local AnotherSampleModule = require(ServerScriptService.AnotherSampleModule)
    SampleModule.start()
    AnotherSampleModule.start()
    샘플 모듈
    --!strict
    local CollectionService = game:GetService("CollectionService")
    local NPC_TAG = "npc"
    local SampleModule = {}
    local function setUpNpc(npc: Instance)
    -- 각 NPC 초기화
    end
    local function cleanUpNpc(npc: Instance)
    -- 이벤트가 발생할 때 실행
    end
    function SampleModule.start() -- 테이블에 함수 추가
    -- 태그 기반 설정을 위한 예제 루프
    for _, npc in CollectionService:GetTagged(NPC_TAG) do
    setUpNpc(npc)
    end
    -- 이벤트가 발생할 때 함수 실행
    CollectionService:GetInstanceAddedSignal(NPC_TAG):Connect(setUpNpc)
    CollectionService:GetInstanceRemovedSignal(NPC_TAG):Connect(cleanUpNpc)
    end
    return SampleModule
  • 코드를 공유하려면 ReplicatedStorage에서 ModuleScripts를 사용하고 클라이언트 스크립트와 서버 스크립트 모두에서 요구하십시오.

  • 게임에 필요하다면 ReplicatedFirst에서 단일 클라이언트 스크립트와 최소한의 ModuleScripts를 반복하여 로딩 화면을 구현하십시오. ReplicatedFirst에 대해 더 알아보려면 복제 순서를 참조하십시오.

  • LocalScripts는 가급적 적게 사용하십시오. 사용해야 하는 경우 StarterCharacterScripts, StarterPlayerScripts, StarterGui 또는 StarterPack에 넣으십시오.

    이러한 컨테이너의 스크립트는 한 위치에서 실행되는 것이 아니라 플레이어 컨테이너에 복제되므로 디버깅이 복잡해질 수 있습니다. 클라이언트 코드를 위해 ReplicatedStorage를 사용하면 Output 창에서 줄을 클릭하고 ReplicatedStorage.YourScript(스크립트의 안정적인 위치)로 이동할 수 있으며, Players.YourName.PlayerScripts.YourLocalScript(런타임에 스크립트가 복사된 일시적인 위치)로 이동하는 것보다 더 유리합니다.

  • Workspace의 인스턴스에 스크립트를 직접 연결하는 것을 피하십시오. 대신 인스턴스 태그를 사용하고 CollectionService를 사용하여 단일 ModuleScript에서 작업하십시오.

    주요 예외는 Creator Store에서 모델이나 패키지를 배포하는 경우입니다. 이 경우 인스턴스 계층 내에 스크립트를 포함해야 할 수 있으며, 각 스크립트에 대해 실행 컨텍스트를 지정하여 실행 방식의 모호성을 제거하십시오. 이 속성을 명시적으로 설정하면 다양한 위치에서 모델과 패키지가 제대로 작동할 가능성이 높아집니다.

예제 프로젝트 구조

Plant 참조 프로젝트는 대규모 복잡한 게임에서 코드를 어떻게 구성할 수 있는지를 보여줍니다. 이 프로젝트는 대부분의 코드를 재사용 가능한 ModuleScripts로 저장합니다.

스크립트 위치

LocationDescription
Workspace게임의 3D 세계를 나타냅니다. 객체에 직접 연결되어 그들의 행동을 제어하는 서버 스크립트를 실행할 수 있습니다.
ReplicatedFirst다른 모든 것보다 먼저 클라이언트에 복제되는 객체를 포함합니다. 이 위치는 로딩 화면을 표시하는 데 필요한 최소한의 객체와 클라이언트 스크립트에 이상적입니다.
ReplicatedStorage클라이언트와 서버 모두에 복제되는 객체를 포함합니다. 이 위치는 Scripts의 RunContext가 Client인 경우, 클라이언트 ModuleScripts, 그리고 서버와 클라이언트 모두에서 사용하고 싶은 ModuleScripts에 이상적입니다. LocalScripts는 이 위치에서 실행되지 않습니다.
ServerScriptService서버 스크립트를 포함합니다. 이 위치는 게임 로직 및 클라우드 저장소와 같은 서버 측 기능이나 객체에 접근해야 하는 스크립트에 이상적입니다.
ServerStorage서버 측 객체를 포함합니다. 이 위치는 게임에 참여할 때 클라이언트에 즉시 복제될 필요가 없는 큰 객체에 이상적입니다. 이 위치에서 스크립트는 실행되지 않지만, 서버 측 ModuleScripts를 여기에 저장할 수 있습니다.
StarterPlayer ⟩ StarterCharacterScripts캐릭터가 생성될 때 실행되는 LocalScripts를 포함합니다.
StarterPlayer ⟩ StarterPlayerScripts플레이어가 게임에 참여할 때 실행되는 LocalScripts를 포함합니다.
StarterGui클라이언트가 게임을 로드할 때 표시하는 GUI 요소를 포함합니다. LocalScripts는 이 위치에서 실행될 수 있습니다.
StarterPack일반적으로 Tools만 포함하지만, 플레이어 백팩을 설정하기 위한 LocalScripts도 포함할 수 있습니다.

이 이미지는 Explorer 창 위치가 클라이언트 스크립트를 포함할 수 있는지를 보여줍니다. ReplicatedFirst와 ReplicatedStorage는 Scripts를 RunContext가 Client인 상태로 포함할 수 있는 반면, Starter[] 컨테이너는 LocalScripts를 사용해야 합니다.

클라이언트에서 실행되는 스크립트 위치를 보여주는 다이어그램.
©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.