■ 프로젝트 배경


기존 코드를 활용해 새로운 메일 API를 개발하라는 지시를 받았습니다. 그러나 기존의 메일 전송 API는 특정 메일 전송 방식에 강하게 의존하고 있어, 새로운 기능 추가 시 유사 코드가 반복 생성되는 문제가 있었습니다.

■ 프로젝트 목표 및 성과


목표 성과
1 다양한 메일 발송 용도로 코드를 활용할 수 있도록 기존 코드 개선 SendEmailRequest 정의와 이메일 전송을 받는 메소드를 수정함으로써 개선
2 새로운 메일 전송 API 구현

■ 발생 문제 및 해결 과정


  1. 기존의 메일 전송 API는 특정 메일 전송 방식에 강하게 의존하고 있었습니다.

    서비스가 확장됨에 따라 다양한 메일 API도 필요해졌습니다. 이때, 메일 API 기능이 추가될 때마다 코드의 반복을 막고 하나의 메서드로 요청할 수 있도록 코드를 개선하였습니다.

    image.png

이메일 전송에 필요한 객체는 SendEmailRequest라는 클래스를 통해 생성합니다. 다양한 API에 따른 요청은 각각의 Dto로 정의하고, SendEmailRequest에 필요한 내용을 설정하도록 구현하였습니다. 메일 유형에 따라 달라지는 내용은 SendEmailRequest에 Map으로 정의된 properties에 담을 수 있도록 설계하였습니다. 이러한 설계 및 구현을 통해 메일 유형에 따라 객체를 설정할 수 있게 되었습니다.

image.png

■ 프로젝트를 통해 배운 점과 앞으로 활용할 점


  1. 실제 프로젝트에 디자인 패턴을 적용하면서 API 개발 역량을 향상시켰습니다.

    기존 API의 기능을 분석하고, 고객의 다양한 요구사항에 유연하게 대응할 수 있도록 범용적인 구조로 개선하는 과정을 통해 API 설계에 대한 이해도를 높일 수 있었습니다. 팩토리 메서드 패턴 적용을 통해 객체 지향 설계의 중요성을 체감하고, 코드의 재사용성과 확장성을 높이는 실질적인 경험을 쌓았습니다.

    또한 이메일 전송 요청을 보낼 때, 플랫폼(서버) 측의 이메일 전송 API의 유연성 또한 개선하는 작업을 수행하였습니다. 이를 통해 다양한 이메일 유형에 대응할 수 있는 범용적인 API 구조를 구현할 수 있었습니다. 앞으로 기능을 도입할 때 이러한 범용성을 한 번 더 고민해보는 개발자가 되고자 다짐하였습니다.

  2. 추가적으로 코드 리뷰를 통해 다음 내용을 학습하고, 기록하였습니다.