개발자
react + spring boot로 진행하는 프로젝트가 현재 cloudtype이라는 플랫폼으로 배포중에 있습니다. 문제는 정확한 서버주소를 호출하는 것 같음에 불구하고 404 에러가 발생하여 해결하지 못하고 있습니다. 현재, 아래 사진과 같은 로그가 클라이언트, 서버에 각각 발생합니다. 서버에서는 다음과 같이 구성되어있고 @RestController @RequestMapping("/v1/login") @RequiredArgsConstructor @CrossOrigin(origins = "https://web-secondchance-front-bug-1cupyg2klvnmgdft.sel5.cloudtype.app") public class KakaoController { private final KakaoService kakaoService; private final Logger LOGGER = LoggerFactory.getLogger(KakaoController.class); @PostMapping("/kakao-login") public ResponseEntity<UserDto> kakaoLogin(@RequestBody KakaoLoginDto kakaoLoginDto) { String code = kakaoLoginDto.getCode(); LOGGER.info("Get Code from FrontEnd : {}", code); LOGGER.info("Request getAccessToken()"); kakaoLoginDto = kakaoService.getAccessToken(code); String accessToken = kakaoLoginDto.getAccess_token(); LOGGER.info("access_token : {}", accessToken); if(accessToken != null){ UserDto userDto = kakaoService.getUserInfo(accessToken); return ResponseEntity.ok(userDto); } else { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null); } // accessToken이 null임에도 getUserInfo를 부름. // 안부르게 끔 위의 방법을 포함하여 // 1. map에서 true, false를 사용하여 해봄 // 2. getAccessToken을 map객체로 반환하게끔 하여 accessToken이 있으면 true, 없으면 false로 하여 isEmpty 함수로 체크하여 부름 // 위의 두 방법 전부 소용없음. 그냥 getUserInfo를 부름. } @PostMapping("/kakao-logout") public String kakaoLogout(){ return "ok"; } } 현재 리액트에서는 다음과 같이 axios.post로 접근하여 code를 전달합니다. 무엇이 문제일까요?
1import { useNavigate } from "react-router-dom";
2import { useEffect } from "react";
3import { useCookies } from 'react-cookie';
4import axios from "axios";
5import Loading from "../layout/Loading";
6
7
8const KakaoLoginHandler = () => {
9 const [cookies, setCookie] = useCookies(['userId', 'userName']);
10 const navigate = useNavigate();
11 const code = new URL(window.location.href).searchParams.get("code");
12
13 const kakaoLogin = () => {
14 axios({url:`${import.meta.env.VITE_SERVER_URL}/v1/login/kakao-login` , method:'post',
15 params: { code : code} })
16 .then(response => {
17 const { id, username } = response.data;
18 setCookie('userId', id, { path: '/' });
19 setCookie('userName', username, { path: '/' });
20 navigate('/home');
21 })
22 .catch(error => {
23 console.error('Error fetching data:', error);
24 });
25 }
26
27 useEffect(() => {
28 kakaoLogin();
29 }, []);
30
31 return (
32 <>
33 <Loading/>
34 </>
35 );
36};
37
38export default KakaoLoginHandler;
답변 0
첫 답변을 기다리고 있어요.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2024년 05월 10일
서버와 클라이언트 사이의 통신에서 404 오류가 발생한다는 것은 서버가 요청한 URL을 찾을 수 없다는 것을 의미합니다. 이 경우, 아래 몇 가지 가능성을 확인해보세요: 1. **URL 문제**: 서버에 전달되는 요청 URL을 확인해 보세요. 클라이언트에서 전달하는 `import.meta.env.VITE_SERVER_URL` 값이 정확한지 점검해 보세요. 2. **RequestMapping 문제**: `@RequestMapping("/v1/login")` 어노테이션으로 설정된 경로 외에 추가적인 경로(`kakao-login`)를 사용하고 있습니다. 이 부분이 제대로 작동하는 지 확인해보세요. 3. **CORS 문제**: 서버에서 CORS 설정을 해주셨는데, 혹시 클라우드 배포 과정 중 도메인 주소가 변경되었거나, 프론트엔드와 백엔드의 포트가 다르게 설정되어 있는 경우 CORS 오류가 발생할 수 있습니다. 해당 부분도 점검해 보세요. 또한, 리액트에서 axios.post를 사용하여 데이터를 전송할 때 'params' 대신 'data' 속성을 사용해야 합니다. 즉, `{url:`${import.meta.env.VITE_SERVER_URL}/v1/login/kakao-login` , method:'post', data: { code : code} }` 이런 식으로 변경하고 시도해 보세요.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!