티스토리 뷰

이미 오래전부터 신규 시스템 개발은 웹 개발이 대세이다. 하지만 내가 소속된 제조업 전산실처럼 .NET 기반의 클라이언트 시스템을 개발하는 곳도 아직 적지 않다. .NET 3.5 기반의 클라이언트에서 웹 서버와 JSON(JavaScript Object Notation) 문자열로 통신이 가능하다면 클라이언트에 불필요하게 비즈니스 로직이 삽입되는 것을 예방할 수 있고 Java가 되었든 Node.js가 되었든 웹 서버의 구현 방식에 따라 다양한 언어로 비즈니스 로직을 작성할 수 있다. 그 방법을 예제를 통해 간단히 설명하겠다.

HTTP GET 메써드 요청하기

C#에서 HTTP 요청은 System.Net.WebClient 클래스를 사용하여 수행한다. HTTP GET 요청은 아래와 같이 한다. 응답 데이터는 JSON 문자열을 가정했지만 특별히 제약사항은 없다.


string uri = "http://someRquest";
WebClient webClient = new WebClient();
Stream stream = webClient.OpenRead(uri);
string responseJSON = new StreamReader(stream).ReadToEnd();
  • StreamReader 클래스는 기본적으로 응답 문자열의 캐릭터셋이 UTF-8로 되어 있다. 웹 서버에서 다른 캐릭터셋을 사용한다면 캐릭터셋을 별도로 명시해주어야 한다.
  • StreamReader 클래스의 ReadToEnd() 메써드는 웹 서버가 응답한 JSON 문자열을 반환한다. 응답된 JSON 문자열을 그대로 사용하려면 별도의 파씽 작업이 필요하기 때문에 개발자로서는 매우 번거롭다. Json.NET 외부 라이브러리를 사용하면 이런 수고러움을 덜 수 있다. 아래는 Json.NET을 이용하여 JSON 문자열을 C#의 POCO(Plain Old C# Object) 오브젝트로 변환하는 방법이다. 무척 간단하다. POCO 오브젝트의 구조는 JSON 문자열의 Key:Value 구조와 동일해야 한다.
SomeObject someObject = JsonConvert.DeserializeObject<SomeObject>(someJsonString);

HTTP POST 메써드 요청하기

HTTP POST 요청도 GET 요청과 크게 다르지 않다. 요청시 JSON 문자열로 이루어진 파라메터가 메시지 바디에 추가된다는 것을 고려하여 아래와 같이 작성하면 된다.


string uri = "http://someRquest";
string requestJson = "someJsonRequestString";
WebClient webClient = new WebClient();
webClient.Headers[HttpRequestHeader.ContentType] = "application/json";
webClient.Encoding = UTF8Encoding.UTF8;
string responseJSON = webClient.UploadString(uri, requestJson);
  • StreamReader 클래스가 아닌 WebClient 클래스의 UploadString() 메써드를 사용하기 때문에 응답 문자열의 캐릭터셋을 UTF-8로 명시했다.
  • 앞서 소개한 JSON 문자열의 POCO 오브젝트 변환과 동일한 방법으로 요청 파라메터로 전달할 JSON 문자열을 개발자가 직접 작성하는 것보다 POCO 오브젝트에서 쉽게 변환할 수 있다. 아래와 같이 작성한다.
string someJsonString = JsonConvert.SerializeObject(someObject);

예외처리

HTTP 요청시의 예외처리 수행을 잊지 말아야 한다. 예외처리를 하지 않으면 사용자들에게 불필요한 오류 메시지가 노출된다. System.Net.WebException 예외 클래스를 잡아내어 상황에 맞는 예외처리 로직을 작성하면 된다.

댓글
댓글쓰기 폼