๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ ์–ด๋‘” ๊ฒƒ ๊ณต์œ ํ•จ! ์˜ค๋ฅ˜ ์žˆ์Œ ์–˜๊ธฐํ•ด์ฃผ๋ฉด ๋ฌด์ฒ™ ๊ฐ์‚ฌ.

๊ธฐ๋ฐ˜ ๊ฐœ๋…
  • Web Service : ์–ด๋””์„œ๋“  ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์„œ๋น„์Šค (์–ด๋””์„œ๋“  ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•ด์ฃผ๋Š” ์ฃผ์ฒด)
    • Web Service API : Web Service ์— ์ ‘๊ทผ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“ค์–ด์ฃผ๋Š” ์ง•๊ฒ€๋‹ค๋ฆฌ

์šฐ๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ Rest ๊ธฐ๋ฐ˜ Web Service ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ฑฐ๋‚˜ ์ ‘๊ทผํ•  ๊ฒƒ. ์ด์— ๋”ฐ๋ผ REST ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ฐฐ์›Œ๋ณด์ž.

  • REST : ์›น ์„œ๋น„์Šค์˜ ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ. ์›น ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ CRUD(Create, Read, Update, Delete) ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํ‘œ์ค€ ๊ทœ์•ฝ์„ ์ œ๊ณต. ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜ (๊ตฌ์กฐ) ์ž์ฒด๋ฅผ ์˜๋ฏธ. ์ƒํƒœ ์—†์Œ, ์บ์‹œ ๊ฐ€๋Šฅ, ๊ณ„์ธตํ™”๋œ ์‹œ์Šคํ…œ, ์ฝ”๋“œ ์˜จ ๋””๋งจ๋“œ, ์ผ๊ด€๋œ ์ธํ„ฐํŽ˜์ด์Šค ๋“ฑ์˜ ์›์น™์„ ๊ฐ€์ง.
    • REST API : "์ƒํƒœ์— ๊ด€ํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ๊ฐ€๋ณ€์ ์ธ ๋ฆฌ์†Œ์Šค๋“ค์„ ์†ก์ˆ˜์‹  ํ•  ์ˆ˜ ์žˆ๋„๋ก" ๋งŒ๋“ค์–ด์ง„ API.
    • RESTful Web Service : REST ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ์„ ๋”ฐ๋ฅด๋Š” Web Service ๋ฅผ ์˜๋ฏธ. ์•ฝ๊ฐ„ ๋งž์ง€ ์•Š์ง€๋งŒ, Rest API ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ Web Service ๋ผ๊ณ  ๋ณด์•„๋„ ๋  ๋“ฏ.

RESTful Web Service ๋ฅผ ๊ตฌ์ถ•ํ•  ๋•Œ, ์šฐ๋ฆฌ๋Š” ํ•ด๋‹น Web Service ์™€ ๋‹ค๋ฅธ Client ๊ฐ„์˜ ๋„คํŠธ์›Œํฌ ์†Œํ†ต๋ฐฉ์‹ (ํ”„๋กœํ† ์ฝœ) ์œผ๋กœ, HTTP ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉ. HTTP ์— ๋Œ€ํ•ด ๋ฐฐ์›Œ๋ณด์ž.

  • HTTP : ์›น์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ํ”„๋กœํ† ์ฝœ. ์›น ๋ธŒ๋ผ์šฐ์ €์™€ ์›น ์„œ๋ฒ„ ๊ฐ„์˜ ํ†ต์‹ ์„ ์œ„ํ•ด ์‚ฌ์šฉ.
    • ์›น ๋ธŒ๋ผ์šฐ์ €์˜ Request ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ, ์›น ์„œ๋ฒ„์˜ Response ๋ฅผ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•. Request์—๋Š” Header, Contents ๋ฐ ๊ธฐํƒ€ ๋“ฑ๋“ฑ์˜ ๋‚ด์šฉ์ด ๋“ค์–ด๊ฐ. Response ๋˜ํ•œ ๋งˆ์ฐฌ๊ฐ€์ง€.
      • Request : url / Content ๊ฐ€ ๊ธฐ๋ณธ. ์ด์™ธ Header ๋“ฑ์„ ํ†ตํ•ด ์ถ”๊ฐ€์ ์ธ ์„ค์ •์ด ๊ฐ€๋Šฅ.
    • HTTP METHOD : ์›น ์„œ๋ฒ„์—๊ฒŒ ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋™์ž‘์„ ์›ํ•˜๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•. (==์ž์‹ ์ด ๋‚ด๋ฆฌ๋Š” ๋ช…๋ น(Request) ์˜ ์œ ํ˜•(์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•ด๋ผ / ๋ฐ›์•„๋ผ / ์—…๋ฐ์ดํŠธํ•ด๋ผ / ์ง€์›Œ๋ผ) ์„ ์˜๋ฏธํ•จ.== ํ•˜์ง€๋งŒ, ์‹ค์ œ Server ์—์„œ ์ด HTTP Method ์˜ ๊ตฌ๋ถ„์— ๋”ฐ๋ผ, ์‹ค์ œ ํ•จ์ˆ˜๊ฐ€ ๋‚˜๋ˆ ์ง„ ๊ฑธ ์ƒ๊ฐํ•˜๋ฉด, ==์›น ์„œ๋ฒ„์—๊ฒŒ ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋™์ž‘์„ ์›ํ•˜๋Š”์ง€๋ฅผ ์ž‘์„ฑํ•œ Request ์˜ ์ผ๋ถ€==๋ผ๋Š” ๊ฒƒ๋„ ์˜๋ฏธ์ƒ ๋™์ผ.) HTTP ํ”„๋กœํ† ์ฝœ์˜ ํ•ต์‹ฌ ๋ถ€๋ถ„์ด๋ฉฐ, ์›น ๋ธŒ๋ผ์šฐ์ €์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉ.
      • GET / POST / PUT / DELETE ๋„ค ๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ๋Œ€ํ‘œ์ ์ž„.

