impati

데이터베이스 서버로 데이터베이스 옮기기

들어가며 프로젝트를 진행함에 따라 관리해야 할 인스턴스 개수가 늘어났다. 그리고 데이터베이스 또한 매번 설치하고 개별로 관리하고 있었다. 매번 같은 작업을 반복하는 데에 불편함을 느끼고 있었고 마침 인스턴스 내의 데이터베이스와 통신이 제대로 동작하지 않아서 이참에 데이터베이스 서버를 구축하기로 정했다. 데이터베이스의 데이터를 새로운 데이터베이...

스프링 이벤트를 활용하여 관심사 분리하기

들어가며 최근에 팀원분들이랑 진행하고 있는 여행 관련 프로젝트에서 작성한 게시글에 좋아요 혹은 댓글 등의 눌리거나 달렸을 때 게시글 작성자에게 피드 형식의 알람을 구현하는 역할을 맡았다. 알람이 생성될 수 있는 곳은 여러 군데가 가능하므로 확장 가능성을 열어두어야하고 알람 기능을 구현함에 있어 기존 기능이 받는 영향을 최소로 해야한다. 어떻...

재시도 기능 도입으로 안정성 높이기

들어가며 최근에 클라우드 플랫폼에 서버를 올리면 종종 여러 가지 이유로 서버가 다운되어 응답 없는 경우가 발생했습니다. 직접 접속해 보기 전까지 이를 발견하지 못했으므로 직접 헬스 체크 기능을 구현하기로 마음을 먹었습니다. 사전에 약속된 앤드 포인트로 요청을 보내고 정상 응답을 기대하는 헬스 체크 기능을 구현한다고 했을 때 서버가 완전히 다운...

테스트와 문서화 한꺼번에 하기 위한 REST Docs 설정기

들어가며 프론트 개발자분들과 협업을 진행할 때면 CORS 문제와 API 스펙 문서로 인해 통신 장애가 자주 발생한 경험이 많습니다. 이러한 문제의 책임은 백엔드 개발자에게 있다고 생각하고 API 문서를 오타 없이 작성하면서 API 가 제대로 동작하는지 테스트하는 과정은 굉장히 중요하다고 생각합니다. 나아가 기능 개발이 추가되고 변경되어도 반드시 문...

외부 서버와 통신하는 로직 테스트하기

들어가며 최근에 프로젝트를 진행하면서 사용자에 대한 인증과 인가 기능을 외부 서버로 분리하는 작업을 수행했었습니다. 덕분에 프로젝트에서 인증과 인가 기능 코드와 책임이 많이 줄었지만 server to server 통신을 포함하는 로직테스트에 어려움이 생겼습니다. 외부 서버와 통신하는 로직의 테스트의 어려움은 다음과 같습니다. 외부서버로부...