GraphQL 플레이 그라운드는 GraphiQL, Altair 등이 있다.

GraphiQL UI가 마음에 안들기도 하고, 기존에 Altair를 사용하고 있었어서 GraphQL 서버를 개발하면서 Altair 붙이는 것 부터 작업을 시작했는데, 여기서 부터 막혀버렸다.

 

build.gradle.kts

implementation("com.graphql-java-kickstart:altair-spring-boot-starter:11.1.0")

application.yml

graphql:
  altair:
    enabled: true
    mapping: /altair
    options:
      endpoint-url: /graphql

위와 같이 설정을 해도 아래와 같이 404 No static resource altair. 오류가 발생했다

Dependency는 잘 걸린 것 같은데 아래의 Altair static 파일들을 가져오지 못해서 발생하는 문제 같았다.

한참을 삽질하다가 구글링으로 두가지 해결 방법을 찾았다.

 

property 설정으로 해결

static 리소스는 CDN으로 전달되어서 application.yaml 에 cdn 설정을 추가하면 된다.

   graphql:
     altair:
       enabled: true
       mapping: /altair
       cdn:
         enabled: true
         version: 4.0.2
       options:
         endpoint-url: /graphql

Configuration

직접 static 리소스 파일의 위치를 WebMvcConfigurationSupport에 추가한다.

@Configuration
class GraphQlConfig : WebMvcConfigurationSupport() {
    override fun addResourceHandlers(registry: ResourceHandlerRegistry) {
        registry.addResourceHandler("/vendor/**")
            .addResourceLocations("classpath:/static/vendor/")
    }
}

altair-spring-boot-starter에서 CDN 설정을 제공해주니 property 설정으로 해결하는게 좋다고 판단하고 해당 방법으로 문제를 해결했다.

 

참고

반응형

SpringBoot Application을 80 port로 사용하고 싶은데, 리눅스 환경에서 80, 443과 같은 포트는 루트 권한으로 사용이 가능하다.
SpringBoot application의 내장 톰켓이 해당 포트를 사용할 수 있도록 sudo 권한을 사용해 서비스를 올리는 것 보다 proxy 서버를 올리는게 더욱 용이하므로 Nginx를 사용한 내용을 정리한다.

 

Nginx 란?

Apache의 1만명 규모 클라이언트의 동시 접속을 다루는 기술적인 이슈를 해결하기 위해 만든 Event-driven 구조의 오픈소스 서버 프로그램이다.
일반적인 HTTP 웹서버의 역할 외에도 proxy, reverse proxy를 제공한다.

 

설치 및 설정

Centos6

설치

$  yum install nginx

 

라우팅 설정

yum으로 nginx를 설치하게 되면 /etc/nginx 경로에 설치된다.
nginx 디렉토리 중 conf.d디렉토리 하위의 default.conf 파일을 변경하여 SpringBoot Application을 80 port로 포팅 한다.

$ vi /etc/nginx/conf.d/default.conf
# 아래와 같이 변경
# The default server
#

server {
#    listen       80 default_server; 
#    listen       [::]:80 default_server;
    listen       80;
    server_name  _;
    root         /usr/share/nginx/html;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
#                SpringBoot application을 매핑
        proxy_pass http://localhost:9100;
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }

}
server 블럭

도메인 단위의 1차 라우팅에 대한 설정을 담당한다..

  • listen : 서버 블록 정의 중 해당 서버에서 라우팅 할 특정 port를 정의하는 필드
    • default_server : 여러개의 server 블록을 작성할 때 default_server는 프로토콜 별로 단 하나의 server 블록에만 존재해야 합니다. 이 설정은 별도로 지정하지 않은 도메인으로 들어오는 다른 모든 요청에 대해서 해당 server 블록이 처리함을 의미한다.
  • server_name : 어떤 도메인을 라우팅 할지에 대한 필드

 

location 블럭

URI 리퀘스트의 path prefix의 매칭을 확인하여 적절한 어플리케이션으로 매핑한다.

  • proxy_pass : 실질적으로 요청 할 서비스를 명시하는 필드

 

Nginx 실행

아래의 명령어로 nginx 명령어 만으로 실행이 완료되고 별다른 알람 없이 실행이 완료되면 ps 명령어로 한번 더 확인 해 준다.

$ sudo nginx
$ ps -ef | grep nginx
root     20270     1  0 16:36 ?        00:00:00 nginx: master process nginx
nginx    20271 20270  0 16:36 ?        00:00:01 nginx: worker process
nginx    20272 20270  0 16:36 ?        00:00:01 nginx: worker process
nginx    20273 20270  0 16:36 ?        00:00:01 nginx: worker process
반응형

'Dev > Linux' 카테고리의 다른 글

[LINUX] JVM에서 thread dump 가져오기  (0) 2020.05.19
[Linux] 기본 명령어 정리(옵션) + 기타  (1) 2018.03.27

+ Recent posts