TIL | Spring 원격 프로그램의 실행

김윤희·2022년 8월 1일
0

Spring 원격 프로그램의 실행

01. 로컬 프로그램 실행


public class Main{
	public static void main(String[] args){
    	Ststem.println("Hello");
    }
}

✔ 이 프로그램을 보통 IDE(Integrated Development Enviornment)에서 실행을 하지만 cmd 창에서 실행하는 방법은?

  1. 로컬 컴퓨터 cmd창을 열고
  2. java Main
    여기에서 java는 java.exe(자바인터프리터)가 main()을 호출
    (static이라 객체 생성하지 않아도 돼서 호출 가능)
  3. Hello_ 라고 찍히게 된다

02. 원격 프로그램 실행


✔ 필요한 것
브라우저와 WAS

📌원격 프로그램 실행 방법

    1. 프로그램 등록
      프로그램을 외부에서 호출할 수 있도록 등록해야한다
    1. URL과 프로그램을 연결
package com.fastcampus.ch2;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller 	//1. 프로그램 등록
public class Hello{
	@RequestMapping("/hello") 	//2. URL과 프로그램을 연결
    public void main(){	//public static void를 하지 않아도 되는 이유는
    					//호출이 오면 Tomcat 내부에서 객체를 생성해주고
                        //그래서 인스턴스 메서드임에도 메서드를 호출이 되기 때문에
                        //static을 붙이지 않아도 된다
    	System.out.println("Hello")
    }
}

✔ 저렇게 코드를 작성해주면
http://111.222.333.444:8080/ch2/hello -> ch2 = context root(=project root)
이 url로 호출하면 작성한 controller을 탄다

📌@RequestMapping의 접근제어자

package com.fastcampus.ch2;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller 	//1. 프로그램 등록
public class Hello{
	@RequestMapping("/hello")
    private void main(){		//public -> private 수정
    	System.out.println("Hello")
    }
}
  • @RequestMapping의 접근제어자가 private이라고 해도, RequestMapping으로 url하고 연결 되어있다는 말은 외부에서 접근이 가능하도록 하겠다는 말이기 때문에 가능하다 ❗
  • 자세히 말하자면
    Spring framework가 자바의 Reflection API를 사용해서 객체를 만들기 때문에 가능하다(클래스 정보를 얻고 다룰 수 있는 강력한 기능제공)
package com.fastcampus.ch2;

import java.lang.reflect.Method;

public class Main {
	public static void main(String[] args) throws Exception{
		
	//	Hello hello = new Hello();
		//hello.main();	//private이라서 외부 호출 불가
		
		// Reflection API를 사용 - 클래스 정보를 얻고 다룰 수 있는 강력한 기능제공
		// java.lang.reflect패키지 제공
		// Hello클래스의 Class객체(클래스의 정보를 담고 있는 객체)를 얻어온다
		Class helloClass = Class.forName("com.fastcampus.ch2.Hello");
		Hello hello = (Hello)helloClass.newInstance(); // Class 객체가 가진 정보로 객체 생성
		Method main = helloClass.getDeclaredMethod("main");
		main.setAccessible(true); // private인 main()을 호출가능하게 한다
		
		main.invoke(hello); // hello.main()
	}
}
  • 위와 같이 한다면 다른 클래스에서 접근 제어자를 private으로 해놓은 Hello 클래스의 main()을 호출할 수 있다😑


AWS에 배포하기


✔ 우선 만든 프로그램을 Export 해줘야한다

프로젝트 파일을 우클릭 > Export > WAR file > Next > 이름 작성 > destination에 끝에 war가 붙어있는지 확인 후 Finish

  • 📝 AWS에 로그인해서 원격 컴퓨터로 접속
  • c드라이브 > tomcat이 설치된 파일에 webapps(웹애플리케이션들이 설치 되는 곳)폴더를 찾는다
  • webapps에 Export헸던 war 파일을 복사 붙여넣기 해준다(Tomcat이 실행되면서 자동으로 압축이 풀린다)
  • Tomcat 실행!
    실행 후 다시 webapps로 가보면 war 파일이 압축이 풀려있다
  • 로컬 컴퓨터로 원격 컴퓨터로 접속해보면 로컬에서 했던 그대로 나온다면 잘 배포 된 것이다!👍

❗ AWS를 계속 쓰지 않을때는 인스턴스 상태를 중지로 해놓는 게 좋다 사용시간이 계속 나가기 때문에
(사용할때 다시 실행하게 되면 IP가 바뀌기 때문에 원격 데스크탑 파일을 다시 다운 받아야한다..^^)

0개의 댓글