# 환경 변수

> sharedState로 Proxyman 스크립트 간에 데이터를 공유하고, $ 접두사를 붙여 API 토큰 같은 시스템 환경 변수를 스크립트에서 읽는 방법을 알아보세요.

## 1. 공유 상태 {#1-shared-state}

> **노트:** 공유 상태(sharedState)는 Proxyman이 지원하는 모든 macOS 버전에서 동작합니다 (**macOS 14 Sonoma 이상**).

전역 객체 **sharedState**를 사용하면 **onRequest()**와 **onResponse()** 사이, 그리고 **서로 다른 스크립트** 사이에서 상태를 공유할 수 있습니다.

* **sharedState**는 JS 객체(딕셔너리)입니다. **onRequest()**에서 원하는 키와 값을 할당한 다음, **onResponse()**나 **다른 스크립트**에서 데이터를 읽을 수 있습니다.

다음 코드는 아래 작업을 수행하는 방법을 보여줍니다.

* 전역 카운터를 가져와 스크립트가 실행될 때마다 값을 증가시키기
* Request와 Response 사이에서 데이터 공유하기

```javascript
function onRequest(context, url, request) {

  // Save some state to sharedState
  sharedState.url = url;
  sharedState.data = "custom";
  sharedState.info = {"username": "Proxyman"};
  
  // Increase the global counter
  var count = sharedState.count ?? 0;
  count += 1;
  sharedState.count = count;
  
  // Log
  console.log(sharedState);
  return request;
}

function onResponse(context, url, request, response) {

  // Receive it
  console.log("Custom data = " + sharedState.data);
  console.log("sharedState.count = " + sharedState.count);
  
  // Done
  return response;
}
```

> **노트:** Proxyman 2.25.0 이상에서는 **sharedState**를 서로 다른 스크립트 간에 사용할 수 있습니다. Proxyman을 종료하거나 \`clearSharedState()\` 함수를 호출할 때만 해제됩니다.

> **노트:** Proxyman 2.24.0 이전에는 **sharedState**가 스크립트를 실행하는 현재 플로우에서만 유지되며, 스크립트가 끝나면 해제됩니다.

모든 데이터를 지우려면 \`clearSharedState()\` 함수를 사용하세요.

```javascript
// Clear all data from sharedState object
clearSharedState();
```

## 2. 환경 변수 {#2-environment-variables}

Environment Variables 기능은 **Proxyman 3.8.0** 이상에서 사용할 수 있습니다.

* 스크립트에서 시스템 환경 변수를 읽을 수 있습니다.
* bash와 zsh를 지원합니다.

### 사용 방법 {#how-to-use}

1. `~/.zshrc` 또는 `~/.bashrc`에 환경 변수를 정의하세요

```bash
export ACCESS_TOKEN=AAABBBCCC
export PROXYMAN_PATH=/Users/my_user/Desktop/file-mapper
```

2\. 아무 스크립트나 열고 **More** 버튼 -> **Environment Variables** -> **Allow all scripts to access Environment Variables**를 선택하세요.

3\. **Reload**를 클릭해 최신 환경 변수 변경 사항을 불러오세요.

![Environment Variables가 열린 Proxyman Script Editor의 More 메뉴: Allow all scripts to access Environment Variables, Reload](https://proxyman.com/docs/assets/proxyman-script-environment-variables-menu.jpg)

_스크립트가 환경 변수를 읽도록 허용_

4\. `$` 접두사를 붙여 스크립트에서 환경 변수에 접근하세요

```javascript
async function onResponse(context, url, request, response) {
  console.log($PATH);
  console.log($ACCESS_TOKEN);
  console.log($PROXYMAN_PATH);
 
  // Done
  return response;
}
```

## 3. 추가 기능 {#3-additions}

* 시스템 환경 변수를 수동으로 다시 불러올 수 있습니다(Proxyman macOS 4.15.0 이상). 먼저 권한을 활성화하세요. **More** 버튼 -> **Environment Variables** -> **Allow all scripts to access Environment Variables**를 선택합니다.

```javascript
async function onRequest(context, url, request) {
  // manually reload to get the latest changes
  _reloadEnv();
  
  // get env
  console.log($PROXYMAN_ID)
  
  // Done
  return request;
}

```
