Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- resttemplate
- 리눅스
- /etc/network/interfaces
- baeldung
- 자료구조와 함께 배우는 알고리즘 입문
- 서버설정
- ㅒ
- 페이징
- 선형대수
- network configuration
- 코드로배우는스프링부트웹프로젝트
- 친절한SQL튜닝
- Kernighan의 C언어 프로그래밍
- 처음 만나는 AI수학 with Python
- 처음 만나는 AI 수학 with Python
- 네트워크 설정
- 알파회계
- 코드로배우는스프링웹프로젝트
- 데비안
- 자바편
- 이터레이터
- GIT
- d
- 스프링부트핵심가이드
- 스프링 시큐리티
- 자료구조와함께배우는알고리즘입문
- 티스토리 쿠키 삭제
- 목록처리
- iterator
- 구멍가게코딩단
Archives
- Today
- Total
bright jazz music
리액트 앱과 백엔드 서버 연동 테스트4 (+ docker) 본문
아래 작업을 진행하기 전에 $ sudo docker pull rockylinux:9.1 명령어로 록키 리눅스 9.1 이미지를 다운 받았다.
jcha@hjcha-AERO-15-Classic-SA:/usr/local/my-app$ sudo su
root@hjcha-AERO-15-Classic-SA:/usr/local/my-app# docker rm -f catnails
catnails
root@hjcha-AERO-15-Classic-SA:/usr/local/my-app# sudo docker run --privileged -d -it -p 82:80 -p 3001:3000 --name catnails rockylinux:9.1 /sbin/init
09a9e50129a06b5db94a58669507f50599449f2fbb948864d0a2957a373bf407
docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "/sbin/init": stat /sbin/init: no such file or directory: unknown.
root@hjcha-AERO-15-Classic-SA:/usr/local/my-app# docker rm -f catnails
catnails
root@hjcha-AERO-15-Classic-SA:/usr/local/my-app# sudo docker run --privileged -d -it -p 82:80 -p 3001:3000 --name catnails rockylinux:9.1 /bin/init
668a830eed2b3e883f0fd62d689b3b3f5c7bbc73f8d71b9177e7908bb1a5022a
docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "/bin/init": stat /bin/init: no such file or directory: unknown.
root@hjcha-AERO-15-Classic-SA:/usr/local/my-app# docker rm -f catnails
catnails
root@hjcha-AERO-15-Classic-SA:/usr/local/my-app# sudo docker run --privileged -d -it -p 82:80 -p 3001:3000 --name catnails rockylinux:9.1
hjcha@hjcha-AERO-15-Classic-SA:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8abccd8e76e3 rockylinux:9.1 "/bin/bash" 3 hours ago Up 3 hours 0.0.0.0:82->80/tcp, :::82->80/tcp, 0.0.0.0:3001->3000/tcp, :::3001->3000/tcp catnails
포스팅 본문에는 없지만 스프링부트 서버를 컴파일 할 때 사용한 것과 동일한 jdk17버전을 컨테이너 안으로 넣어 주고
/etc/profile에 환경변수로 적어준 뒤, source /etc/profile 하여 동기화 하였다.
1. 백엔드 서버
포트는 10000번을 사용한다.
(호스트머신의 관점으로는 172.17.0.2:10000, 컨테이너 관점에서는 127.0.0.1:10000)
127.0.0.1:3000으로부터 GET요청을 받으면 json 객체를 반환한다.
package com.test.reactspringboottest.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/apitest")
public String api() {
return "api";
}
@GetMapping("/bpitest")
public TestClass bpi(){
TestClass testClass = new TestClass();
testClass.setName("catnails");
testClass.setAge("이 업스트림 서버는 도커 컨테이너 내부에 있습니다.");
return testClass;
}
}
class TestClass {
private String name;
private String age;
public String getName(){
return name;
}
public String getAge(){
return age;
}
public void setName(String name){
this.name = name;
}
public void setAge (String age){
this.age = age;
}
}
호스트 머신에서 통신 확인
호스트 머신은 우분투이다.
hjcha@hjcha-AERO-15-Classic-SA:/usr/local$ curl -X GET 'http://172.17.02:10000/api/apitest'
api
hjcha@hjcha-AERO-15-Classic-SA:/usr/local$ curl -X GET 'http://172.17.02:10000/api/bpitest'
{"name":"catnails","age":"이 업스트림 서버는 도커 컨테이너 내부에 있습니다."}
2. 프론트 서버
리액트 앱이며 localhost:3001번 포트 사용한다.
localhost:3001 ==> 172.17.0.2:3000
여기서 [get data] 버튼을 클릭하면 컨테이너 내부에서 동작하는
127.0.0.1:10000 (호스트머신의 관점으로는 172.17.0.2:10000)으로 GET 요청을 보낸다.
{
"name": "my-app",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-scripts": "5.0.1",
"web-vitals": "^2.1.4"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
//컨테이너 내부의 localhost:10000번으로 프록시
"proxy":"http://127.0.0.1:10000",
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
// <React.StrictMode>
// <App />
// </React.StrictMode>
<div>
<input type="button" value="get data" onClick={
function(){
fetch('/api/bpitest')
.then(function(result){return result.json})
.then(function(json){console.log(json);})
}.bind(this)
}>
</input>
</div>
);
// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();
~
3. 동작 확인
JSON객체를 응답으로 받았다.
'Framework > ReactJs' 카테고리의 다른 글
생활코딩: React-Router-DOM 실습 (0) | 2023.05.15 |
---|---|
생활코딩: 리액트 프로그래밍 CRUD 기본 (0) | 2023.05.14 |
리액트 앱과 백엔드 서버 연동 테스트3 (+ Nginx) (0) | 2023.04.09 |
리액트 앱과 백엔드 서버 연동 테스트 2 (0) | 2023.04.08 |
리액트 앱과 백엔드 서버 연동 테스트 1 (0) | 2023.04.08 |
Comments