Skip to content

v0.0.0 - #50

Merged
sunm2n merged 170 commits into
mainfrom
dev
Jun 1, 2026
Merged

sunm2n merged 170 commits into
mainfrom
dev

Conversation

@sunm2n

@sunm2n sunm2n commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

No description provided.

sunm2n added 30 commits March 31, 2026 02:55
- "optional:file:.env[.properties]"로 .env 자동 로드 설정
- 환경변수 처리

IssueNum #3
- spring-boot-starter-data-jpa (PostgreSQL + JPA)
- postgresql 드라이버
- spring-boot-starter-data-redis (Valkey)
- spring-boot-starter-actuator (헬스체크)

IssueNum #5
- PostgreSQL datasource (HikariCP 포함)
- JPA/Hibernate 설정 (ddl-auto: none, 엔티티 생성 후 update로 변경 예정 <- 주석으로 표기)
- Redis 연결 설정
- 모든 값은 환경변수로 주입, 기본값X

IssueNum #5
- show-details: always 설정으로 개발시 상세 정보 전체 노출

IssueNum #5
- show-details: when_authorized 설정으로 인증된 요청만 상세노출

IssueNum #5
- Hibernate 6.x부터는 DB 버전을 자동 감지하므로 해당 설정 제거

IssueNum #5
- BIGSERIAL 대신 GENERATED ALWAYS AS IDENTITY 사용하여 외부에서 ID 임의 삽입 방지
- TIMESTAMP 대신 TIMESTAMPTZ 사용하여 타임존을 포함해서 서버 로케일에 무관하게 정확한 시각을 보장
- FK에 ON DELETE CASCADE 과 ON DELETE SET NULL 명시하여 회원 탈퇴 시 연관 데이터 정리 정책을 DB 레벨에서 보장
- category_id는 카테고리 삭제 시 링크는 유지하되 미분류로 바뀌도록 SET NULL 처리
- last_checked_at에 인덱스 추가하여 스케줄러가 재검사 대상을 조회할 때 사용

IssueNum #8
- BOOLEAN -> TIMESTAMPTZ로 수정
- not null 제약 조건 삭제

IssueNum #8
sunm2n added 27 commits May 20, 2026 20:16
[FEATURE] Flyway 마이그레이션 설정
# Conflicts:
#	src/main/java/com/linclean/global/exception/GlobalExceptionHandler.java
…() 수정

- HandlerMethodValidationException API가 Spring 6.2에서 변경됨

IssueNum #38
…alidationException-change

[REFACTOR] HandlerMethodValidationException 변경
- GET /api/v1/analyses/statistics 엔드포인트 추가 (인증 불필요)
- AnalysisRepository에 verdict별 집계 쿼리 추가
- SecurityConfig에 통계 엔드포인트 permitAll 설정

IssueNum #30
- VerdictStatisticsService: Cache-Aside + 50분 주기 pre-warming 스케줄러
- 기동 시 ApplicationReadyEvent로 즉시 캐시 초기화
- Redis 장애 시 DB fallback 처리
- HSET+EXPIRE pipeline으로 TTL 누락 방지
- VerdictStatisticsResponse: Redis/DB 두 소스 변환 팩토리

IssueNum #30
- queryAndCache()의 executePipelined() 예외를 별도 try-catch로 처리
- 읽기 성공 후 쓰기가 실패하는 플랩 상황에서 500 에러 방지

IssueNum #30
- VerdictStatisticsServiceTest: 캐시 히트/미스, Redis 읽기/쓰기 장애 fallback, 스케줄러 동작
- VerdictStatisticsResponseTest: Redis 해시 및 DB 결과 변환, 비정상 값 방어 처리
- VerdictStatisticsControllerTest: GET /api/v1/analyses/statistics 응답 검증

IssueNum #30
- onApplicationReady: executePipelined 검증 추가 (이름과 불일치 해소)
- scheduledRefresh_dbFailure: assertDoesNotThrow로 의도 명시
- emptyString_returnsZero: SAFE/DANGER 필드 검증 추가

IssueNum #30
- SavedLinkServiceTest: checkUrl 존재/미존재 케이스 검증
- SavedLinkControllerTest: GET /saved-links/check 응답 검증

IssueNum #42
- GET /api/v1/saved-links/check?url={url}
- Analysis.originalUrl 기준 exact match로 멤버별 중복 여부 확인

IssueNum #42
- MissingServletRequestParameterException → 400 처리 (GlobalExceptionHandler)
- 빈 문자열 url 파라미터 → 400 처리 (컨트롤러 직접 검증)

IssueNum #42
- 400, 401 응답 코드 추가

IssueNum #42
- 멀티스테이지 빌드 및 의존성 캐시 레이어 분리
- non-root 유저 실행 및 exec를 통한 graceful shutdown 지원
- .dockerignore로 불필요한 파일 빌드 컨텍스트 제외

IssueNum #40
- server.shutdown: graceful 및 shutdown timeout 30s 설정
- show-sql: false로 prod 환경 SQL 로깅 비활성화

IssueNum #40
- ContentAnalysisStage에 statusCode, error, reason 필드 추가
- AnalysisResponse forSucceeded()에서 fetched=false 시 contentAnalysisError 노출

IssueNum #46
- CI: PR/push 시 Testcontainers 기반 gradle 테스트 실행
- CD: CI 성공(main) 후 workflow_run 체이닝으로 이미지 빌드·푸시
- 배포는 OIDC + SSM SendCommand로 EC2 docker compose 갱신

IssueNum #40
- application-test.yml에 server.port·clerk·analysis-engine·internal 값 추가
  (.env에 의존하던 기본값 없는 placeholder를 test 프로파일에서 자급자족)
- @WebMvcTest 컨트롤러 테스트 3종에 @activeprofiles("test") 추가
  (dev 프로파일로 로드되어 ${API_PORT} 미해소되던 문제 해결)

IssueNum #40
- 수동 트리거로 빌드·푸시/배포를 단계별 테스트 및 재배포·롤백 가능
- 두 이벤트(workflow_run/dispatch) 모두 지원하도록 if 가드 및 checkout ref 보정

IssueNum #40
- 폴링 루프가 timeout(끝까지 Pending)으로 끝나도 워크플로가 성공
  처리되던 문제 수정: 최종 상태가 Success가 아니면 exit 1
- docker compose up에 --wait 추가로 컨테이너 healthcheck가
  healthy 될 때까지 대기, 실패 시 배포 실패로 전파

IssueNum #40
@sunm2n sunm2n assigned sunm2n and unassigned sunm2n Jun 1, 2026
@sunm2n
sunm2n merged commit eed75dc into main Jun 1, 2026
4 of 5 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.

1 participant