Skip to content

Conversation

@SangBeom-Hahn
Copy link
Owner

@SangBeom-Hahn SangBeom-Hahn commented Feb 19, 2025

Overview

1. Spring AOP 유저 로깅

  • AOP를 활용하여 HTTP Request Log를 공통 처리합니다.
  • Logging 대상은 아래와 같습니다.
    • 프로젝트 All Components의 Request 와 Response
    • 모든 Controller Request
  • Exception 발생은 X 표시를 명시합니다.

2. Log4j2 로깅

  • AOP로 공통 처리한 Log를 작성합니다.
  • Log4j2를 활용하여 [로컬, 개발, 운영] 환경에 따른 로깅 전략을 수립합니다.
    • 로컬 : 파일로 남길 이유가 부족하여 Console Out
    • 개발 : 클라이언트와 API 테스트를 위해 File
    • 운영 : 로그의 관리를 위해 Rolling File
  • Root Logger로 모든 로깅을 작성하고 하위 Logger는 로깅 Level을 ERROR로 하여 ERROR만 따로 로깅합니다.
  • Rolling File에서는 Rolling Up & Down 전략을 사용합니다.

3. History 체크리스트

  • AOP와 Log4j2를 활용한 로그 외에도 유저 트랜잭션 (기능별 활용도, API 호출 횟수) 관리를 위한 History를 따로 저장합니다.
  • Entity를 Repository에 저장해야 하므로 AOP가 아닌 Interceptor에서 주입받아 저장합니다.
    • Common : 추론 관련 히스토리
    • Transaction : 유저 관련 히스토리
  • Tomcat의 메시지 1회성 전략으로 인해 ContentWrapper를 사용합니다.

4. 추론 관제 API

  • 분산 서버 환경 (4대)에서 서버의 문제를 빠르게 해결하기 위한 관제 API를 도입합니다.
  • 추론 [성공, 실패] Process를 모두 저장하고 시각화 합니다.

5. App & AI 예외처리

  • Spring 1대와 AI 4대 통신 간에 발생하는 예외를 처리하고 개발자와 연구자에게 알립니다.
  • 예외 처리
    • 추론 프로세스 간 에러 : 서버로 BAD GATEWAY 502 응답 > 클라이언트 추론 요청 저장소(Redis)에 ERROR 메세지 저장 > 비동기 반복 호출 종료 및 클라이언트에게 ERROR 메시지 응답
    • 추론 프로세스 외 하드웨어 [네트워크, 디스트] 에러 : 서버에서 500 INTERNAL SERVER ERROR 발생 > 이후 프로세스 동일

6. Slack Web Hook

  • 서비스 운영 동안 발생하는 에러를 Slack으로 빠르게 공유합니다.
  • Controller Advice에서 예외 처리 시 Hook을 발생시킵니다.

Change log

Config

  • logging/
  • WebConfig

Controller

  • history/

Domain

  • history/

Support

  • SlackAlarmGenerator

Issue Tags

@github-actions
Copy link

Test Results

78 tests  ±0   78 ✅ ±0   3s ⏱️ ±0s
24 suites ±0    0 💤 ±0 
24 files   ±0    0 ❌ ±0 

Results for commit 89c0291. ± Comparison against base commit 1c6f7c6.

@SangBeom-Hahn SangBeom-Hahn merged commit 6b87b86 into develop Feb 19, 2025
7 checks passed
@SangBeom-Hahn SangBeom-Hahn deleted the feature/10-user-logging branch February 19, 2025 11:32
SangBeom-Hahn added a commit that referenced this pull request Feb 19, 2025
* docs: pr template 작성

