목차
- HTTP vs Socket 통신
- Http 의 종류
- Http - Get ( 예제 확인하기 )
- Http - Get ( 예제 진행하기 )
- HttpManager.cs 에서 서버에게 요청하기
- 서버에 직접적으로 요청을 보내는 Send함수 작성
- Http-Get 으로 downloadHandler 에 받아온 Json형식 데이터를 가공하기
- UIManger 에 있는 OnCompleteGetPost()에서 FromJson 하게 해주기
- Http -Get 전체 데이터 받아오기
- Http - Post 방식으로 Json 형태 데이터 보내기
HTTP vs Socket 통신
Http 통신
- rest API 라고 함
Sockect 통신은
실시간으로 동기화 되는걸 할 거임
포톤 같은거임!
그래서 서버랑 클라이언트가 계속 연결되어 있는거임!
서로 계속 살아있는지 체크 함
Http 의 종류
Http 에서는 4가지가 있음!
Post => 회원가입 할 때, 정보저장할 때.
Get => 로그인하면 정보 받을 수 있음! 그때
Put => 개인정보 수정 할 때.
Delete => 회원 탈퇴
아직은 서버에서 저장하는 수준이 아니라서,
Post, Put, Delete 는 나중에.
Get 은 해볼거임! 다른데서 데이터를 가져와서.
간단하게 Get 을 먼저 진행 해볼거임
Http - Get ( 예제 확인하기 )
여기 들어가보면 데이터를 조회 해볼 수 있는 예제들이 있음
우리는 요청을 이렇게 주소로 하고,
저 값을 받아오는걸 해볼거임
이건 근데 서로 얘기가 되어 있어야 하는거임
-> 프로토콜이라고도 함
Json 에 Json 에 Json 을 하는 모습
postId 가 1 이고, id = 1 인 애들만 뽑힙
Http - Get ( 예제 진행하기 )
우리는 저기 URL 에서 예제들을 가지고와서, 사용해보는 일을 해볼거임!
UI 를 만들자!
Canvas 에 넣자
하나 생성하고 같은이름의 Script 파일도 Assign 하자
아까 함수로 눌러서 요청을 보내고
HttpManager 한테 알려주려고 하는거임
HttpManager.cs
싱글톤으로 만드는 이유 = 하나만 존재하기 위해서,
근데 그렇지 않다라는건, Instance 에 누가 들어가 있다는거임
이미 만들어져 있으면 지워버리겠다는거임!
=> 씬이 전환되도 파괴되지 않게 끔 할거임!
이걸 안해버리면, 씬을 다시 로드 할 때 하나가 더 생겨버림.
스태틱이라 하나밖에 못 쓰는데.
그래서 Destroy 쓰는거임!
HttpManager 에서 서버에게 요청하기
코루틴으로 진행 할거임!
(참고) 코루틴을 이렇게 쓸 수도 있음!
다시 돌아와서,
서버한테 이제 요청을 할건데
2가지 정보를 요청 해달라고 파라미터 값으로 던져줘야함
1. URL
2. 어떤 방식으로 할건지
그래서 이 두개를 세팅 할 수 있는 Class 를 하나 더 만들어 보자
Action 은 함수를 넣을 수 있는 자료형임! -> Deligate(대리자)
int number 는 숫자를 담을 수 있는 자료형인 것 처럼!
이거 쓸려면 네임스페이스에 using System; 추가 해줘야함!
(참고) Action 테스트!!
![](https://blog.kakaocdn.net/dn/ot0OP/btrKU8Fpf9F/vVGughkizJLL8trgdQa8R0/img.png)
![](https://blog.kakaocdn.net/dn/YUnLc/btrKQRyiwYO/dDVXK9ov3jXFGWUcjZW2qK/img.png)
![](https://blog.kakaocdn.net/dn/bzIcQ1/btrKU7zKfQi/7nxOKfCMmjn2bQ6HEyVne1/img.png)
그냥 Action 이면 무조건 void 함수만 넣을 수 있음!
UIManager 로 돌아와서, 버튼 함수를 작성하자.
Requester 가져와서, 거기에 있는 url, Type, onComplete 를 넣고
HttpManager 에 있는 SendRequest 를 해서 요청한다.
SendRequest 에 가서, HttpRequester 의 Class 의 틀로 요청을 보내야 함!
요청할 때, requester의 틀이 필요함 여기에 넣어줬으니,
버튼눌러서 요청할 때도 같이 넣어줌!
서버에 직접적으로 요청을 보내는 Send함수 작성
UnityWebRequest 라는 클래스를 사용해서 우리는 통신을 할거임
네임스페이스는 UnityEngine.Networking 이 필요함
UnityWebRequest webRequest = null; 은 처음에 세팅할 때 아무것도 없다. 라고 세팅하는거임!
요청종류에 따라서 다르게.
우리는 Get 을 쓸거니까 이렇게!
requester 의 requesterType 이 Get 인경우에는 우리는 Get 메소드를 쓸 거임!
Get 은 parameter 에 url 이 필요하다!
(참고) 이 Action 함수를 안쓰면 이런식으로 써줘야 한다..
![](https://blog.kakaocdn.net/dn/R6jWK/btrKUkfaRiu/qTaSbDzKJ39YrcvO2BCQo1/img.png)
게시물조회 버튼 설정을 해준다.
-> 인스펙터창에서 OnClickGetPost() 함수도 넣는다.
그러면 이렇게 받을 수 있음!
URL 을 일부러 다르게 써놓고
실패 해보자.
downloadHandler => 서버에서 받은 내용들이 담겨있는곳
Http-Get 으로 downloadHandler 에 받아온 Json형식 데이터를 가공하기
지금 downloadHandler 라는곳에 들어온 값이 저장되어있음
즉, 결과는 downloadhandler 에서 json 형식으로 넘어왔음
이 json 형식을 다시 풀어보자!
HttpManager 에서
이걸 잠시 잘라내고 HttpRequester 에다가 만들어보자!
여기에 항상 틀을 만들었으니까
HttpRequester.cs --->
외부에서 접근을 해야 하므로 public 을 다 붙여 넣어주자!
json 쓸려면,
틀을 만들어 준다
HttpManager.cs 로 돌아와서,
이런식으로 해서 가져올 수 있다!
이렇게 Json 으로 가져오면,
postData.body
postData.Id 이런식으로 해서 가져와서 쓸 수 있음!
완료되었다는 함수 Action 까지 넣는다.
이제 FromJson 을 했기 때문에, 여기 안에있는 값들을 가공할 수 있음!
UImanger 에 있는 OnCompleteGetPost()에서 FromJson 하게 해주기
이게 무슨말이냐면,
HttpManager 에서, 응답이 성공했다면,
url(주소) 에 있던거 Print 하고
FromJson 으로 형식 바꿔주고
onComplete 함수 를 실행 (지금은 onComplete 에 UImanger 에 있는 OnCompleteGetPost 가 담겨있음) 가 실행된다.
지금은 이렇게 되어있긴 함,,
근데 이게
여기서 나중에 PostData 의 형식이 다른걸로 바뀐 상태. 즉, 다른 형식을 요청하고 싶으면
이게 엄청 길어질 수 있음.
어떤 요청을 받았을때 이 형식을 써주고,
저런 요청을 받았을때는 다른 형식을 써주고..
그래서 그걸 여기(HttpManager)에서 Json 으로 처리하지말고,
UImanager 에 있는 onCompleteGetPost() 에서 처리 하도록 하자.
그게 훨씬 보기 편하고 더 효율적일 수 있음!
사실 UImanager 에 OnCompleteGetPost 는 그걸 위해 존재하는거였음
이제 OnCompleteGetPost 함수에서 PostData 형식의 Json 을 처리하도록 해보자!
1. HttpRequester 에 있는 Action 델리게이트에 매개변수로 DownloadHandler 를 추가 해준다.
onComplete 에 UImanager 에 있는 OnCompleteGetPost 가 담겨있는데,
여기서 이제 downloadHandler 에 담겨있는애를 Json 으로 처리 해야해서 Action 에 저렇게 써줘야함
Action 을 쓰려면 그렇게 해줘야함 어쩔 수 없음!
(참고) Action 에 뭐가 담겨있고 왜 담겨있는 지 설명
![](https://blog.kakaocdn.net/dn/bfk4uq/btrLQyDFeQV/1M1q8VGrlqQR0SBw0BjRM1/img.png)
여기 UIManager 에서 보면,
OnClickGetPost() 함수(게시물조회 버튼을 클릭하면 실행되게 할 함수)
에서 HttpRequester 클래스의 틀에 맞는걸 넣어주고 있고,
여기서 onComplete 에 OnCompleteGetPost 를 넣어놨음
그렇기 때문에 onComplete 함수가 실행되면 OnCompleteGetPost 함수가 실행되는거임!
(참고) 현재 HttpRequester.cs 에 있는 틀
public class HttpRequester : MonoBehaviour
{
// URL
public string url;
// 요청 타입 (GET, POST, PUT, DELETE)
public RequestType requestType;
// 응답이 왔을 때 호출 해줄 함수 (Action)
// Action : 함수를 넣을 수 있는 자료형임!
public Action<DownloadHandler> onComplete;
public string postData; //(body)
// 반환 자료형 void, 매개변수 없는 함수를 넣을 수 있다.
}
이제 매개변수가 DownloadHandler 가 들어가 있는 함수를 담을 수 있음!
근데 이제 이렇게되면 Action에 매개변수가 들어가기 때문에,
그걸 담는 함수도 꼭 그 매개변수 (DownloadHandler) 가 들어가야 함
UIManger 에서 바꿔주고 있는 모습
HttpManager 에서 onComplete 를 작성한 곳에도 매개변수로 바꿔주자 --->
그리고 HttpManager 에 있었던 PostData postData = JsonUtilitu.FromJson<PostData>(handler.text);
를 잘라내서
OnCompleteGetPost 에 넣자!
여기에 이제 Json 으로 받아왔으니까,
UI.title =
뭐 이런식으로 해서 하나씩 우리가 따와서 사용할 수 있음!!
Http -Get 전체 데이터 받아오기
아까는 이런식으로 첫 번째 데이터만 받아왔기 때문에, 리스트를 쓸 필요없었지만
이제는 모든 데이터(저렇게 생긴거 100개)를 다 받아와서,
그 데이터의 리스트 Json 형식을 가공해볼 거임!
UImanger.cs 에서
OnClickGetPost 랑 OnCompleteGetPost 두개 복붙해서 이름에 All 붙이자
URL 에서 /1 을 뺀다.
저 주소에 있는 모든걸 다 가져올거임
여기에서는
아까 썼던 이 줄을 뺀다.
이제 다량의 정보를 받을 거니까 형식이 맞지 않기 때문!
전체 게시물 조회 버튼도 On Click() 에 All 함수를 넣어준다.
전체게시물 조회 눌러보면
이 배열 Json 을 이제 List 로 받아보자!
이 배열들은 PostData 를 여러개 들고있는 배열임
그러므로, HttpRequester 에서
이런 틀들은 항상 HttpRequester 클래스 에서 써주는거임~~
그럴라고 만든거임!
이제 배열들에 "data" 를 써줘야함
이게 Json 형식이니까
각 배열들의 Key 값이 있는것 처럼
이 리스트에도 Key 값이 있어야한다
전체를 다 받을 수 있는 함수를 만든다
그렇기에 받을 때도 이런 작업을 해준다!
만약에 서버에서 이런 data 라는 키값을 주면 이렇게 해줄 필요는 없는데
지금 예제에서는 저 리스트의 키값이 없기 때문에 우리가 임의로 만들어주는거임!
String S 를 data 라는 키값을 넣어줘서 임의로 만들고,
FromJson 으로 s 를 받아서
아까 우리가 만든 PostDataArray 형식으로 받아서 올 수 있는거임!
Http - Post 방식으로 Json 형태 데이터 보내기
이 Post 는 Get 과 다르게 데이터를 받아오는게 아님
POST 랑 PUT 은 데이터를 더 추가 or 변경해달라고 값까지 요청해야 하는거임
Put 은 이름값 까지 줘야함
HttpManager ---> Send() 부분
이렇게 POST 부분에는 URL 과, 우리가 보내고싶은 부분이 추가되야 함
HttpRequester 에서 클래스를 만들자!
body에다가 정보를 넣어서 보내주세요~ 라고도 함
, 우리가 추가해서 넣어주고싶은 string 임!
이름을 postData 라고 한건 지금 Post 를 하고있기 때문에 변수명을 저렇게 해준거임
UIManager 로 와서
또 한세트 복붙 해서 수정해보자!
이제 회원가입을 하면,
POST 형식으로
UserData 의 값 들을 넣는거임!
시험삼아 우리가 Json 으로 보내는 형식으로
print 해봤는데
이건 이제 우리가 보내는 방식임!
'Network' 카테고리의 다른 글
네트워크 Json 첫날(인적사항, 오브젝트 불러오기) (0) | 2022.08.30 |
---|