개발자
현재 스프링부트로 프론트와 벡엔드를 나누어서 작업하고있는중입니다. 프론트에서 벡엔드로 전송해준 데이터를 벡엔드에서생성한 VO를 만들어서 데이터를 받고있는데 어떻게 프론트엔드에서 쏴준데이터가 VO에 담기나요? 내부원리를 알고싶습니다! 도와주세요!!
답변 2
인기 답변
안녕하세요! 질문주신 내용이 http 통신을 하시는거라 가정하고 답변을 드리겠습니다. http 헤더중에 Content-Type 이란게 있는데요, client 가 server 로 http 문서를 어떤 형태로 작성했는지를 알려주는 헤더값입니다. Spring 에서는 이 Content-Type 헤더와 사용자가 Http Body 를 변환하고자 하는 class(VO)를 체크하여 변환이 가능할경우 변환해서 넘겨주도록 구현이 되어있습니다. 여기서 VO 로 변환할때 앞서 답변해주신 분이 언급해주신 java reflection 이나 jackson 라이브러리 등이 사용되게 됩니다. 이에 대한 자세한 구현 내용을 아시고 싶으시다면, Spring 에서 정의한 HttpMessageConverter 라는 인터페이스의 구현체들을 찾아보시면 됩니다. HttpMessageConverter 를 찾아보시면 아시겠지만 위에서 언급한 http body 를 VO 로 변환해주는것 뿐만 아니라 반대로 Object 를 http content-type 에 맞게 write 하는 로직도 있는데요 이는 반대로 Spring 이 client 가 되어 Target server 로 http 요청을 보낼때 쓰이게 됩니다. Spring 에서 제공하는 http 통신 모듈인 RestTemplate 이나 WebClient 에서 HttpMessageConverter 를 어떻게 사용하고 있는지도 같이 확인하시면 좀 더 재미있으시지 않을까 하여 추가적으로 설명드렸습니다. 작업하시는데 도움이 되셨길 바라며 즐거운 주말 보내시길 바랍니다.
익명
작성자
2022년 11월 20일
좋은답변 감사합니다~
실제로 http 프로토콜 데이타가 클라이언트와 서버간에 어떤 형태로 전달되는지 이해해야 합니다 전달돤 데이타 그 자체는 그게 스프링이든 자바든 리눅스든 윈도우든 관계 없겠죠? 그럼 전달된 데이타는 어떻게 java의 클래스에 쏙 들어갈까요? 배운건 new Class().. 뭐시기겠죠 네 스프링 안쪽에는 그렇게 되어 있겠죠 그럼 내거 보낸 데이타의 일부 값들, 예를 들어 name 은 어떻게(어떤규칙? 프로토콜에 관련책을 보면 이해갑니다) http 데이타 안에서 읽어서 우리 자바 new class 안의 동일한 name의 변수안에 들어가는 걸까요? 무슨 재주로? 이런건 자바sdk 가 지원하는 기능중에 클래스의 속성(변수, 함수..)을 엿볼 수 있는 기능이 있기에 가능합니다. 한번 찾아보시면 됩니다 어노테이션@ 이 등장은 하지만 뜻 그대로의 지시자일뿐입니다 특별하거나 어려울 거 없습니다 그냥 java sdk 나 spring 또는 저희 스스로 만든 라이브러리가 있다면 그 어떤 클래스, 변수, 메쏘드, 파라미터에 태그를 달아 놓는 정도로 생각하시면 됩니다 Jackson library 이나 java resolve 그리고 http protocol specification 1.1 이 적당한 검색어겠네요 스프링 키워드 검색은 그닥 큰 도움이 안될 겁니다
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!