* docs: issue template 작성 (#3)

* chore: 백엔드 환경 설정 (#11)

* chore: gradle 의존성 설정

* feat: BaseEntity 기능 구현

* chore: application.yml 설정

* feat: JPA Auditing 설정

* docs: 커밋 컨벤션 설정

* chore: backend 환경 셋팅

* feat: 초기 엔터티 구축 (#14)

* feat: Message 기능 및 테스트 구현

* feat: 채색 결과 Clothes 기능 및 테스트 구현

* feat: 채색 요청 Clothes 기능 및 테스트 구현

* feat: 더미 데이터 구축 (#15)

* style: 채색 결과 Clothes 영속화를 위한Entity 이름 수정

* test: dummy 데이터 구축 및 테스트

* feat: upload 기능 및 페이지 구현 (#16)

* test: MessageRepositoryTest 테스트 구현

* feat: ClothesRepository 기능 및 테스트 구현

* test: ClothesRepository Clothes class의 Message 참조 Field 테스트 추가

* chore: Google Cloud Storage 환경 셋팅

* feat: ClothesService 기능 및 테스트 구현

* feat: FileUploader 기능 구현

* test: ClothesService 예외 처리 테스트 추가

* style: 테스트 독립성을 위한 더미 데이터 제거

* chore: 어플리케이션 환경에서 사용될schema, data.sql 설정

* test: ClothesRepository 테스트 구현

* feat: FileExtension 기능 및 테스트 구현

* feat: FileConverter 기능 및 테스트 구현

* fix: init.sql 참조 문법 수정

* feat: MessageService 기능 및 테스트 구현

* chore: RedisConfig 환경 셋팅

* feat: MessagePublisher 기능 구현

* feat: ClothesController 기능 및 테스트 구현

* chore: Embedded RedisConfig 테스트 환경 설정

* fix: FileExtension 대문자 확장자 추가

* feat: 페이지 헤더 기능 구현

* feat: index 페이지 기능 구현

* feat: guide 페이지 기능 구현

* feat: ClothesController 응답 방식 변경(API -> HTML)

* feat: upload 페이지 기능 구현

* style: upload 페이지 내용 수정

* feat: ML 추론 파이프라인 기능 구현 (#17)

* feat: 원격 메세지 푸시 비동기 처리

* refactor: 업로드 데이터 상태 메세지 추가

* refactor: 추론 데이터 타입 변경 (CLOTHES -> 4가지 품목[T_SHIRTS, PANTS, SKIRT, HAT])

* test: ClothesRepository 테스트 구현

* style: MessageRepository 테스트 필드 수정

* test: MessageService Queue Publisher 목킹

* refactor: PageController 웹 페이지 라우팅 클래스 분리

* feat: 사용자 예외 처리 기능 구현

* feat: ControllerAdvice 기능 구현

* style: GuideController 라우팅 메서드 PageController로 이동

* style: Message 채색 결과 정제를 위한 refine 필드 추가

* fix: ClothesService create 메서드 응답 형식 수정 [clothesId -> messageId]

* feat: ClothesController 채색 카테고리 및 정제 여부 추가 기능 및 테스트 구현

* test: ClothesController RestAssured 인수 테스트 구현

* feat: MessagePublisher Redis Stream데이터 타입 클라이언트 구축

* feat: JobConfig Redis Stream 메세지 콜백 기능 구현

* feat: ModelSearcher 추론 모델 검색 기능 구현

* feat: ClothesModelHttpCaller 원격 추론 서버 호출 기능 구현

* feat: SearchConverter 추론 결과 자바 시스템으로 직렬화

* feat: ClothesJobConsumerListener Redis Stream 메세지 리스닝 기능 구현

* feat: ClothesJobConsumerListener 추론 서버 헬스 체크 기능 구현

* feat: ResultService 이미지 검색 결과 Redis Cache 캐싱 기능 구현

* feat: 추론 서버 부속 파일 ignore

* feat: 채색 모델 패키징 런쳐 기능 구현

* feat: 추론 Worker 기능 구현

* feat: 추론 서버 커스텀 예외 구현

* feat: Bing Image Search API 기능 구현

* refactor: 상수 하드 코딩 분리

* feat: 채색 이미지 기반 웹 검색 결과 렌더링 기능 및 페이지 구현 (#18)

* feat: 채색 이미지 검색 결과 기능 및 테스트 구현

* feat: ResultRepository 기능 및 테스트 구현

* feat: SearchRepository 기능 및 테스트 구현

* feat: ResultService 기능 및 테스트 구현

* feat: PageController 메인 화면 이동 시 검색결과 DB 저장 및 캐시 삭제 기능 구현

* feat: 검색 결과 상품명 명시 기능 구현

* feat: tshirts_worker 클라우드 SQL PK(message_id) 적용

* feat: base_model_launcher 클라우드 SQL 도입

* feat: storage_handler 기능 구현

* feat: 클라우드 하드코딩 상수 분리

* feat: SignedUrlBuilder CDN 적용을 위한 서명된 URL 발행 기능 구현

* feat: ClothesResult 평점 기능 및 테스트 구현

* feat: ResultRepository 평점 기능 및 테스트 구현

* feat: ResultService 평점 기능 및 테스트 구현

* feat: ClothesController 평점 기능 구현

* feat: 검색 결과 평점 부여 html 구현

* feat: ResultService 채색 결과 공유 기능 구현

* feat: ClothesController 채색 결과 공유 기능 구현

* feat: ResultRepository 갤러리 기능 및 테스트 구현

* feat: ResultService 갤러리 기능 및 테스트 구현

* feat: GalleryService 갤러리 전시를 위한 SignedUrl 기능 및 테스트 구현

* feat: 갤러리 페이지 HTML 기능 구현

* feat: 기본 밑그림 이미지 다운로드 기능 구현 (#19)

* feat: ClothesController 기본 밑그림 이미지 다운로드 기능 구현

* feat: 기본 밑그림 이미지 HTML 기능 구현

* chore: import 최적화

* refactor: [ML, Application 서버] 코드 리팩토링 (#21)

* style: HTML 페이지 워딩 및 css 수정

* refactor: 하드 코딩 상수 분리

* refactor: final 재할당 불가 적용

* refactor: HTTP status code NOT_FOUND 적용

* refactor: Type Hint 적용

* chore: [Application, ML] 서빙 환경 구축 (#23)

* chore: 추론 서버 워커 Dockerfile 구현

* chore: requirements.txt 적용

* chore: docker-compose.yml 작성

* test: presentation layer 테스트 구현 (#26)

* test: GalleryController 단위 테스트 구현

* test: ClothesController 단위 테스트 구현

* style: Controller 테스트 EndPoint 수정

* test: Request DTO 빈 검증 테스트 구현

* test: ClothesAcceptanceTest 인수 테스트 구현

* feat: UuidHolder 랜덤 모듈 분리

* test: ClothesController 인수 테스트 구현

* test: GalleryController 인수 테스트 구현

* feat: DatabaseCleaner 기능 구현

* fix: 테스트간 의존 문제 해결

* feat: rest docs 테스트 문서화 (#27)

* chore: rest docs gradle 셋팅

* feat: RestDocsConfig mockMVC 설정 기능 구현

* chore: asciidoc 설정

* style: 테이블 pk 명 변경

* feat: ci workflow 구현 (#30)

* feat: ci 프로세스 작성

* test: ci 동작 테스트 브랜치 추가

* fix: paths 필터링 표현 수정

* fix: PR 코멘트 작성 권한 에러 수정

* test: ci 테스트 구현 (#29)

* test: ci 테스트 구현

* style: ci workflow에서 테스트 브랜치 제거

* style: 테스트 콘솔 로그 코드 제거

* feat: cd workflow 구현 (#47)

* feat: 배포 환경 설정 및 도커 이미지 빌드 잡 구현

* test: cd 테스트 브랜치 필터링 추가

* style: 작업 directory 레벨 변경 [workflow -> job]

* feat: backend Dockerfile에 environment 구현

* chore: application-develop.yml 개발 환경 설정 파일 분리

* feat: backend Dockerfile에 environment 구현

* chore: application-develop.yml 개발 환경 설정 파일 분리

* fix: Dockerfile jar 복사 경로 수정

* feat: dev 환경 배포 잡 구현

* chore: docker-compose 백엔드 운영 환경변수 추가

* fix: cd.yml secrets 값 오류 수정

* fix: ssh script 명령어 경로 수정

* fix: ssh script docker login 수정

* fix: 시스템 아키텍쳐 수정 [arm -> x86]

* fix: gcp credential key secrets 값 저장

* style: credential 생성 경로 수정

* fix: credential 경로 수정

* feat: Dockerfile entrypoint 수정

* test: cd 워크플로우 디버깅을 위한 tmate 적용

* feat: tmate ssh 권한 정보 수정

* feat: cd 워크플로우 tmate 타임아웃 설정

* style: tmate 기능 제거

* style: gcp key 경로 수정

* fix: github action에서 json 생성 시 포멧 변환 문제 해결

* chore: [개발, 운영] 환경 변수 설정

* feat: 개발 환경 모델 worker uri 변수 구현

* feat: [test] application.yml worker uri 변수 구현

* fix: gcp ssh 접근 명령어 제거

* fix: 비관리 이미지 관리 목적으로 ssh script 이미지 삭제 순서 변경

* fix: dangling 이미지 미삭제 문제 수정

* feat: cd.yml release 브랜치 생성 및 운영 환경 PR 잡 구현

* feat: cd.yml 현재 브랜치 확인 스탭 추가

* fix: tj-actions 액션 문법 오류 수정

* fix: branch-names 액션 문법 오류 수정

* test: branch-names 액션 테스트 구현

* fix: event 브랜치 찾기 기능 수정

* style: tag branch 수정

* feat: 운영 환경 셋팅 (#49)

* feat: application-prod.yml 구현

* feat: import 최적화

* feat: 유저 트랜잭션 로깅 및 관제 API 구현 (#51)

* style: HTTP 워딩 수정

* feat: 바지(하의), 치마, 모자 추론 서버 기능 구현

* chore: gradle 설정

* chore: Log4j2 File_Appender 로깅 전략 수립

* feat: LoggingAspect 기능 구현

* feat: LoggingStatus 기능 구현

* feat: LoggingStatusManager 기능 구현

* feat: LoggingTracer 기능 구현

* style: image_searcher filter key 수정

* style: index.html 이미지 사이즈 수정

* style: constants 모델 배포 경로 수정

* style: SketchConstants 모델 워커 배포 경로 수정

* feat: log4j2-{profile}.yml 기능 구현

* feat: application-{profile}.yml 로깅 기능 구현

* docs: .gitignore 경로 추가

* feat: history 도메인 기능 구현

* feat: historyRepository 기능 구현

* feat: HistoryFilter 기능 구현

* feat: HistoryInterceptor 기능 구현

* feat: 추론 입력 서버 이름 로깅 기능 구현

* feat: StorageHandler 추론 상태 로깅 기능 구현

* feat: LoggerBuilder 기능 구현

* feat: file logger 기능 구현

* style: 로깅 setup 파일 수정 [logger -> setup_logger]

* feat: InferenceException 커스텀 예외 추가 기능 구현

* feat: LoggerConverter 기능 구현

* feat: 추론 전체 process 로깅 기능 구현

* refactor: 하드 코딩 상수 분리

* feat: init.sql 추론 관제 API 테이블 추가

* refactor: HistoryInterceptor 메서드 분리

* style: HTML 서버 예외 메세지 출력

* feat: 추론 결과에 따른 예외 처리 [성공, 실패]

* feat: 추론 중 Error 예외 처리

* feat: 추론 외, 비정상 종료 예외 처리 [네트워크, 하드웨어]

* feat: Redis Stream Consumer Group 방식 도입

* feat: 추론 중 실패 상태 처리 [Fail Error]

* chore: Slack API 설정

* feat: SlackAlarmGenerator 기능 구현

* feat: ControllerAdvice 오류 발생 알람 기능 구현

* fix: 개발 환경 워커 URI 수정

* feat: HistoryInterceptor 예외 패턴 추가

* test: 추론 실패 Process 예외 처리 테스트 구현

* style: Exception.class slack hook 대상 제거

* style: StorageHandler 추론 상태 갱신 코드 수정
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEAT] 유저 로깅 기능을 구현한다.

2 participants