회사 내외 각종 프로젝트에서 수년간 .NET Core 3.1을 사용하다가 Microsoft에서 공식 지원을 종료한 이후 최근에 와서야 .NET 6으로 업그레이드를 했다.

 

프레임워크 기본 코드에서  크게 변한 건 별로 없어서 기존 코드를 거의 그대로 다 사용이 가능한데(외부 패키지들은 사용법이 변했거나 더이상 사용되지 않는 코드들이 꽤 있다... 일일이 찾아서 수정해야 한다... ㄷㄷ), 꼭 하나만 꼽자면 BinaryFormatter가 .NET 5부터 사용 중지된 것인데...

using System.Runtime.Serialization.Formatters.Binary;

...

var formatter = new BinaryFormatter();
using (var stream = new MemoryStream())
{
    formatter.Serialize(stream, source);
    return stream.ToArray();
}

 

즉, 이 코드를 사용할 수 없다. 그래서 아래와 같이 바꿔야 한다.

using System.Text;
using System.Text.Json;

...

// BinaryFormatter 사용중지(.NET 5부터) -> JsonSerializer 사용
using (var stream = new MemoryStream())
{
    var obj = JsonSerializer.Serialize(source, JsonSerializerOption.Default);
    var writer = new BinaryWriter(stream, Encoding.UTF8, false);
    writer.Write(obj);
    return stream.ToArray();
}

 

 

 

 

또 하나를 더 꼽자면 바로 이 글의 주제, WebRequest가 퇴역 대상이 되어 HttpClient로 바꿔야 한다는 것. 물론 아직은 쓸 수 있다. 코드 작성 및 컴파일 시 경고가 자주 등장할 뿐.

 

인터넷 뒤져보면 WebRequest/HttpWebRequest를 HttpClient로 바꾸는 방법이나 예제들이 무궁무진하니 적당히 골라 사용하면 된다.

 

그런데,

WebRequest/HttpWebRequest와 HttpClient가 차이가 나는 부분이 하나 있다.

바로 Redirection 처리.

예를 들어 특정 페이지를 GET으로 요청한 경우 해당 페이지가 다른 페이지로 Redirection 처리된 경우가 있는데, 이때 기존 WebRequest/HttpWebRequest에서 이것을 자동으로 처리하게 하지 못하게(즉, 302 Redirect 응답이 발생하게) 하고 싶을 때는 아래와 같이 직접 설정이 가능했다.

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(targetURL);
req.AllowAutoRedirect = false;

 

기본 동작이 자동 Redirect되는 것이므로 이렇게 해야 막아진다.

 

그런데 HttpClient에서는 조금 다르다. HttpClient 속성으로 설정이 불가능하다.

HttpClient에서 이를 처리하려면 별도의 HttpClientHandler를 만들어서 설정해야 한다.

이렇게.

using (HttpClientHandler handler = new HttpClientHandler()
{
    AllowAutoRedirect = false
})
using (HttpClient client = new HttpClient(handler))
{
    ...
}

 

쓸 데 없이 Handler로 분리해놨다는 생각도 들 수 있지만, 뭐 그밖에 여러가지 장점이 있으니 그렇게 한 것이겠지...

(Handler에 추가로 AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate 등을 설정하면 압축이 자동으로 해제되는 등 장점은 분명히 있어 보인다)

 

 

끝.

 

 



Posted by 떼르미
,


자바스크립트를 허용해주세요!
Please Enable JavaScript![ Enable JavaScript ]