미리보기
기본 정보
백엔드 엔지니어 강준모입니다. 비즈니스적 수요에 기민하고 효율적으로 대응하는 개발을 추구합니다. 운영 환경에 최적화된 애플리케이션 개발에 관심이 있습니다.
기술 스택
Java, Spring Boot, JPA, MySQL, Docker, Kubernetes, Redis, aws-ec2, aws-rds, aws-s3
프로젝트
선착순 티켓 기반 게시판 서비스
개인
2024.02. ~ 진행 중
매일 선착순으로 티켓을 발급 받아 게시글을 작성하는 게시판 서비스 프로젝트입니다.
GitHub, 성능 최적화 과정, 인증 기능 구현 과정
다대일 관계 엔티티를 지연 로딩하도록 설정하고, N+1 발생 케이스에 Fetch Join을 사용해 쿼리 양을 최적화
⇒ 조회 기능 부하 테스트 시 평균 응답 속도 70%(252ms → 73ms) 감소
Fetch Join 사용 이점을 극대화하기 위해 OSIV 설정을 false로 변경해, DB 커넥션 리소스 사용을 최적화
⇒ 조회 기능 부하 테스트 시 평균 응답 속도 53%(73ms → 34ms) 감소
DB 부하 감소를 위해 글로벌 캐시(Redis)d와 로컬 캐시(Caffeine, ConcurrentHashMap 기반)를 각각 사용해 평균 응답 속도를 비교하고, 프로젝트의 아키텍처와 배포 환경을 고려해 로컬 캐시를 적용
⇒ 조회 기능 부하 테스트 시 평균 응답 속도 35%(Redis, 34ms → 22ms), 76%(Caffeine, 34ms → 8ms) 감소
티켓 데이터 생성과 상태 확정 과정을 분리하고, 데이터 생성 후 id 값을 비교해 상태를 확정한 뒤 티켓을 발급
⇒ 코드를 통한 명시적인 잠금 없이 동시성 문제를 해결
Spring Security 없이 WebMvcConfigurer와 HandlerInterceptor로 인증 기능을 구현하고, ThreadLocal을 사용해 인증 관련 로직 수행 시 인증 정보 접근을 간소화
세션 기반 인증 기능과 JWT 기반 인증 기능을 개발해, 애플리케이션 실행 시점에 선택이 가능하도록 구현
액세스/리프레시 토큰을 각각 Authorization 헤더, 쿠키(HttpOnly, Secure=true 플래그 설정)에 담아 전달하고, 리프레시 토큰 검증 시 만료된 액세스 토큰 검증 과정을 추가
⇒ CSRF로는 탈취할 수 없는 액세스 토큰과 XSS로는 탈취할 수 없는 리프레시 토큰이 재발급에 모두 필요하게 만들어, 공격자의 토큰 재발급을 차단
테스트 주도 개발(TDD) 방법론을 적용해, 작성 코드의 불안정성을 줄여 개발 생산성을 높임
개인
2024.03. ~ 2024.04.
단위 테스트 작성 시 발생하는 코드 중복을 제거하는 프로젝트입니다.
단위 테스트에서 수행하는 모킹, 검증 작업을 람다식으로 간결하게 정의하고, 집약적으로 작성할 수 있게 함
JUnit 5의 Parameterized Test를 사용하게 구현해, 테스트 대상 메소드에 대한 다양한 시나리오를 한 번에 검증
함수형 인터페이스와 제네릭으로 모킹, 검증, 테스트 수행에 공통적으로 필요한 작업을 추상화해, 코드 중복을 최소화
⇒ 테스트 코드 작성량 평균 40% 감소(컨트롤러 테스트: 359줄 → 182줄, 서비스 테스트: 315줄 → 225줄)
⇒ 신속하고 효율적인 테스트 작성, 수정이 가능해져, TDD를 보다 효과적으로 적용할 수 있게 됨
포트폴리오
교육
한양대학교
대학교(학사) | 인문소프트웨어융합전공, 국어국문학
2015.03. ~ 2022.02. | 졸업
자기소개
/**
* 비즈니스적 수요에 기민하고 효율적으로 대응하는 개발을 추구합니다.
* 운영 환경에 최적화된 애플리케이션 개발에 관심이 있습니다.
*/
@Configuration
public class ApplicantConfig {
@Primary @Bean
public Applicant primaryApplicant() {
return new JunmoKangBackendEngineerApplicant();
}
// ...
}
서비스 내 조회 API 성능 개선을 위해 JPA 기능(Lazy Loading, Fetch Join, OSIV)을 활용하고 캐싱을 도입한 경험이 있습니다.
동시성 및 인증 이슈, 성능 최적화를 최소한의 툴(Primary Key, Spring Interceptor, ConcurrentHashMap)로 해결한 경험이 있습니다.
적극적인 DI 활용으로 다형성을 극대화해, 실행 시점에 인증 방식 변경(Session ↔ JWT)이 가능하도록 구현한 경험이 있습니다.
단위 테스트 내 코드 중복을 제거하기 위해 JUnit과 람다식을 활용, 코드 작성량을 최대 50% 감소시켰습니다.
마이크로서비스 아키텍처 개발 및 운영을 위한 컨테이너화 기술(Docker, Kubernetes)에 대해 이해하고 있습니다.
외국어
영어
비즈니스 회화 가능