(Spring)원격 프로그램의 실행

원격 프로그램 실행


  • 브라우저와 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

  1. 밑의 코드와 같이 Reflection API를 활용하면 클래스 정보 얻을 수 있다.
  2. 스프링 프레임워크는 Java의 Reflection API를 활용한다.
  3. 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

'스프링의 정석 : 남궁성과 끝까지 간다' 수강 후 복습한 내용입니다.