전교생이 사용하는 이력서 작성 플랫폼 프로젝트를 리드하여 개발해 안정적인 운영을 이루어냈습니다.
실제 프로젝트 팀에서 정기적인 코드 리팩토링을 주도 해왔습니다.
끊임없이 학습하고 도전해 복잡한 로직을 단순화하고, 안정적인 서비스를 제공하는 사용자 중심 서비스를 만들어내는 개발자로 성장하는 것이 저의 목표입니다.
$\color{white}\rule{685px}{0.5px}$
<aside>
</aside>
<aside>
</aside>
$\color{white}\rule{685px}{0.5px}$
개발 기간: 2024년 6월 ~ 2025년 2월
깃허브 레포지토리: https://github.com/daemawiki/Claude
개발 인원: 백엔드 1명, 프론트엔드 2명
기술 스택:
프로젝트 화면:
대마위키는 대덕소프트웨어마이스터고등학교 학생들을 위한 정보 공유 플랫폼입니다.
Spring WebFlux 기반의 리액티브 웹 애플리케이션으로 구축되어, 높은 성능과 효율적인 리소스 관리를 목표로 설계되었습니다.
현재는 운영 준비 중이며, 개발 완료 후 내부 테스트를 거쳐 서비스될 예정입니다.
담당 역할: 백엔드 리드를 맡아 전체 API 설계 및 구현을 주도하였으며, 함수형 프로그래밍과 리액티브 프로그래밍 패러다임을 활용하여 고성능 웹 애플리케이션을 구축하였습니다.
관련 코드: https://github.com/Daemawiki/Claude/blob/develop/src/main/java/com/daemawiki/internal/core/domain/service/document/DocumentSocketEditingService.java
문제점: 회원가입 시 이메일 중복 검사와 인증 코드 확인 작업의 순차적 처리로 인한 지연
해결방안: Mono.when()
을 활용하여 두 작업을 병렬로 처리
public Mono<Void> register(final RegisterDTO dto) {
return validateRegistration(dto.email())
.then(Mono.defer(() -> executeRegisterProcess(dto)));
}
private Mono<Void> validateRegistration(final Email email) {
return Mono.when(
ensureEmailNotRegistered(email),
validateEmailAuthentication(email)
);
}
성과:
전체 처리 시간 약 40% 단축 ⇒ 사용자 경험 개선
**Redis(인증 코드)**와 **MongoDB(이메일 중복)**에 대한 네트워크 요청 병렬 실행
해당 두 작업은 서로 영향을 미치지 않기 때문에 병렬 처리 판단을 하였습니다.
회원가입 프로세스 Endpoint 응답 속도 P90 기준 300ms 이내 달성
관련 코드: https://github.com/Daemawiki/Claude/blob/develop/src/main/java/com/daemawiki/internal/core/domain/service/auth/RegisterService.java
관련 코드: https://github.com/Daemawiki/Claude/blob/develop/src/main/java/com/daemawiki/internal/core/domain/service/mail/MailSendService.java
현재 실시간 문서 편집의 동시성 수준이 문서 단위에서 최대 열 단위 Sync로 크게 축소했고, 추후에 CRDT, OT 알고리즘을 도입하여 동시성 수준을 더욱 개선할 예정입니다
또한, Version Vector 도입을 통해 부분 수정을 정확하게 추적하고 싶은 계획이 있습니다.
Backpressure Control Patterns을 더욱 자세하게 공부하여 더 나은 리액티브 패턴을 적용하고 싶습니다.
처음엔 Spring MVC의 스레드 풀 방식이 납득되지 않아 WebFlux를 도입했지만, 오히려 복잡한 구조로 인해 오히려 생산성이 떨어지는 문제를 겪었습니다. 이 경험을 통해 새로운 기술은 도입 자체보다 트레이드오프, 그리고 실질적 효과가 더 중요하다는 점을 느꼈습니다.
WebFlux의 동작 원리를 깊이 이해하고 싶어 Project Reactor, Netty까지 학습했고, Redis/Lettuce의 Reactive Command 부분의 오픈소스에도 기여했습니다. 기술적으로는 큰 성장의 계기였지만, 무조건적인 비동기 구조가 성능 개선으로 이어지지 않는다는 현실적 인사이트도 얻었습니다.
단순히 새로운 걸 해보는 것을 넘어, 어떤 기술이 서비스에 어떻게 기여할 수 있을지 고민하는 태도가 개발자로서 더 중요하다는 걸 배운 프로젝트였습니다.
$\color{white}\rule{685px}{0.5px}$