Spring Boot 를 IIS 서버에 배포해보자 [2]

JungWooLee·2022년 7월 17일
0

스프링 프로젝트

목록 보기
2/2

어떻게 배포할 것인지?

IIS 서버에서 .jar, .war를 배포하는 자료를 서칭해보았는데 정확한 방법을 찾지 못하여 급한대로 서버내에서 .jar 을 시동하고 시동한 포트와 리버스 프록시를 통해 연결시켜주는 방향을 채택했습니다.

IIS ? WAS ?

쉽게 말해 IIS 는 MS 용 , WAS 는 범용으로 익히 아시고 있을겁니다
Visual Studio 를 사용한다면 IIS 를 아니라면 WAS를 떠올리실 텐데 iis 는 ms 진영의 웹서버와 was가 통합된 형태라고 저는 이해하고 있습니다

IIS 가 Web Server이자 WAS 를 동시 수행할 수 있지만 톰캣이 내장되어 있는 스프링 부트의 경우 톰캣을 IIS WS에 올려서 시동한다 하여도 그 사례를 찾아볼 수가 없기도 하고 할 수 없다는 글들을 많이 봐와서 이 부분은 깔끔하게 패쓰하였습니다.

만약 Spring 이시라면 IIS 에서 IIS 관리자에서 톰캣 컨테이너를 따로 설치후 설정이 가능한 것으로 알고있습니다

이글에서는 IIS 서버환경이 구축 되어있으며 도메인까지 있는 상태에서 진행됩니다.


리버스 프록시를 이용하여 로컬환경에서 실행하여 IIS 서버로 프록시 설정하기

몇차례 서칭을 거쳐서 가장 효율적인 방법을 구상하던 중 node.js 파일을 IIS 에 배포하는 포스팅을 보게 되었습니다.
https://blog.daum.net/jungsangun/7691310

방법은 웹 플랫폼 설치 관리자 를 통해 다음 2가지 프로그램을 설치하면 된다.

1) URL Rewrite : -> URL 재작성

2) ARR -> Application Request Routing 3.0 -> 응용프로그램 요청 라우팅 3.0베타(Korea)

먼저 .jar 파일을 서버에서 실행시킵니다

이전에 .jar 파일을 만들기 위해서는 다음과 같은 과정을 거칩니다

bootJar 를 클릭하여 현재 프로젝트를 빌드한뒤

build - libs 폴더 내에서 확인 할 수 있습니다
환경에 따라 다르겠지만 이 .jar 파일을 서버내 로컬 환경에서 실행시킵니다

! 이전에 자바가 서버내에 설치되어있으며 환경변수로 등록 되어있는지 확인하여야 합니다 !

이후 cmd 에서 jar 파일을 실행시킵니다
java -jar 프로젝트경로.jar --server.port=실행시키고자하는포트

포트의 경우 서버내에서 사용중인 포트가 있을 경우 따로 위와 같이 지정하여 해당 포트에서 실행 시킬 수 있습니다

실행 이후 확인 해보면 jar 파일이 실행되었음을 확인할 수 있습니다.
간혹 http 로 요청을 보냈는데 response 가 https 의 형태일 경우 cors 에러를 피할 수 없습니다.
이경우를 피하기 위해 이전 프로젝트에서 몇가지 설정을 추가합니다

우선 swagger 의 서버 설정입니다

	@Bean
    public Docket api() {
        Server testServer = new Server("Server", "https://serverforapitest.dev", "tilko", Collections.emptyList(), Collections.emptyList());
        Server serverLocal = new Server("local server", "http://localhost:3000", "for local usages", Collections.emptyList(), Collections.emptyList());
        return new Docket(DocumentationType.OAS_30)
                .servers(testServer,serverLocal)
                .useDefaultResponseMessages(false)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.tilko.vdiproject.controller"))
                .paths(PathSelectors.any())
                .build()
                .apiInfo(apiInfo());
    }

그리고 Application 에서 cors 설정을 의존성 주입시킵니다

@SpringBootApplication
@EnableSwagger2
public class VdIprojectApplication {

    public static void main(String[] args) {
        SpringApplication.run(VdIprojectApplication.class, args);
    }

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**").allowedOrigins("*");
            }
        };
    }
}

현재 설정은 모든 path, origin, methods를 허용한다는 건데 각자의 상황에 맞게수정하면 된다. @Configuration을 적어줘야 적용된다

@Component
public class Workaround implements WebMvcOpenApiTransformationFilter {

    @Override
    public OpenAPI transform(OpenApiTransformationContext<HttpServletRequest> context) {
        OpenAPI openApi = context.getSpecification();
        Server localServer = new Server();
        localServer.setDescription("local");
        localServer.setUrl("http://localhost:3000");

        Server testServer = new Server();
        testServer.setDescription("test");
        testServer.setUrl("https://testforrestapi.dev");
        openApi.setServers(Arrays.asList(localServer, testServer));
        return openApi;
    }

    @Override
    public boolean supports(DocumentationType documentationType) {
        return documentationType.equals(DocumentationType.OAS_30);
    }
}

서버 url 을 추가해준 이유는 리버스 프록시를 설정하게 되었을 때 서버로 호출하지 않으면 client 측 로컬으로 호출되기 때문에 api 가 정상적으로 작동하지 않기 때문이다

그럼에도 localhost 를 추가한 이유는 서버내에서 로컬환경에서는 구동 되는지, 서버에서만 구동되는지 확인하기 위해 두가지 모두를 추가하였다

이렇게 모든 설정이 완료된 이후 IIS 서버에서 리버스 프록시에 대한 설정을 시작한다
결국 iis에서 Reverse Proxy Server를 설치하는 것이 전부이고 여기에 nodejs의 실행 모듈을 연결 하는 것 뿐이다

  1. 먼저 URL 재작성 도구가 있는지 확인한다

  2. 없다면 웹 플랫폼 설치관리자를 통하여 다운로드 해주자

  3. ARR, URL 로 검색하면 쉽게 찾을 수 있다

  1. 이후 설치되었다면 url 재작성 도구를 클릭한뒤 규칙 추가를 선택한다

  2. 역방향 프록시 선택이후 확인

  3. 로컬호스트, 지정한 포트로 입력이후 확인

여기까지 완료되었다면 IIS 에서 지정한 도메인으로 연결이후 request, response 가 정상적으로 되는지 확인합니다


Window System을 이용한 jar 파일 실행시키기

일시적으로 위 방법을 사용하게 된다면 지장이 있는것은 아니지만 서버내에서 cmd 를 항상 켜두어야 하며 다른 이들이 서버내의 cmd에 접근하여 오류가 생길 수 있기 때문에 윈도우 시스템을 활용하여 서버가 켜져있는 한 항상 embedded run 되도록 설정합니다

아래 유투브를 보면서 참고하게 되었습니다
https://www.youtube.com/watch?v=OOVE_g6F8mQ

  1. https://github.com/kohsuke/winsw 에서 winsw 를 다운로드 합니다
  2. stable 릴리즈 버전으로 다운로드 한다
  3. xml 파일을 열어 description, exe 형태, 그리고 경로를 지정하여 줍니다
  4. 서버내에서 Winsw를 설치합니다
  5. 여기까지 되었다면 윈도우 Service 에서 미리 지정한 description 으로 해당 서비스를 찾은 뒤 실행되도록 합니다

여기까지 완료되었다면 서버에 spring boot 파일을 배포가 완료됩니다

0개의 댓글