본문 바로가기

BackEnd7

JSR 303, 380, @Valid, @Validated 보호되어 있는 글 입니다. 2023. 7. 23.
🛠️ Swagger ? API 문서에 대해 고민한 적이 있다. 이유는 API 문서를 노션에 관리해서 소비자에게 전달했는데, 정말 귀찮은 프로세스였다. 개발 - 테스트 - API Notion 최신화 - 수정 - 개발 - 테스트 - API Notion 최신화 아니 다른 방법이 있다. 찾고 적용하자라는 마인드로 REST Docs 찾아서, 적용한 적이 있다. 이때 고생 아닌 고생을 해야 했는데, 우선 모든 API에 대해 테스트 코드를 다시 작성했다. UI를 위해 Asciidoctor인가? 문법을 보면서 template를 작성했다. 설정도 복잡했고, 가장 중요한 건 코드 작업량이 미쳤다는 것이다. 테스트 코드도 유지보수의 작업인데, 이게 혼자 백엔드를 개발하는데 감당이 안된다. 같이하면 뭐.. 그래도 마무리했다.. 이번 팀프로젝트에서 .. 2023. 7. 12.
SSH 접속 불가 NCloud 서버의 접속이 안된다! 오늘은 NCloud 서버의 ssh 접속이 안 되는 경우를 해결하는 방법이다. ( 온프레미스의 경우이다.) 내가 만든 프로젝트는 아니지만 운영관련해서 일이 하나 있었다. 애플리케이션이 동작하는 서버가 있었는데, 어느 순간부터 ssh 접속이 안된다는 것이다. 이를 맡은 개발자가 여러 시도를 해보고 NCloud 문의도 많이 한 것으로 보인다. 우선 살펴보기로 했다. putty로 해당 서버의 접속하려고 시도했지만 다음과 같이 Remote side unexpetedly closed network connection이라는 문구가 나오면서 접속이 되지 않았다. NCloud AVG 설정을 보니 우선 보안적으로 취약한 점을 찾았다. ssh에 대한 접속권한이 public으로 전부 열려있.. 2023. 3. 15.
Prometheus & Grafana 1월 31일 2.42.0 버전이 릴리즈 되었다. 해당 버전을 기준으로 공식문서를 참고해서 읽어보자. 프로메테우스는 오픈 소스의 모니터링, 알람 툴킷 시스템이다. *알람 툴킷이 뭐지? 알람 툴킷(Alarm Toolkit)은 소프트웨어 개발자가 알람 및 예약된 작업을 구현할 수 있는 라이브러리나 도구 모음입니다. 이를 사용하면 개발자는 알람 및 예약된 작업에 대한 로직을 작성하지 않고도 프로그램에서 쉽게 이러한 작업을 구현할 수 있습니다. 알람 툴킷은 다양한 운영 체제 및 프로그래밍 언어에서 사용할 수 있으며, 예약된 작업을 처리하는 방법과 알람을 설정하고 관리하는 방법을 추상화하여 개발자가 구현을 간소화합니다. 예를 들어, 개발자가 지정한 시간에 작업을 실행하거나 일정 시간이 경과한 후에 알림을 표시하는 .. 2023. 2. 17.
Monitoring 운영하는 서비스가 장애가 발생한 적이 있습니다. 이를 뒤늦게 알았고 어떠한 알림도 개발자에게 전달되지 않았습니다. 원인은 서버의 동작문제가 아닌 로드밸런서의 인증서가 만료되어 발생한 문제였고, 이는 다른 회사의 서버 개발자의 실수로 발생했지만 이에 대해 너무 늦은 대처로 서비스가 장시간 장애 상태로 유지되었다는 것과 장애를 제가 인지하지 못했다는 것을 자책하게 되었습니다. 환경 탓을 하지 않고 내 잘못이라고 생각하니 이를 어떻게 해결해야할지 고민이 되었고 이를 해결하기 위한 여러 가지 해결 방법을 찾기 시작했습니다. 그래서 찾은 답은 모니터링을 도입해보는 것이었습니다. 저는 모니터링을 도입해 본 적은 없습니다. 모니터링이 어떠한 수치를 제공해 주는지도 모릅니다. 모니터링이 주는 이점에 대해 모릅니다. 어.. 2023. 2. 16.
CQRS Pattern 마틴 파울러의 CQRS를 읽어보자. CQRS는 Command Query의 책임을 분리하는 것이다. Query는 상태를 변경하지 않는 결과를 반환하는 것 ( 사이드 이펙트가 없음) Commands는 상태를 변경하지만 결과를 반환하지 않는 것 마틴 파울러는 CQRS의 핵심은 서로 다른 모델을 사용하여 데이터의 갱신, 추가와 조회를 개별 적은 로 분리하는 것을 의미합니다. 하지만 이는 일부 상황에서 CQRS는 효율적이고 대부분의 시스템에서는 위험한 복잡성을 추가하는 것과 같다고 합니다. 이러한 주장에서 우리가 알아보아야 할 것은 무엇일까요? 바로 어떠한 상황에서 CQRS 패턴은 효율적인지 확인해 보아야 합니다. 또한 왜 대부분의 시스템에서는 명령과 조회의 책임을 분리함에 따라 복잡성을 낮추는 것이 아니라 증가.. 2023. 2. 2.
Event 최근 이벤트를 통한 느슨한 결합과 알림 기능을 구현하면서 여러 선택의 갈림길에 마주쳤는데 이를 고민하는 과정을 적는다. 이벤트를 무엇으로 구현할 것인가? 현재 자원에 맞춰서 생각했다. scale-out은 비즈니스적으로 불가능한 구조였고 scale-up은 어느 정도 합의를 통해 가능하다는 이야기를 들었다. 따라서 애플리케이션 서버의 리소스만을 사용하도록 구현해야 했다. 이를 위해 Spring Framework의 Application Event를 사용했다. Spring에서 제공하는 Applicaiton Event는 ApplicaitonContext의 확장 기능 중 하나로 ApplicationContext를 Wrapper Class인 ApplicationEventPublisher를 사용하여 Applicatio.. 2023. 1. 30.