import React, { useState, useEffect } from 'react';
import './App.css';
import customAxios from './customAxios';
function App() {
// IP주소 변수 선언
const [ip, setIp] = useState('');
// IP주소 값을 설정합니다.
function callback(data) {
setIp(data);
}
// 첫번째 렌더링을 다 마친 후 실행합니다.
useEffect(
() => {
// 클라이언트의 IP주소를 알아내는 백엔드의 함수를 호출합니다.
customAxios('/ip', callback);
}, []
);
return (
<div className="App">
<header className="App-header">
이 기기의 IP주소는 {ip}입니다.
</header>
</div>
);
}
export default App;
import axios from 'axios'; // 액시오스
export default function customAxios(url, callback) {
axios(
{
url: '/api' + url,
method: 'post',
/**
* 개발 환경에서의 크로스 도메인 이슈를 해결하기 위한 코드로
* 운영 환경에 배포할 경우에는 15~16행을 주석 처리합니다.
*
* ※크로스 도메인 이슈: 브라우저에서 다른 도메인으로 URL 요청을 하는 경우 나타나는 보안문제
*/
baseURL: 'http://localhost:8080',
withCredentials: true,
}
).then(function (response) {
callback(response.data);
});
}
package com.myapp;
import javax.servlet.http.HttpServletRequest;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
public class TestController {
@PostMapping("/ip")
public ResponseEntity<String> ip (HttpServletRequest request) {
// 요청을 보낸 클라이언트의 IP주소를 반환합니다.
return ResponseEntity.ok(request.getRemoteAddr());
}
}
package com.myapp;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
/**
* 개발 환경에서의 크로스 도메인 이슈를 해결하기 위한 코드로
* 운영 환경에 배포할 경우에는 15~18행을 주석 처리합니다.
*
* ※크로스 도메인 이슈: 브라우저에서 다른 도메인으로 URL 요청을 하는 경우 나타나는 보안문제
*/
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**").allowCredentials(true).allowedOrigins("http://localhost:3000");
}
}
VS Code 터미널 창을 열고 프로젝트 경로 > npm start를 입력한다.
아래 사진과 같이 위에서 준비했던 IP주소가 나오면 성공이다.
Spring Boot 환경에서 벡엔드를 코딩하고 실행한다.