개발자

React Spring 배포과정 중 의문의 404

2024년 05월 10일조회 155

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;
이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 0

답변이 없을 때 보이는 아이콘

첫 답변을 기다리고 있어요.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 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} }` 이런 식으로 변경하고 시도해 보세요.

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!