- React문제 :
axios를 통해HTTP Request의Response로 배열객체를 가져와서State변경함수를 통해State값으로 설정 후State배열.map()JSX코드로 표현 시TypeError: State배열.map is not a function으로 에러가 발생하는 경우 사용례
。원인 : 초기State를 설정한React Component를 렌더링 시State값의 초기값이null로 설정되어있으므로,JSX코드내부에 구현된State배열.map()이 해당값을 인식하지 못한다.
▶JSX코드에서{ State배열 && State배열.map() }을 정의하여State배열에 값이 들어왔을때map함수가 작동되도록 설정.
Preflight Request의OPTIONS HTTP Method에 의해 발생하는Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource오류 해결
。API호출 시검사-Network에서OPTIONS Request Method의Preflight Request가 우선적으로 전송되는것을 확인 할 수 있으며, 이후 실제HTTP Request가 전송되는것을 확인 가능.
▶ 해당Preflight Request의OPTIONS HTTP Method가access control check를 통과하지 못해 오류가 발생.
Spring Application에서SecurityFilterChain을 구현하는@Bean Method의HttpSecurityinstance 에서 모든 Client에게OPTIONS HTTP Request에 대한 Access를 허용하도록 설정http.authorizeHttpRequests( auth->auth.requestMatchers(HttpMethod.OPTIONS, "/**").permitAll() .anyRequest().authenticated() )。 모든
URL Pattern의OPTIONS HTTP Method방식의HTTP Request는 모두 허용.
▶ 구현 시Preflight Request의OPTIONS HTTP Method가 접근허용 설정되어 오류가 발생하지 않는다.
Preflight Request:
。브라우저가CORS Policy에 따라 Server에 실제HTTP Request를 전달하기 전 사전에 확인용도로OPTIONS Request Method를 사용하여 전달하는 Request. CORS
。Preflight Request는CORS Policy가 적용될때, 특정 조건을 만족 시 자동으로 발생.
Preflight Request발생 조건
。다음 조건을 만족하는 경우Preflight Request발생.
Cross-Origin:
。다른 URL의 출처(Origin)으로 요청 시 발생.
Simple Request에 해당하지 않는 경우.
。PUT,DELETE등의HTTP Method또는Authorization Header를 포함 시Preflight Request발생.
Simple Request:
。GET,HEAD,POST의HTTP Method만 사용.
。Content-Type이application/x-www-form-urlencoded,multipart/form-data,text/plain중 하나
。Custom Header (Authorization,X-Custom-Header)가 없는 경우
OPTIONS Request Method
。Server의 특정 Resource에서 허용하는HTTP Method를 물어보는 용도의 Request.
▶Client에서 해당resource URL에서 사용할 수 있는HTTP Method가 무엇인지 묻는 용도로 활용됨.
Access Control Check:
。Client가 Application의 특정Resource에 접근할 수 있는지를 확인하는 보안절차.
▶ 보안정책을 준수하고 권한이 없는 Client로부터의 Access를 차단하는 중요한 역할을 수행.
JSP에JS / CSS적용이 안되는 문제
。Spring Boot상에서 JS와 CSS등의 static 자료의 기본경로는src/main/resources로 설정됨.
▶ JSP 파일의 절대경로를 기준으로 경로를 설정하는게 아닌,src/main/resource디렉토리를 기준으로 내부에JS / CSS파일을 저장하여 경로를 설정.
ex) CSS 파일이src/main/resource/css/stylegis.css에 저장이 된 경우, JSP파일에는<link rel="stylesheet" href="/css/stylegis.css">로 경로를 지정하여 CSS파일을 등록.
- Spring JPA의
@Entity를 통해 DB Table 생성 및data.sql을 통해 초기값 데이터 구성 후 Application 실행 시 발생하는 오류
。application.properties에 다음 구문을 추가하기
spring.jpa.defer-datasource-initialization=true
。기본적으로 Spring에서는@Entity가 선언된 Class를 처리되기 이전(orhibernate초기화 이전)에DataSource(sql등 )를 우선 실행하며, 이는Spring Auto Configuration에 의해DB Table이 생성되기 이전data.sql이 먼저 실행하게되어 오류가 발생하게 된다.
▶ 해당 구문을 선언할 경우,DataSource의 초기화를 지연하면서 DB table이 생성된 이후(hibernate초기화 이후 )에data.sql이 실행되도록 변경함.