์ด์ „ REST ์™€ HTTP ์‚ฌ์ด ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ ํ˜ผ๋™์ด ์™”์—ˆ๋˜ ๋งŒํผ, ์ด ๋‘ ๊ฐœ๋…์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

  • REST ์™€ HTTP ์‚ฌ์ด์˜ ์ฐจ์ด :
    • ๋ฒ”์ฃผ / ์ข…๋ฅ˜๋กœ์„œ์˜ ์ฐจ์ด : HTTP๋Š” ํ”„๋กœํ† ์ฝœ (์ •ํ•ด๋‘” ๊ทœ์น™์ด๋‚˜ ๊ทœ์•ฝ) ์ด๋ฉฐ, REST๋Š” ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ (Web Service ์˜ ๊ตฌ์กฐ ํ˜€์ต์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐœ๋…์ž„.)
    • ๋ชฉ์ ์œผ๋กœ์„œ์˜ ์ฐจ์ด : HTTP๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐฉ๋ฒ• ์ •์˜๋ฅผ, REST๋Š” ์›น ์„œ๋น„์Šค ๋””์ž์ธ ์ •์˜๋ฅผ ๋ชฉ์ ์œผ๋กœ ํ•จ.

HTTP๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ถ”๊ฐ€์ ์œผ๋กœ ์•Œ์•„์•ผ ํ•˜๋Š” ๊ฐœ๋…์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ์ผ๋ฐ˜์ ์œผ๋กœ HTTP ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒฝ์šฐ, Client ๋กœ์„œ, Server ์— Request ํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋ ํ…๋ฐ, ์ด ๊ณผ์ •์„ ๊ธฐ๋ฐ˜์œผ๋กœ, ์ฃผ์š” ๊ฐœ๋…์„ ์‚ดํŽด๋ณด์ž.

  1. HTTP Method - CRUD (GET / POST / PUT / DELETE) ์„ค์ •
    • HTTP Method : ์„œ๋ฒ„๊ฐ€ ์ฃผ์–ด์ง„ Resource ์— ๋Œ€ํ•ด์„œ ์ˆ˜ํ–‰ํ•˜๊ธธ ์›ํ•˜๋Š” ๋™์ž‘์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ.
  2. Header / URL (์›น ์ƒ์˜ ์œ„์น˜๋ฅผ ์‹๋ณ„ํ•ด์ฃผ๋Š” ์ฃผ์†Œ = ์‹๋ณ„์ž) / Contents ์ž…๋ ฅ
    • Header : ์š”์ฒญ ๋˜๋Š” ์‘๋‹ต์— ๋Œ€ํ•œ "๋ถ€๊ฐ€์ ์ธ" ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ๊ณณ.
    • URL : ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์ž์›์ด ์–ด๋”” ์žˆ๋Š”์ง€๋ฅผ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•œ ๊ฒƒ. ๊ทœ์•ฝ / ์ฃผ์†Œ ๋‘˜ ๋‹ค ์˜๋ฏธ.
    • Contents : ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ทธ ์š”์ฒญ ๋ฐ ์‘๋‹ต์—์„œ, ๋‚ด๋ถ€์— ๋“ค์–ด์žˆ๋Š” ์‹ค์ œ Data. (REST ์—์„ , ์ด Data ๋ฅผ Resource ๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.)
  3. HTTP Request ์ „์†ก ๋ฐ, Server ๋กœ๋ถ€ํ„ฐ Response ๋ฅผ ๋ฐ˜ํ™˜ ๋ฐ›์Œ.
    • ์ด ๋ฐ˜ํ™˜๋ฐ›์€ Response ์—๋„ ๋ฌผ๋ก , Header ์™€ Contents ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.
  4. ๋ฐ˜ํ™˜๋ฐ›์€ Response ๋ฅผ ์ฒ˜๋ฆฌ

