제 프로젝트는 사용자가 특정 차트를 고르면, 코스피 코스닥 전 종목의 과거(10년) 차트들을 모두 탐색하여 가장 유사한 차트 10개 정도를 골라 사용자에게 보여주는 것이 목표입니다.
비슷한 차트 검색기
내 종목의 차트는 과연 상승하는 차트일까요?
www.similarchart.com
Nginx
웹서버?
웹 서버에 관해 처음 접한 것은 전역 직후 2022년 여름 김영한 개발자님의 Spring강의를 수강할 때였습니다. 당시에는 웹서버, 웹 애플리케이션 서버, 톰캣 등 그냥 그런 게 있나 보다 하고 웹서버에 대해서 정확히 알지 못하고 넘어갔습니다
.
그리고 나서 잊고 있다가 웹서버를 두 번째로 접한 것은 3학년 1학기입니다. 대학 서버프로그래밍 수업을 수강하며 웹서버가 웹 애플리케이션 서버와는 다르다는 것을 인지했습니다. 백엔드 개발자가 되겠다고 했는데 이제까지 이것도 모르고 있었다니 살짝 부끄러웠습니다.
몇 달 전 웹 아키텍처 공부를 하며 세 번째로 접하게 되어 이제는 웹서버에 대해 익숙해진 느낌입니다.
그리고 웹 프로젝트를 진행하며 사용자 기능을 모두 구현한 지금, 드디어 직접 웹 서버인 Nginx를 건드려야 하는 순간이 왔네요.
도커 컨테이너로 nginx를 실행
도커 컨테이너를 만들기 위해 nginx_server라는 디렉토리를 만들어 안에 Dockerfile과 nginx.conf를 만들어줍니다.
dockerfile
FROM nginx
# Nginx 설정 파일 복사
COPY nginx.conf /etc/nginx/nginx.conf
적용한 기능1. HTTPS 지원
SSL 인증서를 발급받고 nginx를 활용하여 https를 사용할 수 있게 되었습니다. SSL인증서를 발급받기 위해서는 도메인이 필요하더군요. 제 프로젝트 주제와 잘 어울리는 similarchart.com으로 큰맘 먹고 구입했습니다.
nginx.conf
http {
server {
listen 443 ssl;
server_name www.similarchart.com;
ssl_certificate /etc/letsencrypt/live/www.similarchart.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.similarchart.com/privkey.pem;
}
}
적용한 기능2. 캐싱
최적화라고 하면 캐싱은 빠질 수 없죠. 캐싱을 한 경우와 하지 않은 경우를 각각 테스트해 보니 기존에 2~3초 걸리던 로딩시간이 캐싱을 한 경우는 1초도 걸리지 않습니다.
nginx.conf
http {
# 캐시 설정
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=1g
inactive=60m use_temp_path=off;
server {
# 해당 위치에 대한 요청을 캐시하도록 설정
proxy_cache my_cache;
proxy_cache_valid 200 302 600m; # 600분 동안 캐싱
}
}
적용한 기능3. 요청 속도 제한
악의적인 사용자가 새로고침을 계속 클릭하여 서버에 부담이 가는 것을 막기 위해 요청 속도를 제한했습니다. 직접 테스트해보니 이 제한을 넘어가면 http 응답을 받을 때 이미지 몇 개를 받지 못하거나 아예 오류 페이지를 보여주더군요.
nginx.conf
# 요청 속도 제한 설정 - 1초에 5번
limit_req_zone $binary_remote_addr zone=my_limit:10m rate=5r/s;
# 요청 속도 제한 적용 - 1분에 100번
limit_req zone=my_limit burst=100 nodelay;
적용한 기능4. 로깅
저도 처음에는 귀찮아서 로깅을 잘하지도 않고 그냥 print()로 대충 넘어갔는데, 버그나 오류가 발생 시 로깅이 제대로 되어있지 않으면 꽤 힘들어서 하다 보니 저절로 로깅을 잘하게 바뀌었습니다. 백엔드 단에서도 로깅작업을 잘해놓고, 웹 서버에서도 로깅을 제대로 해놓는 게 향후 도움이 될 것입니다.
nginx.conf
# 로그 설정
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
정리
이외에도 Nginx에는 많은 기능들이 있지만, 일단 제 프로젝트에 필수적인 기능들만 추가했습니다. 향후 서버를 운영하며 필요한 기능들을 추가할 예정입니다.
'프로젝트' 카테고리의 다른 글
프로젝트19. 두번째 도전 Start - 앱을 만들어 보자! (그런데 아는게 없다) (0) | 2024.02.17 |
---|---|
프로젝트18. 파일로 캐싱 레디스로 캐싱 웹서버로 캐싱 CDN으로 캐싱 (0) | 2024.02.17 |
프로젝트16. 웹페이지 다 만들었다! 6개월간의 사투 끝에 승리선언 (0) | 2024.02.17 |
프로젝트15. 모든 사용자 기능 구현완료! 힘들었던 점과 식겁했던 순간 (1) | 2024.02.17 |
프로젝트14. 웹페이지 다국어 간단하게 지원하는 방법(직접 제작) (0) | 2024.02.17 |