본문 바로가기
유니티

Unity 공지사항 시스템 개발 - Unity ↔ REST API 연동 핵심 기술 정리

by 유니티세상 2025. 8. 8.
반응형

 전체 흐름 요약

[Node.js (Express 서버)]

 ↓ REST API로 JSON 제공

[Unity (NoticeManager)]

 ↓ UnityWebRequest로 API 호출

 ↓ JSON 파싱 (공지사항 리스트로 변환)

 ↓ UI_Notice에서 리스트 출력

 


📌 핵심 기술 요약

기술 설명 예시
Awaitable Unity에서 async/await를 사용 가능하게 해주는 유틸리티 (UniTask 등) await Awaitable.Seconds(1)
UnityWebRequest HTTP 요청을 보내는 Unity 내장 클래스 UnityWebRequest.Get(url)
NoticeListWrapper JSON 리스트를 파싱하기 위한 C# 래퍼 클래스 JsonUtility.FromJson<Wrapper>(json)
async/await 비동기 처리 키워드 public async void Start() { await ... }
Node.js JS로 백엔드 서버를 실행할 수 있는 런타임 node server.js
REST API 서버-클라이언트 통신을 위한 HTTP 규칙 GET /notice, POST /login

 

🧩 기술별 상세 정리


1. Awaitable

  • Unity에서 async/await 문법을 쓸 수 있도록 도와주는 확장 유틸리티 또는 라이브러리 (Unity.Awaitable, UniTask 등)

  • Unity에서 Coroutine 대신 async 기반의 깔끔한 비동기 처리를 가능하게 함

  • UnityWebRequestAddressable, SceneManager.LoadSceneAsync 등 느린 작업들을 멈추지 않고 기다릴 수 있음

await Awaitable.NextFrame();

await Awaitable.Seconds(1);

 


2. UnityWebRequest

  • Unity에서 HTTP 요청을 보내는 공식 클래스 (REST API와 통신할 때 사용)

  • 서버로부터 데이터 받기(GET), 데이터 전송하기(POST 등), PUT, DELETE 등 HTTP 메서드 지원
  • 외부 서버(공지사항, 게임정보 등)와 통신하는 기능을 Unity에 구현

  • WebGL에서도 사용 가능하지만 CORS 설정 필수

UnityWebRequest req = UnityWebRequest.Get("http://localhost:3000/notice");

await req.SendWebRequest();

 


3. NoticeListWrapper

  • JSON 구조가 { "notices": [...] }일 때, Unity는 바로 List로 파싱할 수 없어서 래퍼 클래스가 필요
  • 서버에서 받은 JSON 데이터를 Unity에서 정확하게 파싱하기 위한 래퍼 클래스
  • JsonUtility.FromJson()은 JSON 구조가 C# 클래스와 1:1로 일치해야 하므로, 최상위 배열을 감싸는 Wrapper가 필요
  • Unity의 JsonUtility는 JSON 루트가 리스트 형태일 경우 파싱하지 못함

[System.Serializable]

public class NoticeListWrapper

{

    public List<NoticeInformation> notices;// "notices"라는 키와 일치해야 함

}

NoticeListWrapper wrapper = JsonUtility.FromJson<NoticeListWrapper>(json);

 


4. async / await (C# 비동기 함수 키워드)

  • C# 비동기 처리 키워드

  • await 키워드를 만나면 작업이 끝날 때까지 기다리고, 다른 코드는 계속 실행됨, 비동기 처리를 할 수 있게 함
  • 웹 요청, 씬 로딩 등 오래 걸리는 작업을 중단 없이 처리할 수 있음

public async void Start()

{

    await FetchNoticeListAsync(...); // 작업이 끝날 때까지 기다림

}

 


5. Node.js

  • 자바스크립트를 브라우저가 아닌 서버에서도 실행할 수 있게 하는 런타임

  • 빠르고 가볍게 API 서버 구축 가능
  • Unity는 데이터를 받아오려면 서버가 필요 → Node.js는 가볍고 빠르게 서버 만들 수 있음

npm install express cors

 

const express = require('express');

const app = express();

 

app.get('/notice', (req, res) => {

  res.json({ notices: [...] });

});

 

app.listen(3000);

 


6. REST API

  • 클라이언트-서버 간 통신을 위한 HTTP 기반 표준 설계 방식

  • 클라이언트가 서버에 데이터를 요청(GET) 하거나, 보내고(POST), 수정(PUT), 삭제(DELETE) 할 수 있게 해줌
  • Unity 클라이언트가 공지사항, 로그인, 아이템 등 외부 데이터에 접근할 수 있도록 함
메서드 주소 설명
GET /notice 공지사항 리스트 가져오기
POST /notice 새 공지 추가
DELETE /notice/:id 특정 공지 삭제
PUT /notice/:id 공지사항 수정

💡 실무 포인트

상황 대응 기술/포인트
Unity에서 웹 데이터 요청 UnityWebRequest
WebGL에서 요청 막힘 서버에 cors() 미들웨어 적용
JSON 파싱 오류 Wrapper 클래스, 키 이름 일치
데이터 수시 변경 필요 서버에서 관리 (Node.js API 활용)
확장성 필요 REST API 구조로 개발

📎 사용한 기술 키워드 (검색용)

Unity, UnityWebRequest, Awaitable, async await, REST API, Node.js, Express, CORS, JsonUtility, WebGL, 공지사항, 게임 클라이언트, 백엔드 연동


반응형