프로젝트/[EATceed] 몸무게 증량 어플(24)
-
전략 패턴을 이용해서 요구사항 대응하기
프로젝트를 진행하다가 요구사항이 변경되었다. 기존 요구사항은 "식사 등록시 한 식사에 대해 인 분(multiple)이란 단위만을 사용하는 것이었다." 요구사항은 "식사 등록시 각 음식에 대해 인 분(multiple) 또는 g(무게) 단위를 사용하는 것"으로 바뀌었다.식사를 등록할 때 단위는 얼마든지 바뀌거나 수정될 수 있다. 문제는 바뀐 요구사항에의해 음식의 영양소를 분석하는 기존 로직을 수정해야한다는 것이었다.이는 OSP(Open Closed Principle)에 위배된다. 따라서, 전략 패턴을 사용해 새로운 "단위"가 도입되더라도 변경이 최소화되도록 코드를 개선하였다. 전략 패턴 전략 패턴은 실행 중에 알고리즘 전략을 선택하여 객체 동작을 실시간으로 바뀌도록 할 수 있게 해주는 디자인 패턴이다. 전략..
2024.06.01 -
CI/CD 파이프라인 구축
이번 학기 캡스톤 프로젝트에서 CI/CD 파이프라인 구축을 해보아서, 이번에도 비슷하게 하면 되겠지 라는 마음으로 임하였다가 꼬박 몇 시간 동안 파이프라인 작업만 하였습니다.. 개발집에서는 GitHub Actions를 사용해 파이프라인을 구축하였습니다.GitHub Actions를 사용한 이유는 아래와 같습니다.GitHub과 하나로 통합된 환경인 만큼 친숙하다.친숙한 문법인 YAML 파일을 사용하여 파이프라인 구축이 가능하다.다음으로, 파이프라인의 흐름을 살펴보겠습니다. 전체적인 흐름docker image를 build 후 push 한 후 EC2 서버내에서 해당 이미지들을 Pull해와 docker-compose로 컨테이너들을 작동시키는 것이다.그리고, docker-compose할 때 필요한 설정 파일들은 ..
2024.05.26 -
EC2 용량 부족 이슈 해결
모니터링 서비스에 접속하니 "페이지가 작동하지 않고, 리다이렉션 횟수가 너무 많다 ~ " 이런 페이지가 나오며 접속이 되지 않고 있었습니다.뭐가 문제지 이것저것 찾아보던 디스크의 용량을 확인하게 되었습니다.디스크의 용량을 확인해보니..?? dh -h 디스크의 용량이 꽉 차있었습니다.더 자세한 원인을 확인해보기 위해서 아래와 같이 디스크 용량을 많이 차지하는 순서대로 조회를 해보았습니다. 확인 해보니, docker container에서 디스크의 용량을 대부분 차지하고 있는 것으로 확인이 되었습니다. 참고 : docker 미사용 리소스 삭제하여 디스크 용량 줄이기도커를 사용하며, 사용하지 않는 임시 파일이나 이미지 컨테이너 파일이 누적되면 용량이 커지는 문제가 발생한다.이 때 아래 명령어를 사용하며..
2024.05.13 -
@ColumnDefault에 대한 오해
필자는 @ColumnDefault를 사용하는 것이 Insert 쿼리와 관련이 있는 것인 줄 알고 있었으나, 공부해보니 그것이 아니었다.@ColumnDefault는 ddl-auto와 관련이 있는 것으로 ddl이 시작될 때 해당 어노테이션이 사용되는 것이었다.(간단하게 생각하면, 엔티티에 맞는 스키마가 만들어질 때 적용)운영환경에서는 ddl-auto가 validate나 none이기때문에 사실상 해당 애노테이션은 운영환경에서 작동을 하지 않는다.따라서, 본래 목표인 Insert 쿼리를 날렸을 때 해당 컬럼이 default값이 설정되게끔 만들려면 추가적인 설정이 필요하다.@Builder.Default우리가 해야할 추가적인 설정 첫 번째는 @Builder.Default이다.@Builder는 객체의 생성을 쉽고 간..
2024.05.07 -
Grafana와 Prometheus를 이용한 모니터링
모니터링은 시스템, 네트워크 그리고 서비스의 상태 및 성능을 지속적으로 감시 및 기록하는 프로세스이다.모니터링 환경을 구축하는 이유가 많겠지만, 필자가 모니터링 환경을 구축한 이유는 시스템의 성능을 추적하기 위해서다. 모니터링 환경을 구축하는 방법을 알기 전에 구성요소들의 개념을 알아야한다. MetricMetric이란 모니터링을 위해 수집되는 측정 항목이나 지표를 말합니다. Metric은 CPU, 메모리 그리고 디스크 I/O 등의 지표는 물론 사용자가 특정 비즈니스 메트릭을 커스텀하게 만들 수도 있습니다. ActuatorActuator는 Spring Boot에서 제공하는 라이브러리로 여러 endpoint를 제공하여 애플리케이션을 쉽게 관리할 수 있도록 도와준다.Atuator의 MicroMeter는 애플..
2024.05.04 -
개발용 인프라 구축
새 학기를 맞이하여 개발팀에 AI 개발자 2명과 백엔드 개발자 1명을 새로 영입했습니다. 본격적인 개발을 시작하기 전에, AWS를 활용하여 새로운 개발용 인프라를 구축하기로 결정했습니다. 개발 환경을 고려하여 비용 효율성을 높이기 위해, Private Subnet에 MariaDB 서버를 배치하는 대신, 하나의 EC2 인스턴스에 여러 컨테이너를 배포하는 방식을 선택했습니다. 구체적으로, docker-compose를 사용하여 한 대의 EC2 인스턴스에 1개의 Nginx, 2개의 웹 애플리케이션 서버(WAS), 그리고 MariaDB와 Redis를 함께 올렸습니다. 이렇게 함으로써, 개발 환경을 효율적으로 관리하고 비용을 절감할 수 있게 되었습니다. 해당 인프라의 요청 흐름은 대략 아래와 같습니다. 외부..
2024.03.08