전체 글
-
[Spring Boot / FastAPI] 프로젝트 환경 분리프로젝트/뉴스타 2024. 6. 30. 22:34
프로젝트 환경 분리 왜 궁금했을까❓프로젝트를 할 때, Dev와 Prod 환경 설정들을 분리하지 않고 사용하다 보니 지속적으로 Config를 수정해야 한다는 문제점이 있었다. 이러한 부분에서 팀의 생산성을 향상시키고자 Dev와 Prod 환경을 분리하려고 한다. 또한, 분리를 통해 운영 서버의 데이터를 조작할 수 없게 하여 안전성을 향상시키고자 한다. 1. 기존의 환경 변수 관리법기존에는 각 어플리케이션의 환경 변수를 하나의 YAML 파일에 넣고 GitLab에 PUSH하여 팀원끼리 공유하는 식으로 진행이 되었다.위와 같은 방식으로 운영하다보니 환경 변수가 prod와 dev가 섞이게 되어 운영 서버에 데이터가 들어가거나 개발 서버의 환경 변수로 인해 작동이 안하는 장애가 발생했다.각 팀원들이 pull을 할 때..
-
[FastAPI] ElasticSearch프로젝트/뉴스타 2024. 6. 27. 09:38
ElasticSearch 왜 궁금했을까❓뉴스타는 1시간마다 크롤링한 뉴스 데이터를 요약해서 사용자 맞춤형으로 뉴스를 추천하는 서비스이다. 뉴스 검색 기능도 지원하여 MySQL의 like 함수를 이용하여 구현했다. 하지만, 추후 데이터가 늘어나면 사용자 응답 속도가 늦어질 것이라 판단했고 이에 대안으로 ElasticSearch를 도입하기로 했다. 이번 포스팅에서는 ElasticSearch의 개념과 동작원리 등에 대해서 알아보려고 한다. 1. ElasticSearch란?Apache Lucene기반의 Java 오픈 소스 분산 검색 엔진빅데이터를 신속하게 저장, 검색, 분석단독으로 검색엔진으로 사용되기도 하며 ELK(ElasticSearch, Logstash, Kibana)로 사용하기도 함ElasticSearc..
-
[Spring boot] Java 테스트 코드프로젝트/뉴스타 2024. 6. 17. 10:27
Java 테스트 코드 왜 궁금했을까❓뉴스타 서비스에서는 테스트 코드를 작성하여 서비스의 코드 품질을 높이고 장애를 사전에 방지하고자 작성해보려고 한다. 또한, 코드 수정 시 빠르게 검증하여 작업의 생산성을 향상시키고자 한다. 1. 단위 테스트 / 통합 테스트1.1. 단위 테스트 (Unit Test)하나의 기능 또는 함수를 기준으로 독립적으로 수행하는 가장 작은 단위의 테스트하나의 기능이 정상적으로 동작하는지를 테스트하는 것으로 "어떤 기능이 실행되면 어떤 결과가 나온다" 정도로 테스트한다.1.2. 단위 테스트 장점테스트에 대한 시간과 비용을 절감새로운 기능을 추가하거나 수정 시 빠른 테스트 가능리팩토링 시에 안정성 확보코드에 대한 문서화1.3. 통합 테스트 (Integration Test)하나의 기능 ..
-
[Spring Boot] Redis를 활용한 성능 향상프로젝트/뉴스타 2024. 6. 16. 10:00
Redis를 활용한 성능 향상 왜 궁금했을까❓뉴스타 서비스는 비로그인 서비스로 사용자 식별을 위한 고유 키값을 발급해 준다. 해당 키는 서비스를 이용할 때, 지속적으로 검사하는 과정이 존재하는데 MySQL에서 값을 조회하게 된다. 빈번한 디스크 I/O로 인해 DB에 부하가 갈 것이라 생각되어 In-Memory 방식인 Redis를 캐싱 서버로 활용하여 성능을 향상시키고자 한다. 1. 서비스 흐름도사용자가 서비스에 접속하면 UUID 발급 API를 서버에 전송한다.API 서버는 UUID를 생성하고 MySQL 서버에 저장한다.생성된 UUID를 사용자에게 응답한다.사용자 API를 사용할 때, UUID를 헤더에 담아 API 서버에 요청한다.올바른 사용자인지 확인하기 위해 MySQL에 있는 UUID를 조회한다.이와 ..
-
[Infra] 무중단 서비스를 위한 Health Check프로젝트/뉴스타 2024. 6. 14. 08:32
무중단 서비스를 위한 Health Check 왜 궁금했을까❓뉴스타 프로젝트는 CI/CD 과정에서 서비스가 중단되는 문제점이 존재했다. 이를 해결하고자 블루-그린 배포 전략을 도입하기로 했고 새로운 서버의 상태를 체크하는 Health Checking 과정이 필요했다. 단순히 서버에 ping을 쏴서 확인하는 방법도 있었지만 지원하는 라이브러리와 프로젝트 상황에 맞게 API를 만들어보려고 한다. 1. Health Check 란?서버가 정상적으로 작동하고 있는 지를 체크하고자 하는 것1.1 Health Check 방법Docker 명령어Docker에서 Health Check를 위한 명령어가 존재한다.HEALTHCHECK 명령어를 사용해서 컨테이너의 상태를 파악할 수 있다.interval, timeout, ret..
-
[Infra] Docker 이미지 최적화프로젝트/뉴스타 2024. 6. 13. 07:32
Docker 이미지 최적화 왜 궁금했을까❓Docker를 이용하여 이미지 파일을 만들어보니 약 5.1GB로 생각보다 이미지의 크기가 컸다. 큰 용량으로 인해 빌드 시간이 오래 걸려 배포가 늦어진다는 문제점이 존재했다. 이를 해결하고자 Docker 이미지 최적화를 찾아봤는데 Multi Stage Build, 작은 Base 이미지 등을 활용하여 줄이는 방법이 있었다. 이에 대해 알아보고 프로젝트에 적용해보려고 한다. [Infra] Dockerfile & Docker-Compose 작성Dockerfile & Docker-Compose 작성 왜 궁금했을까❓뉴스타 서비스의 경우 Docker를 이용하여 어플리케이션을 띄우기로 했다. 그래서 Dockerfile과 Docker-compose 작성법에 대해서 알아보고 뉴스..
-
[Infra] Dockerfile & Docker-Compose 작성프로젝트/뉴스타 2024. 6. 11. 08:56
Dockerfile & Docker-Compose 작성 왜 궁금했을까❓뉴스타 서비스의 경우 Docker를 이용하여 어플리케이션을 띄우기로 했다. 그래서 Dockerfile과 Docker-compose 작성법에 대해서 알아보고 뉴스타 서비스에 적용하는 과정까지 살펴보도록 하겠다. 1. Dockerfile 문법 Dockerfile referenceFind all the available commands you can use in a Dockerfile and learn how to use them, including COPY, ARG, ENTRYPOINT, and more.docs.docker.com명령설명FROM베이스 이미지 설정LABEL이미지의 Metadata 설정CMDDocker Container를 생..
-
[Infra] Nginx Reverse Proxy & SSL 적용프로젝트/뉴스타 2024. 6. 10. 08:56
Nginx Reverse Proxy & SSL 적용 왜 궁금했을까❓Nginx를 Proxy 서버로 두어 SSL을 적용하고 내부 서버에 직접 접근하는 것을 막고자 Reverse Proxy 기술을 적용해 보려고 한다. 또한, Forward Proxy와 Reverse Proxy의 동작 원리와 차이점을 알아보고자 한다. [Infra] Nginx 란?Nginx 왜 궁금했을까❓뉴스타 프로젝트에서 인프라 구축을 담당하여 Reverse Proxy, SSL, LoadBalancing 등의 장점이 있는 Nginx를 활용해 보기로 했다. 해당 포스트를 통해 Apache Server와 Nginx의 동작 원리와pslog.co.kr위 포스팅을 통해 Nginx에 대한 개념과 원리를 학습할 수 있다.1. Proxy란?Proxy는 사전..