Spring Trouble Shooting

이정수·2025년 2월 11일

Udemy학습-Spring & React

목록 보기
20/20
  • React문제 : axios를 통해 HTTP RequestResponse로 배열객체를 가져와서 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 RequestOPTIONS 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 MethodPreflight Request가 우선적으로 전송되는것을 확인 할 수 있으며, 이후 실제 HTTP Request가 전송되는것을 확인 가능.
    ▶ 해당 Preflight RequestOPTIONS HTTP Methodaccess control check를 통과하지 못해 오류가 발생.

  • Spring Application에서 SecurityFilterChain을 구현하는 @Bean MethodHttpSecurity instance 에서 모든 Client에게 OPTIONS HTTP Request에 대한 Access를 허용하도록 설정
http.authorizeHttpRequests(
                auth->auth.requestMatchers(HttpMethod.OPTIONS, "/**").permitAll()
                        .anyRequest().authenticated()
        )

。 모든 URL PatternOPTIONS HTTP Method 방식의 HTTP Request는 모두 허용.
▶ 구현 시 Preflight RequestOPTIONS HTTP Method가 접근허용 설정되어 오류가 발생하지 않는다.

  • Preflight Request :
    。브라우저가 CORS Policy에 따라 Server에 실제 HTTP Request를 전달하기 전 사전에 확인용도로 OPTIONS Request Method를 사용하여 전달하는 Request. CORS
    Preflight RequestCORS Policy가 적용될때, 특정 조건을 만족 시 자동으로 발생.

    Preflight Request 발생 조건
    。다음 조건을 만족하는 경우 Preflight Request 발생.

    • Cross-Origin :
      。다른 URL의 출처( Origin )으로 요청 시 발생.

    • Simple Request에 해당하지 않는 경우.
      PUT , DELETE 등의 HTTP Method 또는 Authorization Header를 포함 시 Preflight Request 발생.

      Simple Request :
      GET, HEAD , POSTHTTP Method만 사용.
      Content-Typeapplication/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를 차단하는 중요한 역할을 수행.
  • JSPJS / 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를 처리되기 이전(or hibernate 초기화 이전)에 DataSource( sql등 )를 우선 실행하며, 이는 Spring Auto Configuration에 의해 DB Table이 생성되기 이전 data.sql이 먼저 실행하게되어 오류가 발생하게 된다.
    ▶ 해당 구문을 선언할 경우, DataSource의 초기화를 지연하면서 DB table이 생성된 이후( hibernate 초기화 이후 )에 data.sql이 실행되도록 변경함.
 
profile
공부기록 블로그

0개의 댓글