Skip to content

Release user-service-v0.0.1-beta-SNAPSHOT#116

Merged
can019 merged 70 commits intomainfrom
develop
Sep 17, 2025
Merged

Release user-service-v0.0.1-beta-SNAPSHOT#116
can019 merged 70 commits intomainfrom
develop

Conversation

@can019
Copy link
Collaborator

@can019 can019 commented Sep 17, 2025

No description provided.

thkim7 and others added 30 commits September 11, 2025 17:41
* feat: 기본적인 global exception handling

* chore: Security exception handling

* feat: Duplicate Exception handling
- 2차 마일스톤을위한 공통 request및 response 주석에따른 blog코드 리펙토링
 refactor: 2차 마일스톤을 위한 코드 리팩토링
* chore: workflow dummy data (experimental)

* chore: Super admin에 workflow 할당
* chore: Docker compose loki, grafana

* chore: Sync appender 기반 grafana 연결

* chore: fix test
* feat: UserLogoutFlowE2eTest 초안

* feat: UserLogoutFlowE2eTest

* feat: AuthController에 logout api 추가

* feat: AuthApiIntegrationTest에 Logout 추가

* feat: h2 호환 스키마 파일
* chore: Develop logging appender 복구

* chore: Trace id, span id 도입

* chore: Source id, run id label로 분리
* chore: Paging request, reponse dto

* chore: Pagination controller, service example

* chore: workflows api 앞에 v0 추가

* refactor: 페이지네이션 구조 개선

PageService를 PageableService 인터페이스로 변경하여 트랜잭션 처리 개선
1. service 수정
2. schemas 수정
* refactor: health관련 패키지 네이밍 및 파일 네이밍 변경

* feat(config): @ConfigurationProperties로 타입-안전한 설정 관리 도입

기존의 @value나 하드코딩 방식은 오타에 취약하고, 설정값 누락 시
런타임 오류를 유발할 수 있는 타입 불안전성 문제가 있었습니다.

이를 해결하기 위해 @ConfigurationProperties를 사용하는 `FastApiProperties`
클래스를 도입하여 FastAPI 연동 설정을 중앙화하고, 애플리케이션 시작 시점에
설정값의 타입과 유효성을 검증하도록 개선했습니다.

이를 통해 잠재적인 런타임 장애를 원천 차단하고, 코드의 안정성과
유지보수성을 크게 향상시켰습니다.

* refactor: Code Formatting

* feature: 블로그 자동화 배치 Job 및 Tasklet 구현

콘텐츠 자동화 워크플로우의 핵심 실행 로직인 Spring Batch Job과
그를 구성하는 7개의 Tasklet을 구현합니다.

### 주요 구현 내용:

1.  **`BlogAutomationJobConfig.java`**:
    - 워크플로우의 전체 실행 흐름을 담당하는 두 개의 Job(`productSelectionJob`, `contentPublishingJob`)과 각 Job을 구성하는 Step들을 정의했습니다.
    - '상품 선정/수집'과 '콘텐츠 생성/발행'이라는 역할을 명확히 분리하여 Job의 재사용성과 독립성을 확보했습니다.

2.  **7개의 Tasklet 구현**:
    - `ExtractTrendKeywordTasklet`: 트렌드 키워드 추출
    - `SearchProductsFromMallTasklet`: 키워드로 쇼핑몰 상품 목록 검색
    - `MatchProductWithKeywordTasklet`: 키워드와 상품명 매칭
    - `FindSimilarProductsTasklet`: 매칭된 상품의 유사 상품 탐색
    - `CrawlSelectedProductTasklet`: 최종 선택된 상품 상세 정보 크롤링
    - `GenerateBlogContentTasklet`: 수집된 정보로 AI 블로그 원고 생성
    - `PublishBlogPostTasklet`: 완성된 원고를 블로그에 발행

3.  **Step 간 데이터 전달**:
    - 각 Tasklet은 `JobExecutionContext`를 통해 다음 단계로 필요한 데이터(추출된 키워드, 선택된 상품 정보, 생성된 콘텐츠 등)를 전달하도록 구현되었습니다.

* chore: fastapi와 상호작용을 담당하는 external 패키지 구성

* chore: task 간에 결합도를 줄이기 위한 인터페이스 구성

- 특정 step에서 만든 데이터를 다음 step에서 사용하는 경우가 있음(`JobExecutionContext`를 통해 데이터를 주고 받음)
- `JobContextKeys`라는 인터페이스를 정의해 다른 task의 내부 변수를 직접 참조하지 않도록 함

* refactor: FastApiAdapter 및 JobContextKeys 적용

* refactor: schedule 패키지 domain 밖으로 분리

* refactor: AOP를 이용한 Tasklet 실행 로깅 중앙화

각 Tasklet 클래스 내부에 흩어져 있던 시작/종료 로그는 코드 중복을
유발하고, 비즈니스 로직의 가독성을 저해하는 문제가 있었습니다.

이 문제를 해결하기 위해, AOP를 사용하여 모든 Tasklet의 실행을
자동으로 로깅하는 `LoggingAspect`를 확장 구현합니다.

### 주요 변경 사항:
- `LoggingAspect.java`에 `batch.tasklet` 패키지를 대상으로 하는
  새로운 Pointcut(`taskletMethods`)을 추가했습니다.
