티스토리 뷰

728x90

예전 글을 읽을 때 마다 드는 생각이 더럽게 글 못 쓴다는 것이다. 그래서 핵심이 뭐냐고 내가 써놓고 내가 이해 못하고 있는 걸 보면 정말 자괴감이 든다.

 

정리 -

  * 보내는 데이터는 content-type이 데이터의 형식과 charset을 지정한다.

  * 일반적으로 application/x-www-form-urlencoded; charset=utf-8 로 지정한다. charset이 다르면 다른 것을 설정한다.

 


 

1. Spring의 RestTemplate이든 jQuery의 aJax이든 크롬 브라우저이든 http client가 request를 구성해야 한다.

 

2. 이 request를 구성할 때 중요한 부분 중 하나가 아래 두 가지 이다.

  2-1 어떤 형식의 data를 보낼 것인지 - json, xml, form, binary 등 -> content-type

  2-2 어떤 encoding을 사용할 것인지 - utf8, euc-kr 등 -> charset

 

3. 실제로는 3가지 인데,

  3-1 어떤 형식의 데이터를 보낼 것인지, json? xml?

  3-2 이 데이터를 어떤 encoding으로 보낼 것인지, utf8? euc-kr?

  3-3 프로그램 소스에서 data로 전달할 정보의 encoding을 request의 charset에 맞춰줘야 한다.

    3-3-1 xml marshalling에서 encoding을 진행하는 하거나 데이터 변환 클래스를 이용하여 변환한다.

    3-3-2 Java는 unicode를 사용하므로 utf8을 웹에서 사용한다면 특별히 변환할 필요는 없다.

 

4. 문제는 request를 보낼 때, 보내는 쪽에서는 데이터가 어떻게 나가는지 알 수가 없다.

  4-0 보이는 것은 전부 보내기 전의 decoding된 정보 일 뿐이다.

  4-1 이것은 간단하게 node 서버를 만들어 찍어볼 수 있다. 그냥 express 서버 만들어서 찍으면 된다.

 

5. 하고 싶은 말은

  5-1 request header의 content-type이 가장 중요하다. 이것을 정확하게 설정해 주고 다른 것들을 맞추면 된다.

  5-2 대부분의 경우 거의 대부분의 경우는 json, xml 같은 거 상관없이

    5-2-1 content-type이 application/x-www-form-urlencoded; charset=utf-8 이거면 된다.

  5-3 받는 쪽에서 utf8을 사용한다고 하고 xml을 받는다라고 하면 그냥 

    5-3-1 application/x-www-form-urlencoded; charset=utf-8 보내면 된다.

    5-3-2 application/x-www-form-urlencoded 여기에 그냥 모든 데이터를 실어서 보내면 된다.

    5-3-3 json, xml은 이렇게 변환되어 보내진 정보를 받은 후에 다시 원래 형식으로 만들 때에 고려할 부분이다.

    5-3-4 express에서는 json형식을 받는다면 아래의 middleware를 모두 사용해야 한다는 의미가 된다.

      5-3-4-1 express.urlencoded는 application/x-www-form-urlencoded를 해석하고

      5-3-4-2 express.json()은 내부의 json형식의 데이터를 복원한다.

      5-3-4-3 node에서는 xml의 경우는 string으로 받아서 json형식으로 변환하는 library를 필요로 한다.

 

app.use(express.json())
app.use(express.urlencoded({ extended: true }))

 

 

    5-3-4 (x-www-form-urlencoded : (json: data)) 이렇 형식이라고 생각하면 된다.

  5-4 encoding도 중요한 부분인데 content-type에 charset에 정확하게 명시하는 것으로 충분하다.

    5-4-1 아무리 프로그램 소스에서 charset를 가지고 노력해도 결국 보내는 형식을 지정하는 것은 content-type이다.

    5-4-2 content-type에 지정된 charset 형식을 따라 data를 변환하는 것이 프로그램에서 할 부분이다.

 

  

 

728x90

'Languages' 카테고리의 다른 글

Golang : Slice value receiver vs pointer receiver  (0) 2021.06.19
DOM : Vanillla  (0) 2021.05.01
JavaScript: delete operator  (0) 2021.04.12
Javascript : 기본적인 것들 3  (0) 2021.02.25
JavaScript : 기본적인 내용2  (0) 2021.02.24
댓글