채용공고 올리기

황재환님을 응원해보세요!

지금 만족하고 있어요

미리보기

기본 정보

이름
황재환
직업
신입 백엔드 개발자
간단 소개

CI/CD, AWS, Docker, MSA 등 현업 개발 트렌드를 탐구하고 적용하기 위해 노력합니다. 성능 최적화 및 데이터를 효율적으로 관리하기 위해 노력합니다. 여러가지 문제 해결 경험을 통해 다양한 상황에서 발생하는 장애를 분석하고 해결하는 역량을 쌓았습니다.

기술 스택

기술 스택

Java, JPA, MySQL, Redis, Kafka, Spring, Spring Boot

프로젝트

프로젝트명

InJaGang(이력서와 면접을 도와주는 웹사이트)

소속/기관명

프로젝트 기간

2023.02. ~ 2023.10.

프로젝트 내용
  • 팀구성: 프론트1, 백엔드1

  • 목적: 사용자의 자기소개서와 면접을 도와주는 웹사이트

  • 기술 스택: Java, Spring, H2, JWT, Redis

  • 구현:

    • JWT 인증을 통해 보안을 강화하고, Redis를 활용하여 효율적으로 토큰 관리.

    • Spring Rest Docs를 사용하여 API 문서를 작성해 다른 개발자와의 협업을 원활하게 진행.

    • 유저의 자소서 리스트를 가져올때, N+1문제가 발생해 패치 조인을 사용해 문제 해결.

Spring Rest Docs를 활용한 API 문서화

  • 문제

    • API를 개발하는 과정에서 클라이언트와 서버 간의 명세가 명확하지 않아, 요청/응답의 데이터 구조나 필드에 대한 오해가 발생했습니다. 이로 인해, 잘못된 요청을 처리하거나, 추가적인 커뮤니케이션 비용이 증가하는 문제가 발생했습니다.

  • 해결

    • Spring Rest Docs를 사용해 테스트에 기반한 API 문서를 생성해 신뢰할 수 있는 API 문서를 작성했습니다.

  • 결과

    • 개발자 간 불필요한 커뮤니케이션이 줄어들었고, API 사용에 대한 오해가 사라졌습니다.

N+1 문제 해결을 위한 패치 조인 사용

  • 문제

    • 유저의 자기소개서 리스트를 가져오는 과정에서 N+1 문제가 나타났습니다. 이로 인해 쿼리 호출 횟수가 증가해 성능 저하와 데이터베이스 부하가 발생했습니다.

  • 해결

    • Fetch Join을 사용하여 문제를 해결했습니다

  • 결과

    • N+1 문제로 인해 발생하던 불필요한 다중 쿼리를 한 번의 조인으로 처리하여 성능을 대폭 개선했습니다.

    • 쿼리 호출 횟수가 줄어들어 안정적인 성능을 유지할 수 있었습니다.

    • 유저의 자기소개서 리스트를 조회하는 응답 시간이 크게 단축되어 사용자 경험이 개선되었습니다.

프로젝트명

E-commerce

소속/기관명

프로젝트 기간

2024.08. ~ 진행 중

프로젝트 내용
  • 팀구성: 백엔드1

  • 목적: MSA 패턴을 학습하기 위한 토이 E-commerce 프로젝트

  • 기술 스택: Java, Spring, Spring Cloud ,H2, Kafka, Redis, RabbitMQ

  • 구현:

    • MSA 패턴을 적용해 7개의 마이크로서비스를 설계 및 구현.

    • 결제 서비스에서 Kafka를 활용하여 분산 트랜잭션 처리 및 데이터 일관성 보장.

    • 상품 서비스에서 Spin Lock을 사용해 상품 수량 수정 시 발생하는 동시성 문제 해결.

