모두 모여라, 모모 서비스에는 이미지를 관리하는 기능이 있다. 미리 저장해둔 이미지를 조회하는 용도로만 관리하는 카테고리 이미지와 생성한 모임에 대해 원하는 썸네일을 지정할 수 있는 모임 이미지가 있다. 서버 구축을 AWS 를 사용하는 개발자들은 대부분 이미지 관리를 위해 S3 를 사용할 것이다. 하지만 우아한테크코스에서 제공하는 AWS 의 서버는 EC2 로 제한되어 있었기 때문에 EC2 만을 이용하여 원하는 서버를 구현해야 하는 문제가 있었다.

일단 이미지 서버를 구축하기에 앞서, 이미지를 관리하는 서버에서 어떤 기능들을 제공해야 하는지 정리해보았다.

이미지 서버의 역할 동작 기능
카테고리 미리 저장되어 있는 이미지 조회 카테고리 아이콘 조회
모임 미리 저장되어 있는 이미지 조회 모임 썸네일 조회
새로운 이미지 업로드 모임 썸네일 수정

간단하게 이미지를 저장조회하는 기능만을 구현할 예정이다. 이미지 서버에 저장되어 있는 이미지를 조회하기 위해서 웹 서버 가, 이미지를 저장하기 위해서 스프링 애플리케이션 을 구현하려고 한다.

Nginx

웹 서버의 종류는 다양하지만 보통 많이 사용하는 것은 Apache, Nginx 이다. 두 개의 웹 서버 중 메모리의 사용량을 아끼고 비교적 성능이 좋은 Nginx 를 선택하였다.

Apache vs Nginx

Nginx 설치

일단 EC2 에 Nginx 를 설치한다.

$ sudo apt-get install nginx
$ sudo nginx -v
nginx version: nginx/1.18.0 (Ubuntu)

$ curl -I 127.0.0.1
HTTP/1.1 200 OK
Server: nginx/1.18.0 (Ubuntu)
Date: Sun, 19 Mar 2023 04:13:09 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sun, 19 Mar 2023 04:11:40 GMT
Connection: keep-alive
ETag: "64168b7c-264"
Accept-Ranges: bytes

기본 경로로 접속해보면 Nginx 의 동작을 확인할 수 있다.

Untitled

Nginx 설정

Nginx 를 설치했으니 웹 서버가 해주어야 하는 기능만 conf 파일에 설정하면 된다. conf 파일에 설정해야 하는 것들은 아주 간단하다. 이후에 Spring 애플리케이션으로 저장할 이미지를 외부에서 접근할 수 있도록 설정해주면 된다.

/etc/nginx/momo/image.conf

http {
        server {
                location / {
                        root /home/ubuntu/momoimage/build/libs/image-save;
                }
        }
}

기본으로 제공되는 conf 파일에 이미 여러 셋팅이 포함되어 있어 내가 추가한 부분을 구분하기 위해 별도의 conf 파일을 생성 후 include 부분을 추가하였다.

/etc/nginx/nginx.conf

...

http {

        ...

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
				include /etc/nginx/momo/*.conf; // 추가
}