작성
·
66
0
vscode를 통해 npm start를 한 후, todo/read/숫자를 입력하니까 404에러가 발생했습니다. 그런데 vscode에서 컨트롤S를 눌렀더니 화면이 떴는데 익스플로러 상에서 새로고침을 하니까 다시 404에러가 발생하는데 이유를 모르겠습니다. 이미지를 첨부할 테니 혹시 더 필요하신 게 있으시면 답변해 주시면 감사드리겠습니다.
답변 2
0
에러 메시지를 보면 Axios를 이용해서 서버가 호출될 때 문제가 있는 것 같습니다.
GET방식이므로 브라우저에서는 8080 등으로 동작하는 API 서버의 동작을 먼저 확인하신 후에
다시 실행해 보시는게 좋을 듯 합니다.
const res = await axios.get('${prefix}/list', {params:{page,size}})
이 부분을
const res = await axios.get(`${prefix}/list`, {params: {page:page,size:size }})
따옴표가 아니라 백틱으로 감싸야 합니다.
다른 곳도 수정할 부분이 보이실 겁니다.
강의자료에 첨부된 소스파일과 비교해서 보셔도 될 거 같네요.
감사합니다. 그런데 이번에는 별개 에러가 나왔는데요 네트워크 에러라고 나오길래 조사해 보니까 이는 크롬에서의 문제인 거라 상관 없을 거 같다는데 맞을까요
?
다시 실행해 봤는데 네트워크 통신을 보면 referer쪽이 8080이 아닌 3000으로 동작되는 게 문제인가요?
CORS 문제인 게 아닐까 해도 어떻게 대응해야 할지 모르겠습니다
답변 부탁드립니다 관리자 도구 네트워크 탭 쪽 내용을 아래에 첨부하겠습니다
리액트에서 8080으로 동작하는 api서버를 호출하는 부분이 문제로 보입니다
우선은 브라우저에서 호출 주소가 정상적인지 확인해 보세요
이후에 CORS 문제가 발생하면 다시 알려주세요
React 는 npm start 하면 http://localhost:3000 번으로 동작됩니다.
Spring Boot 는 컴파일로 구동시키면 http://localhost:8080 으로 동작됩니다.
axios 로 Spring Boot 의 경로를 호출합니다.
일단 Spring Boot 가 동작중인지 확인이 되어야 합니다.
저의 application.yml 파일
spring:
application:
name: mallapi
datasource:
url: jdbc:mariadb://localhost:3306/malldb
username: codefox
password: Codefullfox!!
driver-class-name: org.mariadb.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true
properties:
hibernate:
format_sql: true
show_sql: true
dialect: org.hibernate.dialect.MariaDBDialect
use_sql_comments: true
servlet:
multipart:
max-request-size: 30MB
max-file-size: 10MB
org:
zerock:
upload:
path: upload
server:
port: 8080
ssl:
enabled: false
key-store: classpath:keystore.p12
key-store-password: changeit
key-store-type: PKCS12
key-alias: tomcat
ssl 설정은 클라우드 서버에서 https://www.abc.com 으로 접속할 때 SSL 인증서가 설치되어 있을 때의 경우이며 , 강의에서는 노트북/데스크탑 PC에서 컴파일 하는 것이므로 enabled: false 로 해야 정상동작
SSL 인증서 설정 적용하는 건 https://link2me.tistory.com/2463 를 참조
CORS 문제를 해결하기 위한 코드
강의 파일에서는 CustomServletConfig.java 파일을 참고하세요.
package org.zerock.mallapi.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.zerock.mallapi.controller.formatter.LocalDateFormatter;
@Configuration
public class CorsMvcConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addFormatter(new LocalDateFormatter());
}
public void addCorsMappings(CorsRegistry corsRegistry) {
corsRegistry.addMapping("/**")
.allowedOrigins("http://localhost:3000", "https://spb.abc.com")
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.maxAge(300)
.allowedHeaders("Authorization", "Content-Type","Cache-Control");
}
}
ch6 강의 듣고 있는 중이라 제가 답변드릴 수 있는 건 여기까지 입니다.
0
안녕하세요, 인프런 AI 인턴입니다. wjdwoals042님.
지금 설명해 주신 상황에서 발생한 404 오류는 보통 서버가 해당 경로에 대해 알지 못할 때 발생합니다. 주어진 이미지를 보면, 브라우저에서 URL을 직접 입력했을 때 404 오류가 발생하고, 페이지를 편집 후 다시 저장했을 때 화면이 나타나는 것으로 보입니다.
404 오류가 발생하는 몇 가지 일반적인 이유와 해결 방법을 안내드리겠습니다:
React Router 설정 문제:
React Router
를 사용 중이실 경우, 브라우저 URL에 직접 접근하는 방식은 제대로 작동하지 않을 수 있습니다. 특히 프로젝트가 SPA(Single Page Application)일 경우 새로 고침을 하면 서버 쪽에서는 해당 URL을 직접 처리하지 않기 때문입니다.개발 서버에서의 CORS 또는 연결 문제:
백엔드 API 엔드포인트 문제 확인:
/todo/read/:id
의 형태로 엔드포인트가 설계되었다면, 그에 맞게 데이터를 반환할 수 있도록 백엔드 설정을 확인하시기 바랍니다.추가적인 문제 해결을 위해, 다음 링크의 기존 질문 및 답변을 참고하시면 도움이 될 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
API 서버 동작을 확인하는 데에 todoApi.js를 확인해 봤는데 어디가 문제인지 모르겠네요
내용은 다음과 같습니다
import axios from 'axios'; export const API_SERVER_HOST = 'http://localhost:8080' const prefix = '${API_SERVER_HOST}/api/todo' export const getOne = async (tno) => { const res = await axios.get('${prefix}/${tno}') return res.data } export const getList = async (pageParam) => { const {page,size} = pageParam const res = await axios.get('${prefix}/list', {params:{page,size}}) return res.data }