8000 GitHub - leehyeonmin34/dambae200: 담배200 : 공동 편집과 권한 관리를 지원하는 담배 검수 앱
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

leehyeonmin34/dambae200

Repository files navigation

담배200 : 공동 편집과 권한 관리를 지원하는 담배 검수 앱

A4 - 26 (2)

편의점에서 담배 재고를 쉽게 검수하기 위해 제작된 웹 서비스입니다.

매장 별로 '담배 목록'을 만들 수 있고 이를 편집함으로서 담배를 검수합니다.

담배 목록은 다른 사람들과 공유가 가능한데, 각 목록 생성자가 접근 권한을 관리하며, 소켓 통신을 활용해 실시간 공동 편집을 지원합니다.



문제점 & 아이디어

Frame 1153


제공 기능

🔗 UI & 작동 영상 + 기획 보러가기

  • 담배 목록
    • 담배 목록 생성/수정/삭제
    • 담배 추가/수정/삭제
    • 담배 순서 조정
    • 담배 목록 내 검색
  • 동시 편집
    • 담배 목록 실시간 동시 편집 (구글 스프레드시트와 유사)
    • 목록 접근 권한 관리 (요청/허가/비허가/관리자 권한 인계)
  • 그 외 기능
    • 로그인, 비밀번호 찾기
    • 알림 (Pageable 조회)
    • 설정 (개인정보 수정)
    • 업무 꿀팁 컨텐츠

프로젝트의 주요 관심사

  • 실제 서비스 가능한 완성도로 서버-클라이언트 구현(API, UI, 통신 규약, 기능성)
  • 소켓 통신을 통한 동시 편집 구현
  • 캐시, DB 통신 최소화를 통한 성능 최적화
  • 서버 확장, 대용량 트래픽과 운영을 고려한 방식
  • 성능테스트를 통한 튜닝
  • 로직이 잘 보이고 확장, 유지보수하기 좋은 코드


사용 기술

  • Spring Boot
  • Spring Data JPA
  • MySQL
  • Redis
  • nginx
  • Stomp
  • Docker
  • Jenkins
  • Naver Cloud Platform

프로젝트 구조

  • Naver Cloud Platform의 서버로 구성되어 있습니다.
  • github hook을 받아 Jenkins에서 CI/CD를 진행합니다.
  • Jenkins측에서 Dockerhub에 이미지를 push하고, 앱서버 측에서 이미지를 pull합니다.
  • Blue-green 방식으로 무중단 배포됩니다.
  • 사용자의 요청은 nginx에 의해 프론트엔드 리소스와 api요청을 분기 처리됩니다.
  • WAS는 3개 서버로 운용됩니다.
  • DB는 Primary-Slave 구조의 2개 서버로 운용됩니다.
스크린샷 2023-10-04 오후 10 24 20

문제 해결 사례


운영

🔗 서버 Scale-out에 대비해, 세션 정보를 DB에 중앙화해 저장함으로써 Stateless하게 유지

🔗 Jenkins와 Docker, nginx를 이용한 Blue-Green 무중단 배포 🔥

🔗 로드밸런서 적용하면서 CORS, hop-by-hop 헤더, 정적리소스 반환 문제 해결

🔗 DB 레플리케이션으로 병목 완화

🔗 성능테스트를 통한 서버 튜닝으로 핵심 요청 TPS 239 -> 4292 (스케일업 아웃, 커넥션풀, 스레드풀, 레플리케이션) 🔥


캐시 & Redis

🔗 Redis hash 자료구조를 이용해 탐색시간 줄이기

🔗 간편하게 캐시와 DB를 연계 활용하는 캐시 모듈 제작 🔥

🔗 원자성을 위해 Redis에 @Transactional 적용하기

🔗 쓰기스큐 방지를 위해 분산락 AOP 제작

🔗 Redis Pipeline으로 Bulk Insert 시 네트워크 병목 개선

🔗 캐시에 저장-로드할 때 리플렉션으로 DTO-Entity 변환

🔗 캐시와 세션별로 Redis 서버 분리 및 eviction, maxmeory 최적화

🔗 코드 수준의 동적 스케줄러로 캐시에서 DB로 Write-Back


DB

🔗 DB 병목 지양을 위한 N + 1 쿼리 지양

🔗 DB 락 최소화를 위한 @Transational 최소화


소켓 통신

🔗 실시간 공동 편집을 이벤트 기반의 STOMP 소켓통신으로 구현

🔗 서비스 코드가 통신 방식에 종속되지 않도록 DTO Wrapping

🔗 STOMP 예외처리하기

  • Wrapper 구조를 이용해 HTTP, 소켓 통신에서의 예외를 일관되게 처리
  • 비지니스 예외 발생 시 소켓 연결 유지하며 예외 메시지 발송
  • 권한검사 인터셉터 예외 처리

로직이 잘 보이고 유지보수하기 좋은 코드

🔗 예외 처리 및 일관된 응답 형태

  • 트리구조의 런타임 예외 상속 적극 활용
  • ControllerAdvice, ExceptionHandler 활용
  • 성공, 실패 모두 일정한 HTTP 응답 형태

🔗 기타



ERD

스크린샷 2023-02-11 오후 2 34 12


프론트

UI는 실사용 시 마주할 수 있는 다양한 시나리오에 대응하면서, 다양한 해상도에서 일관되게 작동되도록 구현되었습니다.

Frame 1026

졸프 장려상

이 작업은 졸업 프로젝트였는데, 우수 졸업작품 중 하나로 별도로 발표도 했고 장려상을 수상했습니다. image

About

담배200 : 공동 편집과 권한 관리를 지원하는 담배 검수 앱

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages

0