> ## Documentation Index
> Fetch the complete documentation index at: https://generaltranslation.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# v1에서 v2로

export const Button = ({href, children}) => {
  return <div className="not-prose group">
    <a href={href}>
      <button className="flex items-center space-x-2.5 py-1 px-4 bg-primary-dark dark:bg-white text-white dark:text-gray-950 rounded-full group-hover:opacity-[0.9] font-medium">
        <span>
          {children}
        </span>
        <svg width="3" height="24" viewBox="0 -9 3 24" class="h-6 rotate-0 overflow-visible"><path d="M0 0L3 3L0 6" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path></svg>
      </button>
    </a>
  </div>;
};

<div id="list-posts-lookup-standard-v11-compared-to-x-api-v2">
  ### 리스트 포스트 조회: 표준 v1.1과 X API v2 비교
</div>

표준 v1.1 [GET lists/statuses](https://developer.x.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-statuses) 엔드포인트를 사용해 왔다면, 이 가이드는 표준 v1.1 엔드포인트와 X API v2 엔드포인트 간의 유사점과 차이점을 이해하는 데 도움이 될 것입니다.

* **유사점**
  * 인증 방식
  * 요청 한도
* **차이점**
  * 엔드포인트 URL
  * App 및 Project 요구 사항
  * 요청당 데이터 객체 한도
  * 응답 데이터 형식
  * 요청 매개변수

<div id="similarities">
  #### 유사점
</div>

**인증**

두 버전의 엔드포인트는 모두 [OAuth 1.0a 사용자 컨텍스트](/ko/resources/fundamentals/authentication#oauth-2-0)를 지원합니다. 따라서 이전에 표준 v1.1 리스트 포스트 조회 엔드포인트 중 하나를 사용해 왔다면, X API v2 버전으로 마이그레이션하더라도 동일한 인증 방식을 계속 사용할 수 있습니다.

선호하는 인증 라이브러리/패키지에 따라 다를 수 있지만, App 전용 인증은 시작하기에 가장 간편한 방법이며, 간단한 요청 헤더 설정만으로 사용할 수 있습니다. App 전용 액세스 토큰을 생성하는 방법은 [이 App 전용 가이드](/ko/resources/fundamentals/authentication#bearer-token-also-known-as-app-only)를 참조하세요.

**요청 한도**

|                                                                                                                  |                                                                                                                                                                                 |
| :--------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Standard v1.1**                                                                                                | **X API v2**                                                                                                                                                                    |
| /1.1/lists/statuses.json<br /><br />OAuth 1.0a 사용자 컨텍스트 사용 시 15분당 900회 요청<br /><br />App 전용 인증 사용 시 15분당 900회 요청 | /2/lists/:id/tweets<br /><br />OAuth 1.0a 사용자 컨텍스트 사용 시 15분당 900회 요청<br /><br />OAuth 2.0 Authorization Code with PKCE 사용 시 15분당 900회 요청<br /><br />App 전용 인증 사용 시 15분당 900회 요청 |

<div id="differences">
  #### 차이점
</div>

**엔드포인트 URL**

* 표준 v1.1 엔드포인트:
  * GET [https://api.x.com/1.1/lists/statuses.json](https://api.x.com/1.1/lists/statuses.json)
    (지정된 리스트에서 Tweet 조회)
* X API v2 엔드포인트:
  * GET [https://api.x.com/2/lists/:id/tweets](https://api.x.com/2/lists/:id/tweets)
    (지정된 리스트에서 Tweet 조회)

**App 및 Project 요구 사항**

X API v2 엔드포인트는 요청을 인증할 때 [developer App](/ko/resources/fundamentals/developer-apps)과 [Project](/ko/resources/fundamentals/developer-apps)에 연결된 자격 증명을 사용해야 합니다. 모든 X API v1.1 엔드포인트는 Project에 연결된 App 또는 독립 App의 자격 증명을 사용할 수 있습니다.

**요청당 데이터 객체 한도**

표준 v1.1 /lists/statuses 엔드포인트는 요청당 최대 5000개의 포스트를 반환할 수 있습니다. 새로운 v2 엔드포인트는 요청당 최대 100개의 포스트를 반환할 수 있습니다. 기본적으로 100개의 사용자 객체가 반환되며, 결과 수를 변경하려면 1–100 사이의 숫자와 함께 max\_results= 쿼리 매개변수를 전달해야 합니다. 그런 다음 응답 페이로드에 반환된 next\_token 값을 다음 요청의 pagination\_token 쿼리 매개변수로 전달할 수 있습니다.

**응답 데이터 형식**

표준 v1.1과 X API v2 엔드포인트 버전 간 가장 큰 차이점 중 하나는 어떤 필드를 페이로드에 반환할지 선택하는 방식입니다.

표준 엔드포인트의 경우, 많은 응답 필드가 기본적으로 반환되며, 이후 매개변수를 사용해서 페이로드에 추가로 반환할 필드 또는 필드 집합을 지정할 수 있는 옵션이 있습니다.

X API v2 버전은 기본적으로 게시물 id와 text 필드만 제공합니다. 추가 필드나 객체를 요청하려면 [fields](/ko/x-api/fundamentals/fields) 및 [expansions](/ko/x-api/fundamentals/expansions) 매개변수를 사용해야 합니다. 이 엔드포인트에서 요청한 게시물 필드는 기본 게시물 객체에 포함되어 반환됩니다. 확장된 객체 필드는 응답 내 includes 객체에 포함되어 반환됩니다. 그런 다음 기본 객체와 확장 객체의 ID를 매칭하여, 확장된 객체를 기본 게시물 객체에 다시 연결할 수 있습니다.

다음은 가능한 게시물 필드 및 expansions 예시입니다:

* attachments
* author\_id
* context\_annotations
* created\_at
* geo
* lang

|                     |               |
| :------------------ | :------------ |
| **엔드포인트**           | **expansion** |
| /2/lists/:id/tweets | author\_id    |

각 가이드에서 이러한 새로운 매개변수에 대해 더 자세히 읽어 보시거나, [fields 및 expansions 사용 방법](/ko/x-api/fundamentals/data-dictionary#how-to-use-fields-and-expansions)에 대한 가이드를 참고하시기를 권장합니다.

또한 표준 v1.1 필드를 최신 v2 필드에 매핑하는 데 도움이 되는 [데이터 형식 마이그레이션 가이드](/ko/x-api/migrate/data-format-migration)도 제공합니다. 이 가이드는 특정 필드를 반환하기 위해 v2 요청에 함께 전달해야 하는 구체적인 expansion 및 field 매개변수를 알려 줍니다.

특정 필드를 요청하는 방식의 변경 외에도, X API v2는 [게시물(Post)](/ko/x-api/fundamentals/data-dictionary#tweet) 및 [사용자(user)](/ko/x-api/fundamentals/data-dictionary#user) 객체를 포함하여, API가 반환하는 객체에 대해 새로운 JSON 설계를 도입합니다.

* JSON 루트 레벨에서, 표준 엔드포인트는 게시물 객체를 **statuses** 배열로 반환하는 반면, X API v2는 **data** 배열로 반환합니다.

* 리트윗된 및 인용된 "statuses"를 참조하는 대신, X API v2 JSON은 리트윗된 및 인용된 Tweet을 참조합니다. **contributors** 및 **user.translator\_type**과 같은 많은 레거시 및 사용 중단 필드는 제거됩니다.

* 게시물 객체에서 **favorites**, 사용자 객체에서 **favourites**를 모두 사용하는 대신, X API v2는 **like**라는 용어만 사용합니다.

* X는 값이 없는 JSON 필드 값(예: **null**)은 페이로드에 기록하지 않는 규칙을 채택했습니다. 게시물 및 사용자 속성은 null이 아닌 값을 가진 경우에만 포함됩니다.

**요청 매개변수**

다음 표준 v1.1 요청 매개변수는 X API v2에서 대응되는 매개변수가 있습니다:

|                     |                                      |
| :------------------ | :----------------------------------- |
| 표준 v1.1             | X API v2                             |
| list\_id            | id                                   |
| slug                | 해당 없음                                |
| owner\_screen\_name | 해당 없음                                |
| owner\_id           | author\_id 값을 가진 expansions 매개변수로 요청 |
| since\_id           | 해당 없음                                |
| max\_id             | 해당 없음                                |
| include\_entities   | entities 값을 가진 tweet.fields 매개변수로 요청 |
| include\_rts        | 해당 없음                                |
| count               | max\_results                         |

***

<div id="code-examples">
  ## 코드 예제
</div>

<div id="get-posts-from-a-list-v2">
  ### 리스트에서 포스트 가져오기 (v2)
</div>

<CodeGroup dropdown>
  ```bash cURL theme={null}
  curl "https://api.x.com/2/lists/84839422/tweets?tweet.fields=created_at,public_metrics&max_results=100" \
    -H "Authorization: Bearer $BEARER_TOKEN"
  ```

  ```python Python theme={null}
  import requests

  bearer_token = "YOUR_BEARER_TOKEN"
  url = "https://api.x.com/2/lists/84839422/tweets"

  params = {
      "tweet.fields": "created_at,public_metrics",
      "max_results": 100
  }
  headers = {"Authorization": f"Bearer {bearer_token}"}

  response = requests.get(url, headers=headers, params=params)
  print(response.json())
  ```

  ```python Python SDK theme={null}
  from xdk import Client

  client = Client(bearer_token="YOUR_BEARER_TOKEN")

  # 리스트에서 포스트 가져오기
  for page in client.lists.get_tweets(
      "84839422",
      tweet_fields=["created_at", "public_metrics"],
      max_results=100
  ):
      for post in page.data:
          print(f"{post.created_at}: {post.text[:50]}...")
  ```

  ```javascript JavaScript SDK theme={null}
  import { Client } from "@xdevplatform/xdk";

  const client = new Client({ bearerToken: "YOUR_BEARER_TOKEN" });

  // 리스트에서 포스트 가져오기
  const paginator = client.lists.getTweets("84839422", {
    tweetFields: ["created_at", "public_metrics"],
    maxResults: 100,
  });

  for await (const page of paginator) {
    page.data?.forEach((post) => {
      console.log(`${post.created_at}: ${post.text?.slice(0, 50)}...`);
    });
  }
  ```
</CodeGroup>