결제 서비스에서 Kafka를 활용한 분산 트랜잭션 처리 및 데이터 일관성 보장

  • 문제

    • 결제 서비스와 주문 서비스가 분산 환경에서 각각 독립적으로 동작하다 보니, 트랜잭션이 발생할 때 데이터 일관성을 유지하는 데 어려움이 있었습니다. 예를 들어, 결제가 성공했지만 주문 생성이 실패하거나, 주문이 생성되었으나 결제가 완료되지 않는 상황이 발생할 수 있었습니다.

  • 해결

    • kafka를 사용하여 결제와 주문 간의 데이터 흐름을 메시지 기반으로 비동기 처리하면서 SAGA 패턴을 적용했습니다.

    1. 결제 서비스에서 결제가 성공적으로 완료되면 Kafka 토픽으로 결제 완료 메시지를 발행합니다.

    2. 주문 서비스는 해당 메시지를 구독하여 주문 생성 로직을 실행합니다.

    3. 만약 주문 생성이 실패할 경우, 보상 트랜잭션을 통해 Kafka를 통해 결제 취소 이벤트를 발행하여 결제 상태를 롤백합니다.

  • 결과

    • 결제와 주문 상태가 메시지 기반으로 동기화되며, 실패 시 롤백 로직으로 데이터의 정합성이 유지되었습니다.

상품 서비스에서 Spin Lock을 활용한 상품 수량 동시성 문제 해결

  • 문제

    • 상품 서비스에서 여러 사용자가 동시에 상품 구매를 시도하면서, 상품 수량 수정 시 동시성 문제가 발생했습니다.

  • 해결

    • Spin Lock을 적용하여 상품 수량을 수정하는 로직에서 동시성 :

  • 결과

    • 상품 수량 수정의 동시성 문제를 해결했습니다.

프로젝트명

ToyBoard

소속/기관명

프로젝트 기간

2023.02. ~ 진행 중

프로젝트 내용
  • 팀구성: 백엔드1

  • 목적: 배운 것을 학습하기 위한 토이 게시판 프로젝트

  • 기술 스택: Java, Spring ,H2, Redis

  • 구현:

    • AWS(S3, EC2, RDS)를 활용해 서비스 배포 및 운영 환경을 구성하고, Jenkins를 사용해 자동화된 CI/CD 파이프라인을 구축하여 배포 효율성을 향상.

    • 스프링 프록시 AOP의 내부 호출 문제를 발견하고 외부 호출로 전환해 문제를 해결.

    • 각 카테고리별 최신 게시물을 Redis에 캐싱하여 데이터베이스 호출 빈도를 줄이고 조회 속도를 120ms에서 3ms로 단축.

Redis 캐싱을 통한 조회 속도 최적화

  • 문제

    • 카테고리별 최신 게시물을 조회하는 요청이 많아, 데이터베이스 호출 빈도가 높아지고 응답 속도가 느려졌습니다.

  • 해결

    • Redis를 사용하여 카테고리별 최신 게시물을 캐싱하고, 데이터베이스 호출 빈도를 줄였습니다.

  • 결과

    • 응답 속도가 120ms에서 3ms로 단축되었습니다.

    • 빈번한 데이터베이스 호출이 Redis로 대체되어 성능이 최적화되었습니다.

스프링 프록시 AOP 내부 호출 문제 해결

  • 문제

    • 같은 클래스 내에서 AOP가 적용된 메서드를 내부 호출하면 프록시를 거치지 않아 AOP 로직이 실행되지 않는 문제가 발생했습니다

  • 해결

    • AOP가 적용된 메서드 호출을 외부 호출로 변경하여 프록시를 통해 실행되도록 수정했습니다.

  • 결과

    • AOP 로직이 내부 호출을 외부 호출로 전환해 프록시를 통해 실행되도록 수정하여 AOP 기능이 정상적으로 작동되도록 했습니다.

포트폴리오

URL

link

인자강

깃허브
link

E-commerce

깃허브
link

Toyboard

깃허브

자격증

자격증명

정보처리기사

점수 | 발급기관

한국산업인력공단

취득연월

2021.11.

교육

소속/기관명

숭실대학교

종류 | 전공

대학교(학사) | 컴퓨터학부

재학 기간 | 재학 상태

2016.03. ~ 2022.03. | 졸업

댓글