WEB (13) 썸네일형 리스트형 HTTP GET 에는 body 를 담을 수 없다? 결론부터 말하면 담을 순 있다. 하지만 권장되지 않는다. 한달 전 쯤인가 친구랑 술 한잔 하면서 개발 이야기를 했다. REST 이야기를 하다 HTTP 메서드 주제가 나왔다. GET 방식에서는 요청 본문을 넣을 수 없지 않냐고 말하더라 나로서는 의아했다. 아래와 같이 HTTP request body 를 넣어 GET 요청을 보낼 수 있기 때문이다. @GetMapping("/api/user-roles") public ResponseEntity searchUserRoles(@RequestBody UserRoleRequest userRoleRequest) { List responses = userRoleService.findByMultiValueKey(userRoleRequest); // ... } 그래서 나는 .. HTTP 상태 코드 406 이 새벽에 뻘짓을 하다가 잠을 못자게 한 이유는 406 에러 때문이다. 해결책을 몰라서 밤을 샌건 아니고 어떤 방식으로 json 라이브러리가 getter를 호출하는지 알고 싶었다... 스프링에서 컨트롤러 레이어 내 반환 값을 처리하는 ReturnValueResolver 를 시작으로 객체를 Json 형식으로 변환하는 HttpMessageConverter와 연관이 높을 것으로 추정된다. 여기까진... 스프링을 공부하다보면 알 수 있는 내용이지만 내가 궁금했던 것은 어떻게 게터를 호출하는지였다. 디버깅을 해봤지만 너무 복잡해서 잘 모르겠네요. 여튼 이 문제의 원인은 게터를 작성하지 않았기 때문입니다. 실제로 게터에 브레이킹 포인트를 찍어보면 프로덕트 코드에서는 어디에서도 사용하지 않았지만 디버깅이 시작되는 것.. HTTP Method Options & CORS preflight request 새로운 프로젝트를 할 때 마다 꼭 한 번씩 애먹는 부분이 CORS이다. 앞서 CORS 해결하기 그런데 Spring & React.js를 곁들인에서 몇 가지 문제를 해결했지만 추후 개발이 진행되면서 문제가 한 번 더 터지게 되었다. 이 내용은 마지막에 설명하고 문제의 원인이었던 HTTP Options 메서드에 대해 조금 정리해보려고 합니다. 목차 1. preflight request 와 Options Method 2. 사전 요청 HTTP 문서 확인 3. Options 요청으로 인한 트러블 preflight request 와 Options Method Options 메서드를 이해하기 위해서는 CORS preflight request를 먼저 이해하는 것이 좋을 것 같다. CORS preflight reques.. CORS 해결하기 그런데 Spring & React.js를 곁들인 부프 캠프 당시, 열심히 스프링 챕터가 끝나고 설레는 프론트앤드 동료들과 첫 미니 프로젝트를 시작했었는데요. 당연하게도 CORS 에러를 마주하게 되었어요. 이 에러를 해결하겠다고 뭐 이 시도 저 시도 다해보다가 어쩌다 되버렸어요. 머쓱... 사실 아직도 완벽하게 이해했다고 말하기에는 무엇을 모르는지 조차 모르기 때문에 단언할 수 없지만 프론트에서 정상적으로 API 스펙을 따랐다는 가정하에 백엔드의 설정 문제일 경우가 대부분인 것 같습니다. 허허... 이 글을 작성하는 이유는 과거의 내가 너무나도 무력했기 때문이다. 사실 프론트앤드 지식이 조금만 있었다면 해결할 수 있었던 문제였는데 말이다. 참고로 CORS가 무엇인지에 대해 말하기 보단 문제 해결 위주로 글을 작성할 예정입니다. CORS가 뭔지 모른다면 .. 그런 REST API로 괜찮은가 정리 아닌 정리 이 포스팅은 "네이버 데뷰 Day1, 2-2. 그런 REST API로 괜찮은가" 영상에 나온 내용을 정리 아닌 정리한 글입니다. 1991년 WEB이 탄생했을 당시 아래와 같은 고민이 존재했다. Q. 어떻게 인터넷에서 정보를 공유할 것인가? A. 정보들을 하이퍼텍스트로 연결한다. 표현방식 HTML / 식별자 URI / 전송 방법 HTTP HTTP 프로토콜 설계 당시 프로젝트에 참가한 대학원생 로이필딩은 다음과 같은 고민을 합니다. "How do i improve HTTP without breaking the web?" 고민 끝에 만들어 진 것이 REST이다. 로이필딩은 REST를 박사 논문으로 발표하였다. 한편 인터넷 상에 API가 수면위로 등장하게 되었다. 마이크로소프트에서는 XML - RPC(1998).. 세션/쿠키/토큰 데이터베이스, 인증 등을 공부하면 세션... 여기저기서 세션이라는 말이 등장한다. 몇 주 전에 구매한 네트워크 책에서도 세션계층이 나온다. 그런 별 언급이 없어서 여기저기 찾아보면서 세션을 공부하게 되었다. 위키백과, 네이버 사전나 블로그 등을 통해 내가 느낀 세션의 대략적인 개념을 키워드화 아래와 같다. 연결, 보관 김영한님의 강의에서는 서버에 정보를 저장하고 연결을 유지하는 것을 세션이라고 한다. 쿠키와 다르게 세션의 특징은 정보, 즉 데이터를 관리하는 곳이 서버이다. 더 자세히는 세션DB이다. 인증을 통해 서비스는 유저를 검증할 수 있다. 쿠키(Cookie) 쿠키를 이용하면 서버는 사용자의 브라우저에 데이터를 넣을 수 있다. 우리가 크롬, 엣지와 같은 브라우저를 통해 어떤 사이트를 접속하면 브라우저.. @PathVariable와 model.addAtribute @PathVariable URI에 변수를 넣고 싶을 때 사용한다. 사용방법은 매우 다양 model.addAtribute view에 담을 데이터를 담는 공간, 이것도 방식이 많다. 그중 가장 내 기준에 직관적인 것을 사용하였다. Model addAttribute(String attributeName, @Nullable Object attributeValue); 첫 번째 파라미터인 attributeName는 view 페이지, 다시 말해 html에 해당 string이 있어야 한다. 두 번째 파라미터 attributeValue는 메소드내에 있어야 한다. //MemberController @PostMapping("form") public String addMember(Member member, Model mode.. form 태그의 action 속성 설명에 앞서 redirect 사용시 302에러가 뜨는데... 에러코드 좀 공부해야겠다 ㅎㅎ action 태그의 action 속성은 폼 데이터(form data)를 서버로 보낼 때 해당 데이터가 도착할 URL을 명시합니다. 들어가기 전에 알아야 될 것 1. 스프링부트 환경에서 view의 경로 최상단에는 resource/templates에서 시작한다. //controller @PostMapping("form") public String addMember(Member member) { memberRepository.save(member); return "redirect:members"; } @GetMapping("members") public String Member(Model model) { List mem.. 이전 1 2 다음