개인적인 프로젝트로, 혹시 문제가 있다면 말씀해주세요 ! 😊
저는 Gradle
환경에서 진행했으나, Maven
으로 진행해도 무관합니다.
🔨 여기서 Spring Security
는 제외하고 선택해주세요 ! 이거 선택하면 화면 키자마자 로그인 화면이 먼저 떠버린다는 ,,,😅
환경 설정 후, Finish !
짜잔 😎
$ npx create-react-app front
요렇게 Happy hacking 뜨면 완료 !
$ cd front
$ npm start
명령어로 front
directory로 이동해서 실행해 보자
이런 화면이 뜨면 설치 성공 😚
클라이언트 요청을 받기 위한 RestController
작성 RestAPI란?
package com.example.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@GetMapping("/home")
public String getHome(){
return "Hello World!";
}
}
localhost:8080/home
으로 이동했을 때 위 화면이 출력되면 성공 😀
위에서 보면 React
는 3000
포트, Spring
은 8080
포트를 사용하면서 CORS
문제가 발생한다.
CORS(Cross-Origin Resource Sharing) 란 ? 추가
HTTP
헤더를 사용하여,한 출처(origin)
에서 실행 중인 웹 애플리케이션이다른 출처(origin)
의선택한 자원에 접근할 수 있는 권한
을 부여하도록 브라우저에 알려주는 체제 (출처)
이를 해결하기 위해서 React
에서 Proxy
설정을 해준다. Proxy란?
"proxy": "http://localhost:8080",
front/package.json
파일에 위 Proxy
설정 코드를 추가한다.
추가 후에 [localhost:3000/home]으로 이동해도
localhost:3000과 같은 페이지를 보여준다.
이는 React에서 화면을 렌더링해주는 App.js 가 변하지 않았기 때문이다.
화면에 Spring 정보를 보여주는 것은 이후에 작성할 예정이다.
따라서 화면이 아닌 curl 명령어로 REST 정보를 확인한다.
$ curl localhost:3000/home
Hello World!
위와 같이 정보가 출력되면 Proxy
설정 완료 !
$ npm i axios
여기를 참고했습니다.
import React, { useState, useEffect } from 'react';
import axios from 'axios'
import './App.css';
function App() {
// 요청받은 정보를 담아줄 변수 선언
const [ testStr, setTestStr ] = useState('');
// 변수 초기화
function callback(str) {
setTestStr(str);
}
// 첫 번째 렌더링을 마친 후 실행
useEffect(
() => {
axios({
url: '/home',
method: 'GET'
}).then((res) => {
callback(res.data);
})
}, []
);
return (
<div className="App">
<header className="App-header">
{testStr}
</header>
</div>
);
}
export default App;
💡 useEffect
, useState
등에 대한 설명은 나중에 포스팅 하겠습니다 !
실행했을 때, 위와 같은 화면이 나오면 성공 ! 🎉
React
를 처음 설치했을 때 같이 생성되는 App.css
가 설정되어 있다. 따라서 <div>
태그와 <header>
에 적용된 className
을 지운다면 css
가 적용되지 않아서 흰 화면에 hello world
가 출력된다.
잘봤습니다~