전체 흐름 요약
[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 기반의 깔끔한 비동기 처리를 가능하게 함
- UnityWebRequest나 Addressable, 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, 공지사항, 게임 클라이언트, 백엔드 연동
'유니티' 카테고리의 다른 글
| [node.js, 유니티] 공지사항 API 서버 만들기_2탄 (0) | 2025.08.08 |
|---|---|
| [node.js, 유니티] 공지사항 API 서버 만들기 (0) | 2025.08.08 |
| 델파이 조사란? (0) | 2025.08.07 |
| Unity WebGL에서 videoPlayer.url 만들기(CORS 피하기) (0) | 2025.08.07 |
| WebGL에서 동영상 재생 방법 (0) | 2025.08.07 |