Accesing Web Serivce in Unity

Client ์—์„œ HTTP Request ๋ฅผ ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ• / HTTP Response ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ• Server ๋‹จ์—์„œ๋Š” ๋ณดํ†ต, HTTP Request ๋ฅผ ๋ฐ›๊ณ , ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ Response ๋ฅผ ๋‹ค์‹œ ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ๋‹ค. ํ•˜์ง€๋งŒ, ์ด ํŒŒํŠธ์—์„œ๋Š” Client ์—์„œ HTTP Request ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ณด๋‚ด๊ณ , Server ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ Response ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž.

์ผ๋ฐ˜์  ๊ณผ์ •
  1. HTTP Method - CRUD (GET / POST / PUT / DELETE) ์„ค์ •
    • HTTP Method : ์„œ๋ฒ„๊ฐ€ ์ฃผ์–ด์ง„ Resource ์— ๋Œ€ํ•ด์„œ ์ˆ˜ํ–‰ํ•˜๊ธธ ์›ํ•˜๋Š” ๋™์ž‘์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ.
  2. Header / URL (์›น ์ƒ์˜ ์œ„์น˜๋ฅผ ์‹๋ณ„ํ•ด์ฃผ๋Š” ์ฃผ์†Œ = ์‹๋ณ„์ž) / Contents ์ž…๋ ฅ
    • Header : ์š”์ฒญ ๋˜๋Š” ์‘๋‹ต์— ๋Œ€ํ•œ "๋ถ€๊ฐ€์ ์ธ" ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ๊ณณ.
    • URL : ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์ž์›์ด ์–ด๋”” ์žˆ๋Š”์ง€๋ฅผ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•œ ๊ฒƒ. ๊ทœ์•ฝ / ์ฃผ์†Œ ๋‘˜ ๋‹ค ์˜๋ฏธ.
    • Contents : ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ทธ ์š”์ฒญ ๋ฐ ์‘๋‹ต์—์„œ, ๋‚ด๋ถ€์— ๋“ค์–ด์žˆ๋Š” ์‹ค์ œ Data. (REST ์—์„ , ์ด Data ๋ฅผ Resource ๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.)
  3. HTTP Request ์ „์†ก ๋ฐ, Server ๋กœ๋ถ€ํ„ฐ Response ๋ฅผ ๋ฐ˜ํ™˜ ๋ฐ›์Œ.
    • ์ด ๋ฐ˜ํ™˜๋ฐ›์€ Response ์—๋„ ๋ฌผ๋ก , Header ์™€ Contents ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.
  4. ๋ฐ˜ํ™˜๋ฐ›์€ Response ๋ฅผ ์ฒ˜๋ฆฌ
์ผ๋ฐ˜์  ๊ณผ์ • ๋Œ€์ž… - Java Client (Apache) (์ด๊ฑด ์•ˆ ๋ด๋„ ๋จ ใ…‡ใ…‡)
  1. HttpClient : HttpCliientBuilder.Create().Build()
  2. HttpGet : new HttpGet("Path for GET")
    1. HttpGet๋ณ€์ˆ˜.setHeader("Accept", "application/html") // response ๋ฐ›๋Š” ๋‚ด์šฉ์ด view ์˜ html ์ผ ๊ฒƒ์ด๋ฏ€๋กœ ์ด์™€ ๊ฐ™์ด ์„ค์ •.
  3. HttpResponse : HttpClinet๋ณ€์ˆ˜.execute(HttpGet ๋ณ€์ˆ˜)
    1. Response ์—๋Š” ๋ฐ˜ํ™˜๋œ Resources ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋“ค์–ด์žˆ์Œ.
    2. HttpResponse ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌํ•˜๊ธฐ (Statusline ๋“ฑ์ด ๋“ค์–ด์žˆ๊ฑฐ๋‚˜ ํ•จ.)
  4. EntityUtil.toString(HttpResponse๋ณ€์ˆ˜.getEntity())
    1. HttpResponse๋ณ€์ˆ˜.getEntity() ๊ฐ€ HttpResponse ๋‚ด์šฉ๋ฌผ์˜ ์‹ค์ฒด.
Unity์—์„œ์˜ ๊ณผ์ •
  1. HttpGet = UnityWebRequest
  2. SetHeader = SetRequestHeader
  3. execute -> HttpResponse = SendWebRequest
  4. getStatusCode = Switch(result)
  5. EntityUtil.toString(response.getEntity()) = downloadRes~.text