AJAX, Fetch API, WebSocket, GraphQL - 인터페이스 통신 기술

정처기인터페이스SW개발
읽는데 약 5분 정도 소요
처음 쓰여진 날: 2025-07-12
마지막으로 고쳐진 날: 2025-07-31
이 글을 보러온 횟수: 69

요약

정보처리기사 실기 시험의 핵심 주제인 인터페이스 통신 기술을 완벽히 정리합니다. 비동기 통신의 근간인 AJAX부터 현대적인 Fetch API, 실시간 통신을 위한 WebSocket, 효율적인 데이터 요청을 위한 GraphQL까지 각 기술의 특징과 차이점을 알아봅니다.

💡 인터페이스 통신 기술은 클라이언트와 서버가 상호작용하는 방식을 정의하며, 정처기 실기 시험에서 각 기술의 목적과 특징을 비교하는 문제가 자주 나옵니다.

🔄 인터페이스 통신 기술

클라이언트와 서버가 데이터를 주고받기 위해 사용하는 다양한 통신 기술들입니다. 각 기술은 사용 목적과 특징이 다릅니다.

기술핵심 키워드주요 특징
AJAXXMLHttpRequest, 비동기, 일부 컨텐츠 리로드페이지 새로고침 없이 동적으로 화면 일부를 업데이트하는 개발 기법
Fetch APIPromise 기반, 내장 API, 간결한 문법XMLHttpRequest를 대체하는 현대적인 웹 표준 API
WebSocket양방향, 실시간, 서버 푸시(Server-Push)지속적인 연결을 통해 실시간으로 데이터를 주고받는 프로토콜
GraphQLAPI 쿼리 언어, Over-fetching 해결클라이언트가 필요한 데이터만 정확하게 요청하는 API 명세

1. AJAX (Asynchronous JavaScript and XML)

AJAX는 웹페이지 전체를 새로고침하지 않고도, 백그라운드에서 서버와 데이터를 비동기적으로 교환하여 동적으로 화면을 갱신하는 개발 기법입니다.

  • 핵심 역할: XMLHttpRequest 객체를 사용하여 서버에 요청을 보내고 응답을 받습니다.
  • 특징:
    • 페이지 깜빡임 없이 필요한 부분만 업데이트하여 사용자 경험(UX)을 향상시킴.
    • 이름에는 XML이 포함되어 있지만, 현재는 주로 가벼운 JSON 형식을 사용하여 데이터를 교환함.
    • AJAX는 특정 기술이 아닌, 여러 기술(JavaScript, DOM, Fetch/XHR 등)을 사용하는 패러다임에 가깝습니다.

2. Fetch API

Fetch APIXMLHttpRequest 객체를 대체하는 현대적인 브라우저 내장 API입니다. Promise 기반으로 설계되어 코드가 더 간결하고 가독성이 높습니다.

  • 특징:

    • 별도의 라이브러리 설치 없이 사용 가능.
    • Promise 기반으로 async/await 문법과 함께 사용되어 비동기 코드를 쉽게 관리할 수 있음.
    • 현재 웹 표준으로 자리 잡아 AJAX보다 더 많이 사용됩니다.
  • JavaScript 예시 (async/await 사용):

    javascript
    async function getUser(id) {
      try {
        // API에 GET 요청을 보냅니다.(**fetch** 사용)
        const response = await fetch(`https://api.example.com/users/${id}`);
    
        // 응답이 성공적이지 않으면 에러를 발생시킵니다.
        if (!response.ok) {
          throw new Error(`HTTP error! status: ${response.status}`);
        }
    
        // 응답 본문을 JSON으로 파싱합니다.
        const user = await response.json();
        console.log(user);
        return user;
      } catch (error) {
        console.error("Fetch error:", error);
      }
    }
    
    // 함수 호출
    getUser(1);

3. WebSockets

웹소켓(WebSockets) 은 클라이언트와 서버 간에 양방향 실시간 통신을 지원하는 프로토콜입니다.

  • 특징:
    • 한 번 연결이 수립되면 계속 유지(Persistent Connection)되어 데이터 교환이 자유로움.
    • 서버가 클라이언트의 요청 없이도 데이터를 보낼 수 있는 **서버 푸시(Server-Push)**가 가능.
    • 매우 낮은 지연 시간(latency)으로 실시간 채팅, 온라인 게임, 주식 시세 알림 등에 사용됨.

4. GraphQL

GraphQL은 API를 위한 **쿼리 언어(Query Language)**이자, 해당 쿼리를 처리하기 위한 런타임입니다. REST 아키텍처의 대안으로 등장했습니다.

  • 특징:
    • Over-fetching/Under-fetching 해결: 클라이언트가 필요한 데이터의 구조를 직접 정의하여 요청하므로, 불필요한 데이터 전송이 없음.
    • 하나의 엔드포인트(Endpoint)로 여러 종류의 데이터를 유연하게 요청 가능.
    • 강력한 타입 시스템을 기반으로 API 명세를 관리.
  • JavaScript 예시 (fetch 사용):
javascript
async function getProduct(id) {
  // 클라이언트가 필요한 데이터를 GraphQL 쿼리로 정의합니다.
  const query = `
    query GetProductById($id: ID!) {
      product(id: $id) {
        id
        name
        price
        description
      }
    }
  `;

  try {
    const response = await fetch("https://api.example.com/graphql", {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
      },
      // 쿼리와 변수를 body에 담아 보냅니다.
      body: JSON.stringify({
        query: query,
        variables: { id: id },
      }),
    });

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }

    const result = await response.json();
    console.log(result.data.product);
    return result.data.product;
  } catch (error) {
    console.error("GraphQL request error:", error);
  }
}

// 함수 호출
getProduct("prod-123");

📝 정처기 실기 대비 문제

기출
문제비동기식으로 웹 페이지의 일부 콘텐츠만 리로드하는 방식, HTML만으로 어려운 작업을 웹페이지에 구현 가능하게 하는 기법은 무엇인가?
답변
정답정답 보기
문제XMLHttpRequest를 대체하는 Promise 기반의 현대적인 웹 표준 API로, HTTP 요청/응답을 처리하는 데 사용되는 것은 무엇인가?
답변
정답정답 보기
문제클라이언트와 서버 간의 양방향 실시간 통신을 가능하게 하여, 서버가 클라이언트의 요청 없이도 데이터를 보낼 수 있는(Server-Push) 프로토콜은 무엇인가?
답변
정답정답 보기
문제클라이언트가 필요한 데이터만 정확하게 요청하여 Over-fetching 및 Under-fetching 문제를 해결하는 API를 위한 쿼리 언어는 무엇인가?
답변
정답정답 보기
문제웹페이지 전체를 새로고침하지 않고, 백그라운드에서 서버와 비동기적으로 데이터를 교환하여 화면 일부만 동적으로 갱신하는 개발 기법은 무엇인가?
답변
정답정답 보기