Spring
(Spring)원격 프로그램의 실행
odong2
2022. 8. 31. 01:40

원격 프로그램 실행
- 브라우저와 WAS가 있어야만 실행이 가능하다.
- 외부의 브라우저로 서버에 있는 프로그램을 실행하기 위해서는 두 가지 작업이 미리 필요하다.
- 1. 프로그램등록 : 프로그램을 외부에서 호출할 수 있게 미리 등록해 줘야한다.
- 2. URL과 프로그램을 연결시켜 줘야 한다.
@Controller // 1. 프로그램 등록
public class Hello{
@RequestMapping("/hello") // 2. URL과 main()을 연결
public void main(){
System.out.println("Hello);
}
- URL로 원격 프로그램을 호출하면 톰캣이 객체 생성을 한다.
- 이후 메서드 호출이 된다.
- 그러므로 main메서드가 인스턴스 메서드임에도 불구하고 호출이 될 수 있다.
- 메서드의 접근자의 경우 private이어도 호출이 가능하다(Reflection API를 사용하므로 가능)
- 그 이유는 url과 mapping 하였다는 것 자체가 외부에서 호출 가능하게 하겠다는 것이므로 가능하다.
- 하지만 내부에서는 private이므로 다른 클래스에서는 외부 호출이 불가하다.
Reflection API
- 밑의 코드와 같이 Reflection API를 활용하면 클래스 정보 얻을 수 있다.
- 스프링 프레임워크는 Java의 Reflection API를 활용한다.
- Reflection API를 활용하므로 접근 제한자가 private이어도 브라우저의 요청으로 외부에서 메서드 호출이 가능하다.
public class Main{
public static void main(String[] args) throws Exception{
// Hello클래스의 Class객체(클래스의 정보를 담고 있는 객체)를 얻어온다.
Class helloClass = Class.forName("com.ch2.Hello");
Hello hello = (Hello)helloClass.newInstance(); // 객체가 가진 정보로 객체 생성
Method main = helloClass.getDeclareMethod("main"); // main 메소드 정보를 가지고 옴
main.setAccessible(true); // private인 main()을 호출 가능하게 한다.
main.invoke(hello); // hello.main()을 호출한 것과 같다.
}
}
Reference
'스프링의 정석 : 남궁성과 끝까지 간다' 수강 후 복습한 내용입니다.