본문 바로가기
유니티 Unity/유니티 정보

유니티 HTTP 통신 구현 핵심 정리2 - www 방식 GET/POST

by TODAYCODE 2021. 11. 23.
반응형

유튜브 영상으로도 볼 수 있습니다.

 

 

 

유니티로 HTTP 통신 구현하는 방법 핵심 정리1

그동안 혼자 프로젝트를 진행할 때는 그냥 포톤을 써버렸기 때문에 크게 네트워크에 신경을 쓰지 않았었다. 그런데 회사라는 조직에서 공동의 프로젝트를 진행하다보니 내가 해본적 없는 부분

coding-of-today.tistory.com

앞선 글에서 HTTP 통신에 대한 대략적인 개요를 확인해보았으니 이제 예제를 살펴보도록 하자.

이론으로 주저리 주저리 떠드는 것보다 직접 실습해보는게 훨씬 효과적이니까..

 

 

WWW 클래스로 HTTP 구현하기

1. GET 방식


우선 통신을 주고받을 사이트가 필요하다.

테스트를 해볼만한 사이트는 다양하게 존재하지만 그것조차도 찾기 힘든 것이 초보자이므로 사이트를 하나 소개한다.

 

Neople Developers

## 참고 사항 >- [타임라인 코드](/contents/guide/pages/all#던파-타임라인-코드) 다중 입력 시 콤마(,)를 이용해서 구분 처리   ex) /timeline?code=101,102,103 - startDate, endDate 요청 변수 사용 예시   ex) /timeline?

developers.neople.co.kr

위의 사이트는 네오플에서 운영하는 사이트인데 회원가입을 하고 KEY를 받아서 실습을 진행할 수 있다.

위의 사진을 통해서도 알 수 있듯이 얻고자 하는 정보에 해당하는 주소값을 사용해서 정보를 받아 올 수 있다.

그럼 이제 그 방법을 알아보도록 하자.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NetworkTest : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(WWWGETTest());
    }

    IEnumerator WWWGETTest()
    {
        // GET 방식
        string apikey = "-발급받은 개인 Key값을 넣어준다-";
        string url = "https://api.neople.co.kr/df/servers?apikey=" + apikey;

        WWW www = new WWW(url); // 동작은 하지만 현재는 사용하지 않은 추세이므로, UnityWebRequest를 사용해야 함.

        yield return www;

        if (www.error == null)
        {
            Debug.Log(www.text);
        }
        else
        {
            Debug.Log("error");
        }
    }
}

앞선 글에서 언급했듯이 코루틴으로 메소드를 생성하고 Start에서 동작하도록 만들어준다.

WWWGETTest라는 메소드를 살펴보면,

apikey의 값으로 본인이 받은 key값을 넣어주고,

url변수를 만들어서 정보를 받아올 주소를 넣어주면 된다.

예를들어서 ' 01.서버정보 ' 에 해당하는 값을 가져오고자 한다면, Request URL을 복사해서 가져온 뒤에

해당 주소에서 <apikey>부분을 본인의 key값을 넣어주면 된다.

그러고나서,

WWW www = new WWW(url); 을 써주는 것으로 완성된다.

막상 실제로 해보면 너무 간단하다.

 

yield return www; 를 해줘서 응답이 올때까지 코루틴이 동작하도록 만들어주고,

응답된 www가 제대로 들어왔으면 표시해주고, null일 경우에는 error를 뜨게 해주면 된다.

만약 정상적으로 작동했다면 아래처럼 값이 출력될 것이다.

{"rows":[{"serverId":"cain","serverName":"카인"},{"serverId":"diregie","serverName":"디레지에"},{"serverId":"siroco","serverName":"시로코"},{"serverId":"prey","serverName":"프레이"},{"serverId":"casillas","serverName":"카시야스"},{"serverId":"hilder","serverName":"힐더"},{"serverId":"anton","serverName":"안톤"},{"serverId":"bakal","serverName":"바칼"}]}

 

위의 홈페이지에서 [ 01.서버정보 ] 말고 다른 것들을 열어보면 요청변수라는 것들이 존재한다.

그럴 경우에는 해당 변수들을 생성해서 위의 예제와 동일한 방식으로 전달해주면 통신이 가능하다.

 

 

 

2. POST 방식


이번에는 POST 방식인데, 이번 예제는 따라할 수가 없으니 눈으로 살펴보도록 하자.

해당 예제는 회사의 서버를 통해서 진행한 것이라서 정보를 많이 지웠다.

GET 방식과의 차이점은, apikey 값을 입력하는 부분이 없다.

변수로 아이디와 비밀번호를 따로 생성해준다.

 

WWWForm form = new WWWForm(); <= 이부분이 갑자기 튀어나와서 당황했을 수도 있는데,

WWW를 활용해서 POST 통신을 진행할때 정보를 담아서 전달하는 방식 중에 하나로 생각하면 될 것 같다.

form을 하나 생성한 다음에 아이디와 비밀번호를 추가해주고

WWW를 생성할때 이번에는 url 뿐만 아니라 form까지 매개변수로 넣어준다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NetworkTest : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        StartCoroutine(WWWPOSTTEST());
    }

    IEnumerator WWWPOSTTEST()
    {
        string url = "--서버 주소를 입력하면 됨--";
        WWWForm form = new WWWForm();
        string id = "admin";
        string pw = "--비밀번호--";
        form.AddField("Username", id);
        form.AddField("Password", pw);
        WWW www = new WWW(url, form);

        yield return www;

        if (www.error == null)
        {
            Debug.Log(www.text);
        }
        else
        {
            Debug.Log("error");
        }
    }
}

이렇게 작성해주면 마찬가지로 값을 받아오면 출력이 될 것이고, null이면 error를 표시해줄 것이다.

실제로 코드를 동작해본 결과 아래와 같은 결과값이 출력되었으므로 제대로 잘 동작했다는 것을 확인했다.

{"error":"E0000","data":[{"midx":1,"mname":"--이름 값--"}]}

위에서 error:E0000은 서버에서 오류가 없다는 표현을 전달해준것이다.(error가 발생했다는 뜻이 아님)

 


 

이렇게 WWW를 사용해서 GET과 POST 통신을 전부 구현해보았다.

사실 굉장히 간략하게 구현해서 사용한 것이라서 실제 실무에서는 이렇게 안쓰고 훨씬 복잡하게 사용하게 된다.

그러나 HTTP 통신의 기본 구조를 파악했다면 많은 도움이 될 것이다.

 

다음은, UnityWebRequest 을 사용해서 HTTP 통신을 구현하는 방법을 살펴보도록 하겠다.

 

 

반응형

댓글