>> cd src/main
>> npx create-react-app frontend # npx create-reeact {프로젝트명}
>> cd frontend # cd {프로젝트명}
>> npm start
localhost:3000
으로, 스프링은 localhost:8080
으로 동작함. 서로 다른 도메인을 사용하고 있으므로 CORS 관련 이슈가 발생함. 따라서 proxy를 설정함으로 같은 도메인(localhost:8080
)을 사용하도록 함src/main/frontend
폴더에서 Proxy 관련 모듈 설치>> npm install http-proxy-middleware --save
package.json
에 "proxy": "http://localhost:8080"
을 입력src/main/frontend/src
폴더에서 setProxy.js
파일을 생성하고, 아래의 코드를 작성함/api
로 요청을 보내면, 백엔드인 8080포트(=target)로 요청이 도착하게 됨.const { createProxyMiddleware } = require('http-proxy-middleware');
module.exports = function(app) {
app.use(
'/api',
createProxyMiddleware({
target: 'http://localhost:8080', # 서버 URL or localhost:설정한포트번호
changeOrigin: true,
})
);
};
application.properties
에 다음과 같이 입력하면 localhost:8081
로 열림server.port = 8081
import React, {useState, useEffect} from 'react';
function App() {
const [message, setMessage]=useState([]);
useEffect(()=>{
fetch("/api/demo-web")
.then((response)=>{
return response.json();
})
.then((data)=>{
setMessage(data);
});
},[]);
return (
<div>
{message}
</div>
);
}
export default App;
@RestController
public class HelloController {
@GetMapping("/api/demo-web")
public List<String> Hello(){
return Arrays.asList("리액트 스프링 ", "연결 성공");
}
}
localhost:3000
으로 실행npm start
)build.gradle
에 추가def frontendDir = "$projectDir/src/main/frontend"
sourceSets {
main {
resources { srcDirs = ["$projectDir/src/main/resources"]
}
}
}
processResources { dependsOn "copyReactBuildFiles" }
task installReact(type: Exec) {
workingDir "$frontendDir"
inputs.dir "$frontendDir"
group = BasePlugin.BUILD_GROUP
if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {
commandLine "npm.cmd", "audit", "fix"
commandLine 'npm.cmd', 'install' }
else {
commandLine "npm", "audit", "fix" commandLine 'npm', 'install'
}
}
task buildReact(type: Exec) {
dependsOn "installReact"
workingDir "$frontendDir"
inputs.dir "$frontendDir"
group = BasePlugin.BUILD_GROUP
if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {
commandLine "npm.cmd", "run-script", "build"
} else {
commandLine "npm", "run-script", "build"
}
}
task copyReactBuildFiles(type: Copy) {
dependsOn "buildReact"
from "$frontendDir/build"
into "$projectDir/src/main/resources/static"
}
localhost:8080
으로 실행>> cd C:\demo-web
>> .\gradlew build
>> cd build/libs
>> dir
>> java -jar demo-web-0.0.1-SNAPSHOT.jar
참고 블로그
https://velog.io/@u-nij/Spring-Boot-React.js-%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD-%EC%84%B8%ED%8C%85#1-spring-boot
https://kth990303.tistory.com/210
감사합니다~ 제이쿼리로 만든 게시판을 리액트로 바꿔만드는것도 괜찮을거 같네요^^ 꽤 의미있는 공사가 될거 같아요 ㅋㅋ