- `@Around` 어드바이스를 통해 모든 Tasklet의 실행 시작, 종료, 그리고
  소요 시간을 자동으로 기록하도록 구현했습니다.

### 기대 효과:
- **코드 중복 제거**: 각 Tasklet 클래스에 수동으로 작성했던 시작/종료
  로그를 제거하여, 비즈니스 로직의 가독성을 크게 향상시킵니다.
- **관심사의 분리(SoC)**: 핵심 로직과 로깅이라는 부가 기능 로직을
  완벽하게 분리했습니다.

* refactor: Code Formating
1. middleware 수정해야함(경민)
2. pytest all pass
* chore: e2e loki test set up

* fix: E2e test 클래스 수행 전 truncate
bwnfo3 and others added 29 commits September 16, 2025 18:01
* chore: Workflow history 데이터베이스 input

* chore: e2e test logger 세팅 단

* chore: Workflow logging example controller 이름 변경

 Changes to be committed:
	renamed:    src/main/java/site/icebang/domain/TestController.java -> src/main/java/site/icebang/domain/WorkflowLogInsertExampleController.java

* chore: Production workflow log (RDB) 작성
Selenium으로 HTML 가져오기 -> HTML 불필요한 태그 삭제 -> LLM 프롬프트로 요소 추출 자동화

현재 네이버, 티스토리 블로그 작동 확인 완료.
해당 파일 사용 시, 페이지 분석 및 상세한 프롬프트 작성 필수
* refactoring: 사용하지 않는 url 삭제

* refactoring:
- keyword Response 리펙토링
- match Response 리펙토링
- search Response 리펙토링
- 공통 Response 리펙토링및 수정중

* refactor: product response 공통화 작업

* refactor:
- service단 공통 response 적용 완료
- schemas.py 사용하지않은 파라미터 삭제
- api response result -> response_data로 명명규칙 공통화 완료

* feat: 공통 응답을위한 success,error,not_found util 개발

* chore: poetry의존성 추가

* test: response변경으로인한 테스트코드 수정 완료

* style: 코드 포맷팅

* chore: poetry.lock파일 update

---------

Co-authored-by: kakusia <wtecho25@gmail.com>
블로그 포스팅 HTML 요소 추출 자동화
* test: spring Fastapi testing

* refactor: test-url response refactor

* style: test-url response code formating

---------

Co-authored-by: kakusia <wtecho25@gmail.com>
로컬 환경 docker-compose 네트워크 추가
1. endpoint에 있는 if-else 서비스로 이동
2. 현재 있는 3개의 블로그 모두 포스팅 형식이 동일해서 factory method 적용
* chore: workflow 도메인 모델 생성

* chore: Job 도메인 모델 생성

* refactor: schedule 도메인 디렉토리 위치 이동

* chore: Workflow 도메인관련 Mapper 및 Service 설정

* chore: execution 도메인 생성 및 mapper 설정

* chore: schedule 도메인 생성 및 mapper 설정

* chore: Java 표준 라이프사이클 어노테이션 설정 추가

* refactor: workflow 도메인 디렉토리 위치 변경

* refactor: ScheduleMapper 메서드명 변경

* feature: Workflow 수동 실행(REST API)

* fix: 불필요한 주석 제거

* chore: 불필요한 의존성 제거 및 Spring Quartz 의존성 추가

* fix: 불필요한 batch 패키지 삭제

* fix: 불필요한 batch 패키지 삭제

* fix(deprecated): FastApiDto 수정 예정

* refactor: Spring 내장 스케줄러 삭제

* refactor: Spring 내장 스케줄러 설정 삭제

* fix: 불필요한 WorkflowJobMapper 삭제

* chore: job 도메인 세팅

* chore: JobRun 도메인 세팅

* chore: Schedule 도메인 세팅

* chore: Task 도메인 세팅

* chore: TaskRun 도메인 세팅

* chore: WorkflowRun 도메인 세팅

* chore: Workflow 도메인 세팅

* chore: Spring Quartz 세팅

* chore: MyBatis JsonNodeTypeHandler 세팅

* refactor: Code Formatting

* fix: 불필요한 import 삭제

* refactor: execution(TaskRun, JobRun, WorkflowRun) 도메인 설정

* refactor: Quartz 관련 datasource 설정 필요

* refactor: Mapper.xml 수정

* refactor: Code Formatting
# Conflicts:
#	apps/user-service/src/main/java/site/icebang/domain/workflow/dto/WorkflowCardDto.java
#	apps/user-service/src/main/java/site/icebang/domain/workflow/mapper/WorkflowMapper.java
#	apps/user-service/src/main/resources/mybatis/mapper/WorkflowMapper.xml
…ure/workflow-list

# Conflicts:
#	apps/user-service/src/main/resources/mybatis/mapper/WorkflowMapper.xml
* chore: Loki Promtail을 통해 file 전송으로 변경

* chore: Promtail을 통해 loki 전송 (local)

* chore: Exception handler error, warn logging

- warn: Data duplicate
- error: Exception

* fix: spanid logging 추가

* chore: production grafana 설정

* chore: Promtail 복사 ci 작성

* chore: User-service promtail 이 후 container화 되도록 설정

* chore: Production, grafana 연동 세팅
@can019 can019 merged commit cba41d2 into main Sep 17, 2025
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants