
VMware을 열어 Create a New Virtual Machine을 클릭한다.

ubuntu iso파일을 찾는다.

이름과 암호를 입력한다. ubuntu, 1234를 입력했다.

15GB를 설정한 후

8GB를 설정한다.

finish를 누른다. 용량이 15GB, 램이 8GB인 임의의 pc를 하나 생성하게 된다.

영어를 선택하고

업데이트를 하지 않는다.

완료
이렇게 엔터를 누르며 다음 창으로 넘어간다.

192.168.42.128 이것이 내 서버 주소이다.





여기까지 넘어온 후,

아까 입력한 이름과 암호를 입력한다.

스페이스바를 눌러 X를 활성화 한 후 Done

여기서 Done을 누르면

이렇게 설치가 실행된다.

이렇게 Reboot Now가 활성화 될 때까지 기다린다.

Reboot가 실행되었다. 이대로 냅두면 된다.

x를 눌러 PowerOff를 누르면 된다. pc를 끄는 거라고 생각하면 된다.
그럼 VMwawre가 종료된다.

VMware를 다시 실행하여 Ubuntu 64-bit을 누르면 다시 실행된다.
다운받은 MobaXterm_Portable.zip 압축을 풀고 안에 있는 MobaXterm_Personal_23.1.exe 를 실행한다.

왼쪽 위 Session을 누르고

서버주소를 입력하고 OK를 누르면

다음 창으로 넘어간다. login as에 아까 만든 ubuntu를 입력하고 엔터를 누르면
아래 ubuntu@192.168.42.128's password : 라는 글자가 나온다.
여기서 아까 설정한 암호를 입력하면 된다. 입력해도 창이 변하지 않으니 입력하고 엔터를 누르면 된다.

No를 누른다.

위 화면이 나오면 성공
sudo apt update -y 를 입력한 후 엔터를 누른다.

password for ubuntu가 나오면 암호를 입력한다.

성공한 모습.
자바를 설치하는 명령어인 sudo apt install openjdk-11-jdk -y 를 입력한다.

자바가 설치되었고, java -version을 입력하면 설치된 자바의 버전을 확인할 수 있다.
pc에 자바를 설치하면 환경 변수에 java가 추가된다. 이제 직접 해보자.
nano ~/.bashrc를 입력한다.

이런 화면으로 전환된다.

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export Path=JAVA_HOME/bin
를 입력한다.

Ctrl + S를 눌러 저장한다.

Ctrl + X를 눌러 밖으로 나온다.
source ~/.bashrc까지 입력해준다.

sudo apt install tomcat9 -y를 입력하여 Tomcat을 설치한다.

192.168.42.128:8080 주소로 접속하여 tomcat9이 나오면 성공적으로 설치되었다.
--

var - lib - tomcat9 - webapps 위 폴더에 파일을 불러와야 한다.

강사님 화면을 캡쳐하였다. 권한이 없어 파일을 넣을 수 없다고 한다.
권한을 지급하자.

sudo usermod -aG tomcat ubuntu를 입력하면 권한을 지급하게 된다.
...
</properties>
<!-- 개발용 jar -->
<!-- 서버 배포용 war -->
<packaging>war</packaging>
<dependencies>
...
vscode로 가서 pom.xml에 위 코드를 추가한다.
public class Boot20230427Application extends SpringBootServletInitializer{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application){
return application.sources(Boot20230427Application.class);
}
Boot20230427Application.java에 extends를 추가한다.


MAVEN을 눌러 Lifecycle의 package를 실행해준다.

target안에 war 파일이 하나 생긴다.

ROOT1.war로 이름을 변경한다.

war파일을 /var/lib/tomcat9/webapps/ 에 추가한다.

자동으로 war 압축이 풀리면서 폴더가 생성된다.

192.168.42.128:8080/ROOT1 주소로 접속한다.

수업시간 때 만들었던 파일을 불러올 수 있다.
@RestController
@RequestMapping(value = "/api/test1")
@RequiredArgsConstructor
@Slf4j
public class RestTestController {
// 127.0.0.1:9090/ROOT/api/test1/select.do?aaa=a&bbb=b&ccc=c
// 조회용 @ReqeustParam(name="aaa") String aaa,
@GetMapping(value="/select.do")
public Map<String,Object> get1( ){
Map<String, Object> retMap = new HashMap<>();
try{
//db처리
retMap.put("status", 200);
}
catch(Exception e) {
e.printStackTrace();
}
return retMap;
}
// 추가
// @RequestBody 엔티티 obj
@PostMapping(value="/insert.do")
public Map<String,Object> get2( ){
Map<String, Object> retMap = new HashMap<>();
try{
//db처리
retMap.put("status", 200);
}
catch(Exception e) {
e.printStackTrace();
}
return retMap;
}
// 수정
// 127.0.0.1:9090/ROOT/api/test1/update.do
// // @RequestBody 엔티티 obj
@PutMapping(value="/update.do")
public Map<String,Object> get3( ){
Map<String, Object> retMap = new HashMap<>();
try{
//db처리
retMap.put("status", 200);
}
catch(Exception e) {
e.printStackTrace();
}
return retMap;
}
// 삭제
// // @RequestBody 엔티티 obj
@DeleteMapping(value="/delete.do")
public Map<String,Object> get4( ){
Map<String, Object> retMap = new HashMap<>();
try{
//db처리
retMap.put("status", 200);
}
catch(Exception e) {
e.printStackTrace();
}
return retMap;
}
}
<body>
<button th:onclick="init()">버튼누르면 함수호출</button>
<button th:onclick="init()">버튼누르면 함수호출</button>
<select th:onchange="init()"></select>
rest로 만든 controller은 반드시 script로만 자료를 처리할 수 있음.
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/1.3.5/axios.min.js"></script>
<script th:inline="javascript">
async function init() { //함수는 자동으로 호출되지 않음.
const url = /*[[@{/api/test1/select.do(aaa='a')}]]*/"";
const headers = {"Content-Type":"application/json"};
const { data } = await axios.get(url, { headers:headers });
console.log('반환되는 결과', data);
const url = /*[[@{/api/test1/insert.do}]]*/"";
const headers = {"Content-Type":"application/json"};
const body = {id:"aaa", name:"bbb"};
const { data } = await axios.post(url, body, { headers:headers });
console.log('반환되는 결과', data);
const url = /*[[@{/api/test1/update.do}]]*/"";
const body = {id:"aaa", name:"bbb"};
const headers = {"Content-Type":"application/json"};
const { data } = await axios.put(url, body, { headers:headers });
console.log('반환되는 결과', data);
const url = /*[[@{/api/test1/delete.do}]]*/"";
const body = {id:"aaa", name:"bbb"};
const headers = {"Content-Type":"application/json"};
const { data } = await axios.delete(url, { headers:headers, data:body });
console.log('반환되는 결과', data);
}
// init(); //수동으로 함수 호출함.
</script>
</body>