본문 바로가기
React/React 실습

System.Text.Json을 활용한 네이버 로그인 응답 처리 개선

by haheehee 2025. 4. 10.
728x90

네이버 사용자 정보 응답 처리 개선 - JsonDocument → JsonSerializer

기존에는 네이버 사용자 정보를 처리할 때, 아래처럼 JsonDocumentGetProperty()를 활용하는 방식이 일반적이었습니다:


var userInfoJson = JsonDocument.Parse(json).RootElement;
var response = userInfoJson.GetProperty("response");

var naverId = response.GetProperty("id").GetString();
var email = response.TryGetProperty("email", out var emailProp) ? emailProp.GetString() : null;

하지만 이 방식은 유지보수성과 가독성이 떨어지며, 프로퍼티 누락 시 런타임 오류가 발생할 수 있습니다.

따라서 System.Text.JsonJsonSerializer.Deserialize를 사용하여 객체로 한 번에 변환하는 방식이 더 효율적입니다.

📌 네이버 응답 예시 (임의 데이터)


{
  "resultcode": "00",
  "message": "success",
  "response": {
    "id": "a1b2c3d4e5f6g7h8i9j0",
    "email": "hanuser@naver.com",
    "name": "한개발"
  }
}

✅ C# POCO 모델 정의


public class NaverApiResponse
{
    public string ResultCode { get; set; }
    public string Message { get; set; }
    public NaverUserInfo Response { get; set; } = new();
}

public class NaverUserInfo
{
    public string Id { get; set; } = "";
    public string? Email { get; set; }
    public string? Name { get; set; }
}

✅ Deserialize 예시 코드


var response = await httpClient.SendAsync(request);
response.EnsureSuccessStatusCode();

var json = await response.Content.ReadAsStringAsync();
var naver = JsonSerializer.Deserialize<NaverApiResponse>(json);

if (naver?.Response == null)
    throw new Exception("네이버 사용자 정보 파싱 실패");

var id = naver.Response.Id;
var email = naver.Response.Email;
var name = naver.Response.Name;

✅ 장점 요약

  • 안정성 향상: 구조화된 객체 기반 파싱으로 예외 발생률 감소
  • 가독성 향상: 한눈에 데이터 구조 파악 가능
  • 유지보수 용이: JSON 구조가 바뀌어도 모델만 수정하면 됨

결론적으로, 네이버 로그인 연동 시 사용자 정보를 JSON 객체로 바로 매핑하여 처리하면 코드가 훨씬 간결하고 안전해집니다.

728x90

댓글