Visitar URL original
[Chore] #19 전역예외처리핸들러 초기세팅 by koreaioi · Pull Request #24 · woowacourse-teams/2026-rilog · GitHub
Skip to content

[Chore] #19 전역예외처리핸들러 초기세팅 - #24

Merged
koreaioi merged 11 commits into
developfrom
be/chore/#19-전역예외처리핸들러-초기세팅
Aug 12, 2026

Hidden character warning

The head ref may contain hidden characters: "be/chore/#19-\uc804\uc5ed\uc608\uc678\ucc98\ub9ac\ud578\ub4e4\ub7ec-\ucd08\uae30\uc138\ud305"
Merged

koreaioi merged 11 commits into
developfrom
be/chore/#19-전역예외처리핸들러-초기세팅

Conversation

@koreaioi

@koreaioi koreaioi commented Aug 11, 2026 •

Copy link
Copy Markdown
Member

관련 이슈

변경 목적

전역적으로 발생하는 예외를 한 곳에서 처리하기 위함.

작업 내역

  • 예외 응답 Dto 추가
  • 어플리케이션 최상위 커스텀 예외 RilogBusinessException 추가

리뷰어가 집중해서 볼 부분

GlobalExceptionHandler를 추가하여, 전역적으로 발생하는 예외를 한 곳에서 처리
이때, 동일한 응답을 위해 ErrorDetail을 사용.

어플리케이션 최상위 커스텀 예외와 예외정보(Information)을 사용 안내를 위한 exception-handling.md을 docs/backend/ 하위에 추가

Summary by CodeRabbit

  • New Features

    • Added standardized API error responses for validation failures, malformed requests, unsupported methods, invalid arguments, business errors, and unexpected failures.
    • Error responses now include consistent HTTP status, error code, message, and invalid-parameter details where applicable.
  • Documentation

    • Added guidance for defining and handling domain-specific business errors, including response conventions and implementation checklists.

- 유효하지 않은 Param을 전달하기 위함.
- 어플리케이션 최상위 커스텀 예외
- 커스텀 예외 생성자 시그니처를 Interface로 단축
- 전역 예외처리 핸들러로 한 곳에서 예외처리 관리
- 비즈니스 예외를 일관된 API 오류 응답으로 변환하는 방법을 설명
@koreaioi koreaioi self-assigned this Aug 11, 2026
@koreaioi
koreaioi requested a review from Wlsflfh as a code owner August 11, 2026 17:34
@koreaioi koreaioi added the chore 빌드, 설정, 의존성, 개발 환경 등 보조 작업을 수행합니다. label Aug 11, 2026
@koreaioi koreaioi linked an issue Aug 11, 2026 that may be closed by this pull request
4 tasks
@coderabbitai

coderabbitai Bot commented Aug 11, 2026 •

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@koreaioi, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 55 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 6f0e8765-f059-4a3d-bb60-379d9d69cf55

📥 Commits

Reviewing files that changed from the base of the PR and between bd6dbae and 6ecf124.

📒 Files selected for processing (1)
  • backend/src/main/java/kr/rilog/global/exception/ErrorInformation.java
📝 Walkthrough

Walkthrough

Added shared exception contracts and ErrorDetail responses. Added GlobalExceptionHandler for validation, business, request, method, argument, and unexpected exceptions. Documented domain exception usage and response handling.

Changes

Global exception handling

Layer / File(s) Summary
Error contracts and response DTOs
backend/src/main/java/kr/rilog/global/exception/...
Added ErrorInformation, predefined GlobalExceptionInformation, RilogBusinessException, ErrorDetail, and InvalidParam.
Global exception advice
backend/src/main/java/kr/rilog/global/advice/GlobalExceptionHandler.java
Maps supported exceptions to standardized ErrorDetail responses and includes invalid parameters for validation failures.
Exception handling guide
docs/backend/exception-handling.md
Documents domain error definitions, exception usage, response examples, package structure, and adoption guidelines.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Client
  participant GlobalExceptionHandler
  participant ErrorInformation
  participant ErrorDetail
  Client->>GlobalExceptionHandler: Request triggers an exception
  GlobalExceptionHandler->>ErrorInformation: Read error metadata
  GlobalExceptionHandler->>ErrorDetail: Create standardized error response
  ErrorDetail-->>GlobalExceptionHandler: Return status and error metadata
  GlobalExceptionHandler-->>Client: Return ResponseEntity<ErrorDetail>
Loading
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the initial global exception handler setup described by the changes.
Linked Issues check ✅ Passed The PR implements GlobalExceptionHandler, error response DTOs, exception types, and usage documentation required by issue [#19].
Out of Scope Changes check ✅ Passed All code and documentation changes directly support the global exception handling setup required by issue [#19].
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch be/chore/#19-전역예외처리핸들러-초기세팅

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
docs/backend/exception-handling.md (1)

12-20: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

컨트롤러 경계를 흐름에 명시하세요.

GlobalExceptionHandler는 @RestControllerAdvice이므로 HTTP 컨트롤러 처리 중 전파된 예외를 처리합니다. 현재 흐름은 PostService가 핸들러로 직접 연결되어 서비스, 스케줄러, 비동기 작업의 예외도 처리하는 것처럼 보일 수 있습니다. PostController를 흐름에 추가하고 처리 범위를 명시하세요.

수정 예시
-PostService
-  └─ throw new PostException(PostErrorInformation.POST_NOT_FOUND)
-       └─ RilogBusinessException에 ErrorInformation 저장
-            └─ GlobalExceptionHandler가 예외 처리
-                 └─ ErrorDetail 형식의 HTTP 응답 반환
+PostController
+  └─ PostService
+       └─ throw new PostException(PostErrorInformation.POST_NOT_FOUND)
+            └─ 컨트롤러까지 예외가 전파되면 GlobalExceptionHandler가 처리
+                 └─ ErrorDetail 형식의 HTTP 응답 반환
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/backend/exception-handling.md` around lines 12 - 20, 문서의 ‘전체 흐름’ 다이어그램에서
PostService와 GlobalExceptionHandler 사이에 PostController를 추가하고, 예외 전파가 HTTP 컨트롤러
처리 경계를 거친 경우에만 GlobalExceptionHandler가 처리한다는 범위를 명시하세요. 서비스·스케줄러·비동기 작업의 예외까지 직접
처리하는 것으로 오해되지 않도록 설명을 조정하세요.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@backend/src/main/java/kr/rilog/global/exception/GlobalExceptionInformation.java`:
- Line 14: Update the INTERNAL_SERVER_ERROR entry in GlobalExceptionInformation
to use HttpStatus.INTERNAL_SERVER_ERROR instead of HttpStatus.BAD_REQUEST,
ensuring GlobalExceptionHandler.handleUnknownException returns HTTP 500 for
unexpected exceptions.

In `@docs/backend/exception-handling.md`:
- Around line 120-123: Update the exception-handling checklist tree to include
the repository source root and package root, using
backend/src/main/java/kr/rilog/... before the domain/<domain>/exception
structure. Keep the existing exception file names unchanged and align the
documented path with the kr.rilog.domain.post.exception package.

---

Nitpick comments:
In `@docs/backend/exception-handling.md`:
- Around line 12-20: 문서의 ‘전체 흐름’ 다이어그램에서 PostService와 GlobalExceptionHandler 사이에
PostController를 추가하고, 예외 전파가 HTTP 컨트롤러 처리 경계를 거친 경우에만 GlobalExceptionHandler가
처리한다는 범위를 명시하세요. 서비스·스케줄러·비동기 작업의 예외까지 직접 처리하는 것으로 오해되지 않도록 설명을 조정하세요.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 8cdb19dd-8b58-4636-9847-505f88d3d7f9

📥 Commits

Reviewing files that changed from the base of the PR and between 9d15cfd and 7ce94ff.

📒 Files selected for processing (8)
  • backend/src/main/java/kr/rilog/domain/.gitkeep
  • backend/src/main/java/kr/rilog/global/advice/GlobalExceptionHandler.java
  • backend/src/main/java/kr/rilog/global/exception/ErrorInformation.java
  • backend/src/main/java/kr/rilog/global/exception/GlobalExceptionInformation.java
  • backend/src/main/java/kr/rilog/global/exception/RilogBusinessException.java
  • backend/src/main/java/kr/rilog/global/exception/dto/ErrorDetail.java
  • backend/src/main/java/kr/rilog/global/exception/dto/InvalidParam.java
  • docs/backend/exception-handling.md

INVALID_REQUEST_BODY(HttpStatus.BAD_REQUEST, "COMMON_001", "요청 본문 형식이 올바르지 않습니다."),
METHOD_NOT_SUPPORTED(HttpStatus.METHOD_NOT_ALLOWED, "COMMON_002", "지원하지 않는 HTTP 메서드입니다."),
INVALID_REQUEST(HttpStatus.BAD_REQUEST, "COMMON_003", "해당 요청을 처리할 수 없습니다."),
INTERNAL_SERVER_ERROR(HttpStatus.BAD_REQUEST, "COMMON_004", "서버 내부 오류가 발생했습니다."),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Return HTTP 500 for unexpected exceptions.

INTERNAL_SERVER_ERROR uses HttpStatus.BAD_REQUEST. GlobalExceptionHandler.handleUnknownException uses this value, so server faults return HTTP 400. This misclassifies server failures as client request errors.

Proposed fix
-    INTERNAL_SERVER_ERROR(HttpStatus.BAD_REQUEST, "COMMON_004", "서버 내부 오류가 발생했습니다."),
+    INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "COMMON_004", "서버 내부 오류가 발생했습니다."),
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
INTERNAL_SERVER_ERROR(HttpStatus.BAD_REQUEST, "COMMON_004", "서버 내부 오류가 발생했습니다."),
INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "COMMON_004", "서버 내부 오류가 발생했습니다."),
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@backend/src/main/java/kr/rilog/global/exception/GlobalExceptionInformation.java`
at line 14, Update the INTERNAL_SERVER_ERROR entry in GlobalExceptionInformation
to use HttpStatus.INTERNAL_SERVER_ERROR instead of HttpStatus.BAD_REQUEST,
ensuring GlobalExceptionHandler.handleUnknownException returns HTTP 500 for
unexpected exceptions.

Comment thread docs/backend/exception-handling.md Resolved

@Wlsflfh Wlsflfh left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

전반적으로 예외처리핸들러 초기 셋팅을 잘 해주셨네요! 고생했습니다.
몇가지 코멘트만 남겨놓았습니다! 확인 부탁드릴게요


import org.springframework.http.HttpStatus;

public interface ErrorInformation {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

컨벤션 통일을 위해 interface, record 클래스도

  • 클래스 선언 직후,
  • 괄호 닫기 전

개행 추가해주면 좋을 것 같습니다!

}

@ExceptionHandler(RilogBusinessException.class)
public ResponseEntity<ErrorDetail> handleRoomEscapeException(RilogBusinessException e) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

네이밍 수정 필요할 것 같습니다.

handleRoomEscapeException -> handleRilogBussinessException

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

에구구..! 적용했습니다! 😄

}

@ExceptionHandler(IllegalArgumentException.class)
public ResponseEntity<ErrorDetail> handleIllegalArgumentException(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

RilogBusinessException 를 사용하면 IllegalArgumentException 를 사용하지 않을 수 있을 것 같은데 어떻게 생각하시나요!

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

차마 백엔드에서 처리하지 못한 예외로 IllegalArgumentException가 발생하게 되면 INTERNAL_SERVER_ERROR로 처리될 수 있을 거 같아 추가해두었는데요!

해당 상황이 발생하면 추가하기로 한 부분 반영해두었습니다! YAGNI

@gustn99 gustn99 added the backend 백엔드 관련 작업입니다. label Aug 12, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
backend/src/main/java/kr/rilog/global/advice/GlobalExceptionHandler.java (3)

71-78: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Preserve the Allow header in 405 responses.

Add .headers(e.getHeaders()) before .body(...). Without it, the response omits the supported methods required by the 405 contract.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@backend/src/main/java/kr/rilog/global/advice/GlobalExceptionHandler.java`
around lines 71 - 78, Update handleHttpRequestMethodNotSupportedException to
copy the exception’s headers onto the 405 ResponseEntity by adding
e.getHeaders() to the response builder before
body(ErrorDetail.of(errorInformation)), preserving the existing status and body.

32-39: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Preserve object-level validation errors.

getFieldErrors() excludes ObjectError entries from class-level or cross-field constraints. If such a constraint fails, this handler omits that failure. Collect both error types and map object-level errors to a defined InvalidParam.name.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@backend/src/main/java/kr/rilog/global/advice/GlobalExceptionHandler.java`
around lines 32 - 39, Update the validation-error collection in
GlobalExceptionHandler to include both field errors and object-level errors from
BindingResult, rather than relying only on getFieldErrors(). Map ObjectError
entries to the defined InvalidParam.name while preserving field names for
FieldError entries, ensuring class-level and cross-field constraint failures are
returned.

81-86: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift

Preserve Spring MVC status and headers in the fallback handler.

@ExceptionHandler(Exception.class) can map HandlerMethodValidationException (400), NoResourceFoundException (404), HttpMediaTypeNotSupportedException (415), and ResponseStatusException to 500. It also bypasses framework response headers. Add explicit handlers or extend ResponseEntityExceptionHandler, then add MockMvc tests for these cases.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@backend/src/main/java/kr/rilog/global/advice/GlobalExceptionHandler.java`
around lines 81 - 86, Update GlobalExceptionHandler’s fallback
handleUnknownException path to preserve Spring MVC status codes and response
headers for framework exceptions, including HandlerMethodValidationException,
NoResourceFoundException, HttpMediaTypeNotSupportedException, and
ResponseStatusException. Add explicit handlers or extend
ResponseEntityExceptionHandler, and cover each case with MockMvc tests verifying
status and headers.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@backend/src/main/java/kr/rilog/global/advice/GlobalExceptionHandler.java`:
- Around line 71-78: Update handleHttpRequestMethodNotSupportedException to copy
the exception’s headers onto the 405 ResponseEntity by adding e.getHeaders() to
the response builder before body(ErrorDetail.of(errorInformation)), preserving
the existing status and body.
- Around line 32-39: Update the validation-error collection in
GlobalExceptionHandler to include both field errors and object-level errors from
BindingResult, rather than relying only on getFieldErrors(). Map ObjectError
entries to the defined InvalidParam.name while preserving field names for
FieldError entries, ensuring class-level and cross-field constraint failures are
returned.
- Around line 81-86: Update GlobalExceptionHandler’s fallback
handleUnknownException path to preserve Spring MVC status codes and response
headers for framework exceptions, including HandlerMethodValidationException,
NoResourceFoundException, HttpMediaTypeNotSupportedException, and
ResponseStatusException. Add explicit handlers or extend
ResponseEntityExceptionHandler, and cover each case with MockMvc tests verifying
status and headers.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 4f0aac5f-0ddb-488e-822a-00d00b6ce56a

📥 Commits

Reviewing files that changed from the base of the PR and between 7ce94ff and bd6dbae.

📒 Files selected for processing (1)
  • backend/src/main/java/kr/rilog/global/advice/GlobalExceptionHandler.java

@koreaioi
koreaioi merged commit 2e00dec into develop Aug 12, 2026
1 check passed
@koreaioi
koreaioi deleted the be/chore/#19-전역예외처리핸들러-초기세팅 branch August 12, 2026 03:41
Wlsflfh added a commit that referenced this pull request Aug 21, 2026
* chore: 저장소 공통 제외 규칙 설정 (#6)

* docs: 프로젝트 하네스 기본 기준 정리 (#8)

* chore: 파트별 변경의 리뷰 요청 자동화 (#12)

* [Chore] #9 프론트엔드 초기 세팅 (#10)

* chore: 프론트엔드 공통 실행·검증 환경 구성

* docs: 프론트엔드 개발 및 협업 기준 문서화

* chore: 미사용 코드와 빈 줄 검사 강화

* docs: 작업 범위별 브랜치 명명 기준 통일 (#17)

* [Chore] #14 프론트엔드 디자인 토큰 구성 (#18)

* design: 공통 타이포그래피 토큰 정의

* design: 색상과 버튼 상태 토큰 정의

* design: 전역 스타일의 의미 기반 토큰 연결

* chore: Tailwind CSS 편집기 진단 설정 공유

* design: 버튼 토큰의 유틸리티 연동

버튼의 상태·색상·크기 토큰을 Tailwind theme namespace로 옮겨 공용 컴포넌트에서 이름 있는 유틸리티로 조합할 수 있게 한다.

Constraint: Tailwind CSS v4 theme namespace를 통해 유틸리티를 생성해야 한다
Rejected: :root 버튼 변수 유지 | 컴포넌트에서 일관된 유틸리티 조합 불가
Confidence: high
Scope-risk: narrow
Directive: 버튼 상태와 foreground 토큰은 Button 컴포넌트 variant 조합에서 사용한다
Tested: Prettier, ESLint, TypeScript, Vitest, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 실제 Button 컴포넌트의 키보드 상호작용

* design: focus ring 토큰의 의미 명확화

키보드 focus에 사용하는 색상임을 이름에 드러내고 Tailwind ring 유틸리티와 동일한 의미로 연결한다. 버튼 토큰 변경으로 참조가 사라진 radius mapping도 함께 제거한다.

Constraint: 모든 인터랙션 요소가 공통 focus 색상을 사용해야 한다
Rejected: --focus 이름 유지 | 색상 용도와 적용 대상이 모호함
Confidence: high
Scope-risk: narrow
Directive: 신규 interactive component는 버튼 전용 별칭 대신 ring-focus-ring을 사용한다
Tested: Prettier, ESLint, TypeScript, Vitest, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 실제 브라우저 keyboard focus 시각 점검

* design: 숫자형 타이포그래피 스케일 정리

의미가 겹치는 본문·라벨 토큰을 크기 중심의 숫자 스케일로 통합해 역할별 행간과 자간을 컴포넌트에서 조합할 수 있게 한다.

Constraint: 현재 Figma에서 확인된 14px, 16px, 20px, 64px 위계를 유지해야 한다
Rejected: 역할별 글자 크기 토큰 유지 | 같은 크기의 중복 선언과 확장 기준이 불명확함
Confidence: high
Scope-risk: narrow
Directive: 새 글자 크기는 실제 디자인 사용처가 확인될 때만 숫자 스케일에 추가한다
Tested: Prettier, ESLint, TypeScript, Vitest, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 미구현 화면에서의 시각적 위계 검토

* design: 역할 기반 타이포그래피 토큰 체계 확장

기존 숫자형 글자 크기 토큰을 역할 기반의 caption, label, body, title, heading, display 체계로 재구성해 화면 코드가 의도를 드러내는 유틸리티를 사용할 수 있게 한다.

Constraint: Tailwind CSS v4 text namespace와 숫자형 단계 명명 규칙을 유지해야 한다
Rejected: 기존 숫자형 scale 유지 | 동일한 크기의 역할과 사용 맥락을 표현할 수 없음
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: 신규 타이포그래피는 기존 역할을 재사용하고, 실제 사용처가 확인될 때만 단계를 추가한다
Tested: Prettier, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 구현 예정 화면에서의 시각적 위계 점검

* design: 홈 화면에 의미 기반 타이포그래피 적용

홈 화면의 기본 Tailwind 글자 크기를 역할 기반 토큰으로 바꿔 디자인 시스템이 정의한 행간과 자간을 일관되게 적용한다.

Constraint: 페이지 제목과 본문은 앞선 타이포그래피 토큰 커밋을 소비해야 한다
Rejected: text-4xl과 text-base 유지 | 화면마다 기본 scale과 의미 기반 토큰이 혼재함
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: 신규 화면은 기본 Tailwind font-size 대신 의미 기반 text 토큰을 우선 사용한다
Tested: Prettier, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 브라우저별 실제 렌더링의 시각적 위계 점검

* [Chore] #15 ky config/client 설정 (#23)

* chore: config 폴더 제거

* chore: api client 테스트를 위한 의존성 설치

* feature: 토큰 재발급 로직을 포함하는 api client 모듈 구현

* feature: 토큰 재발급 실패 시 유저 데이터 초기화를 위한 구독발행 모델 구축

* style: import 순서 정렬

* chore: vitest config 내 alias 대상 상대경로 수정

* refactor: 토큰 재발급 실패 시 초기화 필요한 쿼리의 키를 그루핑

* feature: 토큰 재발급 실패 시 쿼리 초기화를 트리거하는 훅 컴포넌트 구현

* feature: QueryProvider 구현 및 적용

* chore(apiClient): tokenProvider 관련 TODO 추가

* chore(playwright.config): 대상 디렉터리 경로 수정

* chore: .env.example 파일 추가

* docs: 작업 범위별 브랜치 명명 기준 통일 (#17)

* [Chore] #14 프론트엔드 디자인 토큰 구성 (#18)

* design: 공통 타이포그래피 토큰 정의

* design: 색상과 버튼 상태 토큰 정의

* design: 전역 스타일의 의미 기반 토큰 연결

* chore: Tailwind CSS 편집기 진단 설정 공유

* design: 버튼 토큰의 유틸리티 연동

버튼의 상태·색상·크기 토큰을 Tailwind theme namespace로 옮겨 공용 컴포넌트에서 이름 있는 유틸리티로 조합할 수 있게 한다.

Constraint: Tailwind CSS v4 theme namespace를 통해 유틸리티를 생성해야 한다
Rejected: :root 버튼 변수 유지 | 컴포넌트에서 일관된 유틸리티 조합 불가
Confidence: high
Scope-risk: narrow
Directive: 버튼 상태와 foreground 토큰은 Button 컴포넌트 variant 조합에서 사용한다
Tested: Prettier, ESLint, TypeScript, Vitest, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 실제 Button 컴포넌트의 키보드 상호작용

* design: focus ring 토큰의 의미 명확화

키보드 focus에 사용하는 색상임을 이름에 드러내고 Tailwind ring 유틸리티와 동일한 의미로 연결한다. 버튼 토큰 변경으로 참조가 사라진 radius mapping도 함께 제거한다.

Constraint: 모든 인터랙션 요소가 공통 focus 색상을 사용해야 한다
Rejected: --focus 이름 유지 | 색상 용도와 적용 대상이 모호함
Confidence: high
Scope-risk: narrow
Directive: 신규 interactive component는 버튼 전용 별칭 대신 ring-focus-ring을 사용한다
Tested: Prettier, ESLint, TypeScript, Vitest, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 실제 브라우저 keyboard focus 시각 점검

* design: 숫자형 타이포그래피 스케일 정리

의미가 겹치는 본문·라벨 토큰을 크기 중심의 숫자 스케일로 통합해 역할별 행간과 자간을 컴포넌트에서 조합할 수 있게 한다.

Constraint: 현재 Figma에서 확인된 14px, 16px, 20px, 64px 위계를 유지해야 한다
Rejected: 역할별 글자 크기 토큰 유지 | 같은 크기의 중복 선언과 확장 기준이 불명확함
Confidence: high
Scope-risk: narrow
Directive: 새 글자 크기는 실제 디자인 사용처가 확인될 때만 숫자 스케일에 추가한다
Tested: Prettier, ESLint, TypeScript, Vitest, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 미구현 화면에서의 시각적 위계 검토

* design: 역할 기반 타이포그래피 토큰 체계 확장

기존 숫자형 글자 크기 토큰을 역할 기반의 caption, label, body, title, heading, display 체계로 재구성해 화면 코드가 의도를 드러내는 유틸리티를 사용할 수 있게 한다.

Constraint: Tailwind CSS v4 text namespace와 숫자형 단계 명명 규칙을 유지해야 한다
Rejected: 기존 숫자형 scale 유지 | 동일한 크기의 역할과 사용 맥락을 표현할 수 없음
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: 신규 타이포그래피는 기존 역할을 재사용하고, 실제 사용처가 확인될 때만 단계를 추가한다
Tested: Prettier, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 구현 예정 화면에서의 시각적 위계 점검

* design: 홈 화면에 의미 기반 타이포그래피 적용

홈 화면의 기본 Tailwind 글자 크기를 역할 기반 토큰으로 바꿔 디자인 시스템이 정의한 행간과 자간을 일관되게 적용한다.

Constraint: 페이지 제목과 본문은 앞선 타이포그래피 토큰 커밋을 소비해야 한다
Rejected: text-4xl과 text-base 유지 | 화면마다 기본 scale과 의미 기반 토큰이 혼재함
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: 신규 화면은 기본 Tailwind font-size 대신 의미 기반 text 토큰을 우선 사용한다
Tested: Prettier, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 브라우저별 실제 렌더링의 시각적 위계 점검

* chore(createApiClient): 토큰 재발급 분기 처리 관련 TODO 추가

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* [Feature] #20 공용 버튼 컴포넌트 추가 (#21)

* feature: 서비스 전역 버튼 인터페이스 통일

* refactor: Button 타입과 크기별 스타일을 정리

Button에서만 사용하는 props 타입을 컴포넌트 파일로 옮기고 public entry의 타입 export를 제거했다.
버튼 크기별 모서리 반경도 sm/md와 lg의 위계를 드러내도록 조정했다.

Constraint: Button 타입의 외부 소비처가 없음
Rejected: 별도 타입 파일 유지 | 단일 소비처를 위한 파일 경계가 불필요함
Confidence: high
Scope-risk: narrow
Directive: 외부 타입 소비처가 생기면 필요한 타입만 public entry로 다시 공개할 것
Tested: pnpm check (format, lint, typecheck, component tests, build)
Not-tested: E2E 브라우저 흐름

* refactor: Button 전용 토큰의 소유 위치 정리

Button만 소비하는 시맨틱 토큰을 컴포넌트 폴더로 이동하고, 전역 스타일 진입점에서 등록하도록 import 경로를 분리했다.

Constraint: Tailwind 유틸리티 생성을 위해 @theme 토큰은 전역 CSS에서 import되어야 함
Rejected: foundations 토큰 폴더 유지 | Button 컴포넌트와 토큰의 소유 관계가 분산됨
Confidence: high
Scope-risk: narrow
Directive: 다른 공용 컴포넌트 전용 토큰도 소비처가 하나면 해당 컴포넌트와 함께 관리할 것
Tested: pnpm check (format, lint, typecheck, component tests, build)
Not-tested: E2E 브라우저 흐름

* [Chore] #19 전역예외처리핸들러 초기세팅 (#24)

* chore: domain 패키지 구조 유지 (#19)

* feat: InvalidParam 추가 (#19)

- 유효하지 않은 Param을 전달하기 위함.

* feat: ErrorDetail 추가 (#19)

* feat: RilogBusinessException 추가 (#19)

- 어플리케이션 최상위 커스텀 예외

* feat: ErrorInformation 추가 (#19)

- 커스텀 예외 생성자 시그니처를 Interface로 단축

* feat: GlobalExceptionInformation 추가 (#19)

* feat: GlobalExceptionHandler 추가 (#19)

- 전역 예외처리 핸들러로 한 곳에서 예외처리 관리

* docs: exception-handling.md 추가 (#19)

- 비즈니스 예외를 일관된 API 오류 응답으로 변환하는 방법을 설명

* refactor: 메서드 네이밍 수정 (#19)

* refactor: 자바 기본 예외는 초기세팅에 포함하지 않음. (#19)

* refactor: 클래스 선언 직후, 괄호 닫기 전 개행 추가 (#19)

* [Chore] #27 BaseEntity 초기세팅 (#28)

* build: Spring Data Jpa 라이브러리 추가 (#27)

* feat: BaseEntity 추가 (#27)

* feat: JpaAuditingConfig 추가 (#27)

- JpaAuditing 설정 허용

* feat: Spring Data 관련 예외처리 등록 (#27)

* docs: BaseEntity 사용 가이드.md 추가  (#27)

* chore: 프론트엔드 타입과 모듈 경계 규칙 통일 (#29)

객체 계약은 interface를 기본으로 사용하고 모듈 경계 import만 절대 경로를 사용하도록 기존 코드와 하네스를 함께 정리한다.

Constraint: 같은 모듈 내부 상대 경로는 허용
Rejected: 모듈별 barrel 유지 | 현재 공개 API 규모 대비 관리 비용과 runtime 혼합 위험이 큼
Directive: barrel 재도입은 명시적인 public API 필요가 확인된 뒤 별도 이슈 또는 ADR로 결정
Tested: Node 24.19.0에서 pnpm check 및 Playwright E2E 통과

* [Feature] #31 로그인 사용자 식별자 초기 구현 (#32)

* feat: @LoginUserId 추가 (#31)

* feat: @LoginUserSlug 추가 (#31)

* feat: 임시 LoginUserIdArgumentResolver 추가 (#31)

- 작업 병목을 막기 위한 임시 ArgumentResolver

* feat: 임시 LoginUserSlugArgumentResolver 추가 (#31)

- 작업 병목을 막기 위한 임시 ArgumentResolver

* [Feature] #30 users 테이블 구현 (#33)

* chore: service, repository 패키지 구조 추가

* refactor: HealthController 패키지 위치 변경

* refactor: HealthController 패키지 구조 변경에 의한 수정

* feature: User 테이블 구현

* feature: OnboardingStatus 구현

* test: UserTest 구현

* refactor: Onboarding 입력 값 추가

* test: Onboarding 입력 값 추가에 의한 테스트 케이스 수정

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #34 1차 MVP Entity 초기 구현 (#39)

* refactor: 잘못된 패키지 구조 형식 제거 (#34)

* feature: test 패키지 gitignore 추가 (#34)

* refactor: User 패키지로 이동 (#34)

* refactor: HealthCheckController 패키지 이동 (#34)

* feature: user entity에 UNIQUE 제약 추가 (#34)

* feature: blog entity 추가 (#34)

* feature: post entity 추가 (#34)

* feature: BlogMember entity 추가 (#34)

* feature: local.env gitignore 추가 (#34)

* refactor: BlogMember Entity 잘못된 @table name 속성 수정  (#34)

* feature: application profile별 분리  (#34)

* refactor: author를 user로 변경 (#34)

* [Feature] #42 Swagger 추가 (#44)

* build: swagger 의존성 추가 (#42)

* build: dev, local 환경에 swagger 접속 허용 (#42)

* feature: OpenApiConfig 추가 (#42)

* [Feature] #47 예외 응답 형식 변경 (#48)

* refactor: GlobalExceptionInformation getErrorCode 응답 형식 변경

* docs: 예외 Enum 사용 방식 변경으로 docs 반영

* [Feature] #49 GitHub oauth 로그인 요청 및 callback 구현 (#56)

* refactor: 인증 보조 타입의 도메인 패키지 이동

* refactor: 인증 보조 타입의 패키지 선언 정리

* feature: GitHub OAuth 로그인 요청과 callback 검증 추가

* fix: 온보딩 slug 최초 저장과 재변경 방지

* docs: 아키텍쳐 구조 설명 추가

* fix: 파라미터 버그 수정

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #45 게시글 발행 기능 구현 (#59)

* feature: Blog Entity에 owner 추가

* feature: Post Builder 패턴 적용

* refactor: 잘못 사용된 어노테이션 수정

- LoginUserId -> LoginUserSlug

* refactor: BlogType을 도메인 용어로 수정 COLOG, RILOG

* feat: Colog인지 확인하는 도메인 로직 추가

* feat: Blog 도메인 예외 추가

* Merge branch 'develop' of https://github.com/woowacourse-teams/2026-rilog into be/feature/#45-게시글-발행-기능-구현

# Conflicts:
#	backend/src/main/java/kr/rilog/domain/auth/resolver/LoginUserSlugArgumentResolver.java

* feat: 사용자를 찾을 수 없는 예외 에러 코드 추가

* feat: UserRepository 추가

* feat: BlogRepository 추가

- 개인사용자의 블로그를 조회하는 메서드 추가

* refactor: default 생성자 문제 해결 @Autowired 적용

* feat: PostRepository 추가

* feat: PostPublishRequest 추가

* feat: PostPublishResponse 추가

* feat: PostDetail 추가

* feat: PostSaveCommand 추가

* feat: PostPublishResult 추가

* refactor: default 생성자 문제 해결

* feat: PostService 추가 및 게시글 작성 구현

- 이미지 처리는 다음 이슈에 구현

* feat: PostController 추가 및 게시글 작성 API 구현

- 이미지 처리는 다음 이슈에 구현

* feat: NoResourceException 전역 예외 처리 추가

* feat: Post 게시글 작성 단위 테스트 추가

* refactor: .gradle-codex gitignore에 추가

* refactor: NoResourceFoundException 발생 시 잘못된 예외 코드 수정

* feature: Blog 소유자인지 판단하는 도메인 로직 추가

* feature: 게시글 작성 시, 다른 개인 블로그에 글을 작성할 수 있는 엣지케이스 제거 및 테스트 코드 작성

* [Feature] #57 GitHub access token 교환 및 사용자 정보 조회 구현 (#58)

* fix: GitHub 로그인 시작 생성자 주입 대상 명확화

* feature: GitHub Access Token 교환과 사용자 조회 추가

* refactor: 소셜 로그인 provider 경계 분리

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #60 GitHub 로그인 사용자 생성과 온보딩 대기 처리 (#61)

* feature: GitHub 로그인 사용자 생성과 온보딩 대기 처리

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

* refactor: OAuth 로그인 사용자 조회 흐름과 테스트 정리

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

* fix: 생성자 충돌로 인한 정적 팩토리 메서드로 변경

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #62 전체 게시글 수 조회 API 구현 (#63)

* feature: 전체 게시글 수 조회 메서드 추가

* feature: TotalPostsCountResponse 추가

* feature: 전체 게시글 수 API 구현

* [Feature] #64 특정 게시글 상세 조회 API 구현 (#66)

* feat: hibernate Jackson 버전을 Spring Boot 4.0.x의 기본 Jackson 버전으로 명시

* feat: Post와 Author Fetch Join 메서드 추가

* feat: Post 도메인 예외 추가

* feat: 비공개 게시글 읽기 검증 로직 추가

* feat: 게시글 상세 조회 ResponseDto 추가

* feat: 게시글 상세 조회 비즈니스 로직 추가

* feat: 게시글 상세 조회 API 추가

* refactor: 잘못된 import 경로 수정

* refactor: 메서드명 readPosts에서 readPost로 변경

* refactor: Post에서 사용하지 않는 logoUrl 삭제

* fix: 메서드 시그니처 수정 누락 반영 (#71)

- logoUrl 메서드 시그니처 삭제

* feature: 자체 Access Token 발급과 검증 구현 (#67)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #68 Bearer 인증 인터셉터 구현 (#74)

* feature: Bearer 인증 인터셉터 구현

* refactor: 인증 선언과 사용자 주입 책임 분리

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feature: 역할 기반 인가 처리 구현 (#77)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feataure: 공용 텍스트 인풋 컴포넌트 구현 (#38)

* chore: placeholder 컬러 토큰 추가

* feature: 인풋 text 컴포넌트 구현

* chore: 범용 spacing 토큰 추가

* feature(Input): 아이콘/주소 prefix 등을 위해 인풋 좌측 슬롯 구현

* feature: 텍스트 영역 컴포넌트 구현

* style: css prettier 포맷 통일

* feature: left 컴포넌트를 클릭해도 input에 focus 되는 기능 추가

* feature(Textarea): 포커스 시 아웃라인 색상 지정

* test(Textarea): uncontrolled 방식의 테스트 제거

* [Feature] #72 전체 피드 게시글 목록 조회 (#79)

* feature: 전체 피드 게시글 목록 조회 메서드 구현

- 데이터 양이 많은 content 생략을 위해 Projection 사용.
- 정렬순은 하드코딩, 추후 확장성 고민해야함.

* feature: 전체피드 게시글 목록 Response 추가

- Inner Record를 사용

* feature: 전체피드 게시글 목록 조회 비즈니스 로직 추가

* feature: 전체피드 게시글 목록 조회 API 추가

* feature: 전체피드 게시글 목록 조회 API 추가

* feature: 전체피드 게시글 목록 조회 API Swagger 명세 추가

* feature: FeedService 단위 테스트 추가

* feature: 요청에 필요한 파라미터 누락 예외 상세하게 처리

* refactor: 잘못된 import 경로 수정

* [Refactor] #80 공통 응답 형식 적용 (#82)

* refactor: 공통 응답 ApiResponse 적용

- 소셜 로그인 컨트롤러는 미적용

* feature: ApiResponse 응답 적용

* refactor: 공통 응답 ApiResponse 적용

- 소셜 로그인 컨트롤러는 미적용

* feat: .gradle-user-home/ .gitignore 추가

* feature: 자체 로그인 토큰 흐름 제공 (#85)

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

Tested: git diff --check

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #84 Colog 피드에서 게시글 목록 조회 (#87)

* refactor: 전체피드 게시글 목록 조회 API에 ApiResponse 적용

* feature: 팀 피드 전체 게시글 목록 조회 메서드 추가

* feature: 팀 전체 피드 게시글 목록 응답 Dto 추가

* feature: 블로그 조회 메서드 추가

* refactor: 사용하지 않는 code 필드 제거 - ApiResponse

* feat: 팀피드 게시글 목록 조회 API 추가

* feat: 팀피드 게시글 목록 조회 비즈니스 로직 추가

* refactor: 전체 피드 게시글 목록 조회 비즈니스 로직 메서드명 수정

- 읽는다는 행위가 잘 드러나도록 read로 수정

* feature: 팀피드 게시글 조회 서비스 단위테스트코드 추가

* [Feature] #83 Refresh Token 재발급과 Rotation 처리 (#86)

* feature: Refresh Token 재발급과 Rotation 처리

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

Tested: git diff --check

* [Feature] #84 Colog 피드에서 게시글 목록 조회 (#87)

* refactor: 전체피드 게시글 목록 조회 API에 ApiResponse 적용

* feature: 팀 피드 전체 게시글 목록 조회 메서드 추가

* feature: 팀 전체 피드 게시글 목록 응답 Dto 추가

* feature: 블로그 조회 메서드 추가

* refactor: 사용하지 않는 code 필드 제거 - ApiResponse

* feat: 팀피드 게시글 목록 조회 API 추가

* feat: 팀피드 게시글 목록 조회 비즈니스 로직 추가

* refactor: 전체 피드 게시글 목록 조회 비즈니스 로직 메서드명 수정

- 읽는다는 행위가 잘 드러나도록 read로 수정

* feature: 팀피드 게시글 조회 서비스 단위테스트코드 추가

* feature: Refresh Token 재발급과 Rotation 처리

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

Tested: git diff --check

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>
Co-authored-by: koreaioi <koreaioi@gachon.ac.kr>

* feature: 로고이미지, 깃허브주소, 이메일 필드 추가 (#91)

* feature: #22 공용 모달 컴포넌트 구현 (#35)

* feature: 공용 모달의 접근성과 표시 동작 기반 마련

* feature: 단일 확인 동작을 제공하는 알림 모달 구성

* feature: 위험도와 처리 상태를 반영하는 확인 모달 구성

* feature: 다양한 콘텐츠 구성을 수용하는 범용 모달 제공

* chore: 프론트엔드 pnpm workspace 패키지 범위 명시

* refactor: 모달 Props 계약의 컴포넌트별 소유권 정리

* design: 모달 모서리 곡률을 서비스 스타일에 맞게 조정

* design: 모달 닫기 버튼의 클릭 영역과 배치 조정

* design: 모달 기본 액션 버튼의 높이와 최소 너비 통일

* fix: 모달 표시 중 배경 페이지 스크롤 차단

* design: 모달 백드랍 색상을 중립적인 톤으로 조정

* fix: 모달 pending 중 모든 액션과 종료 동작 차단

* refactor: 모달 처리 상태 계약 통일

* design: 버튼 포커스 링 여백 제거

* design: 버튼 포커스 표현을 아웃라인으로 통일

* feature: #36 공용 파일 인풋 컴포넌트 구현 (#75)

* feature: 파일 업로더 컴포넌트 구현

* feature: 이미지 업로더 컴포넌트 구현

* refactor(FileUploader): 불필요한 props 제거

* feat: change 핸들러 인터페이스 추가

* fix: 파일 업로더에 키보드 접근이 가능하도록 수정

* feature: 이미지 파일 검증 로직 추가

* [Feature] #89 팀 생성 로직 구현 (#95)

* feature: 팀 블로그 생성 도메인 모델 추가

* feature: 팀 블로그 생성 서비스 구현

* feature: 팀 블로그 생성 API 제공

* feature: 팀 블로그 URL 정보 생성 요청 반영

* refactor: @requiredargsconstructor 사용하도록 변경

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #88 나의 팀 목록 요약 API (#96)

* feature: 나의 팀 리스트 조회 메서드 추가

* feature: MyCologResponse 추가

* feature: 나의 팀 목록 조회 비즈니스 로직 추가

* feature: 나의 팀 목록 조회 API 추가

* feature: 나의 팀 목록 조회 단위테스트 추가

* feature: BlogController에 ApiSpec 명세 적용

* hofix: 생성자 중복 삭제 (#101)

* [Feature] 팀 멤버 초대 API 구현 (#98)

* feature: 팀 멤버 초대 API 구현

* fix: CologService 오류 수정

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* fix: Clock 필드 주입 삭제 (#104)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feature: 멤버 초대용 유저 정보 조회 제공 (#106)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #103 사용자 닉네임 슬러그 유효성 검사 구현 (#109)

* feat: 닉네임, 슬러그로 조회 메서드 추가

* feat: 닉네임, 슬러그 중복 예외 추가

* feat: 닉네임, 슬러그 중복검사 비즈니스 로직 추가

* feat: 닉네임, 슬러그 중복검사 API 구현

* feat: 닉네임, 슬러그 중복검사 테스트 코드 작성

* feature: 팀 상세 조회 API 구현 (#111)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feature: 팀 프로필 조회 API 구현 (#113)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #110 colog 전체 멤버 목록 API 구현 (#114)

* feat: 팀목록 조회 메서드 추가

* feat: 팀목록 조회 비즈니스 로직 추가

* feat: 팀목록 멤버 조회 API 추가

* feat: 팀목록 멤버 조회 테스트 코드 추가

* feature: 온보딩 완료 후 정식 인증 세션 발급 (#116)

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

Tested: git diff --check

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #117 글 작성 및 조회 권한 처리 구현 (#118)

* feature: 게시글 상세 조회 선택 인증 지원

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

Tested: git diff --check

* feature: 게시글 작성과 비공개 조회 권한 검증

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

Tested: git diff --check

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #99 S3 PresignedUrl 발급 (#119)

* build: aws sdk s3 의존성 추가

* refactor: 예외 응답 고도화

* refactor: Upload 도메인 예외 추가

* refactor: Upload 도메인 enum 추가

* feat: PresignedUrl 관련 Dto 추가

* feat: S3 관련 환경변수 추가

* feat: S3Config 추가

* feat: S3Properties 추가

* feat: PresignedUrl 발급 비즈니스 로직 추가

* feat: PresignedUrl 발급 API 추가

* refactor: Dockerfile 캐싱 적용

* feat: 등록 가능 contentType, type 예시 추가

* [Build] #123 개발서버 CI-CD 파이프라인 구축 (#124)

* build: 개발서버 CI-CD 파이프라인 구축

* build: 잘못된 Dockerfile 명시 수정

* refactor: Push 에서 deploy job이 동작하도록 수정

* feature: 프론트 연동을 위한 CORS 설정 추가 (#125)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Refactor] #127 크로스 플랫폼 설정과 GHA 캐싱 적용 (#128)

* refactor: 크로스 플랫폼 설정과 gha 캐싱 적용

* refactor: 잘못된 Dockerfile 이름 수정

* refactor: GitActions Runner 환경 ARM64 네이티브 러너 적용

* feature: 전달헤더 설정 추가 (#132)

- Swagger에서 API 요청 시 발생하는 CORS 문제 해결을 위함

* [Refactor] #129 로그인 이후 개인 블로그 생성 흐름 복구 (#130)

* fix: 로그인 이후 개인 블로그 생성 흐름 복구

* refactor: 온보딩 완료 책임의 서비스 의존 제거

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feature: #92 사이드바 구현 (#108)

* feature(Button): fullWidth 추가

* chore: navy 스케일 컬러 토큰 추가

* feature: 사이드바 컴포넌트 구현

* feature: 사이드바 접힘/열림 인터랙션 구현

* feature: 사이드바 관련 페이지 레이아웃 세팅

* feature: Button 스타일의 Link 컴포넌트를 ButtonLink로 분리

* feature: user/colog 공통 아바타 컴포넌트 구현

* feature: 사이드바 내비게이션 버튼 컴포넌트 구현

* feature: 사이드바 푸터 컴포넌트 구현

* feature: 사이드바 헤더 컴포넌트 구현

* refactor: 사이드바 컴포넌트 재구성

* test: 라우트 기반 로그아웃 동작을 버튼 기반으로 변경

* fix(Sidebar): 인가 여부 기본값 제거

* refactor(with-sidebar-layout): 메인 영역에 시맨틱 태그 사용

* feature: 공용 Divider 컴포넌트 구현

* feature: 사이드바에 Divider 추가

* fix(Sidebar): 인가 기본값 제거

* refactor(SidebarLayout): main 태그 제거

* test: 하드코딩된 UI 값 제거

* [Feature] #40 블로그 글 작성 페이지 UI 구현 (#126)

* build: BlockNote 패키지 버전 고정

* build: Pretendard 로컬 폰트 기반 제공

* design: BlockNote 스타일의 Rilog 토큰 연결

* feature: 글 작성 에디터 공개 계약 제공

* feature: 한국어 BlockNote 편집기 제공

* feature: 에디터 로드 실패 복구 상태 제공

* feature: BlockNote 브라우저 전용 로딩 경계 제공

* feature: 게시글 문서 유효성 판별

* feature: 자동 확장 제목 입력 흐름 제공

* feature: 본문 오류와 에디터 접근성 연결

* feature: 본문 이미지 로컬 업로더 제공

* feature: 글 작성 페이지의 기본 편집 흐름 제공

* feature: 글 작성 발행 진입 액션 제공

* feature: 저장되지 않은 글의 이탈 보호 제공

* feature: 게시 설정 도메인 계약과 선택 항목 제공

* feature: 대표 이미지 우선순위와 기본 미리보기 제공

* design: 파일 선택 컨트롤의 포커스 표현 통일

* feature: 접근 가능한 게시 설정 모달 제공

* feature: 게시 설정 유지와 발행 전 검증 제공

* feature: 교체 가능한 mock 발행 계약과 상세 경로 제공

* feature: 발행 상태 전이와 성공 후 이동 제공

* design: 게시 설정 모달의 경계와 포커스 표현 정돈

대표 이미지와 게시 설정 영역을 동일 비율로 배치하고 여백을 넓혀 정보 밀도를 조정한다. 모달 가장자리의 컨트롤은 focus outline을 내부에 표시해 잘림 없이 일관된 키보드 탐색 피드백을 제공한다.

Rejected: 공용 Button의 전역 outline offset 변경 | 모달 밖 버튼의 기존 시각 계약까지 바뀜
Confidence: high
Scope-risk: moderate
Directive: 모달 가장자리의 기본 컨트롤은 내부 focus outline 계약을 유지할 것
Tested: ESLint, TypeScript typecheck, component tests 86개, 키보드 focus 브라우저 확인, git diff check

* fix: 한글 조합 중 제목 Enter 이동 방지

IME 조합 중 발생한 Enter 이벤트를 본문 이동으로 처리하지 않도록
composition 상태를 확인한다.

Confidence: high
Scope-risk: narrow
Tested: PostTitleField component tests

* fix: 확정된 이탈 이동의 history 경쟁 제거

guard entry 제거와 실제 이동을 동기적으로 처리해 history.back과
fallback timer 사이의 중복 이동 가능성을 제거한다.

Rejected: popstate와 fallback timer 유지 | 이동 시점에 따라 두 경로가 경쟁할 수 있음
Confidence: high
Scope-risk: moderate
Tested: PostWriteWorkspace component tests

* fix: 유효한 상세 경로 확인 후 발행 상태 정리

발행 결과의 상세 경로를 먼저 검증해 잘못된 postId가 반환되더라도
작성 상태와 이탈 보호가 유지되도록 한다.

Rejected: 상태 정리 후 경로 생성 | 경로 생성 실패 시 작성 상태를 복구할 수 없음
Confidence: high
Scope-risk: narrow
Tested: PostWriteWorkspace component tests

* fix: BlockNote 표 셀 본문 유효성 판별

일반 content뿐 아니라 tableContent의 rows와 cells를 재귀 탐색해
표 안에 작성된 텍스트도 유효한 본문으로 인정한다.

Confidence: high
Scope-risk: narrow
Tested: post-write validation unit tests

* design: BlockNote 키보드 포커스와 블록 선택 표시 복원

BlockNote의 투명한 ring 값을 공용 focus token에 연결하고 선택된
콘텐츠에 outline을 제공해 현재 조작 대상을 식별할 수 있게 한다.

Constraint: 제목 입력은 기존 무경계 표현 유지
Rejected: box-shadow ring 추가 | 기존 outline 포커스 계약과 시각 효과가 중복됨
Confidence: high
Scope-risk: narrow
Tested: CSS formatting, production build, TypeScript

* fix: 실제 발행 제목과 길이 검증 기준 통일

제목의 앞뒤 공백을 제거한 값을 빈 값과 최대 길이 검증에 함께
사용해 실제 발행되는 제목과 검증 기준을 일치시킨다.

Confidence: high
Scope-risk: narrow
Tested: post-write validation unit tests

* design: 대표 이미지 선택 후 제어 영역 정렬

좁은 모달 열 안에서 이미지 변경과 제거 제어가 줄바꿈되지 않도록
설명과 버튼 행을 분리하고 선택 상태의 버튼 규격을 통일한다.

Rejected: viewport breakpoint 기반 flex 유지 | 실제 열 너비와 무관하게 가로 배치가 활성화됨
Confidence: high
Scope-risk: narrow
Tested: component tests, ESLint, TypeScript, production build, browser visual verification

* feat: 본문 placeholder에 마크다운 단축 문법 안내 제공

* [Feature] #93 로그인 모달 구현 (#137)

* design(Modal): 모달 내 개행 허용 및 레이아웃 조정

* feature: 로그인 모달 구현

* feature: 사이드바 로그인 버튼에 로그인 모달 연결

* feature: 로그인 모달을 전역으로 관리할 수 있도록 Context 구현

* feature: 로그인 상태에 따라 로그인 모달과 기존 액션을 분기하는 공통 훅 구현

* refactor(GuestSidebarFooter): 공통 로그인 모달 로직 적용

* [Feature] #94 온보딩 페이지 구현 (#136)

* chore: 브레이크포인트 토큰 추가

* feature: aside 기반 레이아웃 컴포넌트 구현

* feature: 프로필/커버 이미지 프리뷰 컴포넌트 구현

* feature: 공용 단일 인풋 field 컴포넌트 구현

* feature: 회원가입 폼 구현

* feature: 회원가입 페이지 구현

* design(FileUploader): ring을 outline으로 변경

* refactor: auth 하위 features를 auth/ui로 이동

* refactor: signup을 auth에서 분리

* feature: 공용 체크박스 컴포넌트 구현

* feature: 온보딩 폼에 약관 동의 추가

* fix: 온보딩 컴포넌트 import 경로 수정

* design: 존재하는 aside 영역만 표시하도록 수정

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* [Feature] #140 팀 설정 멤버관리 페이지 구현 (#142)

* feature: 코로그 멤버 모조 데이터 추가

* feature: 코로그 설정 탭 구현

* feature: 코로그 멤버 관리 멤버 행 구현

* feature: 멤버 관리 섹션 구현

* feature: 코로그 설정 내 탭 조합

* feature: 코로그 설정 페이지(멤버 관리) 구현

* design(MemberManagementSection): 우상단 버튼 간격 조정

* [Feature] #93 로그인 모달 구현 (#137)

* design(Modal): 모달 내 개행 허용 및 레이아웃 조정

* feature: 로그인 모달 구현

* feature: 사이드바 로그인 버튼에 로그인 모달 연결

* feature: 로그인 모달을 전역으로 관리할 수 있도록 Context 구현

* feature: 로그인 상태에 따라 로그인 모달과 기존 액션을 분기하는 공통 훅 구현

* refactor(GuestSidebarFooter): 공통 로그인 모달 로직 적용

* [Feature] #94 온보딩 페이지 구현 (#136)

* chore: 브레이크포인트 토큰 추가

* feature: aside 기반 레이아웃 컴포넌트 구현

* feature: 프로필/커버 이미지 프리뷰 컴포넌트 구현

* feature: 공용 단일 인풋 field 컴포넌트 구현

* feature: 회원가입 폼 구현

* feature: 회원가입 페이지 구현

* design(FileUploader): ring을 outline으로 변경

* refactor: auth 하위 features를 auth/ui로 이동

* refactor: signup을 auth에서 분리

* feature: 공용 체크박스 컴포넌트 구현

* feature: 온보딩 폼에 약관 동의 추가

* fix: 온보딩 컴포넌트 import 경로 수정

* design: 존재하는 aside 영역만 표시하도록 수정

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* fix: 아바타가 이미지 소스를 받을 수 있도록 수정

* feature: 멤버 초대 모조 데이터 추가

* feature: 멤버 초대 모달 내 멤버 행 컴포넌트 구현

* feature: 멤버 초대 모달 구현

* feature: 멤버 초대 모달 연결

* design: 멤버 초대 모달 내 스크롤 영역 조정

* refactor: 저장되지 않은 변경 가드 로직을 공통으로 분리

* feature: 멤버 수정 중 페이지 이탈 시 확인 모달 연결

* refactor: 코로그 설정 내 모든 저장되지 않은 변경을 일괄 처리할 수 있도록 개선

* fix(RootLayout): 사용자 정보 캐시 초기화 구독 컴포넌트 import 위치 수정

* feature: 코로그 설정 페이지에 셸 레이아웃 적용

* design: 멤버 목록 표 bg 및 border 설정 변경

* test: 누락된 코로그 설정 페이지 테스트 추가

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* [Feature] #146 팀 생성 페이지 구현 (#147)

* fix: left 요소가 없을 때에도 gap이 적용되는 문제 해결

* chore: 팀 커버 이미지 플레이스홀더 에셋 추가

* feature: 팀 생성 폼 구현

* feature: 팀 생성 페이지 구현

* style: 불필요한 공백 제거

* feature: 팀 생성 버튼을 링크로 변경

* test: 팀 생성 페이지 통합 테스트 추가

* fix: 팀 생성 페이지에서 취소 시 이전 페이지로 리다이렉트하도록 변경

* chore: tailwind 속성 오타 수정

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* [Feature] #81 피드 페이지 UI와 무한 스크롤 구현 (#143)

* feature: 피드 게시글 표시 모델과 날짜 포맷터 정의

* feature: 피드 카드와 이미지 fallback UI 구현

* feature: 목 데이터 기반 피드 페이지 조회 상태 구성

* feature: 피드 무한 스크롤과 요청 상태 UI 구현

* feature: 피드 위젯을 조립해 feeds 페이지 구현

* feature: 루트 진입 경로를 피드로 연결

* feature: 피드 진입 시 콘텐츠로 자연스럽게 이동

* refactor: 피드 Colog 식별자 명명 통일

* refactor: 피드 작성자 프로필 표현을 UserAvatar로 통일

* [Chore] #120 SVGR 기반 아이콘 사용 환경 설정 (#149)

* build: SVG 아이콘의 컴포넌트 사용 환경 제공

Next.js의 Turbopack과 Webpack, Vitest가 동일한 SVG import 계약을 사용하도록 구성한다.

Constraint: 개발 서버와 프로덕션 빌드 양쪽에서 SVG 컴포넌트 import가 동작해야 함
Rejected: SVG 전용 React 래퍼 유지 | 아이콘마다 반복되는 수동 마크업과 컴포넌트가 필요함
Confidence: high
Scope-risk: moderate
Directive: SVG를 URL로 사용할 때는 ?url import를 명시적으로 사용
Tested: pnpm check, Turbopack production build, Webpack production build, frozen lockfile install

* refactor: 사이드바 아이콘 표현 방식 통일

문자 기반 임시 아이콘을 제거하고 currentColor를 사용하는 SVG 컴포넌트로 교체한다.

Constraint: 기존 사이드바의 크기와 디자인 토큰을 유지해야 함
Rejected: 범용 아이콘 레지스트리 추가 | 현재 사용 범위에 비해 추상화 비용이 큼
Confidence: high
Scope-risk: narrow
Tested: pnpm check, 사이드바 component test, visual verification

* style: 기존 코드의 불필요한 빈 줄 정리

검증 도구가 요구하는 포맷을 맞추기 위해 동작에 영향을 주지 않는 공백만 정리한다.

Scope-risk: narrow
Tested: pnpm check

* [Feature] #144 게시글 상세 뷰 구현 (#148)

* feature: BlockNote 게시글 콘텐츠의 서버 렌더링 기반 마련

게시글 상세 화면은 작성 시 저장한 BlockNote 블록을 동일한 스키마로 받아 서버에서 HTML로 변환한다. 렌더러와 도메인 계약, 필요한 패키지 및 Next 외부 패키지 설정을 한 변경 단위로 묶었다.

Constraint: 실제 게시글 API 연동은 후속 작업으로 분리한다
Rejected: 클라이언트 에디터로 읽기 화면을 렌더링 | 읽기 전용 화면에 불필요한 클라이언트 경계를 만든다
Directive: API 연동 시 content 필드는 BlockNote Block 배열 계약을 유지해야 한다
Tested: 대상 파일 Prettier 및 ESLint, staged diff check
Not-tested: develop 기준 기존 포맷 및 인증 import 오류로 전체 pnpm check 미실행

* feature: 게시글 상세 정보와 본문의 도메인 표현 구성

게시글 제목과 작성자, 발행일, 대표 이미지, CoLog 요약 및 본문 HTML 출력을 게시글 도메인 UI로 분리했다. 각 컴포넌트는 화면 조립이나 목차 행동을 알지 않고 게시글 데이터 표현에만 집중한다.

Constraint: 실제 게시글 데이터 조회는 후속 API 작업에서 연결한다
Rejected: 상세 위젯 한 파일에 모든 마크업 배치 | 도메인 표현과 화면 조립의 변경 이유가 섞인다
Directive: 상세 도메인 UI에는 목차 상태나 route 조회 책임을 추가하지 않는다
Tested: 대상 파일 Prettier 및 ESLint, staged diff check
Not-tested: develop 기준 기존 포맷 및 인증 import 오류로 전체 pnpm check 미실행

* feature: 게시글 구조에 맞춘 목차 탐색 흐름 제공

Swagger 계약을 대신하는 상세 목 데이터와 BlockNote h1부터 h3까지의 heading 추출, 현재 위치 추적 및 부드러운 앵커 이동을 하나의 상세 탐색 기능으로 구성했다.

Constraint: 실제 게시글 API 연결 전까지 Swagger 계약 기반 목 데이터를 사용한다
Rejected: 렌더링된 HTML을 다시 파싱해 목차 생성 | 원본 BlockNote 구조와 ID 정보를 중복 해석한다
Directive: API 연동 후에도 목차 입력은 렌더링 HTML이 아니라 BlockNote Block 배열을 사용한다
Tested: 대상 파일 Prettier 및 ESLint, staged diff check
Not-tested: 실제 API 응답 및 브라우저 E2E는 후속 조립 커밋에서 검증

* feature: 게시글 상세 화면의 공개 경로 연결

게시글 도메인 UI와 목차 기능을 읽기 화면으로 조립하고 /posts/[postId] 경로에서 목 데이터를 제공한다. 존재하지 않는 게시글에는 피드 복귀가 가능한 404 화면을 제공하며 BlockNote 본문 스타일을 route 범위에서 적용한다.

Constraint: 실제 상세 API 연결 전까지 route는 동기 목 데이터 조회를 사용한다
Rejected: page 컴포넌트에 상세 마크업 직접 구현 | route와 화면 조립 책임이 결합된다
Directive: API 연동 시 page의 데이터 조회만 교체하고 PostDetail 조립 계약을 유지한다
Tested: 대상 파일 Prettier 및 ESLint, staged diff check
Not-tested: 게시글 상세 Playwright 시나리오는 후속 테스트 작업에서 검증

* fix: develop 병합에서 누락된 BlockNote 서버 외부화 설정 복구

* chore: 각 태그 별 개행 간격 보정

* chore: 각 태그 별 개행 간격 보정 (헤딩 태그 유동적인 개행 간격 설정)

* feature: 전역에서 접근 가능한 공통 푸터 제공 (#69)

브랜드·정책·연락처 정보를 모든 페이지에서 일관되게 제공하도록 정적 Footer를 루트 레이아웃에 연결한다. 재사용 가능한 브랜드와 contact SVG는 public 자산으로 관리하고, 좁은 화면과 키보드 탐색을 회귀 테스트로 보호한다.

Constraint: 실제 정책 페이지와 연락 채널 URL은 후속 작업에서 연결
Rejected: 인라인 SVG 유지 | 다른 화면에서 동일 자산을 재사용하기 어려움
Confidence: high
Scope-risk: moderate
Directive: 실제 채널이 확정되면 Footer의 mock URL만 교체
Tested: format, lint, typecheck, unit 10개, component 11개, build, home E2E 3개

* [Feature] #139 팀 설정 프로필 페이지 구현 (#150)

* refactor: 코로그 요약과 프로필 타입을 단일 정보 모델로 통합

* feature: 코로그 프로필 설정값 검증과 정규화 정책 추가

* refactor: GitHub 로그인 아이콘을 공용 SVG 자산으로 통합

* feature: 코로그 프로필 이미지와 정보 입력 UI 구현

* feature: 팀 설정에 프로필 저장과 이탈 방지 흐름 연결

* test: 팀 프로필 설정의 저장과 이탈 방지 흐름 검증

* fix: 게시글의 긴 제목이 카드 내부에서 줄바꿈되도록 수정

* [Feature] #141 팀 설정 위험 영역 페이지 구현 (#151)

* feature: 팀 설정에서 영구 삭제 전 위험과 결과를 확인

* refactor: 팀 설정 기능을 동등한 섹션 계층으로 정렬

* feature: 클릭 가능한 공통 요소에 포인터 커서 제공

* refactor: SVG 아이콘을 소유 영역으로 이동해 컴포넌트 사용 방식 통일

* refactor: 워크스페이스에서 프로필 저장 상태 책임 분리

* refactor: 활성 설정 탭만 렌더링해 이탈 상태 관리 단순화

* [Feature] #145 팀 홈 페이지 구현 (#153)

* feature(PageShell): header가 전체 크기를 차지하는 레이아웃 추가

* chore: 깃허브/메일/링크 아이콘을 shared로 이동

* chore: 미트볼 아이콘 추가

* chore: 코로그 홈 mock 데이터 추가

* feature: 코로그 홈 히어로 컴포넌트 구현

* feature: 코로그 홈 멤버 목록 컴포넌트 구현

* design: 히어로 상단 더보기 버튼 반응형 위치 조정

* feature: 코로그 홈 게시글 목록 컴포넌트 구현

* test: 코로그 홈 내 컴포넌트 테스트 추가

* feature: 코로그 홈 페이지 구현

* design: 코로그 홈 반응형 추가

* design: 코로그 설명 및 코로그 게시글 캡션 폰트 사이즈 조정

* chore: 코로그 홈 페이지 진입 로직 주석 추가

* design: 코로그 홈 히어로 깃허브/메일 아이콘 사이 간격 조정

* refactor: 기존 도메인 model을 사용하도록 수정

* design: 코로그 소개 글 max-width 설정

* design(PageShell): main 섹션이 항상 중앙 배치되도록 수정

* design(CologMemberList): 유저 아바타 크기 조정

* [Refactor] #134 User Entity VO 고도화 (#158)

* feature: Email VO 추가

* feature: Nickname VO 추가

* feature: Slug VO 추가

* refactor: UserEntity VO 포장 적용

* refactor: Email은 VO이므로 null에 대한 방어 로직 적용

* refactor: Test Code Builder 수정

* feat: slug는 소문자로 저장한다는 정책 반영

* [Feature] #135 운영 서버 ci/cd 배포 파이프라인 추가 (#152)

* ci: 운영 서버 배포 파이프라인 추가

* ci: 운영 이미지 태그의 버전 변수 관리

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feature: 공개 팀 프로필 조회 경로 통합 (#165)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Chore] #155 공통 레이아웃 및 피드 UI 정리 (#157)

* feature: 브라우저 탭 파비콘 적용

* refactor: 루트 피드 리다이렉트를 설정으로 이전

* style: 게시글 상세 헤딩 하단 여백 확대

* refactor: 공통 Shell 합성 구조로 페이지 레이아웃 정리

* style: 게시글 피드 카드 가독성 조정

* chore: 게시글 상세 mock data 수정

* chore: tailwind css 속성값에 맞게 변경

* chore: sidebar/footer shell 제거

* chore: footer가 있는 페이지의 하단 여백을 공용 layout으로 추출

* [Feature] #159 게시글 상세조회 전용 단일 API 추가 (#163)

* feat: slug로 Blog 조회 메서드 추가

* feat: 특정 Post 조회시 연관관계를 함께 조회하는 메서드 추가

* feat: 특정 블로그의 전체 게시글 수 count 조회 메서드 추가

* feature: 해당 블로그의 팀원수를 count하는 집계 메서드 추가

* feature: 게시물 읽기 검증 및 소속 판단 로직 구현

- 테스트 코드추가

* feature: 게시글 소속에 따른 유동적인 응답을 제공하는 Dto 추가

* feature: 블로그의 특정 게시물을 상세 조회하는 통합 API 구현

* refactor: 기존 게시글 상세 조회 API를 V2로 마이그레이션

* feature: rilog, colog에 따른 응답 형식 변환을 Swagger 명세로 작성

* refactor: Controller 네이밍 & 어노테이션 순서 수정

* refactor: Colog 소속은 getColog를 사용하도록 변경

* refactor: 기존 PostDetailResponse
dV2를 PostDetailResponse로 네이밍 이전

* refactor: 도메인 용어를 affiliation에서 owner로 변경

* feature: 마지막 개행 추가

* feature: PostDetailResponse에 잘못된 블로그가 저장되지 않도록 방어하는 테스트 코드 추가

* refactor: jsonPath 수정

* [Feature] #156 팀 생성 페이지 로직 추가 (#160)

* feature: 팀 생성 구조 및 플로우를 팀 프로필 설정과 통일

* refactor: 코로그 생성 및 프로필 수정 공통 폼을 도메인 레이어로 분리

* chore: are로 시작하던 변수명을 is로 수정

* fix(CologCreateForm): 병합 충돌 과정에서 망가진 코드 복구

* fix(CologHomeHero): 테스트 용으로 남아있던 프로필 소개 repeat 제거

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>
Co-authored-by: JetProc <soonjae8297@gmail.com>

* [Refactor] #172 affiliation에서 owner로 수정 (#173)

* [Feature] #161 모바일 반응형 대응 (#162)

* feature: 모바일용 하단 내비게이션바 추가

* design: 모바일 뷰에서도 게시글 상세 본문 텍스트를 16px로 통일

* design: 에디터 및 게시글 상세 list 요소 상하에 여백 추가

* feature: 모바일에서 발행 버튼을 하단으로 이동

* design: 푸터 모바일 반응형 추가

* refactor: 코로그 게시글에서도 PostFeedImage를 사용하도록 수정

* design: 코로그 홈 게시글 리스트 제목 폰트 사이즈 조정

* feature: 모바일용 date format 추가

* feature: 코로그 게시글 목록 닉네임에 truncate 추가

* design(CologPostList): 닉네임 우측 여백 제거

* design(Footer): 모바일 뷰에서 약관 제거

* feature: 모바일 뷰에서 하단 내비게이션바 대신 상단 헤더 사용

* design: 모바일 헤더 프로필에 border 추가

* fix: 사이드바 ui에서 로그아웃이 위로 옮겨짐 현상의 스파이 적출

* fix: footer 좌측에 여백이 중복으로 적용되던 문제 수정

* chore: format-published-date-mobile 파일을 기존 파일에 병합 및 모바일 여부를 인자로 받을 수 있도록 리팩토링

---------

Co-authored-by: JetProc <soonjae8297@gmail.com>

* [Feature] #170 온보딩 폼 로직 연결 (#174)

* feature: 온보딩 폼 로직 추가

* chore(get-service-url-label): 네이밍 규칙에 맞지 않는 파일명 수정

* test(BlockNoteEditor): placeholder 관련 테스트 수정

* chore: navigate 라우터에 replace('/') 속성 추가

* feature: 온보딩 입력 유효성 검사 로직 추가

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>
Co-authored-by: JetProc <soonjae8297@gmail.com>

* [Refactor] #166 공개 블로그 게시글 목록 조회 제공 (#169)

* feature: 공개 블로그 게시글 목록 조회 제공

* fix: 공개 블로그 경로의 골뱅이 표기 복원

* fix: 공개 블로그 조회의 삭제 블로그 제외

공개 블로그 게시글 목록 조회에서 삭제된 블로그를 제외하도록 slug 조회 계약을 변경하고 공개 프로필 조회 진입점을 BlogController와 BlogService로 이동한다.

Tested: backend ./gradlew test

* refactor: 게시글 피드의 블로그 응답 이름 통일

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Fix] #171 코로그 설정 페이지 중첩 스크롤 문제 해결 (#175)

* feature: 코로그 프로필 설정 중첩 스크롤 제거

* refactor: 섹션이 page shell을 관리하도록 변경

* [Refactor] #167 라우트 경로 정리 (#178)

* refactor: App Router 페이지를 통일된 URL 구조로 재배치

* refactor: 내부 링크를 @slug 기반 라우트 계약으로 통일

* refactor: 코로그 설정 탭을 URL query와 동기화

* [Feature] #176 전체 피드 게시물 목록 조회 api 함수 구현 (#181)

* docs(frontend/AGENTS): api 아키텍처 관련 에이전트 지침 추가

* feature: 전체 피드 목록 조회 api 함수 구현

* config(next.config): mock 데이터 수용을 위해 remotePattern 전체 허용

* refactor: ssr prefetch에도 대응할 수 있도록 option/prefetch/query를 모아 관리하는 구조로 개편

* feature: 전체 피드 목록 조회 api 연동

* refactor: src/api 구조 개선

* chore: read-full-feed-posts.md task 파일 삭제

* chore: refactor-query-mutation task 파일 삭제

* refactor: 함수명은 축약하지 않은 상태로 복구

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* fix: 라우터 슬러그에 undefined 되던 버그 수정 (#185)

* [Refactor] #177 blogid를 slug로 통일 (#180)

* refactor: 멤버초대 검증 로직을 BlogMember 내부로 응집화

* refactor: cologId 대신 slug로 통일

* refactor: cologId 대신 slug로 멤버 초대 API 수정

* refactor: 게시글 발행 시 blogId 대신 slug를 사용하도록 통일

* refactor: BlogMember는 blogId로 조회하도록 개선

* refactor: 탈퇴된 Blog는 조회하지 않도록 JPA 쿼리 메서드에 반영

* [Feature]#186 게시글 상세 조회 api 구현 (#188)

* refactor: 피드 API 모듈을 shared 영역으로 이동

* feature: 게시글 상세 조회 API 연동

* refactor: 응답 필드명과 게시글 소유자 구조 통일 (#182)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Refactor] #191 게시글 응답의 작성자 이름 필드명 통일 (#193)

* refactor: 게시글 응답의 작성자 이름 필드명 통일

* test: 전체 피드의 팀 소유자 응답 계약 보강

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Fix]  #189 피드 응답 필드명/소유자 구조 통일 반영 (#190)

* feature: 바뀐 백엔드 응답 형식에 맞게 반영

* fix: 블로그 상세 조회 API 타입 통일 및 author 필드명 호환성 처리

* [Feature] #187 공통 예외처리 로직 구현 (#194)

* chore: 에러 코드 상수화

* style: import문 정렬 수정

* chore: 서버 에러 응답 타입 정의

* feature: 서버 에러 정규화 로직 구현

* test: 테스트 내 401 에러 응답 공통 모듈로 분리

* feature: 블록노트 content 타입을 더 구체적으로 정의

* feature: 에러 정규화 로직을 가진 apiRequest/apiClient 구현 및 적용

* feature: 에러 정규화 로직을 가진 apiRequest/apiClient 구현 및 적용

* fix: 누락된 토큰 재발급 실패 이벤트 발행 로직 연결

* refactor: ky instance 생성 함수명 및 파일명 변경

* fix: requires auth 관련 로직 제거

* refactor: 오류 분류 세분화

* feature: Tanstack Query 전역 재시도 정책 설정

* feature: 폼 필드 에러 추출 함수 구현

* test: 요청 재시도 관련 테스트 추가

* refactor: 응답 필드명과 게시글 소유자 구조 통일 (#182)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* fix: kind/category 혼용되는 용어를 type/kind로 정리

* fix: 백엔드 Author 속성 코드 롤백

* fix: 백엔드 Author 속성 코드 롤백

---------

Co-authored-by: 진리로 <riro12@naver.com>

* [Refactor] #192 Blog Entity의 String slug를 Slug VO로 적용 (#195)

* refactor: Blog Entity의 String slug를 Slug VO로 적용

* refactor: Slug를 Blog 패키지로 이동한다.

* refactor: slug로 Blog 조회 이후는 id를 사용하도록 개선

* fix: Feed 조회 시, Slug VO도입으로 인한 JPQL 파싱 문제 해결 (#199)

* chore: backend-prod 라벨 추가 (#202)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Refactor] #196 프론트엔드 모델 구조 리팩터링 (#203)

* chore: VSCode 작업 환경 설정 업데이트

* refactor: 도메인 계층 모델 구조 단일화 및 통합

* refactor: 코로그 관련 피처 model 및 lib 책임 분리

* refactor: 게시글 상세 피처 구조 개선 및 ID 매핑 수정

* refactor: 게시글 피드 피처 model 및 lib 책임 분리

* refactor: 게시글 작성 피처 model 및 lib 책임 분리

* refactor: 회원가입 피처 model 및 lib 책임 분리

* refactor: 게시글 피드 카드 및 관련 UI 컴포넌트를 post-feed 피처로 이전

* [Chore] #197 프론트엔드 배포 세팅 (#200)

* chore: pm2 스크립트 추가

* chore: CD 배포 파이프라인 구축 및 self-hosted 러너 연동

* chore: 워크플로우 수동 테스트 수단 추가

* chore: 워크플로우 수동 실행 시 배포 스크립트까지 실행되도록 수정

* chore: 임시로 PR 업데이트 시에도 배포 스크립트가 돌아가도록 설정

* chore: TARGET_DIR 경로 수정

* chore: NVM_DIR 경로 수정

* chore: node 설치 스크립트 추가

* chore: 환경변수 동적 할당 방식으로 변경

* chore: 환경변수를 절대경로로 변경

* chore: 전역 설치된 pnpm 및 pm2를 사용하도록 스크립트 수정

* fix: nvm 로드하는 코드 추가

* fix: nvm 파일 경로 확인되는지 디버깅

* fix: node와 pnpm 조합으로 변경

* fix: ssh 접속 환경과 동기화하는 코드 추가

* chore: NVM 경로를 환경변수 기반으로 변경

* chore: corepack 기반으로 pnpm 실행하도록 수정

* chore: 디버깅 코드 추가

* fix: nvm 자체 설치 로직 추가

* fix: pm2 자동 종료 정책 예외 처리

* chore: 초기 배포 스크립트로 복구

* chore: npm 경로 설정

* chore: env secret 이름 변경

* fix: 배포 환경 무한 재렌더 문제 해결

* chore: 요청 응답 공통 로깅 추가

* fix: 남아있는 배포 환경 무한 재렌더 문제 해결

* chore: 배포 스크립트를 프로덕션으로 전환

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* [Feature] #205 파일 업로드 api 구현 (#206)

* feat: 파일 업로드를 위한 Presigned URL API 및 클라이언트 구현

* refactor: Content-Type 방어 로직 추가 및 Presigned 네이밍 일관성 정렬

* refactor: S3 업로드 시 kyInstance 재활용 및 외부 URL 인증 토큰 주입 방어

* refactor: 토큰 만료 응답 판별 로직 캡슐화 및 타입 안정성 개선

---------

Co-authored-by: 송아영 <azerosong@gmail.com>

* [Feature] #207 getpublicprofile api 프론트엔드 연동 (#208)

* feature: 공개 블로그 프로필 조회 API 및 타입 정의

공개 블로그 프로필 정보를 조회하는 백엔드 엔드포인트(/v1/blogs/@{slug}) 호출 함수와 응답 인터페이스를 추가한다.

Tested: readBlogPublicProfile 단위 테스트 통과

* feature: 공개 블로그 프로필 React Query 훅 및 옵션 추가

공개 블로그 프로필 조회를 위한 query key, query options, useQuery 훅 및 prefetch 함수를 추가한다.

Tested: vitest 단위 테스트 및 타입 검사 통과

* feature: 블로그 홈 프로필 정보 API 연동

기존의 목 데이터를 제거하고 실제 getPublicProfile API를 호출하여 블로그 홈의 헤더 프로필 정보를 렌더링한다.
응답 데이터를 화면 컴포넌트 규격에 맞게 변환하는 매핑 유틸 함수를 추가한다.

Tested: mapCologProfileResponse 단위 테스트 통과

* [Feature] #204 서비스 통합테스트 유틸 ServiceSupport 추가 (#220)

* build: 테스트 DB h2 의존성 추가

* feature: 테스트 격리를 위한 DatabaseCleaner 추가

* feature: DatabaseCleanerConfiguration 설정 추가

* feature: 서비스 통합테스트 유틸 ServiceSupport 추가

* feature: application-test.yaml 추가

* chore: 사용하지 않는 주석 제거

* feature: Slug, Nickname 중복검사 서비스 통합테스트 작성

* refactor: 개행 두번을 하나로 삭제

* refactor: 잘못된 서비스 호출 오류 수정

* [Feature] #210 로그아웃 API 제공 (#216)

* feature: 로그아웃 API 제공

* refactor: Refresh Token 쿠키 주입 방식 정리

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feature: @LoingUserId, @LoginUserSulg 어노테이션 스웨거 무시 설정 추가 (#222)

* [Feature] #217 내 블로그 목록 조회 api 연동 (#223)

* feature: 내 블로그 목록 요약 조회 api 함수 구현

* test: 테스트용 QueryClient 구현

* feature: 사이드바 팀 내비게이션에 내 팀 목록 요약 조회 api 연동

* [Feature] #225 토큰 기반 유저정보 조회 API 추가 (#228)

* refactor: 패키지 유지 용도의 .gitkeep 삭제

* feature: 유저 정보 조회 비즈니스 로직 추가 (by UserId)

* feature: 토큰 기반 유저 정보 조회 API 추가

* refactor: 닉네임, 슬러그 중복 검사 코드 위치 수정

* test: 유저 정보 조회 서비스통합테스트 코드 추가

* feature: 누락된 UserApiSpec 추가

* [Build] #231 deploy job 셀프호스트 라벨 추가 (#232)

* [Feature] #227 GitHub OAuth 프론트 콜백 흐름 제공 (#229)

* feature: GitHub OAuth 프론트 콜백 흐름 제공

* feature: 내부 경로 검증 추가

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #211 코로그 홈 게시글 피드 조회 api 연동 (#226)

* feature: 공개 블로그 게시글 목록 조회 API 및 쿼리 구현

* feature: 코로그 홈 게시글 목록 API 연동 및 무한 스크롤 적용

* [Refactor] #211 colog-home 위젯 내부 UI를 features 계층으로 분리

- colog-home 위젯의 CologHomeHero, CologPostList를 위젯의 Public UI(조합 레이어)로 격상
- 기존 colog-home/ui에 혼재되어 있던 기능별 표현 로직을 features 하위(colog-profile, colog-members, colog-post-feed)로 추출
- CologPostList에 스켈레톤 UI(CologPostFeedSkeleton) 적용 및 관련 훅 이동
- page.tsx 내의 불필요한 데이터 fetch 및 매퍼 로직을 제거하고 각 위젯/기능이 스스로 데이터를 책임지도록 개선

* [Feature] #219 멤버 추가 시 유저 정보 조회 api 연동 (#230)

* feature: 슬러그 기반 유저 정보 조회 api 함수 구현

* feature: 멤버 초대 모달 유저 정보 조회 api 함수 연동

* refactor: 멤버 초대 시 유저 조회 로직을 mutation으로 리팩터링

* [Feature] #224 토큰 기반 유저 정보 조회 api 연동 (#234)

* style: 불필요한 공백 제거

* feature: 토큰 기반 유저 정보 조회 api 함수 구현

* feature: 유저 관련 쿼리에 인가 쿼리 키 추가

* feature: 마스터토큰 기반 임시 token provider 구현

* feature: 전역 로그인 상태를 context로 관리

* feature: 전역 인가 상태를 기반으로 분기 로직 수정

* feature: 로그아웃/토큰 만료 시 인증 상태 초기화 로직 추가

* feature: 토큰이 없는 경우 토큰 기반 api가 호출되지 않도록 방어

* feature: map 변환 함수 추가

* [Feature] #213 팀 블로그 생성 api 연동 (#235)

* refactor(colog): 이메일 필드 완전 제거 및 잔재 정리

* [Feature] #213 팀 블로그 생성 API 및 타입 추가

* [Feature] #213 팀 블로그 생성 useMutation 훅 추가

* [Feature] #213 팀 블로그 생성 폼 실제 API 연동 및 모의 데이터 제거

* [Test] #213 팀 블로그 생성 폼 연동 테스트 업데이트

* [Hotfix] #236 멤버 모의 데이터 누락 복구 (#237)

* [Feature] #209 깃허브 소셜 로그인 구현 (#238)

* feature: 깃허브 소셜 로그인 구현

* refactor: auth api 경로를 shared 하위로 이동

* feature: 소셜 로그인 뒤 헤더로부터 토큰을 추출하는 로직 추가

* [Feature] #240 환경변수 추가 설정 (#243)

* refactor: RefreshToken SameSite Option 환경변수로 분리

* feature: AWS_S3_DIRECTORY application.yaml에 환경변수 추가

* [Feature] #215 팀…
Wlsflfh added a commit that referenced this pull request Aug 21, 2026
* chore: 저장소 공통 제외 규칙 설정 (#6)

* docs: 프로젝트 하네스 기본 기준 정리 (#8)

* chore: 파트별 변경의 리뷰 요청 자동화 (#12)

* [Chore] #9 프론트엔드 초기 세팅 (#10)

* chore: 프론트엔드 공통 실행·검증 환경 구성

* docs: 프론트엔드 개발 및 협업 기준 문서화

* chore: 미사용 코드와 빈 줄 검사 강화

* docs: 작업 범위별 브랜치 명명 기준 통일 (#17)

* [Chore] #14 프론트엔드 디자인 토큰 구성 (#18)

* design: 공통 타이포그래피 토큰 정의

* design: 색상과 버튼 상태 토큰 정의

* design: 전역 스타일의 의미 기반 토큰 연결

* chore: Tailwind CSS 편집기 진단 설정 공유

* design: 버튼 토큰의 유틸리티 연동

버튼의 상태·색상·크기 토큰을 Tailwind theme namespace로 옮겨 공용 컴포넌트에서 이름 있는 유틸리티로 조합할 수 있게 한다.

Constraint: Tailwind CSS v4 theme namespace를 통해 유틸리티를 생성해야 한다
Rejected: :root 버튼 변수 유지 | 컴포넌트에서 일관된 유틸리티 조합 불가
Confidence: high
Scope-risk: narrow
Directive: 버튼 상태와 foreground 토큰은 Button 컴포넌트 variant 조합에서 사용한다
Tested: Prettier, ESLint, TypeScript, Vitest, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 실제 Button 컴포넌트의 키보드 상호작용

* design: focus ring 토큰의 의미 명확화

키보드 focus에 사용하는 색상임을 이름에 드러내고 Tailwind ring 유틸리티와 동일한 의미로 연결한다. 버튼 토큰 변경으로 참조가 사라진 radius mapping도 함께 제거한다.

Constraint: 모든 인터랙션 요소가 공통 focus 색상을 사용해야 한다
Rejected: --focus 이름 유지 | 색상 용도와 적용 대상이 모호함
Confidence: high
Scope-risk: narrow
Directive: 신규 interactive component는 버튼 전용 별칭 대신 ring-focus-ring을 사용한다
Tested: Prettier, ESLint, TypeScript, Vitest, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 실제 브라우저 keyboard focus 시각 점검

* design: 숫자형 타이포그래피 스케일 정리

의미가 겹치는 본문·라벨 토큰을 크기 중심의 숫자 스케일로 통합해 역할별 행간과 자간을 컴포넌트에서 조합할 수 있게 한다.

Constraint: 현재 Figma에서 확인된 14px, 16px, 20px, 64px 위계를 유지해야 한다
Rejected: 역할별 글자 크기 토큰 유지 | 같은 크기의 중복 선언과 확장 기준이 불명확함
Confidence: high
Scope-risk: narrow
Directive: 새 글자 크기는 실제 디자인 사용처가 확인될 때만 숫자 스케일에 추가한다
Tested: Prettier, ESLint, TypeScript, Vitest, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 미구현 화면에서의 시각적 위계 검토

* design: 역할 기반 타이포그래피 토큰 체계 확장

기존 숫자형 글자 크기 토큰을 역할 기반의 caption, label, body, title, heading, display 체계로 재구성해 화면 코드가 의도를 드러내는 유틸리티를 사용할 수 있게 한다.

Constraint: Tailwind CSS v4 text namespace와 숫자형 단계 명명 규칙을 유지해야 한다
Rejected: 기존 숫자형 scale 유지 | 동일한 크기의 역할과 사용 맥락을 표현할 수 없음
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: 신규 타이포그래피는 기존 역할을 재사용하고, 실제 사용처가 확인될 때만 단계를 추가한다
Tested: Prettier, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 구현 예정 화면에서의 시각적 위계 점검

* design: 홈 화면에 의미 기반 타이포그래피 적용

홈 화면의 기본 Tailwind 글자 크기를 역할 기반 토큰으로 바꿔 디자인 시스템이 정의한 행간과 자간을 일관되게 적용한다.

Constraint: 페이지 제목과 본문은 앞선 타이포그래피 토큰 커밋을 소비해야 한다
Rejected: text-4xl과 text-base 유지 | 화면마다 기본 scale과 의미 기반 토큰이 혼재함
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: 신규 화면은 기본 Tailwind font-size 대신 의미 기반 text 토큰을 우선 사용한다
Tested: Prettier, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 브라우저별 실제 렌더링의 시각적 위계 점검

* [Chore] #15 ky config/client 설정 (#23)

* chore: config 폴더 제거

* chore: api client 테스트를 위한 의존성 설치

* feature: 토큰 재발급 로직을 포함하는 api client 모듈 구현

* feature: 토큰 재발급 실패 시 유저 데이터 초기화를 위한 구독발행 모델 구축

* style: import 순서 정렬

* chore: vitest config 내 alias 대상 상대경로 수정

* refactor: 토큰 재발급 실패 시 초기화 필요한 쿼리의 키를 그루핑

* feature: 토큰 재발급 실패 시 쿼리 초기화를 트리거하는 훅 컴포넌트 구현

* feature: QueryProvider 구현 및 적용

* chore(apiClient): tokenProvider 관련 TODO 추가

* chore(playwright.config): 대상 디렉터리 경로 수정

* chore: .env.example 파일 추가

* docs: 작업 범위별 브랜치 명명 기준 통일 (#17)

* [Chore] #14 프론트엔드 디자인 토큰 구성 (#18)

* design: 공통 타이포그래피 토큰 정의

* design: 색상과 버튼 상태 토큰 정의

* design: 전역 스타일의 의미 기반 토큰 연결

* chore: Tailwind CSS 편집기 진단 설정 공유

* design: 버튼 토큰의 유틸리티 연동

버튼의 상태·색상·크기 토큰을 Tailwind theme namespace로 옮겨 공용 컴포넌트에서 이름 있는 유틸리티로 조합할 수 있게 한다.

Constraint: Tailwind CSS v4 theme namespace를 통해 유틸리티를 생성해야 한다
Rejected: :root 버튼 변수 유지 | 컴포넌트에서 일관된 유틸리티 조합 불가
Confidence: high
Scope-risk: narrow
Directive: 버튼 상태와 foreground 토큰은 Button 컴포넌트 variant 조합에서 사용한다
Tested: Prettier, ESLint, TypeScript, Vitest, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 실제 Button 컴포넌트의 키보드 상호작용

* design: focus ring 토큰의 의미 명확화

키보드 focus에 사용하는 색상임을 이름에 드러내고 Tailwind ring 유틸리티와 동일한 의미로 연결한다. 버튼 토큰 변경으로 참조가 사라진 radius mapping도 함께 제거한다.

Constraint: 모든 인터랙션 요소가 공통 focus 색상을 사용해야 한다
Rejected: --focus 이름 유지 | 색상 용도와 적용 대상이 모호함
Confidence: high
Scope-risk: narrow
Directive: 신규 interactive component는 버튼 전용 별칭 대신 ring-focus-ring을 사용한다
Tested: Prettier, ESLint, TypeScript, Vitest, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 실제 브라우저 keyboard focus 시각 점검

* design: 숫자형 타이포그래피 스케일 정리

의미가 겹치는 본문·라벨 토큰을 크기 중심의 숫자 스케일로 통합해 역할별 행간과 자간을 컴포넌트에서 조합할 수 있게 한다.

Constraint: 현재 Figma에서 확인된 14px, 16px, 20px, 64px 위계를 유지해야 한다
Rejected: 역할별 글자 크기 토큰 유지 | 같은 크기의 중복 선언과 확장 기준이 불명확함
Confidence: high
Scope-risk: narrow
Directive: 새 글자 크기는 실제 디자인 사용처가 확인될 때만 숫자 스케일에 추가한다
Tested: Prettier, ESLint, TypeScript, Vitest, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 미구현 화면에서의 시각적 위계 검토

* design: 역할 기반 타이포그래피 토큰 체계 확장

기존 숫자형 글자 크기 토큰을 역할 기반의 caption, label, body, title, heading, display 체계로 재구성해 화면 코드가 의도를 드러내는 유틸리티를 사용할 수 있게 한다.

Constraint: Tailwind CSS v4 text namespace와 숫자형 단계 명명 규칙을 유지해야 한다
Rejected: 기존 숫자형 scale 유지 | 동일한 크기의 역할과 사용 맥락을 표현할 수 없음
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: 신규 타이포그래피는 기존 역할을 재사용하고, 실제 사용처가 확인될 때만 단계를 추가한다
Tested: Prettier, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 구현 예정 화면에서의 시각적 위계 점검

* design: 홈 화면에 의미 기반 타이포그래피 적용

홈 화면의 기본 Tailwind 글자 크기를 역할 기반 토큰으로 바꿔 디자인 시스템이 정의한 행간과 자간을 일관되게 적용한다.

Constraint: 페이지 제목과 본문은 앞선 타이포그래피 토큰 커밋을 소비해야 한다
Rejected: text-4xl과 text-base 유지 | 화면마다 기본 scale과 의미 기반 토큰이 혼재함
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: 신규 화면은 기본 Tailwind font-size 대신 의미 기반 text 토큰을 우선 사용한다
Tested: Prettier, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 브라우저별 실제 렌더링의 시각적 위계 점검

* chore(createApiClient): 토큰 재발급 분기 처리 관련 TODO 추가

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* [Feature] #20 공용 버튼 컴포넌트 추가 (#21)

* feature: 서비스 전역 버튼 인터페이스 통일

* refactor: Button 타입과 크기별 스타일을 정리

Button에서만 사용하는 props 타입을 컴포넌트 파일로 옮기고 public entry의 타입 export를 제거했다.
버튼 크기별 모서리 반경도 sm/md와 lg의 위계를 드러내도록 조정했다.

Constraint: Button 타입의 외부 소비처가 없음
Rejected: 별도 타입 파일 유지 | 단일 소비처를 위한 파일 경계가 불필요함
Confidence: high
Scope-risk: narrow
Directive: 외부 타입 소비처가 생기면 필요한 타입만 public entry로 다시 공개할 것
Tested: pnpm check (format, lint, typecheck, component tests, build)
Not-tested: E2E 브라우저 흐름

* refactor: Button 전용 토큰의 소유 위치 정리

Button만 소비하는 시맨틱 토큰을 컴포넌트 폴더로 이동하고, 전역 스타일 진입점에서 등록하도록 import 경로를 분리했다.

Constraint: Tailwind 유틸리티 생성을 위해 @theme 토큰은 전역 CSS에서 import되어야 함
Rejected: foundations 토큰 폴더 유지 | Button 컴포넌트와 토큰의 소유 관계가 분산됨
Confidence: high
Scope-risk: narrow
Directive: 다른 공용 컴포넌트 전용 토큰도 소비처가 하나면 해당 컴포넌트와 함께 관리할 것
Tested: pnpm check (format, lint, typecheck, component tests, build)
Not-tested: E2E 브라우저 흐름

* [Chore] #19 전역예외처리핸들러 초기세팅 (#24)

* chore: domain 패키지 구조 유지 (#19)

* feat: InvalidParam 추가 (#19)

- 유효하지 않은 Param을 전달하기 위함.

* feat: ErrorDetail 추가 (#19)

* feat: RilogBusinessException 추가 (#19)

- 어플리케이션 최상위 커스텀 예외

* feat: ErrorInformation 추가 (#19)

- 커스텀 예외 생성자 시그니처를 Interface로 단축

* feat: GlobalExceptionInformation 추가 (#19)

* feat: GlobalExceptionHandler 추가 (#19)

- 전역 예외처리 핸들러로 한 곳에서 예외처리 관리

* docs: exception-handling.md 추가 (#19)

- 비즈니스 예외를 일관된 API 오류 응답으로 변환하는 방법을 설명

* refactor: 메서드 네이밍 수정 (#19)

* refactor: 자바 기본 예외는 초기세팅에 포함하지 않음. (#19)

* refactor: 클래스 선언 직후, 괄호 닫기 전 개행 추가 (#19)

* [Chore] #27 BaseEntity 초기세팅 (#28)

* build: Spring Data Jpa 라이브러리 추가 (#27)

* feat: BaseEntity 추가 (#27)

* feat: JpaAuditingConfig 추가 (#27)

- JpaAuditing 설정 허용

* feat: Spring Data 관련 예외처리 등록 (#27)

* docs: BaseEntity 사용 가이드.md 추가  (#27)

* chore: 프론트엔드 타입과 모듈 경계 규칙 통일 (#29)

객체 계약은 interface를 기본으로 사용하고 모듈 경계 import만 절대 경로를 사용하도록 기존 코드와 하네스를 함께 정리한다.

Constraint: 같은 모듈 내부 상대 경로는 허용
Rejected: 모듈별 barrel 유지 | 현재 공개 API 규모 대비 관리 비용과 runtime 혼합 위험이 큼
Directive: barrel 재도입은 명시적인 public API 필요가 확인된 뒤 별도 이슈 또는 ADR로 결정
Tested: Node 24.19.0에서 pnpm check 및 Playwright E2E 통과

* [Feature] #31 로그인 사용자 식별자 초기 구현 (#32)

* feat: @LoginUserId 추가 (#31)

* feat: @LoginUserSlug 추가 (#31)

* feat: 임시 LoginUserIdArgumentResolver 추가 (#31)

- 작업 병목을 막기 위한 임시 ArgumentResolver

* feat: 임시 LoginUserSlugArgumentResolver 추가 (#31)

- 작업 병목을 막기 위한 임시 ArgumentResolver

* [Feature] #30 users 테이블 구현 (#33)

* chore: service, repository 패키지 구조 추가

* refactor: HealthController 패키지 위치 변경

* refactor: HealthController 패키지 구조 변경에 의한 수정

* feature: User 테이블 구현

* feature: OnboardingStatus 구현

* test: UserTest 구현

* refactor: Onboarding 입력 값 추가

* test: Onboarding 입력 값 추가에 의한 테스트 케이스 수정

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #34 1차 MVP Entity 초기 구현 (#39)

* refactor: 잘못된 패키지 구조 형식 제거 (#34)

* feature: test 패키지 gitignore 추가 (#34)

* refactor: User 패키지로 이동 (#34)

* refactor: HealthCheckController 패키지 이동 (#34)

* feature: user entity에 UNIQUE 제약 추가 (#34)

* feature: blog entity 추가 (#34)

* feature: post entity 추가 (#34)

* feature: BlogMember entity 추가 (#34)

* feature: local.env gitignore 추가 (#34)

* refactor: BlogMember Entity 잘못된 @table name 속성 수정  (#34)

* feature: application profile별 분리  (#34)

* refactor: author를 user로 변경 (#34)

* [Feature] #42 Swagger 추가 (#44)

* build: swagger 의존성 추가 (#42)

* build: dev, local 환경에 swagger 접속 허용 (#42)

* feature: OpenApiConfig 추가 (#42)

* [Feature] #47 예외 응답 형식 변경 (#48)

* refactor: GlobalExceptionInformation getErrorCode 응답 형식 변경

* docs: 예외 Enum 사용 방식 변경으로 docs 반영

* [Feature] #49 GitHub oauth 로그인 요청 및 callback 구현 (#56)

* refactor: 인증 보조 타입의 도메인 패키지 이동

* refactor: 인증 보조 타입의 패키지 선언 정리

* feature: GitHub OAuth 로그인 요청과 callback 검증 추가

* fix: 온보딩 slug 최초 저장과 재변경 방지

* docs: 아키텍쳐 구조 설명 추가

* fix: 파라미터 버그 수정

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #45 게시글 발행 기능 구현 (#59)

* feature: Blog Entity에 owner 추가

* feature: Post Builder 패턴 적용

* refactor: 잘못 사용된 어노테이션 수정

- LoginUserId -> LoginUserSlug

* refactor: BlogType을 도메인 용어로 수정 COLOG, RILOG

* feat: Colog인지 확인하는 도메인 로직 추가

* feat: Blog 도메인 예외 추가

* Merge branch 'develop' of https://github.com/woowacourse-teams/2026-rilog into be/feature/#45-게시글-발행-기능-구현

# Conflicts:
#	backend/src/main/java/kr/rilog/domain/auth/resolver/LoginUserSlugArgumentResolver.java

* feat: 사용자를 찾을 수 없는 예외 에러 코드 추가

* feat: UserRepository 추가

* feat: BlogRepository 추가

- 개인사용자의 블로그를 조회하는 메서드 추가

* refactor: default 생성자 문제 해결 @Autowired 적용

* feat: PostRepository 추가

* feat: PostPublishRequest 추가

* feat: PostPublishResponse 추가

* feat: PostDetail 추가

* feat: PostSaveCommand 추가

* feat: PostPublishResult 추가

* refactor: default 생성자 문제 해결

* feat: PostService 추가 및 게시글 작성 구현

- 이미지 처리는 다음 이슈에 구현

* feat: PostController 추가 및 게시글 작성 API 구현

- 이미지 처리는 다음 이슈에 구현

* feat: NoResourceException 전역 예외 처리 추가

* feat: Post 게시글 작성 단위 테스트 추가

* refactor: .gradle-codex gitignore에 추가

* refactor: NoResourceFoundException 발생 시 잘못된 예외 코드 수정

* feature: Blog 소유자인지 판단하는 도메인 로직 추가

* feature: 게시글 작성 시, 다른 개인 블로그에 글을 작성할 수 있는 엣지케이스 제거 및 테스트 코드 작성

* [Feature] #57 GitHub access token 교환 및 사용자 정보 조회 구현 (#58)

* fix: GitHub 로그인 시작 생성자 주입 대상 명확화

* feature: GitHub Access Token 교환과 사용자 조회 추가

* refactor: 소셜 로그인 provider 경계 분리

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #60 GitHub 로그인 사용자 생성과 온보딩 대기 처리 (#61)

* feature: GitHub 로그인 사용자 생성과 온보딩 대기 처리

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

* refactor: OAuth 로그인 사용자 조회 흐름과 테스트 정리

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

* fix: 생성자 충돌로 인한 정적 팩토리 메서드로 변경

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #62 전체 게시글 수 조회 API 구현 (#63)

* feature: 전체 게시글 수 조회 메서드 추가

* feature: TotalPostsCountResponse 추가

* feature: 전체 게시글 수 API 구현

* [Feature] #64 특정 게시글 상세 조회 API 구현 (#66)

* feat: hibernate Jackson 버전을 Spring Boot 4.0.x의 기본 Jackson 버전으로 명시

* feat: Post와 Author Fetch Join 메서드 추가

* feat: Post 도메인 예외 추가

* feat: 비공개 게시글 읽기 검증 로직 추가

* feat: 게시글 상세 조회 ResponseDto 추가

* feat: 게시글 상세 조회 비즈니스 로직 추가

* feat: 게시글 상세 조회 API 추가

* refactor: 잘못된 import 경로 수정

* refactor: 메서드명 readPosts에서 readPost로 변경

* refactor: Post에서 사용하지 않는 logoUrl 삭제

* fix: 메서드 시그니처 수정 누락 반영 (#71)

- logoUrl 메서드 시그니처 삭제

* feature: 자체 Access Token 발급과 검증 구현 (#67)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #68 Bearer 인증 인터셉터 구현 (#74)

* feature: Bearer 인증 인터셉터 구현

* refactor: 인증 선언과 사용자 주입 책임 분리

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feature: 역할 기반 인가 처리 구현 (#77)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feataure: 공용 텍스트 인풋 컴포넌트 구현 (#38)

* chore: placeholder 컬러 토큰 추가

* feature: 인풋 text 컴포넌트 구현

* chore: 범용 spacing 토큰 추가

* feature(Input): 아이콘/주소 prefix 등을 위해 인풋 좌측 슬롯 구현

* feature: 텍스트 영역 컴포넌트 구현

* style: css prettier 포맷 통일

* feature: left 컴포넌트를 클릭해도 input에 focus 되는 기능 추가

* feature(Textarea): 포커스 시 아웃라인 색상 지정

* test(Textarea): uncontrolled 방식의 테스트 제거

* [Feature] #72 전체 피드 게시글 목록 조회 (#79)

* feature: 전체 피드 게시글 목록 조회 메서드 구현

- 데이터 양이 많은 content 생략을 위해 Projection 사용.
- 정렬순은 하드코딩, 추후 확장성 고민해야함.

* feature: 전체피드 게시글 목록 Response 추가

- Inner Record를 사용

* feature: 전체피드 게시글 목록 조회 비즈니스 로직 추가

* feature: 전체피드 게시글 목록 조회 API 추가

* feature: 전체피드 게시글 목록 조회 API 추가

* feature: 전체피드 게시글 목록 조회 API Swagger 명세 추가

* feature: FeedService 단위 테스트 추가

* feature: 요청에 필요한 파라미터 누락 예외 상세하게 처리

* refactor: 잘못된 import 경로 수정

* [Refactor] #80 공통 응답 형식 적용 (#82)

* refactor: 공통 응답 ApiResponse 적용

- 소셜 로그인 컨트롤러는 미적용

* feature: ApiResponse 응답 적용

* refactor: 공통 응답 ApiResponse 적용

- 소셜 로그인 컨트롤러는 미적용

* feat: .gradle-user-home/ .gitignore 추가

* feature: 자체 로그인 토큰 흐름 제공 (#85)

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

Tested: git diff --check

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #84 Colog 피드에서 게시글 목록 조회 (#87)

* refactor: 전체피드 게시글 목록 조회 API에 ApiResponse 적용

* feature: 팀 피드 전체 게시글 목록 조회 메서드 추가

* feature: 팀 전체 피드 게시글 목록 응답 Dto 추가

* feature: 블로그 조회 메서드 추가

* refactor: 사용하지 않는 code 필드 제거 - ApiResponse

* feat: 팀피드 게시글 목록 조회 API 추가

* feat: 팀피드 게시글 목록 조회 비즈니스 로직 추가

* refactor: 전체 피드 게시글 목록 조회 비즈니스 로직 메서드명 수정

- 읽는다는 행위가 잘 드러나도록 read로 수정

* feature: 팀피드 게시글 조회 서비스 단위테스트코드 추가

* [Feature] #83 Refresh Token 재발급과 Rotation 처리 (#86)

* feature: Refresh Token 재발급과 Rotation 처리

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

Tested: git diff --check

* [Feature] #84 Colog 피드에서 게시글 목록 조회 (#87)

* refactor: 전체피드 게시글 목록 조회 API에 ApiResponse 적용

* feature: 팀 피드 전체 게시글 목록 조회 메서드 추가

* feature: 팀 전체 피드 게시글 목록 응답 Dto 추가

* feature: 블로그 조회 메서드 추가

* refactor: 사용하지 않는 code 필드 제거 - ApiResponse

* feat: 팀피드 게시글 목록 조회 API 추가

* feat: 팀피드 게시글 목록 조회 비즈니스 로직 추가

* refactor: 전체 피드 게시글 목록 조회 비즈니스 로직 메서드명 수정

- 읽는다는 행위가 잘 드러나도록 read로 수정

* feature: 팀피드 게시글 조회 서비스 단위테스트코드 추가

* feature: Refresh Token 재발급과 Rotation 처리

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

Tested: git diff --check

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>
Co-authored-by: koreaioi <koreaioi@gachon.ac.kr>

* feature: 로고이미지, 깃허브주소, 이메일 필드 추가 (#91)

* feature: #22 공용 모달 컴포넌트 구현 (#35)

* feature: 공용 모달의 접근성과 표시 동작 기반 마련

* feature: 단일 확인 동작을 제공하는 알림 모달 구성

* feature: 위험도와 처리 상태를 반영하는 확인 모달 구성

* feature: 다양한 콘텐츠 구성을 수용하는 범용 모달 제공

* chore: 프론트엔드 pnpm workspace 패키지 범위 명시

* refactor: 모달 Props 계약의 컴포넌트별 소유권 정리

* design: 모달 모서리 곡률을 서비스 스타일에 맞게 조정

* design: 모달 닫기 버튼의 클릭 영역과 배치 조정

* design: 모달 기본 액션 버튼의 높이와 최소 너비 통일

* fix: 모달 표시 중 배경 페이지 스크롤 차단

* design: 모달 백드랍 색상을 중립적인 톤으로 조정

* fix: 모달 pending 중 모든 액션과 종료 동작 차단

* refactor: 모달 처리 상태 계약 통일

* design: 버튼 포커스 링 여백 제거

* design: 버튼 포커스 표현을 아웃라인으로 통일

* feature: #36 공용 파일 인풋 컴포넌트 구현 (#75)

* feature: 파일 업로더 컴포넌트 구현

* feature: 이미지 업로더 컴포넌트 구현

* refactor(FileUploader): 불필요한 props 제거

* feat: change 핸들러 인터페이스 추가

* fix: 파일 업로더에 키보드 접근이 가능하도록 수정

* feature: 이미지 파일 검증 로직 추가

* [Feature] #89 팀 생성 로직 구현 (#95)

* feature: 팀 블로그 생성 도메인 모델 추가

* feature: 팀 블로그 생성 서비스 구현

* feature: 팀 블로그 생성 API 제공

* feature: 팀 블로그 URL 정보 생성 요청 반영

* refactor: @requiredargsconstructor 사용하도록 변경

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #88 나의 팀 목록 요약 API (#96)

* feature: 나의 팀 리스트 조회 메서드 추가

* feature: MyCologResponse 추가

* feature: 나의 팀 목록 조회 비즈니스 로직 추가

* feature: 나의 팀 목록 조회 API 추가

* feature: 나의 팀 목록 조회 단위테스트 추가

* feature: BlogController에 ApiSpec 명세 적용

* hofix: 생성자 중복 삭제 (#101)

* [Feature] 팀 멤버 초대 API 구현 (#98)

* feature: 팀 멤버 초대 API 구현

* fix: CologService 오류 수정

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* fix: Clock 필드 주입 삭제 (#104)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feature: 멤버 초대용 유저 정보 조회 제공 (#106)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #103 사용자 닉네임 슬러그 유효성 검사 구현 (#109)

* feat: 닉네임, 슬러그로 조회 메서드 추가

* feat: 닉네임, 슬러그 중복 예외 추가

* feat: 닉네임, 슬러그 중복검사 비즈니스 로직 추가

* feat: 닉네임, 슬러그 중복검사 API 구현

* feat: 닉네임, 슬러그 중복검사 테스트 코드 작성

* feature: 팀 상세 조회 API 구현 (#111)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feature: 팀 프로필 조회 API 구현 (#113)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #110 colog 전체 멤버 목록 API 구현 (#114)

* feat: 팀목록 조회 메서드 추가

* feat: 팀목록 조회 비즈니스 로직 추가

* feat: 팀목록 멤버 조회 API 추가

* feat: 팀목록 멤버 조회 테스트 코드 추가

* feature: 온보딩 완료 후 정식 인증 세션 발급 (#116)

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

Tested: git diff --check

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #117 글 작성 및 조회 권한 처리 구현 (#118)

* feature: 게시글 상세 조회 선택 인증 지원

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

Tested: git diff --check

* feature: 게시글 작성과 비공개 조회 권한 검증

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

Tested: git diff --check

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #99 S3 PresignedUrl 발급 (#119)

* build: aws sdk s3 의존성 추가

* refactor: 예외 응답 고도화

* refactor: Upload 도메인 예외 추가

* refactor: Upload 도메인 enum 추가

* feat: PresignedUrl 관련 Dto 추가

* feat: S3 관련 환경변수 추가

* feat: S3Config 추가

* feat: S3Properties 추가

* feat: PresignedUrl 발급 비즈니스 로직 추가

* feat: PresignedUrl 발급 API 추가

* refactor: Dockerfile 캐싱 적용

* feat: 등록 가능 contentType, type 예시 추가

* [Build] #123 개발서버 CI-CD 파이프라인 구축 (#124)

* build: 개발서버 CI-CD 파이프라인 구축

* build: 잘못된 Dockerfile 명시 수정

* refactor: Push 에서 deploy job이 동작하도록 수정

* feature: 프론트 연동을 위한 CORS 설정 추가 (#125)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Refactor] #127 크로스 플랫폼 설정과 GHA 캐싱 적용 (#128)

* refactor: 크로스 플랫폼 설정과 gha 캐싱 적용

* refactor: 잘못된 Dockerfile 이름 수정

* refactor: GitActions Runner 환경 ARM64 네이티브 러너 적용

* feature: 전달헤더 설정 추가 (#132)

- Swagger에서 API 요청 시 발생하는 CORS 문제 해결을 위함

* [Refactor] #129 로그인 이후 개인 블로그 생성 흐름 복구 (#130)

* fix: 로그인 이후 개인 블로그 생성 흐름 복구

* refactor: 온보딩 완료 책임의 서비스 의존 제거

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feature: #92 사이드바 구현 (#108)

* feature(Button): fullWidth 추가

* chore: navy 스케일 컬러 토큰 추가

* feature: 사이드바 컴포넌트 구현

* feature: 사이드바 접힘/열림 인터랙션 구현

* feature: 사이드바 관련 페이지 레이아웃 세팅

* feature: Button 스타일의 Link 컴포넌트를 ButtonLink로 분리

* feature: user/colog 공통 아바타 컴포넌트 구현

* feature: 사이드바 내비게이션 버튼 컴포넌트 구현

* feature: 사이드바 푸터 컴포넌트 구현

* feature: 사이드바 헤더 컴포넌트 구현

* refactor: 사이드바 컴포넌트 재구성

* test: 라우트 기반 로그아웃 동작을 버튼 기반으로 변경

* fix(Sidebar): 인가 여부 기본값 제거

* refactor(with-sidebar-layout): 메인 영역에 시맨틱 태그 사용

* feature: 공용 Divider 컴포넌트 구현

* feature: 사이드바에 Divider 추가

* fix(Sidebar): 인가 기본값 제거

* refactor(SidebarLayout): main 태그 제거

* test: 하드코딩된 UI 값 제거

* [Feature] #40 블로그 글 작성 페이지 UI 구현 (#126)

* build: BlockNote 패키지 버전 고정

* build: Pretendard 로컬 폰트 기반 제공

* design: BlockNote 스타일의 Rilog 토큰 연결

* feature: 글 작성 에디터 공개 계약 제공

* feature: 한국어 BlockNote 편집기 제공

* feature: 에디터 로드 실패 복구 상태 제공

* feature: BlockNote 브라우저 전용 로딩 경계 제공

* feature: 게시글 문서 유효성 판별

* feature: 자동 확장 제목 입력 흐름 제공

* feature: 본문 오류와 에디터 접근성 연결

* feature: 본문 이미지 로컬 업로더 제공

* feature: 글 작성 페이지의 기본 편집 흐름 제공

* feature: 글 작성 발행 진입 액션 제공

* feature: 저장되지 않은 글의 이탈 보호 제공

* feature: 게시 설정 도메인 계약과 선택 항목 제공

* feature: 대표 이미지 우선순위와 기본 미리보기 제공

* design: 파일 선택 컨트롤의 포커스 표현 통일

* feature: 접근 가능한 게시 설정 모달 제공

* feature: 게시 설정 유지와 발행 전 검증 제공

* feature: 교체 가능한 mock 발행 계약과 상세 경로 제공

* feature: 발행 상태 전이와 성공 후 이동 제공

* design: 게시 설정 모달의 경계와 포커스 표현 정돈

대표 이미지와 게시 설정 영역을 동일 비율로 배치하고 여백을 넓혀 정보 밀도를 조정한다. 모달 가장자리의 컨트롤은 focus outline을 내부에 표시해 잘림 없이 일관된 키보드 탐색 피드백을 제공한다.

Rejected: 공용 Button의 전역 outline offset 변경 | 모달 밖 버튼의 기존 시각 계약까지 바뀜
Confidence: high
Scope-risk: moderate
Directive: 모달 가장자리의 기본 컨트롤은 내부 focus outline 계약을 유지할 것
Tested: ESLint, TypeScript typecheck, component tests 86개, 키보드 focus 브라우저 확인, git diff check

* fix: 한글 조합 중 제목 Enter 이동 방지

IME 조합 중 발생한 Enter 이벤트를 본문 이동으로 처리하지 않도록
composition 상태를 확인한다.

Confidence: high
Scope-risk: narrow
Tested: PostTitleField component tests

* fix: 확정된 이탈 이동의 history 경쟁 제거

guard entry 제거와 실제 이동을 동기적으로 처리해 history.back과
fallback timer 사이의 중복 이동 가능성을 제거한다.

Rejected: popstate와 fallback timer 유지 | 이동 시점에 따라 두 경로가 경쟁할 수 있음
Confidence: high
Scope-risk: moderate
Tested: PostWriteWorkspace component tests

* fix: 유효한 상세 경로 확인 후 발행 상태 정리

발행 결과의 상세 경로를 먼저 검증해 잘못된 postId가 반환되더라도
작성 상태와 이탈 보호가 유지되도록 한다.

Rejected: 상태 정리 후 경로 생성 | 경로 생성 실패 시 작성 상태를 복구할 수 없음
Confidence: high
Scope-risk: narrow
Tested: PostWriteWorkspace component tests

* fix: BlockNote 표 셀 본문 유효성 판별

일반 content뿐 아니라 tableContent의 rows와 cells를 재귀 탐색해
표 안에 작성된 텍스트도 유효한 본문으로 인정한다.

Confidence: high
Scope-risk: narrow
Tested: post-write validation unit tests

* design: BlockNote 키보드 포커스와 블록 선택 표시 복원

BlockNote의 투명한 ring 값을 공용 focus token에 연결하고 선택된
콘텐츠에 outline을 제공해 현재 조작 대상을 식별할 수 있게 한다.

Constraint: 제목 입력은 기존 무경계 표현 유지
Rejected: box-shadow ring 추가 | 기존 outline 포커스 계약과 시각 효과가 중복됨
Confidence: high
Scope-risk: narrow
Tested: CSS formatting, production build, TypeScript

* fix: 실제 발행 제목과 길이 검증 기준 통일

제목의 앞뒤 공백을 제거한 값을 빈 값과 최대 길이 검증에 함께
사용해 실제 발행되는 제목과 검증 기준을 일치시킨다.

Confidence: high
Scope-risk: narrow
Tested: post-write validation unit tests

* design: 대표 이미지 선택 후 제어 영역 정렬

좁은 모달 열 안에서 이미지 변경과 제거 제어가 줄바꿈되지 않도록
설명과 버튼 행을 분리하고 선택 상태의 버튼 규격을 통일한다.

Rejected: viewport breakpoint 기반 flex 유지 | 실제 열 너비와 무관하게 가로 배치가 활성화됨
Confidence: high
Scope-risk: narrow
Tested: component tests, ESLint, TypeScript, production build, browser visual verification

* feat: 본문 placeholder에 마크다운 단축 문법 안내 제공

* [Feature] #93 로그인 모달 구현 (#137)

* design(Modal): 모달 내 개행 허용 및 레이아웃 조정

* feature: 로그인 모달 구현

* feature: 사이드바 로그인 버튼에 로그인 모달 연결

* feature: 로그인 모달을 전역으로 관리할 수 있도록 Context 구현

* feature: 로그인 상태에 따라 로그인 모달과 기존 액션을 분기하는 공통 훅 구현

* refactor(GuestSidebarFooter): 공통 로그인 모달 로직 적용

* [Feature] #94 온보딩 페이지 구현 (#136)

* chore: 브레이크포인트 토큰 추가

* feature: aside 기반 레이아웃 컴포넌트 구현

* feature: 프로필/커버 이미지 프리뷰 컴포넌트 구현

* feature: 공용 단일 인풋 field 컴포넌트 구현

* feature: 회원가입 폼 구현

* feature: 회원가입 페이지 구현

* design(FileUploader): ring을 outline으로 변경

* refactor: auth 하위 features를 auth/ui로 이동

* refactor: signup을 auth에서 분리

* feature: 공용 체크박스 컴포넌트 구현

* feature: 온보딩 폼에 약관 동의 추가

* fix: 온보딩 컴포넌트 import 경로 수정

* design: 존재하는 aside 영역만 표시하도록 수정

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* [Feature] #140 팀 설정 멤버관리 페이지 구현 (#142)

* feature: 코로그 멤버 모조 데이터 추가

* feature: 코로그 설정 탭 구현

* feature: 코로그 멤버 관리 멤버 행 구현

* feature: 멤버 관리 섹션 구현

* feature: 코로그 설정 내 탭 조합

* feature: 코로그 설정 페이지(멤버 관리) 구현

* design(MemberManagementSection): 우상단 버튼 간격 조정

* [Feature] #93 로그인 모달 구현 (#137)

* design(Modal): 모달 내 개행 허용 및 레이아웃 조정

* feature: 로그인 모달 구현

* feature: 사이드바 로그인 버튼에 로그인 모달 연결

* feature: 로그인 모달을 전역으로 관리할 수 있도록 Context 구현

* feature: 로그인 상태에 따라 로그인 모달과 기존 액션을 분기하는 공통 훅 구현

* refactor(GuestSidebarFooter): 공통 로그인 모달 로직 적용

* [Feature] #94 온보딩 페이지 구현 (#136)

* chore: 브레이크포인트 토큰 추가

* feature: aside 기반 레이아웃 컴포넌트 구현

* feature: 프로필/커버 이미지 프리뷰 컴포넌트 구현

* feature: 공용 단일 인풋 field 컴포넌트 구현

* feature: 회원가입 폼 구현

* feature: 회원가입 페이지 구현

* design(FileUploader): ring을 outline으로 변경

* refactor: auth 하위 features를 auth/ui로 이동

* refactor: signup을 auth에서 분리

* feature: 공용 체크박스 컴포넌트 구현

* feature: 온보딩 폼에 약관 동의 추가

* fix: 온보딩 컴포넌트 import 경로 수정

* design: 존재하는 aside 영역만 표시하도록 수정

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* fix: 아바타가 이미지 소스를 받을 수 있도록 수정

* feature: 멤버 초대 모조 데이터 추가

* feature: 멤버 초대 모달 내 멤버 행 컴포넌트 구현

* feature: 멤버 초대 모달 구현

* feature: 멤버 초대 모달 연결

* design: 멤버 초대 모달 내 스크롤 영역 조정

* refactor: 저장되지 않은 변경 가드 로직을 공통으로 분리

* feature: 멤버 수정 중 페이지 이탈 시 확인 모달 연결

* refactor: 코로그 설정 내 모든 저장되지 않은 변경을 일괄 처리할 수 있도록 개선

* fix(RootLayout): 사용자 정보 캐시 초기화 구독 컴포넌트 import 위치 수정

* feature: 코로그 설정 페이지에 셸 레이아웃 적용

* design: 멤버 목록 표 bg 및 border 설정 변경

* test: 누락된 코로그 설정 페이지 테스트 추가

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* [Feature] #146 팀 생성 페이지 구현 (#147)

* fix: left 요소가 없을 때에도 gap이 적용되는 문제 해결

* chore: 팀 커버 이미지 플레이스홀더 에셋 추가

* feature: 팀 생성 폼 구현

* feature: 팀 생성 페이지 구현

* style: 불필요한 공백 제거

* feature: 팀 생성 버튼을 링크로 변경

* test: 팀 생성 페이지 통합 테스트 추가

* fix: 팀 생성 페이지에서 취소 시 이전 페이지로 리다이렉트하도록 변경

* chore: tailwind 속성 오타 수정

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* [Feature] #81 피드 페이지 UI와 무한 스크롤 구현 (#143)

* feature: 피드 게시글 표시 모델과 날짜 포맷터 정의

* feature: 피드 카드와 이미지 fallback UI 구현

* feature: 목 데이터 기반 피드 페이지 조회 상태 구성

* feature: 피드 무한 스크롤과 요청 상태 UI 구현

* feature: 피드 위젯을 조립해 feeds 페이지 구현

* feature: 루트 진입 경로를 피드로 연결

* feature: 피드 진입 시 콘텐츠로 자연스럽게 이동

* refactor: 피드 Colog 식별자 명명 통일

* refactor: 피드 작성자 프로필 표현을 UserAvatar로 통일

* [Chore] #120 SVGR 기반 아이콘 사용 환경 설정 (#149)

* build: SVG 아이콘의 컴포넌트 사용 환경 제공

Next.js의 Turbopack과 Webpack, Vitest가 동일한 SVG import 계약을 사용하도록 구성한다.

Constraint: 개발 서버와 프로덕션 빌드 양쪽에서 SVG 컴포넌트 import가 동작해야 함
Rejected: SVG 전용 React 래퍼 유지 | 아이콘마다 반복되는 수동 마크업과 컴포넌트가 필요함
Confidence: high
Scope-risk: moderate
Directive: SVG를 URL로 사용할 때는 ?url import를 명시적으로 사용
Tested: pnpm check, Turbopack production build, Webpack production build, frozen lockfile install

* refactor: 사이드바 아이콘 표현 방식 통일

문자 기반 임시 아이콘을 제거하고 currentColor를 사용하는 SVG 컴포넌트로 교체한다.

Constraint: 기존 사이드바의 크기와 디자인 토큰을 유지해야 함
Rejected: 범용 아이콘 레지스트리 추가 | 현재 사용 범위에 비해 추상화 비용이 큼
Confidence: high
Scope-risk: narrow
Tested: pnpm check, 사이드바 component test, visual verification

* style: 기존 코드의 불필요한 빈 줄 정리

검증 도구가 요구하는 포맷을 맞추기 위해 동작에 영향을 주지 않는 공백만 정리한다.

Scope-risk: narrow
Tested: pnpm check

* [Feature] #144 게시글 상세 뷰 구현 (#148)

* feature: BlockNote 게시글 콘텐츠의 서버 렌더링 기반 마련

게시글 상세 화면은 작성 시 저장한 BlockNote 블록을 동일한 스키마로 받아 서버에서 HTML로 변환한다. 렌더러와 도메인 계약, 필요한 패키지 및 Next 외부 패키지 설정을 한 변경 단위로 묶었다.

Constraint: 실제 게시글 API 연동은 후속 작업으로 분리한다
Rejected: 클라이언트 에디터로 읽기 화면을 렌더링 | 읽기 전용 화면에 불필요한 클라이언트 경계를 만든다
Directive: API 연동 시 content 필드는 BlockNote Block 배열 계약을 유지해야 한다
Tested: 대상 파일 Prettier 및 ESLint, staged diff check
Not-tested: develop 기준 기존 포맷 및 인증 import 오류로 전체 pnpm check 미실행

* feature: 게시글 상세 정보와 본문의 도메인 표현 구성

게시글 제목과 작성자, 발행일, 대표 이미지, CoLog 요약 및 본문 HTML 출력을 게시글 도메인 UI로 분리했다. 각 컴포넌트는 화면 조립이나 목차 행동을 알지 않고 게시글 데이터 표현에만 집중한다.

Constraint: 실제 게시글 데이터 조회는 후속 API 작업에서 연결한다
Rejected: 상세 위젯 한 파일에 모든 마크업 배치 | 도메인 표현과 화면 조립의 변경 이유가 섞인다
Directive: 상세 도메인 UI에는 목차 상태나 route 조회 책임을 추가하지 않는다
Tested: 대상 파일 Prettier 및 ESLint, staged diff check
Not-tested: develop 기준 기존 포맷 및 인증 import 오류로 전체 pnpm check 미실행

* feature: 게시글 구조에 맞춘 목차 탐색 흐름 제공

Swagger 계약을 대신하는 상세 목 데이터와 BlockNote h1부터 h3까지의 heading 추출, 현재 위치 추적 및 부드러운 앵커 이동을 하나의 상세 탐색 기능으로 구성했다.

Constraint: 실제 게시글 API 연결 전까지 Swagger 계약 기반 목 데이터를 사용한다
Rejected: 렌더링된 HTML을 다시 파싱해 목차 생성 | 원본 BlockNote 구조와 ID 정보를 중복 해석한다
Directive: API 연동 후에도 목차 입력은 렌더링 HTML이 아니라 BlockNote Block 배열을 사용한다
Tested: 대상 파일 Prettier 및 ESLint, staged diff check
Not-tested: 실제 API 응답 및 브라우저 E2E는 후속 조립 커밋에서 검증

* feature: 게시글 상세 화면의 공개 경로 연결

게시글 도메인 UI와 목차 기능을 읽기 화면으로 조립하고 /posts/[postId] 경로에서 목 데이터를 제공한다. 존재하지 않는 게시글에는 피드 복귀가 가능한 404 화면을 제공하며 BlockNote 본문 스타일을 route 범위에서 적용한다.

Constraint: 실제 상세 API 연결 전까지 route는 동기 목 데이터 조회를 사용한다
Rejected: page 컴포넌트에 상세 마크업 직접 구현 | route와 화면 조립 책임이 결합된다
Directive: API 연동 시 page의 데이터 조회만 교체하고 PostDetail 조립 계약을 유지한다
Tested: 대상 파일 Prettier 및 ESLint, staged diff check
Not-tested: 게시글 상세 Playwright 시나리오는 후속 테스트 작업에서 검증

* fix: develop 병합에서 누락된 BlockNote 서버 외부화 설정 복구

* chore: 각 태그 별 개행 간격 보정

* chore: 각 태그 별 개행 간격 보정 (헤딩 태그 유동적인 개행 간격 설정)

* feature: 전역에서 접근 가능한 공통 푸터 제공 (#69)

브랜드·정책·연락처 정보를 모든 페이지에서 일관되게 제공하도록 정적 Footer를 루트 레이아웃에 연결한다. 재사용 가능한 브랜드와 contact SVG는 public 자산으로 관리하고, 좁은 화면과 키보드 탐색을 회귀 테스트로 보호한다.

Constraint: 실제 정책 페이지와 연락 채널 URL은 후속 작업에서 연결
Rejected: 인라인 SVG 유지 | 다른 화면에서 동일 자산을 재사용하기 어려움
Confidence: high
Scope-risk: moderate
Directive: 실제 채널이 확정되면 Footer의 mock URL만 교체
Tested: format, lint, typecheck, unit 10개, component 11개, build, home E2E 3개

* [Feature] #139 팀 설정 프로필 페이지 구현 (#150)

* refactor: 코로그 요약과 프로필 타입을 단일 정보 모델로 통합

* feature: 코로그 프로필 설정값 검증과 정규화 정책 추가

* refactor: GitHub 로그인 아이콘을 공용 SVG 자산으로 통합

* feature: 코로그 프로필 이미지와 정보 입력 UI 구현

* feature: 팀 설정에 프로필 저장과 이탈 방지 흐름 연결

* test: 팀 프로필 설정의 저장과 이탈 방지 흐름 검증

* fix: 게시글의 긴 제목이 카드 내부에서 줄바꿈되도록 수정

* [Feature] #141 팀 설정 위험 영역 페이지 구현 (#151)

* feature: 팀 설정에서 영구 삭제 전 위험과 결과를 확인

* refactor: 팀 설정 기능을 동등한 섹션 계층으로 정렬

* feature: 클릭 가능한 공통 요소에 포인터 커서 제공

* refactor: SVG 아이콘을 소유 영역으로 이동해 컴포넌트 사용 방식 통일

* refactor: 워크스페이스에서 프로필 저장 상태 책임 분리

* refactor: 활성 설정 탭만 렌더링해 이탈 상태 관리 단순화

* [Feature] #145 팀 홈 페이지 구현 (#153)

* feature(PageShell): header가 전체 크기를 차지하는 레이아웃 추가

* chore: 깃허브/메일/링크 아이콘을 shared로 이동

* chore: 미트볼 아이콘 추가

* chore: 코로그 홈 mock 데이터 추가

* feature: 코로그 홈 히어로 컴포넌트 구현

* feature: 코로그 홈 멤버 목록 컴포넌트 구현

* design: 히어로 상단 더보기 버튼 반응형 위치 조정

* feature: 코로그 홈 게시글 목록 컴포넌트 구현

* test: 코로그 홈 내 컴포넌트 테스트 추가

* feature: 코로그 홈 페이지 구현

* design: 코로그 홈 반응형 추가

* design: 코로그 설명 및 코로그 게시글 캡션 폰트 사이즈 조정

* chore: 코로그 홈 페이지 진입 로직 주석 추가

* design: 코로그 홈 히어로 깃허브/메일 아이콘 사이 간격 조정

* refactor: 기존 도메인 model을 사용하도록 수정

* design: 코로그 소개 글 max-width 설정

* design(PageShell): main 섹션이 항상 중앙 배치되도록 수정

* design(CologMemberList): 유저 아바타 크기 조정

* [Refactor] #134 User Entity VO 고도화 (#158)

* feature: Email VO 추가

* feature: Nickname VO 추가

* feature: Slug VO 추가

* refactor: UserEntity VO 포장 적용

* refactor: Email은 VO이므로 null에 대한 방어 로직 적용

* refactor: Test Code Builder 수정

* feat: slug는 소문자로 저장한다는 정책 반영

* [Feature] #135 운영 서버 ci/cd 배포 파이프라인 추가 (#152)

* ci: 운영 서버 배포 파이프라인 추가

* ci: 운영 이미지 태그의 버전 변수 관리

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feature: 공개 팀 프로필 조회 경로 통합 (#165)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Chore] #155 공통 레이아웃 및 피드 UI 정리 (#157)

* feature: 브라우저 탭 파비콘 적용

* refactor: 루트 피드 리다이렉트를 설정으로 이전

* style: 게시글 상세 헤딩 하단 여백 확대

* refactor: 공통 Shell 합성 구조로 페이지 레이아웃 정리

* style: 게시글 피드 카드 가독성 조정

* chore: 게시글 상세 mock data 수정

* chore: tailwind css 속성값에 맞게 변경

* chore: sidebar/footer shell 제거

* chore: footer가 있는 페이지의 하단 여백을 공용 layout으로 추출

* [Feature] #159 게시글 상세조회 전용 단일 API 추가 (#163)

* feat: slug로 Blog 조회 메서드 추가

* feat: 특정 Post 조회시 연관관계를 함께 조회하는 메서드 추가

* feat: 특정 블로그의 전체 게시글 수 count 조회 메서드 추가

* feature: 해당 블로그의 팀원수를 count하는 집계 메서드 추가

* feature: 게시물 읽기 검증 및 소속 판단 로직 구현

- 테스트 코드추가

* feature: 게시글 소속에 따른 유동적인 응답을 제공하는 Dto 추가

* feature: 블로그의 특정 게시물을 상세 조회하는 통합 API 구현

* refactor: 기존 게시글 상세 조회 API를 V2로 마이그레이션

* feature: rilog, colog에 따른 응답 형식 변환을 Swagger 명세로 작성

* refactor: Controller 네이밍 & 어노테이션 순서 수정

* refactor: Colog 소속은 getColog를 사용하도록 변경

* refactor: 기존 PostDetailResponse
dV2를 PostDetailResponse로 네이밍 이전

* refactor: 도메인 용어를 affiliation에서 owner로 변경

* feature: 마지막 개행 추가

* feature: PostDetailResponse에 잘못된 블로그가 저장되지 않도록 방어하는 테스트 코드 추가

* refactor: jsonPath 수정

* [Feature] #156 팀 생성 페이지 로직 추가 (#160)

* feature: 팀 생성 구조 및 플로우를 팀 프로필 설정과 통일

* refactor: 코로그 생성 및 프로필 수정 공통 폼을 도메인 레이어로 분리

* chore: are로 시작하던 변수명을 is로 수정

* fix(CologCreateForm): 병합 충돌 과정에서 망가진 코드 복구

* fix(CologHomeHero): 테스트 용으로 남아있던 프로필 소개 repeat 제거

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>
Co-authored-by: JetProc <soonjae8297@gmail.com>

* [Refactor] #172 affiliation에서 owner로 수정 (#173)

* [Feature] #161 모바일 반응형 대응 (#162)

* feature: 모바일용 하단 내비게이션바 추가

* design: 모바일 뷰에서도 게시글 상세 본문 텍스트를 16px로 통일

* design: 에디터 및 게시글 상세 list 요소 상하에 여백 추가

* feature: 모바일에서 발행 버튼을 하단으로 이동

* design: 푸터 모바일 반응형 추가

* refactor: 코로그 게시글에서도 PostFeedImage를 사용하도록 수정

* design: 코로그 홈 게시글 리스트 제목 폰트 사이즈 조정

* feature: 모바일용 date format 추가

* feature: 코로그 게시글 목록 닉네임에 truncate 추가

* design(CologPostList): 닉네임 우측 여백 제거

* design(Footer): 모바일 뷰에서 약관 제거

* feature: 모바일 뷰에서 하단 내비게이션바 대신 상단 헤더 사용

* design: 모바일 헤더 프로필에 border 추가

* fix: 사이드바 ui에서 로그아웃이 위로 옮겨짐 현상의 스파이 적출

* fix: footer 좌측에 여백이 중복으로 적용되던 문제 수정

* chore: format-published-date-mobile 파일을 기존 파일에 병합 및 모바일 여부를 인자로 받을 수 있도록 리팩토링

---------

Co-authored-by: JetProc <soonjae8297@gmail.com>

* [Feature] #170 온보딩 폼 로직 연결 (#174)

* feature: 온보딩 폼 로직 추가

* chore(get-service-url-label): 네이밍 규칙에 맞지 않는 파일명 수정

* test(BlockNoteEditor): placeholder 관련 테스트 수정

* chore: navigate 라우터에 replace('/') 속성 추가

* feature: 온보딩 입력 유효성 검사 로직 추가

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>
Co-authored-by: JetProc <soonjae8297@gmail.com>

* [Refactor] #166 공개 블로그 게시글 목록 조회 제공 (#169)

* feature: 공개 블로그 게시글 목록 조회 제공

* fix: 공개 블로그 경로의 골뱅이 표기 복원

* fix: 공개 블로그 조회의 삭제 블로그 제외

공개 블로그 게시글 목록 조회에서 삭제된 블로그를 제외하도록 slug 조회 계약을 변경하고 공개 프로필 조회 진입점을 BlogController와 BlogService로 이동한다.

Tested: backend ./gradlew test

* refactor: 게시글 피드의 블로그 응답 이름 통일

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Fix] #171 코로그 설정 페이지 중첩 스크롤 문제 해결 (#175)

* feature: 코로그 프로필 설정 중첩 스크롤 제거

* refactor: 섹션이 page shell을 관리하도록 변경

* [Refactor] #167 라우트 경로 정리 (#178)

* refactor: App Router 페이지를 통일된 URL 구조로 재배치

* refactor: 내부 링크를 @slug 기반 라우트 계약으로 통일

* refactor: 코로그 설정 탭을 URL query와 동기화

* [Feature] #176 전체 피드 게시물 목록 조회 api 함수 구현 (#181)

* docs(frontend/AGENTS): api 아키텍처 관련 에이전트 지침 추가

* feature: 전체 피드 목록 조회 api 함수 구현

* config(next.config): mock 데이터 수용을 위해 remotePattern 전체 허용

* refactor: ssr prefetch에도 대응할 수 있도록 option/prefetch/query를 모아 관리하는 구조로 개편

* feature: 전체 피드 목록 조회 api 연동

* refactor: src/api 구조 개선

* chore: read-full-feed-posts.md task 파일 삭제

* chore: refactor-query-mutation task 파일 삭제

* refactor: 함수명은 축약하지 않은 상태로 복구

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* fix: 라우터 슬러그에 undefined 되던 버그 수정 (#185)

* [Refactor] #177 blogid를 slug로 통일 (#180)

* refactor: 멤버초대 검증 로직을 BlogMember 내부로 응집화

* refactor: cologId 대신 slug로 통일

* refactor: cologId 대신 slug로 멤버 초대 API 수정

* refactor: 게시글 발행 시 blogId 대신 slug를 사용하도록 통일

* refactor: BlogMember는 blogId로 조회하도록 개선

* refactor: 탈퇴된 Blog는 조회하지 않도록 JPA 쿼리 메서드에 반영

* [Feature]#186 게시글 상세 조회 api 구현 (#188)

* refactor: 피드 API 모듈을 shared 영역으로 이동

* feature: 게시글 상세 조회 API 연동

* refactor: 응답 필드명과 게시글 소유자 구조 통일 (#182)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Refactor] #191 게시글 응답의 작성자 이름 필드명 통일 (#193)

* refactor: 게시글 응답의 작성자 이름 필드명 통일

* test: 전체 피드의 팀 소유자 응답 계약 보강

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Fix]  #189 피드 응답 필드명/소유자 구조 통일 반영 (#190)

* feature: 바뀐 백엔드 응답 형식에 맞게 반영

* fix: 블로그 상세 조회 API 타입 통일 및 author 필드명 호환성 처리

* [Feature] #187 공통 예외처리 로직 구현 (#194)

* chore: 에러 코드 상수화

* style: import문 정렬 수정

* chore: 서버 에러 응답 타입 정의

* feature: 서버 에러 정규화 로직 구현

* test: 테스트 내 401 에러 응답 공통 모듈로 분리

* feature: 블록노트 content 타입을 더 구체적으로 정의

* feature: 에러 정규화 로직을 가진 apiRequest/apiClient 구현 및 적용

* feature: 에러 정규화 로직을 가진 apiRequest/apiClient 구현 및 적용

* fix: 누락된 토큰 재발급 실패 이벤트 발행 로직 연결

* refactor: ky instance 생성 함수명 및 파일명 변경

* fix: requires auth 관련 로직 제거

* refactor: 오류 분류 세분화

* feature: Tanstack Query 전역 재시도 정책 설정

* feature: 폼 필드 에러 추출 함수 구현

* test: 요청 재시도 관련 테스트 추가

* refactor: 응답 필드명과 게시글 소유자 구조 통일 (#182)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* fix: kind/category 혼용되는 용어를 type/kind로 정리

* fix: 백엔드 Author 속성 코드 롤백

* fix: 백엔드 Author 속성 코드 롤백

---------

Co-authored-by: 진리로 <riro12@naver.com>

* [Refactor] #192 Blog Entity의 String slug를 Slug VO로 적용 (#195)

* refactor: Blog Entity의 String slug를 Slug VO로 적용

* refactor: Slug를 Blog 패키지로 이동한다.

* refactor: slug로 Blog 조회 이후는 id를 사용하도록 개선

* fix: Feed 조회 시, Slug VO도입으로 인한 JPQL 파싱 문제 해결 (#199)

* chore: backend-prod 라벨 추가 (#202)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Refactor] #196 프론트엔드 모델 구조 리팩터링 (#203)

* chore: VSCode 작업 환경 설정 업데이트

* refactor: 도메인 계층 모델 구조 단일화 및 통합

* refactor: 코로그 관련 피처 model 및 lib 책임 분리

* refactor: 게시글 상세 피처 구조 개선 및 ID 매핑 수정

* refactor: 게시글 피드 피처 model 및 lib 책임 분리

* refactor: 게시글 작성 피처 model 및 lib 책임 분리

* refactor: 회원가입 피처 model 및 lib 책임 분리

* refactor: 게시글 피드 카드 및 관련 UI 컴포넌트를 post-feed 피처로 이전

* [Chore] #197 프론트엔드 배포 세팅 (#200)

* chore: pm2 스크립트 추가

* chore: CD 배포 파이프라인 구축 및 self-hosted 러너 연동

* chore: 워크플로우 수동 테스트 수단 추가

* chore: 워크플로우 수동 실행 시 배포 스크립트까지 실행되도록 수정

* chore: 임시로 PR 업데이트 시에도 배포 스크립트가 돌아가도록 설정

* chore: TARGET_DIR 경로 수정

* chore: NVM_DIR 경로 수정

* chore: node 설치 스크립트 추가

* chore: 환경변수 동적 할당 방식으로 변경

* chore: 환경변수를 절대경로로 변경

* chore: 전역 설치된 pnpm 및 pm2를 사용하도록 스크립트 수정

* fix: nvm 로드하는 코드 추가

* fix: nvm 파일 경로 확인되는지 디버깅

* fix: node와 pnpm 조합으로 변경

* fix: ssh 접속 환경과 동기화하는 코드 추가

* chore: NVM 경로를 환경변수 기반으로 변경

* chore: corepack 기반으로 pnpm 실행하도록 수정

* chore: 디버깅 코드 추가

* fix: nvm 자체 설치 로직 추가

* fix: pm2 자동 종료 정책 예외 처리

* chore: 초기 배포 스크립트로 복구

* chore: npm 경로 설정

* chore: env secret 이름 변경

* fix: 배포 환경 무한 재렌더 문제 해결

* chore: 요청 응답 공통 로깅 추가

* fix: 남아있는 배포 환경 무한 재렌더 문제 해결

* chore: 배포 스크립트를 프로덕션으로 전환

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* [Feature] #205 파일 업로드 api 구현 (#206)

* feat: 파일 업로드를 위한 Presigned URL API 및 클라이언트 구현

* refactor: Content-Type 방어 로직 추가 및 Presigned 네이밍 일관성 정렬

* refactor: S3 업로드 시 kyInstance 재활용 및 외부 URL 인증 토큰 주입 방어

* refactor: 토큰 만료 응답 판별 로직 캡슐화 및 타입 안정성 개선

---------

Co-authored-by: 송아영 <azerosong@gmail.com>

* [Feature] #207 getpublicprofile api 프론트엔드 연동 (#208)

* feature: 공개 블로그 프로필 조회 API 및 타입 정의

공개 블로그 프로필 정보를 조회하는 백엔드 엔드포인트(/v1/blogs/@{slug}) 호출 함수와 응답 인터페이스를 추가한다.

Tested: readBlogPublicProfile 단위 테스트 통과

* feature: 공개 블로그 프로필 React Query 훅 및 옵션 추가

공개 블로그 프로필 조회를 위한 query key, query options, useQuery 훅 및 prefetch 함수를 추가한다.

Tested: vitest 단위 테스트 및 타입 검사 통과

* feature: 블로그 홈 프로필 정보 API 연동

기존의 목 데이터를 제거하고 실제 getPublicProfile API를 호출하여 블로그 홈의 헤더 프로필 정보를 렌더링한다.
응답 데이터를 화면 컴포넌트 규격에 맞게 변환하는 매핑 유틸 함수를 추가한다.

Tested: mapCologProfileResponse 단위 테스트 통과

* [Feature] #204 서비스 통합테스트 유틸 ServiceSupport 추가 (#220)

* build: 테스트 DB h2 의존성 추가

* feature: 테스트 격리를 위한 DatabaseCleaner 추가

* feature: DatabaseCleanerConfiguration 설정 추가

* feature: 서비스 통합테스트 유틸 ServiceSupport 추가

* feature: application-test.yaml 추가

* chore: 사용하지 않는 주석 제거

* feature: Slug, Nickname 중복검사 서비스 통합테스트 작성

* refactor: 개행 두번을 하나로 삭제

* refactor: 잘못된 서비스 호출 오류 수정

* [Feature] #210 로그아웃 API 제공 (#216)

* feature: 로그아웃 API 제공

* refactor: Refresh Token 쿠키 주입 방식 정리

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feature: @LoingUserId, @LoginUserSulg 어노테이션 스웨거 무시 설정 추가 (#222)

* [Feature] #217 내 블로그 목록 조회 api 연동 (#223)

* feature: 내 블로그 목록 요약 조회 api 함수 구현

* test: 테스트용 QueryClient 구현

* feature: 사이드바 팀 내비게이션에 내 팀 목록 요약 조회 api 연동

* [Feature] #225 토큰 기반 유저정보 조회 API 추가 (#228)

* refactor: 패키지 유지 용도의 .gitkeep 삭제

* feature: 유저 정보 조회 비즈니스 로직 추가 (by UserId)

* feature: 토큰 기반 유저 정보 조회 API 추가

* refactor: 닉네임, 슬러그 중복 검사 코드 위치 수정

* test: 유저 정보 조회 서비스통합테스트 코드 추가

* feature: 누락된 UserApiSpec 추가

* [Build] #231 deploy job 셀프호스트 라벨 추가 (#232)

* [Feature] #227 GitHub OAuth 프론트 콜백 흐름 제공 (#229)

* feature: GitHub OAuth 프론트 콜백 흐름 제공

* feature: 내부 경로 검증 추가

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #211 코로그 홈 게시글 피드 조회 api 연동 (#226)

* feature: 공개 블로그 게시글 목록 조회 API 및 쿼리 구현

* feature: 코로그 홈 게시글 목록 API 연동 및 무한 스크롤 적용

* [Refactor] #211 colog-home 위젯 내부 UI를 features 계층으로 분리

- colog-home 위젯의 CologHomeHero, CologPostList를 위젯의 Public UI(조합 레이어)로 격상
- 기존 colog-home/ui에 혼재되어 있던 기능별 표현 로직을 features 하위(colog-profile, colog-members, colog-post-feed)로 추출
- CologPostList에 스켈레톤 UI(CologPostFeedSkeleton) 적용 및 관련 훅 이동
- page.tsx 내의 불필요한 데이터 fetch 및 매퍼 로직을 제거하고 각 위젯/기능이 스스로 데이터를 책임지도록 개선

* [Feature] #219 멤버 추가 시 유저 정보 조회 api 연동 (#230)

* feature: 슬러그 기반 유저 정보 조회 api 함수 구현

* feature: 멤버 초대 모달 유저 정보 조회 api 함수 연동

* refactor: 멤버 초대 시 유저 조회 로직을 mutation으로 리팩터링

* [Feature] #224 토큰 기반 유저 정보 조회 api 연동 (#234)

* style: 불필요한 공백 제거

* feature: 토큰 기반 유저 정보 조회 api 함수 구현

* feature: 유저 관련 쿼리에 인가 쿼리 키 추가

* feature: 마스터토큰 기반 임시 token provider 구현

* feature: 전역 로그인 상태를 context로 관리

* feature: 전역 인가 상태를 기반으로 분기 로직 수정

* feature: 로그아웃/토큰 만료 시 인증 상태 초기화 로직 추가

* feature: 토큰이 없는 경우 토큰 기반 api가 호출되지 않도록 방어

* feature: map 변환 함수 추가

* [Feature] #213 팀 블로그 생성 api 연동 (#235)

* refactor(colog): 이메일 필드 완전 제거 및 잔재 정리

* [Feature] #213 팀 블로그 생성 API 및 타입 추가

* [Feature] #213 팀 블로그 생성 useMutation 훅 추가

* [Feature] #213 팀 블로그 생성 폼 실제 API 연동 및 모의 데이터 제거

* [Test] #213 팀 블로그 생성 폼 연동 테스트 업데이트

* [Hotfix] #236 멤버 모의 데이터 누락 복구 (#237)

* [Feature] #209 깃허브 소셜 로그인 구현 (#238)

* feature: 깃허브 소셜 로그인 구현

* refactor: auth api 경로를 shared 하위로 이동

* feature: 소셜 로그인 뒤 헤더로부터 토큰을 추출하는 로직 추가

* [Feature] #240 환경변수 추가 설정 (#243)

* refactor: RefreshToken SameSite Option 환경변수로 분리

* feature: AWS_S3_DIRECTORY application.yaml에 환경변수 추가

* [Featur…
Wlsflfh added a commit that referenced this pull request Aug 21, 2026
* chore: 저장소 공통 제외 규칙 설정 (#6)

* docs: 프로젝트 하네스 기본 기준 정리 (#8)

* chore: 파트별 변경의 리뷰 요청 자동화 (#12)

* [Chore] #9 프론트엔드 초기 세팅 (#10)

* chore: 프론트엔드 공통 실행·검증 환경 구성

* docs: 프론트엔드 개발 및 협업 기준 문서화

* chore: 미사용 코드와 빈 줄 검사 강화

* docs: 작업 범위별 브랜치 명명 기준 통일 (#17)

* [Chore] #14 프론트엔드 디자인 토큰 구성 (#18)

* design: 공통 타이포그래피 토큰 정의

* design: 색상과 버튼 상태 토큰 정의

* design: 전역 스타일의 의미 기반 토큰 연결

* chore: Tailwind CSS 편집기 진단 설정 공유

* design: 버튼 토큰의 유틸리티 연동

버튼의 상태·색상·크기 토큰을 Tailwind theme namespace로 옮겨 공용 컴포넌트에서 이름 있는 유틸리티로 조합할 수 있게 한다.

Constraint: Tailwind CSS v4 theme namespace를 통해 유틸리티를 생성해야 한다
Rejected: :root 버튼 변수 유지 | 컴포넌트에서 일관된 유틸리티 조합 불가
Confidence: high
Scope-risk: narrow
Directive: 버튼 상태와 foreground 토큰은 Button 컴포넌트 variant 조합에서 사용한다
Tested: Prettier, ESLint, TypeScript, Vitest, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 실제 Button 컴포넌트의 키보드 상호작용

* design: focus ring 토큰의 의미 명확화

키보드 focus에 사용하는 색상임을 이름에 드러내고 Tailwind ring 유틸리티와 동일한 의미로 연결한다. 버튼 토큰 변경으로 참조가 사라진 radius mapping도 함께 제거한다.

Constraint: 모든 인터랙션 요소가 공통 focus 색상을 사용해야 한다
Rejected: --focus 이름 유지 | 색상 용도와 적용 대상이 모호함
Confidence: high
Scope-risk: narrow
Directive: 신규 interactive component는 버튼 전용 별칭 대신 ring-focus-ring을 사용한다
Tested: Prettier, ESLint, TypeScript, Vitest, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 실제 브라우저 keyboard focus 시각 점검

* design: 숫자형 타이포그래피 스케일 정리

의미가 겹치는 본문·라벨 토큰을 크기 중심의 숫자 스케일로 통합해 역할별 행간과 자간을 컴포넌트에서 조합할 수 있게 한다.

Constraint: 현재 Figma에서 확인된 14px, 16px, 20px, 64px 위계를 유지해야 한다
Rejected: 역할별 글자 크기 토큰 유지 | 같은 크기의 중복 선언과 확장 기준이 불명확함
Confidence: high
Scope-risk: narrow
Directive: 새 글자 크기는 실제 디자인 사용처가 확인될 때만 숫자 스케일에 추가한다
Tested: Prettier, ESLint, TypeScript, Vitest, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 미구현 화면에서의 시각적 위계 검토

* design: 역할 기반 타이포그래피 토큰 체계 확장

기존 숫자형 글자 크기 토큰을 역할 기반의 caption, label, body, title, heading, display 체계로 재구성해 화면 코드가 의도를 드러내는 유틸리티를 사용할 수 있게 한다.

Constraint: Tailwind CSS v4 text namespace와 숫자형 단계 명명 규칙을 유지해야 한다
Rejected: 기존 숫자형 scale 유지 | 동일한 크기의 역할과 사용 맥락을 표현할 수 없음
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: 신규 타이포그래피는 기존 역할을 재사용하고, 실제 사용처가 확인될 때만 단계를 추가한다
Tested: Prettier, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 구현 예정 화면에서의 시각적 위계 점검

* design: 홈 화면에 의미 기반 타이포그래피 적용

홈 화면의 기본 Tailwind 글자 크기를 역할 기반 토큰으로 바꿔 디자인 시스템이 정의한 행간과 자간을 일관되게 적용한다.

Constraint: 페이지 제목과 본문은 앞선 타이포그래피 토큰 커밋을 소비해야 한다
Rejected: text-4xl과 text-base 유지 | 화면마다 기본 scale과 의미 기반 토큰이 혼재함
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: 신규 화면은 기본 Tailwind font-size 대신 의미 기반 text 토큰을 우선 사용한다
Tested: Prettier, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 브라우저별 실제 렌더링의 시각적 위계 점검

* [Chore] #15 ky config/client 설정 (#23)

* chore: config 폴더 제거

* chore: api client 테스트를 위한 의존성 설치

* feature: 토큰 재발급 로직을 포함하는 api client 모듈 구현

* feature: 토큰 재발급 실패 시 유저 데이터 초기화를 위한 구독발행 모델 구축

* style: import 순서 정렬

* chore: vitest config 내 alias 대상 상대경로 수정

* refactor: 토큰 재발급 실패 시 초기화 필요한 쿼리의 키를 그루핑

* feature: 토큰 재발급 실패 시 쿼리 초기화를 트리거하는 훅 컴포넌트 구현

* feature: QueryProvider 구현 및 적용

* chore(apiClient): tokenProvider 관련 TODO 추가

* chore(playwright.config): 대상 디렉터리 경로 수정

* chore: .env.example 파일 추가

* docs: 작업 범위별 브랜치 명명 기준 통일 (#17)

* [Chore] #14 프론트엔드 디자인 토큰 구성 (#18)

* design: 공통 타이포그래피 토큰 정의

* design: 색상과 버튼 상태 토큰 정의

* design: 전역 스타일의 의미 기반 토큰 연결

* chore: Tailwind CSS 편집기 진단 설정 공유

* design: 버튼 토큰의 유틸리티 연동

버튼의 상태·색상·크기 토큰을 Tailwind theme namespace로 옮겨 공용 컴포넌트에서 이름 있는 유틸리티로 조합할 수 있게 한다.

Constraint: Tailwind CSS v4 theme namespace를 통해 유틸리티를 생성해야 한다
Rejected: :root 버튼 변수 유지 | 컴포넌트에서 일관된 유틸리티 조합 불가
Confidence: high
Scope-risk: narrow
Directive: 버튼 상태와 foreground 토큰은 Button 컴포넌트 variant 조합에서 사용한다
Tested: Prettier, ESLint, TypeScript, Vitest, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 실제 Button 컴포넌트의 키보드 상호작용

* design: focus ring 토큰의 의미 명확화

키보드 focus에 사용하는 색상임을 이름에 드러내고 Tailwind ring 유틸리티와 동일한 의미로 연결한다. 버튼 토큰 변경으로 참조가 사라진 radius mapping도 함께 제거한다.

Constraint: 모든 인터랙션 요소가 공통 focus 색상을 사용해야 한다
Rejected: --focus 이름 유지 | 색상 용도와 적용 대상이 모호함
Confidence: high
Scope-risk: narrow
Directive: 신규 interactive component는 버튼 전용 별칭 대신 ring-focus-ring을 사용한다
Tested: Prettier, ESLint, TypeScript, Vitest, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 실제 브라우저 keyboard focus 시각 점검

* design: 숫자형 타이포그래피 스케일 정리

의미가 겹치는 본문·라벨 토큰을 크기 중심의 숫자 스케일로 통합해 역할별 행간과 자간을 컴포넌트에서 조합할 수 있게 한다.

Constraint: 현재 Figma에서 확인된 14px, 16px, 20px, 64px 위계를 유지해야 한다
Rejected: 역할별 글자 크기 토큰 유지 | 같은 크기의 중복 선언과 확장 기준이 불명확함
Confidence: high
Scope-risk: narrow
Directive: 새 글자 크기는 실제 디자인 사용처가 확인될 때만 숫자 스케일에 추가한다
Tested: Prettier, ESLint, TypeScript, Vitest, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 미구현 화면에서의 시각적 위계 검토

* design: 역할 기반 타이포그래피 토큰 체계 확장

기존 숫자형 글자 크기 토큰을 역할 기반의 caption, label, body, title, heading, display 체계로 재구성해 화면 코드가 의도를 드러내는 유틸리티를 사용할 수 있게 한다.

Constraint: Tailwind CSS v4 text namespace와 숫자형 단계 명명 규칙을 유지해야 한다
Rejected: 기존 숫자형 scale 유지 | 동일한 크기의 역할과 사용 맥락을 표현할 수 없음
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: 신규 타이포그래피는 기존 역할을 재사용하고, 실제 사용처가 확인될 때만 단계를 추가한다
Tested: Prettier, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 구현 예정 화면에서의 시각적 위계 점검

* design: 홈 화면에 의미 기반 타이포그래피 적용

홈 화면의 기본 Tailwind 글자 크기를 역할 기반 토큰으로 바꿔 디자인 시스템이 정의한 행간과 자간을 일관되게 적용한다.

Constraint: 페이지 제목과 본문은 앞선 타이포그래피 토큰 커밋을 소비해야 한다
Rejected: text-4xl과 text-base 유지 | 화면마다 기본 scale과 의미 기반 토큰이 혼재함
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: 신규 화면은 기본 Tailwind font-size 대신 의미 기반 text 토큰을 우선 사용한다
Tested: Prettier, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 브라우저별 실제 렌더링의 시각적 위계 점검

* chore(createApiClient): 토큰 재발급 분기 처리 관련 TODO 추가

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* [Feature] #20 공용 버튼 컴포넌트 추가 (#21)

* feature: 서비스 전역 버튼 인터페이스 통일

* refactor: Button 타입과 크기별 스타일을 정리

Button에서만 사용하는 props 타입을 컴포넌트 파일로 옮기고 public entry의 타입 export를 제거했다.
버튼 크기별 모서리 반경도 sm/md와 lg의 위계를 드러내도록 조정했다.

Constraint: Button 타입의 외부 소비처가 없음
Rejected: 별도 타입 파일 유지 | 단일 소비처를 위한 파일 경계가 불필요함
Confidence: high
Scope-risk: narrow
Directive: 외부 타입 소비처가 생기면 필요한 타입만 public entry로 다시 공개할 것
Tested: pnpm check (format, lint, typecheck, component tests, build)
Not-tested: E2E 브라우저 흐름

* refactor: Button 전용 토큰의 소유 위치 정리

Button만 소비하는 시맨틱 토큰을 컴포넌트 폴더로 이동하고, 전역 스타일 진입점에서 등록하도록 import 경로를 분리했다.

Constraint: Tailwind 유틸리티 생성을 위해 @theme 토큰은 전역 CSS에서 import되어야 함
Rejected: foundations 토큰 폴더 유지 | Button 컴포넌트와 토큰의 소유 관계가 분산됨
Confidence: high
Scope-risk: narrow
Directive: 다른 공용 컴포넌트 전용 토큰도 소비처가 하나면 해당 컴포넌트와 함께 관리할 것
Tested: pnpm check (format, lint, typecheck, component tests, build)
Not-tested: E2E 브라우저 흐름

* [Chore] #19 전역예외처리핸들러 초기세팅 (#24)

* chore: domain 패키지 구조 유지 (#19)

* feat: InvalidParam 추가 (#19)

- 유효하지 않은 Param을 전달하기 위함.

* feat: ErrorDetail 추가 (#19)

* feat: RilogBusinessException 추가 (#19)

- 어플리케이션 최상위 커스텀 예외

* feat: ErrorInformation 추가 (#19)

- 커스텀 예외 생성자 시그니처를 Interface로 단축

* feat: GlobalExceptionInformation 추가 (#19)

* feat: GlobalExceptionHandler 추가 (#19)

- 전역 예외처리 핸들러로 한 곳에서 예외처리 관리

* docs: exception-handling.md 추가 (#19)

- 비즈니스 예외를 일관된 API 오류 응답으로 변환하는 방법을 설명

* refactor: 메서드 네이밍 수정 (#19)

* refactor: 자바 기본 예외는 초기세팅에 포함하지 않음. (#19)

* refactor: 클래스 선언 직후, 괄호 닫기 전 개행 추가 (#19)

* [Chore] #27 BaseEntity 초기세팅 (#28)

* build: Spring Data Jpa 라이브러리 추가 (#27)

* feat: BaseEntity 추가 (#27)

* feat: JpaAuditingConfig 추가 (#27)

- JpaAuditing 설정 허용

* feat: Spring Data 관련 예외처리 등록 (#27)

* docs: BaseEntity 사용 가이드.md 추가  (#27)

* chore: 프론트엔드 타입과 모듈 경계 규칙 통일 (#29)

객체 계약은 interface를 기본으로 사용하고 모듈 경계 import만 절대 경로를 사용하도록 기존 코드와 하네스를 함께 정리한다.

Constraint: 같은 모듈 내부 상대 경로는 허용
Rejected: 모듈별 barrel 유지 | 현재 공개 API 규모 대비 관리 비용과 runtime 혼합 위험이 큼
Directive: barrel 재도입은 명시적인 public API 필요가 확인된 뒤 별도 이슈 또는 ADR로 결정
Tested: Node 24.19.0에서 pnpm check 및 Playwright E2E 통과

* [Feature] #31 로그인 사용자 식별자 초기 구현 (#32)

* feat: @LoginUserId 추가 (#31)

* feat: @LoginUserSlug 추가 (#31)

* feat: 임시 LoginUserIdArgumentResolver 추가 (#31)

- 작업 병목을 막기 위한 임시 ArgumentResolver

* feat: 임시 LoginUserSlugArgumentResolver 추가 (#31)

- 작업 병목을 막기 위한 임시 ArgumentResolver

* [Feature] #30 users 테이블 구현 (#33)

* chore: service, repository 패키지 구조 추가

* refactor: HealthController 패키지 위치 변경

* refactor: HealthController 패키지 구조 변경에 의한 수정

* feature: User 테이블 구현

* feature: OnboardingStatus 구현

* test: UserTest 구현

* refactor: Onboarding 입력 값 추가

* test: Onboarding 입력 값 추가에 의한 테스트 케이스 수정

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #34 1차 MVP Entity 초기 구현 (#39)

* refactor: 잘못된 패키지 구조 형식 제거 (#34)

* feature: test 패키지 gitignore 추가 (#34)

* refactor: User 패키지로 이동 (#34)

* refactor: HealthCheckController 패키지 이동 (#34)

* feature: user entity에 UNIQUE 제약 추가 (#34)

* feature: blog entity 추가 (#34)

* feature: post entity 추가 (#34)

* feature: BlogMember entity 추가 (#34)

* feature: local.env gitignore 추가 (#34)

* refactor: BlogMember Entity 잘못된 @table name 속성 수정  (#34)

* feature: application profile별 분리  (#34)

* refactor: author를 user로 변경 (#34)

* [Feature] #42 Swagger 추가 (#44)

* build: swagger 의존성 추가 (#42)

* build: dev, local 환경에 swagger 접속 허용 (#42)

* feature: OpenApiConfig 추가 (#42)

* [Feature] #47 예외 응답 형식 변경 (#48)

* refactor: GlobalExceptionInformation getErrorCode 응답 형식 변경

* docs: 예외 Enum 사용 방식 변경으로 docs 반영

* [Feature] #49 GitHub oauth 로그인 요청 및 callback 구현 (#56)

* refactor: 인증 보조 타입의 도메인 패키지 이동

* refactor: 인증 보조 타입의 패키지 선언 정리

* feature: GitHub OAuth 로그인 요청과 callback 검증 추가

* fix: 온보딩 slug 최초 저장과 재변경 방지

* docs: 아키텍쳐 구조 설명 추가

* fix: 파라미터 버그 수정

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #45 게시글 발행 기능 구현 (#59)

* feature: Blog Entity에 owner 추가

* feature: Post Builder 패턴 적용

* refactor: 잘못 사용된 어노테이션 수정

- LoginUserId -> LoginUserSlug

* refactor: BlogType을 도메인 용어로 수정 COLOG, RILOG

* feat: Colog인지 확인하는 도메인 로직 추가

* feat: Blog 도메인 예외 추가

* Merge branch 'develop' of https://github.com/woowacourse-teams/2026-rilog into be/feature/#45-게시글-발행-기능-구현

# Conflicts:
#	backend/src/main/java/kr/rilog/domain/auth/resolver/LoginUserSlugArgumentResolver.java

* feat: 사용자를 찾을 수 없는 예외 에러 코드 추가

* feat: UserRepository 추가

* feat: BlogRepository 추가

- 개인사용자의 블로그를 조회하는 메서드 추가

* refactor: default 생성자 문제 해결 @Autowired 적용

* feat: PostRepository 추가

* feat: PostPublishRequest 추가

* feat: PostPublishResponse 추가

* feat: PostDetail 추가

* feat: PostSaveCommand 추가

* feat: PostPublishResult 추가

* refactor: default 생성자 문제 해결

* feat: PostService 추가 및 게시글 작성 구현

- 이미지 처리는 다음 이슈에 구현

* feat: PostController 추가 및 게시글 작성 API 구현

- 이미지 처리는 다음 이슈에 구현

* feat: NoResourceException 전역 예외 처리 추가

* feat: Post 게시글 작성 단위 테스트 추가

* refactor: .gradle-codex gitignore에 추가

* refactor: NoResourceFoundException 발생 시 잘못된 예외 코드 수정

* feature: Blog 소유자인지 판단하는 도메인 로직 추가

* feature: 게시글 작성 시, 다른 개인 블로그에 글을 작성할 수 있는 엣지케이스 제거 및 테스트 코드 작성

* [Feature] #57 GitHub access token 교환 및 사용자 정보 조회 구현 (#58)

* fix: GitHub 로그인 시작 생성자 주입 대상 명확화

* feature: GitHub Access Token 교환과 사용자 조회 추가

* refactor: 소셜 로그인 provider 경계 분리

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #60 GitHub 로그인 사용자 생성과 온보딩 대기 처리 (#61)

* feature: GitHub 로그인 사용자 생성과 온보딩 대기 처리

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

* refactor: OAuth 로그인 사용자 조회 흐름과 테스트 정리

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

* fix: 생성자 충돌로 인한 정적 팩토리 메서드로 변경

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #62 전체 게시글 수 조회 API 구현 (#63)

* feature: 전체 게시글 수 조회 메서드 추가

* feature: TotalPostsCountResponse 추가

* feature: 전체 게시글 수 API 구현

* [Feature] #64 특정 게시글 상세 조회 API 구현 (#66)

* feat: hibernate Jackson 버전을 Spring Boot 4.0.x의 기본 Jackson 버전으로 명시

* feat: Post와 Author Fetch Join 메서드 추가

* feat: Post 도메인 예외 추가

* feat: 비공개 게시글 읽기 검증 로직 추가

* feat: 게시글 상세 조회 ResponseDto 추가

* feat: 게시글 상세 조회 비즈니스 로직 추가

* feat: 게시글 상세 조회 API 추가

* refactor: 잘못된 import 경로 수정

* refactor: 메서드명 readPosts에서 readPost로 변경

* refactor: Post에서 사용하지 않는 logoUrl 삭제

* fix: 메서드 시그니처 수정 누락 반영 (#71)

- logoUrl 메서드 시그니처 삭제

* feature: 자체 Access Token 발급과 검증 구현 (#67)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #68 Bearer 인증 인터셉터 구현 (#74)

* feature: Bearer 인증 인터셉터 구현

* refactor: 인증 선언과 사용자 주입 책임 분리

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feature: 역할 기반 인가 처리 구현 (#77)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feataure: 공용 텍스트 인풋 컴포넌트 구현 (#38)

* chore: placeholder 컬러 토큰 추가

* feature: 인풋 text 컴포넌트 구현

* chore: 범용 spacing 토큰 추가

* feature(Input): 아이콘/주소 prefix 등을 위해 인풋 좌측 슬롯 구현

* feature: 텍스트 영역 컴포넌트 구현

* style: css prettier 포맷 통일

* feature: left 컴포넌트를 클릭해도 input에 focus 되는 기능 추가

* feature(Textarea): 포커스 시 아웃라인 색상 지정

* test(Textarea): uncontrolled 방식의 테스트 제거

* [Feature] #72 전체 피드 게시글 목록 조회 (#79)

* feature: 전체 피드 게시글 목록 조회 메서드 구현

- 데이터 양이 많은 content 생략을 위해 Projection 사용.
- 정렬순은 하드코딩, 추후 확장성 고민해야함.

* feature: 전체피드 게시글 목록 Response 추가

- Inner Record를 사용

* feature: 전체피드 게시글 목록 조회 비즈니스 로직 추가

* feature: 전체피드 게시글 목록 조회 API 추가

* feature: 전체피드 게시글 목록 조회 API 추가

* feature: 전체피드 게시글 목록 조회 API Swagger 명세 추가

* feature: FeedService 단위 테스트 추가

* feature: 요청에 필요한 파라미터 누락 예외 상세하게 처리

* refactor: 잘못된 import 경로 수정

* [Refactor] #80 공통 응답 형식 적용 (#82)

* refactor: 공통 응답 ApiResponse 적용

- 소셜 로그인 컨트롤러는 미적용

* feature: ApiResponse 응답 적용

* refactor: 공통 응답 ApiResponse 적용

- 소셜 로그인 컨트롤러는 미적용

* feat: .gradle-user-home/ .gitignore 추가

* feature: 자체 로그인 토큰 흐름 제공 (#85)

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

Tested: git diff --check

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #84 Colog 피드에서 게시글 목록 조회 (#87)

* refactor: 전체피드 게시글 목록 조회 API에 ApiResponse 적용

* feature: 팀 피드 전체 게시글 목록 조회 메서드 추가

* feature: 팀 전체 피드 게시글 목록 응답 Dto 추가

* feature: 블로그 조회 메서드 추가

* refactor: 사용하지 않는 code 필드 제거 - ApiResponse

* feat: 팀피드 게시글 목록 조회 API 추가

* feat: 팀피드 게시글 목록 조회 비즈니스 로직 추가

* refactor: 전체 피드 게시글 목록 조회 비즈니스 로직 메서드명 수정

- 읽는다는 행위가 잘 드러나도록 read로 수정

* feature: 팀피드 게시글 조회 서비스 단위테스트코드 추가

* [Feature] #83 Refresh Token 재발급과 Rotation 처리 (#86)

* feature: Refresh Token 재발급과 Rotation 처리

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

Tested: git diff --check

* [Feature] #84 Colog 피드에서 게시글 목록 조회 (#87)

* refactor: 전체피드 게시글 목록 조회 API에 ApiResponse 적용

* feature: 팀 피드 전체 게시글 목록 조회 메서드 추가

* feature: 팀 전체 피드 게시글 목록 응답 Dto 추가

* feature: 블로그 조회 메서드 추가

* refactor: 사용하지 않는 code 필드 제거 - ApiResponse

* feat: 팀피드 게시글 목록 조회 API 추가

* feat: 팀피드 게시글 목록 조회 비즈니스 로직 추가

* refactor: 전체 피드 게시글 목록 조회 비즈니스 로직 메서드명 수정

- 읽는다는 행위가 잘 드러나도록 read로 수정

* feature: 팀피드 게시글 조회 서비스 단위테스트코드 추가

* feature: Refresh Token 재발급과 Rotation 처리

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

Tested: git diff --check

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>
Co-authored-by: koreaioi <koreaioi@gachon.ac.kr>

* feature: 로고이미지, 깃허브주소, 이메일 필드 추가 (#91)

* feature: #22 공용 모달 컴포넌트 구현 (#35)

* feature: 공용 모달의 접근성과 표시 동작 기반 마련

* feature: 단일 확인 동작을 제공하는 알림 모달 구성

* feature: 위험도와 처리 상태를 반영하는 확인 모달 구성

* feature: 다양한 콘텐츠 구성을 수용하는 범용 모달 제공

* chore: 프론트엔드 pnpm workspace 패키지 범위 명시

* refactor: 모달 Props 계약의 컴포넌트별 소유권 정리

* design: 모달 모서리 곡률을 서비스 스타일에 맞게 조정

* design: 모달 닫기 버튼의 클릭 영역과 배치 조정

* design: 모달 기본 액션 버튼의 높이와 최소 너비 통일

* fix: 모달 표시 중 배경 페이지 스크롤 차단

* design: 모달 백드랍 색상을 중립적인 톤으로 조정

* fix: 모달 pending 중 모든 액션과 종료 동작 차단

* refactor: 모달 처리 상태 계약 통일

* design: 버튼 포커스 링 여백 제거

* design: 버튼 포커스 표현을 아웃라인으로 통일

* feature: #36 공용 파일 인풋 컴포넌트 구현 (#75)

* feature: 파일 업로더 컴포넌트 구현

* feature: 이미지 업로더 컴포넌트 구현

* refactor(FileUploader): 불필요한 props 제거

* feat: change 핸들러 인터페이스 추가

* fix: 파일 업로더에 키보드 접근이 가능하도록 수정

* feature: 이미지 파일 검증 로직 추가

* [Feature] #89 팀 생성 로직 구현 (#95)

* feature: 팀 블로그 생성 도메인 모델 추가

* feature: 팀 블로그 생성 서비스 구현

* feature: 팀 블로그 생성 API 제공

* feature: 팀 블로그 URL 정보 생성 요청 반영

* refactor: @requiredargsconstructor 사용하도록 변경

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #88 나의 팀 목록 요약 API (#96)

* feature: 나의 팀 리스트 조회 메서드 추가

* feature: MyCologResponse 추가

* feature: 나의 팀 목록 조회 비즈니스 로직 추가

* feature: 나의 팀 목록 조회 API 추가

* feature: 나의 팀 목록 조회 단위테스트 추가

* feature: BlogController에 ApiSpec 명세 적용

* hofix: 생성자 중복 삭제 (#101)

* [Feature] 팀 멤버 초대 API 구현 (#98)

* feature: 팀 멤버 초대 API 구현

* fix: CologService 오류 수정

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* fix: Clock 필드 주입 삭제 (#104)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feature: 멤버 초대용 유저 정보 조회 제공 (#106)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #103 사용자 닉네임 슬러그 유효성 검사 구현 (#109)

* feat: 닉네임, 슬러그로 조회 메서드 추가

* feat: 닉네임, 슬러그 중복 예외 추가

* feat: 닉네임, 슬러그 중복검사 비즈니스 로직 추가

* feat: 닉네임, 슬러그 중복검사 API 구현

* feat: 닉네임, 슬러그 중복검사 테스트 코드 작성

* feature: 팀 상세 조회 API 구현 (#111)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feature: 팀 프로필 조회 API 구현 (#113)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #110 colog 전체 멤버 목록 API 구현 (#114)

* feat: 팀목록 조회 메서드 추가

* feat: 팀목록 조회 비즈니스 로직 추가

* feat: 팀목록 멤버 조회 API 추가

* feat: 팀목록 멤버 조회 테스트 코드 추가

* feature: 온보딩 완료 후 정식 인증 세션 발급 (#116)

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

Tested: git diff --check

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #117 글 작성 및 조회 권한 처리 구현 (#118)

* feature: 게시글 상세 조회 선택 인증 지원

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

Tested: git diff --check

* feature: 게시글 작성과 비공개 조회 권한 검증

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

Tested: git diff --check

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #99 S3 PresignedUrl 발급 (#119)

* build: aws sdk s3 의존성 추가

* refactor: 예외 응답 고도화

* refactor: Upload 도메인 예외 추가

* refactor: Upload 도메인 enum 추가

* feat: PresignedUrl 관련 Dto 추가

* feat: S3 관련 환경변수 추가

* feat: S3Config 추가

* feat: S3Properties 추가

* feat: PresignedUrl 발급 비즈니스 로직 추가

* feat: PresignedUrl 발급 API 추가

* refactor: Dockerfile 캐싱 적용

* feat: 등록 가능 contentType, type 예시 추가

* [Build] #123 개발서버 CI-CD 파이프라인 구축 (#124)

* build: 개발서버 CI-CD 파이프라인 구축

* build: 잘못된 Dockerfile 명시 수정

* refactor: Push 에서 deploy job이 동작하도록 수정

* feature: 프론트 연동을 위한 CORS 설정 추가 (#125)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Refactor] #127 크로스 플랫폼 설정과 GHA 캐싱 적용 (#128)

* refactor: 크로스 플랫폼 설정과 gha 캐싱 적용

* refactor: 잘못된 Dockerfile 이름 수정

* refactor: GitActions Runner 환경 ARM64 네이티브 러너 적용

* feature: 전달헤더 설정 추가 (#132)

- Swagger에서 API 요청 시 발생하는 CORS 문제 해결을 위함

* [Refactor] #129 로그인 이후 개인 블로그 생성 흐름 복구 (#130)

* fix: 로그인 이후 개인 블로그 생성 흐름 복구

* refactor: 온보딩 완료 책임의 서비스 의존 제거

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feature: #92 사이드바 구현 (#108)

* feature(Button): fullWidth 추가

* chore: navy 스케일 컬러 토큰 추가

* feature: 사이드바 컴포넌트 구현

* feature: 사이드바 접힘/열림 인터랙션 구현

* feature: 사이드바 관련 페이지 레이아웃 세팅

* feature: Button 스타일의 Link 컴포넌트를 ButtonLink로 분리

* feature: user/colog 공통 아바타 컴포넌트 구현

* feature: 사이드바 내비게이션 버튼 컴포넌트 구현

* feature: 사이드바 푸터 컴포넌트 구현

* feature: 사이드바 헤더 컴포넌트 구현

* refactor: 사이드바 컴포넌트 재구성

* test: 라우트 기반 로그아웃 동작을 버튼 기반으로 변경

* fix(Sidebar): 인가 여부 기본값 제거

* refactor(with-sidebar-layout): 메인 영역에 시맨틱 태그 사용

* feature: 공용 Divider 컴포넌트 구현

* feature: 사이드바에 Divider 추가

* fix(Sidebar): 인가 기본값 제거

* refactor(SidebarLayout): main 태그 제거

* test: 하드코딩된 UI 값 제거

* [Feature] #40 블로그 글 작성 페이지 UI 구현 (#126)

* build: BlockNote 패키지 버전 고정

* build: Pretendard 로컬 폰트 기반 제공

* design: BlockNote 스타일의 Rilog 토큰 연결

* feature: 글 작성 에디터 공개 계약 제공

* feature: 한국어 BlockNote 편집기 제공

* feature: 에디터 로드 실패 복구 상태 제공

* feature: BlockNote 브라우저 전용 로딩 경계 제공

* feature: 게시글 문서 유효성 판별

* feature: 자동 확장 제목 입력 흐름 제공

* feature: 본문 오류와 에디터 접근성 연결

* feature: 본문 이미지 로컬 업로더 제공

* feature: 글 작성 페이지의 기본 편집 흐름 제공

* feature: 글 작성 발행 진입 액션 제공

* feature: 저장되지 않은 글의 이탈 보호 제공

* feature: 게시 설정 도메인 계약과 선택 항목 제공

* feature: 대표 이미지 우선순위와 기본 미리보기 제공

* design: 파일 선택 컨트롤의 포커스 표현 통일

* feature: 접근 가능한 게시 설정 모달 제공

* feature: 게시 설정 유지와 발행 전 검증 제공

* feature: 교체 가능한 mock 발행 계약과 상세 경로 제공

* feature: 발행 상태 전이와 성공 후 이동 제공

* design: 게시 설정 모달의 경계와 포커스 표현 정돈

대표 이미지와 게시 설정 영역을 동일 비율로 배치하고 여백을 넓혀 정보 밀도를 조정한다. 모달 가장자리의 컨트롤은 focus outline을 내부에 표시해 잘림 없이 일관된 키보드 탐색 피드백을 제공한다.

Rejected: 공용 Button의 전역 outline offset 변경 | 모달 밖 버튼의 기존 시각 계약까지 바뀜
Confidence: high
Scope-risk: moderate
Directive: 모달 가장자리의 기본 컨트롤은 내부 focus outline 계약을 유지할 것
Tested: ESLint, TypeScript typecheck, component tests 86개, 키보드 focus 브라우저 확인, git diff check

* fix: 한글 조합 중 제목 Enter 이동 방지

IME 조합 중 발생한 Enter 이벤트를 본문 이동으로 처리하지 않도록
composition 상태를 확인한다.

Confidence: high
Scope-risk: narrow
Tested: PostTitleField component tests

* fix: 확정된 이탈 이동의 history 경쟁 제거

guard entry 제거와 실제 이동을 동기적으로 처리해 history.back과
fallback timer 사이의 중복 이동 가능성을 제거한다.

Rejected: popstate와 fallback timer 유지 | 이동 시점에 따라 두 경로가 경쟁할 수 있음
Confidence: high
Scope-risk: moderate
Tested: PostWriteWorkspace component tests

* fix: 유효한 상세 경로 확인 후 발행 상태 정리

발행 결과의 상세 경로를 먼저 검증해 잘못된 postId가 반환되더라도
작성 상태와 이탈 보호가 유지되도록 한다.

Rejected: 상태 정리 후 경로 생성 | 경로 생성 실패 시 작성 상태를 복구할 수 없음
Confidence: high
Scope-risk: narrow
Tested: PostWriteWorkspace component tests

* fix: BlockNote 표 셀 본문 유효성 판별

일반 content뿐 아니라 tableContent의 rows와 cells를 재귀 탐색해
표 안에 작성된 텍스트도 유효한 본문으로 인정한다.

Confidence: high
Scope-risk: narrow
Tested: post-write validation unit tests

* design: BlockNote 키보드 포커스와 블록 선택 표시 복원

BlockNote의 투명한 ring 값을 공용 focus token에 연결하고 선택된
콘텐츠에 outline을 제공해 현재 조작 대상을 식별할 수 있게 한다.

Constraint: 제목 입력은 기존 무경계 표현 유지
Rejected: box-shadow ring 추가 | 기존 outline 포커스 계약과 시각 효과가 중복됨
Confidence: high
Scope-risk: narrow
Tested: CSS formatting, production build, TypeScript

* fix: 실제 발행 제목과 길이 검증 기준 통일

제목의 앞뒤 공백을 제거한 값을 빈 값과 최대 길이 검증에 함께
사용해 실제 발행되는 제목과 검증 기준을 일치시킨다.

Confidence: high
Scope-risk: narrow
Tested: post-write validation unit tests

* design: 대표 이미지 선택 후 제어 영역 정렬

좁은 모달 열 안에서 이미지 변경과 제거 제어가 줄바꿈되지 않도록
설명과 버튼 행을 분리하고 선택 상태의 버튼 규격을 통일한다.

Rejected: viewport breakpoint 기반 flex 유지 | 실제 열 너비와 무관하게 가로 배치가 활성화됨
Confidence: high
Scope-risk: narrow
Tested: component tests, ESLint, TypeScript, production build, browser visual verification

* feat: 본문 placeholder에 마크다운 단축 문법 안내 제공

* [Feature] #93 로그인 모달 구현 (#137)

* design(Modal): 모달 내 개행 허용 및 레이아웃 조정

* feature: 로그인 모달 구현

* feature: 사이드바 로그인 버튼에 로그인 모달 연결

* feature: 로그인 모달을 전역으로 관리할 수 있도록 Context 구현

* feature: 로그인 상태에 따라 로그인 모달과 기존 액션을 분기하는 공통 훅 구현

* refactor(GuestSidebarFooter): 공통 로그인 모달 로직 적용

* [Feature] #94 온보딩 페이지 구현 (#136)

* chore: 브레이크포인트 토큰 추가

* feature: aside 기반 레이아웃 컴포넌트 구현

* feature: 프로필/커버 이미지 프리뷰 컴포넌트 구현

* feature: 공용 단일 인풋 field 컴포넌트 구현

* feature: 회원가입 폼 구현

* feature: 회원가입 페이지 구현

* design(FileUploader): ring을 outline으로 변경

* refactor: auth 하위 features를 auth/ui로 이동

* refactor: signup을 auth에서 분리

* feature: 공용 체크박스 컴포넌트 구현

* feature: 온보딩 폼에 약관 동의 추가

* fix: 온보딩 컴포넌트 import 경로 수정

* design: 존재하는 aside 영역만 표시하도록 수정

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* [Feature] #140 팀 설정 멤버관리 페이지 구현 (#142)

* feature: 코로그 멤버 모조 데이터 추가

* feature: 코로그 설정 탭 구현

* feature: 코로그 멤버 관리 멤버 행 구현

* feature: 멤버 관리 섹션 구현

* feature: 코로그 설정 내 탭 조합

* feature: 코로그 설정 페이지(멤버 관리) 구현

* design(MemberManagementSection): 우상단 버튼 간격 조정

* [Feature] #93 로그인 모달 구현 (#137)

* design(Modal): 모달 내 개행 허용 및 레이아웃 조정

* feature: 로그인 모달 구현

* feature: 사이드바 로그인 버튼에 로그인 모달 연결

* feature: 로그인 모달을 전역으로 관리할 수 있도록 Context 구현

* feature: 로그인 상태에 따라 로그인 모달과 기존 액션을 분기하는 공통 훅 구현

* refactor(GuestSidebarFooter): 공통 로그인 모달 로직 적용

* [Feature] #94 온보딩 페이지 구현 (#136)

* chore: 브레이크포인트 토큰 추가

* feature: aside 기반 레이아웃 컴포넌트 구현

* feature: 프로필/커버 이미지 프리뷰 컴포넌트 구현

* feature: 공용 단일 인풋 field 컴포넌트 구현

* feature: 회원가입 폼 구현

* feature: 회원가입 페이지 구현

* design(FileUploader): ring을 outline으로 변경

* refactor: auth 하위 features를 auth/ui로 이동

* refactor: signup을 auth에서 분리

* feature: 공용 체크박스 컴포넌트 구현

* feature: 온보딩 폼에 약관 동의 추가

* fix: 온보딩 컴포넌트 import 경로 수정

* design: 존재하는 aside 영역만 표시하도록 수정

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* fix: 아바타가 이미지 소스를 받을 수 있도록 수정

* feature: 멤버 초대 모조 데이터 추가

* feature: 멤버 초대 모달 내 멤버 행 컴포넌트 구현

* feature: 멤버 초대 모달 구현

* feature: 멤버 초대 모달 연결

* design: 멤버 초대 모달 내 스크롤 영역 조정

* refactor: 저장되지 않은 변경 가드 로직을 공통으로 분리

* feature: 멤버 수정 중 페이지 이탈 시 확인 모달 연결

* refactor: 코로그 설정 내 모든 저장되지 않은 변경을 일괄 처리할 수 있도록 개선

* fix(RootLayout): 사용자 정보 캐시 초기화 구독 컴포넌트 import 위치 수정

* feature: 코로그 설정 페이지에 셸 레이아웃 적용

* design: 멤버 목록 표 bg 및 border 설정 변경

* test: 누락된 코로그 설정 페이지 테스트 추가

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* [Feature] #146 팀 생성 페이지 구현 (#147)

* fix: left 요소가 없을 때에도 gap이 적용되는 문제 해결

* chore: 팀 커버 이미지 플레이스홀더 에셋 추가

* feature: 팀 생성 폼 구현

* feature: 팀 생성 페이지 구현

* style: 불필요한 공백 제거

* feature: 팀 생성 버튼을 링크로 변경

* test: 팀 생성 페이지 통합 테스트 추가

* fix: 팀 생성 페이지에서 취소 시 이전 페이지로 리다이렉트하도록 변경

* chore: tailwind 속성 오타 수정

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* [Feature] #81 피드 페이지 UI와 무한 스크롤 구현 (#143)

* feature: 피드 게시글 표시 모델과 날짜 포맷터 정의

* feature: 피드 카드와 이미지 fallback UI 구현

* feature: 목 데이터 기반 피드 페이지 조회 상태 구성

* feature: 피드 무한 스크롤과 요청 상태 UI 구현

* feature: 피드 위젯을 조립해 feeds 페이지 구현

* feature: 루트 진입 경로를 피드로 연결

* feature: 피드 진입 시 콘텐츠로 자연스럽게 이동

* refactor: 피드 Colog 식별자 명명 통일

* refactor: 피드 작성자 프로필 표현을 UserAvatar로 통일

* [Chore] #120 SVGR 기반 아이콘 사용 환경 설정 (#149)

* build: SVG 아이콘의 컴포넌트 사용 환경 제공

Next.js의 Turbopack과 Webpack, Vitest가 동일한 SVG import 계약을 사용하도록 구성한다.

Constraint: 개발 서버와 프로덕션 빌드 양쪽에서 SVG 컴포넌트 import가 동작해야 함
Rejected: SVG 전용 React 래퍼 유지 | 아이콘마다 반복되는 수동 마크업과 컴포넌트가 필요함
Confidence: high
Scope-risk: moderate
Directive: SVG를 URL로 사용할 때는 ?url import를 명시적으로 사용
Tested: pnpm check, Turbopack production build, Webpack production build, frozen lockfile install

* refactor: 사이드바 아이콘 표현 방식 통일

문자 기반 임시 아이콘을 제거하고 currentColor를 사용하는 SVG 컴포넌트로 교체한다.

Constraint: 기존 사이드바의 크기와 디자인 토큰을 유지해야 함
Rejected: 범용 아이콘 레지스트리 추가 | 현재 사용 범위에 비해 추상화 비용이 큼
Confidence: high
Scope-risk: narrow
Tested: pnpm check, 사이드바 component test, visual verification

* style: 기존 코드의 불필요한 빈 줄 정리

검증 도구가 요구하는 포맷을 맞추기 위해 동작에 영향을 주지 않는 공백만 정리한다.

Scope-risk: narrow
Tested: pnpm check

* [Feature] #144 게시글 상세 뷰 구현 (#148)

* feature: BlockNote 게시글 콘텐츠의 서버 렌더링 기반 마련

게시글 상세 화면은 작성 시 저장한 BlockNote 블록을 동일한 스키마로 받아 서버에서 HTML로 변환한다. 렌더러와 도메인 계약, 필요한 패키지 및 Next 외부 패키지 설정을 한 변경 단위로 묶었다.

Constraint: 실제 게시글 API 연동은 후속 작업으로 분리한다
Rejected: 클라이언트 에디터로 읽기 화면을 렌더링 | 읽기 전용 화면에 불필요한 클라이언트 경계를 만든다
Directive: API 연동 시 content 필드는 BlockNote Block 배열 계약을 유지해야 한다
Tested: 대상 파일 Prettier 및 ESLint, staged diff check
Not-tested: develop 기준 기존 포맷 및 인증 import 오류로 전체 pnpm check 미실행

* feature: 게시글 상세 정보와 본문의 도메인 표현 구성

게시글 제목과 작성자, 발행일, 대표 이미지, CoLog 요약 및 본문 HTML 출력을 게시글 도메인 UI로 분리했다. 각 컴포넌트는 화면 조립이나 목차 행동을 알지 않고 게시글 데이터 표현에만 집중한다.

Constraint: 실제 게시글 데이터 조회는 후속 API 작업에서 연결한다
Rejected: 상세 위젯 한 파일에 모든 마크업 배치 | 도메인 표현과 화면 조립의 변경 이유가 섞인다
Directive: 상세 도메인 UI에는 목차 상태나 route 조회 책임을 추가하지 않는다
Tested: 대상 파일 Prettier 및 ESLint, staged diff check
Not-tested: develop 기준 기존 포맷 및 인증 import 오류로 전체 pnpm check 미실행

* feature: 게시글 구조에 맞춘 목차 탐색 흐름 제공

Swagger 계약을 대신하는 상세 목 데이터와 BlockNote h1부터 h3까지의 heading 추출, 현재 위치 추적 및 부드러운 앵커 이동을 하나의 상세 탐색 기능으로 구성했다.

Constraint: 실제 게시글 API 연결 전까지 Swagger 계약 기반 목 데이터를 사용한다
Rejected: 렌더링된 HTML을 다시 파싱해 목차 생성 | 원본 BlockNote 구조와 ID 정보를 중복 해석한다
Directive: API 연동 후에도 목차 입력은 렌더링 HTML이 아니라 BlockNote Block 배열을 사용한다
Tested: 대상 파일 Prettier 및 ESLint, staged diff check
Not-tested: 실제 API 응답 및 브라우저 E2E는 후속 조립 커밋에서 검증

* feature: 게시글 상세 화면의 공개 경로 연결

게시글 도메인 UI와 목차 기능을 읽기 화면으로 조립하고 /posts/[postId] 경로에서 목 데이터를 제공한다. 존재하지 않는 게시글에는 피드 복귀가 가능한 404 화면을 제공하며 BlockNote 본문 스타일을 route 범위에서 적용한다.

Constraint: 실제 상세 API 연결 전까지 route는 동기 목 데이터 조회를 사용한다
Rejected: page 컴포넌트에 상세 마크업 직접 구현 | route와 화면 조립 책임이 결합된다
Directive: API 연동 시 page의 데이터 조회만 교체하고 PostDetail 조립 계약을 유지한다
Tested: 대상 파일 Prettier 및 ESLint, staged diff check
Not-tested: 게시글 상세 Playwright 시나리오는 후속 테스트 작업에서 검증

* fix: develop 병합에서 누락된 BlockNote 서버 외부화 설정 복구

* chore: 각 태그 별 개행 간격 보정

* chore: 각 태그 별 개행 간격 보정 (헤딩 태그 유동적인 개행 간격 설정)

* feature: 전역에서 접근 가능한 공통 푸터 제공 (#69)

브랜드·정책·연락처 정보를 모든 페이지에서 일관되게 제공하도록 정적 Footer를 루트 레이아웃에 연결한다. 재사용 가능한 브랜드와 contact SVG는 public 자산으로 관리하고, 좁은 화면과 키보드 탐색을 회귀 테스트로 보호한다.

Constraint: 실제 정책 페이지와 연락 채널 URL은 후속 작업에서 연결
Rejected: 인라인 SVG 유지 | 다른 화면에서 동일 자산을 재사용하기 어려움
Confidence: high
Scope-risk: moderate
Directive: 실제 채널이 확정되면 Footer의 mock URL만 교체
Tested: format, lint, typecheck, unit 10개, component 11개, build, home E2E 3개

* [Feature] #139 팀 설정 프로필 페이지 구현 (#150)

* refactor: 코로그 요약과 프로필 타입을 단일 정보 모델로 통합

* feature: 코로그 프로필 설정값 검증과 정규화 정책 추가

* refactor: GitHub 로그인 아이콘을 공용 SVG 자산으로 통합

* feature: 코로그 프로필 이미지와 정보 입력 UI 구현

* feature: 팀 설정에 프로필 저장과 이탈 방지 흐름 연결

* test: 팀 프로필 설정의 저장과 이탈 방지 흐름 검증

* fix: 게시글의 긴 제목이 카드 내부에서 줄바꿈되도록 수정

* [Feature] #141 팀 설정 위험 영역 페이지 구현 (#151)

* feature: 팀 설정에서 영구 삭제 전 위험과 결과를 확인

* refactor: 팀 설정 기능을 동등한 섹션 계층으로 정렬

* feature: 클릭 가능한 공통 요소에 포인터 커서 제공

* refactor: SVG 아이콘을 소유 영역으로 이동해 컴포넌트 사용 방식 통일

* refactor: 워크스페이스에서 프로필 저장 상태 책임 분리

* refactor: 활성 설정 탭만 렌더링해 이탈 상태 관리 단순화

* [Feature] #145 팀 홈 페이지 구현 (#153)

* feature(PageShell): header가 전체 크기를 차지하는 레이아웃 추가

* chore: 깃허브/메일/링크 아이콘을 shared로 이동

* chore: 미트볼 아이콘 추가

* chore: 코로그 홈 mock 데이터 추가

* feature: 코로그 홈 히어로 컴포넌트 구현

* feature: 코로그 홈 멤버 목록 컴포넌트 구현

* design: 히어로 상단 더보기 버튼 반응형 위치 조정

* feature: 코로그 홈 게시글 목록 컴포넌트 구현

* test: 코로그 홈 내 컴포넌트 테스트 추가

* feature: 코로그 홈 페이지 구현

* design: 코로그 홈 반응형 추가

* design: 코로그 설명 및 코로그 게시글 캡션 폰트 사이즈 조정

* chore: 코로그 홈 페이지 진입 로직 주석 추가

* design: 코로그 홈 히어로 깃허브/메일 아이콘 사이 간격 조정

* refactor: 기존 도메인 model을 사용하도록 수정

* design: 코로그 소개 글 max-width 설정

* design(PageShell): main 섹션이 항상 중앙 배치되도록 수정

* design(CologMemberList): 유저 아바타 크기 조정

* [Refactor] #134 User Entity VO 고도화 (#158)

* feature: Email VO 추가

* feature: Nickname VO 추가

* feature: Slug VO 추가

* refactor: UserEntity VO 포장 적용

* refactor: Email은 VO이므로 null에 대한 방어 로직 적용

* refactor: Test Code Builder 수정

* feat: slug는 소문자로 저장한다는 정책 반영

* [Feature] #135 운영 서버 ci/cd 배포 파이프라인 추가 (#152)

* ci: 운영 서버 배포 파이프라인 추가

* ci: 운영 이미지 태그의 버전 변수 관리

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feature: 공개 팀 프로필 조회 경로 통합 (#165)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Chore] #155 공통 레이아웃 및 피드 UI 정리 (#157)

* feature: 브라우저 탭 파비콘 적용

* refactor: 루트 피드 리다이렉트를 설정으로 이전

* style: 게시글 상세 헤딩 하단 여백 확대

* refactor: 공통 Shell 합성 구조로 페이지 레이아웃 정리

* style: 게시글 피드 카드 가독성 조정

* chore: 게시글 상세 mock data 수정

* chore: tailwind css 속성값에 맞게 변경

* chore: sidebar/footer shell 제거

* chore: footer가 있는 페이지의 하단 여백을 공용 layout으로 추출

* [Feature] #159 게시글 상세조회 전용 단일 API 추가 (#163)

* feat: slug로 Blog 조회 메서드 추가

* feat: 특정 Post 조회시 연관관계를 함께 조회하는 메서드 추가

* feat: 특정 블로그의 전체 게시글 수 count 조회 메서드 추가

* feature: 해당 블로그의 팀원수를 count하는 집계 메서드 추가

* feature: 게시물 읽기 검증 및 소속 판단 로직 구현

- 테스트 코드추가

* feature: 게시글 소속에 따른 유동적인 응답을 제공하는 Dto 추가

* feature: 블로그의 특정 게시물을 상세 조회하는 통합 API 구현

* refactor: 기존 게시글 상세 조회 API를 V2로 마이그레이션

* feature: rilog, colog에 따른 응답 형식 변환을 Swagger 명세로 작성

* refactor: Controller 네이밍 & 어노테이션 순서 수정

* refactor: Colog 소속은 getColog를 사용하도록 변경

* refactor: 기존 PostDetailResponse
dV2를 PostDetailResponse로 네이밍 이전

* refactor: 도메인 용어를 affiliation에서 owner로 변경

* feature: 마지막 개행 추가

* feature: PostDetailResponse에 잘못된 블로그가 저장되지 않도록 방어하는 테스트 코드 추가

* refactor: jsonPath 수정

* [Feature] #156 팀 생성 페이지 로직 추가 (#160)

* feature: 팀 생성 구조 및 플로우를 팀 프로필 설정과 통일

* refactor: 코로그 생성 및 프로필 수정 공통 폼을 도메인 레이어로 분리

* chore: are로 시작하던 변수명을 is로 수정

* fix(CologCreateForm): 병합 충돌 과정에서 망가진 코드 복구

* fix(CologHomeHero): 테스트 용으로 남아있던 프로필 소개 repeat 제거

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>
Co-authored-by: JetProc <soonjae8297@gmail.com>

* [Refactor] #172 affiliation에서 owner로 수정 (#173)

* [Feature] #161 모바일 반응형 대응 (#162)

* feature: 모바일용 하단 내비게이션바 추가

* design: 모바일 뷰에서도 게시글 상세 본문 텍스트를 16px로 통일

* design: 에디터 및 게시글 상세 list 요소 상하에 여백 추가

* feature: 모바일에서 발행 버튼을 하단으로 이동

* design: 푸터 모바일 반응형 추가

* refactor: 코로그 게시글에서도 PostFeedImage를 사용하도록 수정

* design: 코로그 홈 게시글 리스트 제목 폰트 사이즈 조정

* feature: 모바일용 date format 추가

* feature: 코로그 게시글 목록 닉네임에 truncate 추가

* design(CologPostList): 닉네임 우측 여백 제거

* design(Footer): 모바일 뷰에서 약관 제거

* feature: 모바일 뷰에서 하단 내비게이션바 대신 상단 헤더 사용

* design: 모바일 헤더 프로필에 border 추가

* fix: 사이드바 ui에서 로그아웃이 위로 옮겨짐 현상의 스파이 적출

* fix: footer 좌측에 여백이 중복으로 적용되던 문제 수정

* chore: format-published-date-mobile 파일을 기존 파일에 병합 및 모바일 여부를 인자로 받을 수 있도록 리팩토링

---------

Co-authored-by: JetProc <soonjae8297@gmail.com>

* [Feature] #170 온보딩 폼 로직 연결 (#174)

* feature: 온보딩 폼 로직 추가

* chore(get-service-url-label): 네이밍 규칙에 맞지 않는 파일명 수정

* test(BlockNoteEditor): placeholder 관련 테스트 수정

* chore: navigate 라우터에 replace('/') 속성 추가

* feature: 온보딩 입력 유효성 검사 로직 추가

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>
Co-authored-by: JetProc <soonjae8297@gmail.com>

* [Refactor] #166 공개 블로그 게시글 목록 조회 제공 (#169)

* feature: 공개 블로그 게시글 목록 조회 제공

* fix: 공개 블로그 경로의 골뱅이 표기 복원

* fix: 공개 블로그 조회의 삭제 블로그 제외

공개 블로그 게시글 목록 조회에서 삭제된 블로그를 제외하도록 slug 조회 계약을 변경하고 공개 프로필 조회 진입점을 BlogController와 BlogService로 이동한다.

Tested: backend ./gradlew test

* refactor: 게시글 피드의 블로그 응답 이름 통일

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Fix] #171 코로그 설정 페이지 중첩 스크롤 문제 해결 (#175)

* feature: 코로그 프로필 설정 중첩 스크롤 제거

* refactor: 섹션이 page shell을 관리하도록 변경

* [Refactor] #167 라우트 경로 정리 (#178)

* refactor: App Router 페이지를 통일된 URL 구조로 재배치

* refactor: 내부 링크를 @slug 기반 라우트 계약으로 통일

* refactor: 코로그 설정 탭을 URL query와 동기화

* [Feature] #176 전체 피드 게시물 목록 조회 api 함수 구현 (#181)

* docs(frontend/AGENTS): api 아키텍처 관련 에이전트 지침 추가

* feature: 전체 피드 목록 조회 api 함수 구현

* config(next.config): mock 데이터 수용을 위해 remotePattern 전체 허용

* refactor: ssr prefetch에도 대응할 수 있도록 option/prefetch/query를 모아 관리하는 구조로 개편

* feature: 전체 피드 목록 조회 api 연동

* refactor: src/api 구조 개선

* chore: read-full-feed-posts.md task 파일 삭제

* chore: refactor-query-mutation task 파일 삭제

* refactor: 함수명은 축약하지 않은 상태로 복구

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* fix: 라우터 슬러그에 undefined 되던 버그 수정 (#185)

* [Refactor] #177 blogid를 slug로 통일 (#180)

* refactor: 멤버초대 검증 로직을 BlogMember 내부로 응집화

* refactor: cologId 대신 slug로 통일

* refactor: cologId 대신 slug로 멤버 초대 API 수정

* refactor: 게시글 발행 시 blogId 대신 slug를 사용하도록 통일

* refactor: BlogMember는 blogId로 조회하도록 개선

* refactor: 탈퇴된 Blog는 조회하지 않도록 JPA 쿼리 메서드에 반영

* [Feature]#186 게시글 상세 조회 api 구현 (#188)

* refactor: 피드 API 모듈을 shared 영역으로 이동

* feature: 게시글 상세 조회 API 연동

* refactor: 응답 필드명과 게시글 소유자 구조 통일 (#182)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Refactor] #191 게시글 응답의 작성자 이름 필드명 통일 (#193)

* refactor: 게시글 응답의 작성자 이름 필드명 통일

* test: 전체 피드의 팀 소유자 응답 계약 보강

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Fix]  #189 피드 응답 필드명/소유자 구조 통일 반영 (#190)

* feature: 바뀐 백엔드 응답 형식에 맞게 반영

* fix: 블로그 상세 조회 API 타입 통일 및 author 필드명 호환성 처리

* [Feature] #187 공통 예외처리 로직 구현 (#194)

* chore: 에러 코드 상수화

* style: import문 정렬 수정

* chore: 서버 에러 응답 타입 정의

* feature: 서버 에러 정규화 로직 구현

* test: 테스트 내 401 에러 응답 공통 모듈로 분리

* feature: 블록노트 content 타입을 더 구체적으로 정의

* feature: 에러 정규화 로직을 가진 apiRequest/apiClient 구현 및 적용

* feature: 에러 정규화 로직을 가진 apiRequest/apiClient 구현 및 적용

* fix: 누락된 토큰 재발급 실패 이벤트 발행 로직 연결

* refactor: ky instance 생성 함수명 및 파일명 변경

* fix: requires auth 관련 로직 제거

* refactor: 오류 분류 세분화

* feature: Tanstack Query 전역 재시도 정책 설정

* feature: 폼 필드 에러 추출 함수 구현

* test: 요청 재시도 관련 테스트 추가

* refactor: 응답 필드명과 게시글 소유자 구조 통일 (#182)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* fix: kind/category 혼용되는 용어를 type/kind로 정리

* fix: 백엔드 Author 속성 코드 롤백

* fix: 백엔드 Author 속성 코드 롤백

---------

Co-authored-by: 진리로 <riro12@naver.com>

* [Refactor] #192 Blog Entity의 String slug를 Slug VO로 적용 (#195)

* refactor: Blog Entity의 String slug를 Slug VO로 적용

* refactor: Slug를 Blog 패키지로 이동한다.

* refactor: slug로 Blog 조회 이후는 id를 사용하도록 개선

* fix: Feed 조회 시, Slug VO도입으로 인한 JPQL 파싱 문제 해결 (#199)

* chore: backend-prod 라벨 추가 (#202)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Refactor] #196 프론트엔드 모델 구조 리팩터링 (#203)

* chore: VSCode 작업 환경 설정 업데이트

* refactor: 도메인 계층 모델 구조 단일화 및 통합

* refactor: 코로그 관련 피처 model 및 lib 책임 분리

* refactor: 게시글 상세 피처 구조 개선 및 ID 매핑 수정

* refactor: 게시글 피드 피처 model 및 lib 책임 분리

* refactor: 게시글 작성 피처 model 및 lib 책임 분리

* refactor: 회원가입 피처 model 및 lib 책임 분리

* refactor: 게시글 피드 카드 및 관련 UI 컴포넌트를 post-feed 피처로 이전

* [Chore] #197 프론트엔드 배포 세팅 (#200)

* chore: pm2 스크립트 추가

* chore: CD 배포 파이프라인 구축 및 self-hosted 러너 연동

* chore: 워크플로우 수동 테스트 수단 추가

* chore: 워크플로우 수동 실행 시 배포 스크립트까지 실행되도록 수정

* chore: 임시로 PR 업데이트 시에도 배포 스크립트가 돌아가도록 설정

* chore: TARGET_DIR 경로 수정

* chore: NVM_DIR 경로 수정

* chore: node 설치 스크립트 추가

* chore: 환경변수 동적 할당 방식으로 변경

* chore: 환경변수를 절대경로로 변경

* chore: 전역 설치된 pnpm 및 pm2를 사용하도록 스크립트 수정

* fix: nvm 로드하는 코드 추가

* fix: nvm 파일 경로 확인되는지 디버깅

* fix: node와 pnpm 조합으로 변경

* fix: ssh 접속 환경과 동기화하는 코드 추가

* chore: NVM 경로를 환경변수 기반으로 변경

* chore: corepack 기반으로 pnpm 실행하도록 수정

* chore: 디버깅 코드 추가

* fix: nvm 자체 설치 로직 추가

* fix: pm2 자동 종료 정책 예외 처리

* chore: 초기 배포 스크립트로 복구

* chore: npm 경로 설정

* chore: env secret 이름 변경

* fix: 배포 환경 무한 재렌더 문제 해결

* chore: 요청 응답 공통 로깅 추가

* fix: 남아있는 배포 환경 무한 재렌더 문제 해결

* chore: 배포 스크립트를 프로덕션으로 전환

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* [Feature] #205 파일 업로드 api 구현 (#206)

* feat: 파일 업로드를 위한 Presigned URL API 및 클라이언트 구현

* refactor: Content-Type 방어 로직 추가 및 Presigned 네이밍 일관성 정렬

* refactor: S3 업로드 시 kyInstance 재활용 및 외부 URL 인증 토큰 주입 방어

* refactor: 토큰 만료 응답 판별 로직 캡슐화 및 타입 안정성 개선

---------

Co-authored-by: 송아영 <azerosong@gmail.com>

* [Feature] #207 getpublicprofile api 프론트엔드 연동 (#208)

* feature: 공개 블로그 프로필 조회 API 및 타입 정의

공개 블로그 프로필 정보를 조회하는 백엔드 엔드포인트(/v1/blogs/@{slug}) 호출 함수와 응답 인터페이스를 추가한다.

Tested: readBlogPublicProfile 단위 테스트 통과

* feature: 공개 블로그 프로필 React Query 훅 및 옵션 추가

공개 블로그 프로필 조회를 위한 query key, query options, useQuery 훅 및 prefetch 함수를 추가한다.

Tested: vitest 단위 테스트 및 타입 검사 통과

* feature: 블로그 홈 프로필 정보 API 연동

기존의 목 데이터를 제거하고 실제 getPublicProfile API를 호출하여 블로그 홈의 헤더 프로필 정보를 렌더링한다.
응답 데이터를 화면 컴포넌트 규격에 맞게 변환하는 매핑 유틸 함수를 추가한다.

Tested: mapCologProfileResponse 단위 테스트 통과

* [Feature] #204 서비스 통합테스트 유틸 ServiceSupport 추가 (#220)

* build: 테스트 DB h2 의존성 추가

* feature: 테스트 격리를 위한 DatabaseCleaner 추가

* feature: DatabaseCleanerConfiguration 설정 추가

* feature: 서비스 통합테스트 유틸 ServiceSupport 추가

* feature: application-test.yaml 추가

* chore: 사용하지 않는 주석 제거

* feature: Slug, Nickname 중복검사 서비스 통합테스트 작성

* refactor: 개행 두번을 하나로 삭제

* refactor: 잘못된 서비스 호출 오류 수정

* [Feature] #210 로그아웃 API 제공 (#216)

* feature: 로그아웃 API 제공

* refactor: Refresh Token 쿠키 주입 방식 정리

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feature: @LoingUserId, @LoginUserSulg 어노테이션 스웨거 무시 설정 추가 (#222)

* [Feature] #217 내 블로그 목록 조회 api 연동 (#223)

* feature: 내 블로그 목록 요약 조회 api 함수 구현

* test: 테스트용 QueryClient 구현

* feature: 사이드바 팀 내비게이션에 내 팀 목록 요약 조회 api 연동

* [Feature] #225 토큰 기반 유저정보 조회 API 추가 (#228)

* refactor: 패키지 유지 용도의 .gitkeep 삭제

* feature: 유저 정보 조회 비즈니스 로직 추가 (by UserId)

* feature: 토큰 기반 유저 정보 조회 API 추가

* refactor: 닉네임, 슬러그 중복 검사 코드 위치 수정

* test: 유저 정보 조회 서비스통합테스트 코드 추가

* feature: 누락된 UserApiSpec 추가

* [Build] #231 deploy job 셀프호스트 라벨 추가 (#232)

* [Feature] #227 GitHub OAuth 프론트 콜백 흐름 제공 (#229)

* feature: GitHub OAuth 프론트 콜백 흐름 제공

* feature: 내부 경로 검증 추가

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #211 코로그 홈 게시글 피드 조회 api 연동 (#226)

* feature: 공개 블로그 게시글 목록 조회 API 및 쿼리 구현

* feature: 코로그 홈 게시글 목록 API 연동 및 무한 스크롤 적용

* [Refactor] #211 colog-home 위젯 내부 UI를 features 계층으로 분리

- colog-home 위젯의 CologHomeHero, CologPostList를 위젯의 Public UI(조합 레이어)로 격상
- 기존 colog-home/ui에 혼재되어 있던 기능별 표현 로직을 features 하위(colog-profile, colog-members, colog-post-feed)로 추출
- CologPostList에 스켈레톤 UI(CologPostFeedSkeleton) 적용 및 관련 훅 이동
- page.tsx 내의 불필요한 데이터 fetch 및 매퍼 로직을 제거하고 각 위젯/기능이 스스로 데이터를 책임지도록 개선

* [Feature] #219 멤버 추가 시 유저 정보 조회 api 연동 (#230)

* feature: 슬러그 기반 유저 정보 조회 api 함수 구현

* feature: 멤버 초대 모달 유저 정보 조회 api 함수 연동

* refactor: 멤버 초대 시 유저 조회 로직을 mutation으로 리팩터링

* [Feature] #224 토큰 기반 유저 정보 조회 api 연동 (#234)

* style: 불필요한 공백 제거

* feature: 토큰 기반 유저 정보 조회 api 함수 구현

* feature: 유저 관련 쿼리에 인가 쿼리 키 추가

* feature: 마스터토큰 기반 임시 token provider 구현

* feature: 전역 로그인 상태를 context로 관리

* feature: 전역 인가 상태를 기반으로 분기 로직 수정

* feature: 로그아웃/토큰 만료 시 인증 상태 초기화 로직 추가

* feature: 토큰이 없는 경우 토큰 기반 api가 호출되지 않도록 방어

* feature: map 변환 함수 추가

* [Feature] #213 팀 블로그 생성 api 연동 (#235)

* refactor(colog): 이메일 필드 완전 제거 및 잔재 정리

* [Feature] #213 팀 블로그 생성 API 및 타입 추가

* [Feature] #213 팀 블로그 생성 useMutation 훅 추가

* [Feature] #213 팀 블로그 생성 폼 실제 API 연동 및 모의 데이터 제거

* [Test] #213 팀 블로그 생성 폼 연동 테스트 업데이트

* [Hotfix] #236 멤버 모의 데이터 누락 복구 (#237)

* [Feature] #209 깃허브 소셜 로그인 구현 (#238)

* feature: 깃허브 소셜 로그인 구현

* refactor: auth api 경로를 shared 하위로 이동

* feature: 소셜 로그인 뒤 헤더로부터 토큰을 추출하는 로직 추가

* [Feature] #240 환경변수 추가 설정 (#243)

* refactor: RefreshToken SameSite Option 환경변수로 분리

* feature: AWS_S3_DIRECTORY application.yaml에 환경변수 추가

* [Featur…
Wlsflfh added a commit that referenced this pull request Aug 24, 2026
* chore: 저장소 공통 제외 규칙 설정 (#6)

* docs: 프로젝트 하네스 기본 기준 정리 (#8)

* chore: 파트별 변경의 리뷰 요청 자동화 (#12)

* [Chore] #9 프론트엔드 초기 세팅 (#10)

* chore: 프론트엔드 공통 실행·검증 환경 구성

* docs: 프론트엔드 개발 및 협업 기준 문서화

* chore: 미사용 코드와 빈 줄 검사 강화

* docs: 작업 범위별 브랜치 명명 기준 통일 (#17)

* [Chore] #14 프론트엔드 디자인 토큰 구성 (#18)

* design: 공통 타이포그래피 토큰 정의

* design: 색상과 버튼 상태 토큰 정의

* design: 전역 스타일의 의미 기반 토큰 연결

* chore: Tailwind CSS 편집기 진단 설정 공유

* design: 버튼 토큰의 유틸리티 연동

버튼의 상태·색상·크기 토큰을 Tailwind theme namespace로 옮겨 공용 컴포넌트에서 이름 있는 유틸리티로 조합할 수 있게 한다.

Constraint: Tailwind CSS v4 theme namespace를 통해 유틸리티를 생성해야 한다
Rejected: :root 버튼 변수 유지 | 컴포넌트에서 일관된 유틸리티 조합 불가
Confidence: high
Scope-risk: narrow
Directive: 버튼 상태와 foreground 토큰은 Button 컴포넌트 variant 조합에서 사용한다
Tested: Prettier, ESLint, TypeScript, Vitest, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 실제 Button 컴포넌트의 키보드 상호작용

* design: focus ring 토큰의 의미 명확화

키보드 focus에 사용하는 색상임을 이름에 드러내고 Tailwind ring 유틸리티와 동일한 의미로 연결한다. 버튼 토큰 변경으로 참조가 사라진 radius mapping도 함께 제거한다.

Constraint: 모든 인터랙션 요소가 공통 focus 색상을 사용해야 한다
Rejected: --focus 이름 유지 | 색상 용도와 적용 대상이 모호함
Confidence: high
Scope-risk: narrow
Directive: 신규 interactive component는 버튼 전용 별칭 대신 ring-focus-ring을 사용한다
Tested: Prettier, ESLint, TypeScript, Vitest, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 실제 브라우저 keyboard focus 시각 점검

* design: 숫자형 타이포그래피 스케일 정리

의미가 겹치는 본문·라벨 토큰을 크기 중심의 숫자 스케일로 통합해 역할별 행간과 자간을 컴포넌트에서 조합할 수 있게 한다.

Constraint: 현재 Figma에서 확인된 14px, 16px, 20px, 64px 위계를 유지해야 한다
Rejected: 역할별 글자 크기 토큰 유지 | 같은 크기의 중복 선언과 확장 기준이 불명확함
Confidence: high
Scope-risk: narrow
Directive: 새 글자 크기는 실제 디자인 사용처가 확인될 때만 숫자 스케일에 추가한다
Tested: Prettier, ESLint, TypeScript, Vitest, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 미구현 화면에서의 시각적 위계 검토

* design: 역할 기반 타이포그래피 토큰 체계 확장

기존 숫자형 글자 크기 토큰을 역할 기반의 caption, label, body, title, heading, display 체계로 재구성해 화면 코드가 의도를 드러내는 유틸리티를 사용할 수 있게 한다.

Constraint: Tailwind CSS v4 text namespace와 숫자형 단계 명명 규칙을 유지해야 한다
Rejected: 기존 숫자형 scale 유지 | 동일한 크기의 역할과 사용 맥락을 표현할 수 없음
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: 신규 타이포그래피는 기존 역할을 재사용하고, 실제 사용처가 확인될 때만 단계를 추가한다
Tested: Prettier, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 구현 예정 화면에서의 시각적 위계 점검

* design: 홈 화면에 의미 기반 타이포그래피 적용

홈 화면의 기본 Tailwind 글자 크기를 역할 기반 토큰으로 바꿔 디자인 시스템이 정의한 행간과 자간을 일관되게 적용한다.

Constraint: 페이지 제목과 본문은 앞선 타이포그래피 토큰 커밋을 소비해야 한다
Rejected: text-4xl과 text-base 유지 | 화면마다 기본 scale과 의미 기반 토큰이 혼재함
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: 신규 화면은 기본 Tailwind font-size 대신 의미 기반 text 토큰을 우선 사용한다
Tested: Prettier, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 브라우저별 실제 렌더링의 시각적 위계 점검

* [Chore] #15 ky config/client 설정 (#23)

* chore: config 폴더 제거

* chore: api client 테스트를 위한 의존성 설치

* feature: 토큰 재발급 로직을 포함하는 api client 모듈 구현

* feature: 토큰 재발급 실패 시 유저 데이터 초기화를 위한 구독발행 모델 구축

* style: import 순서 정렬

* chore: vitest config 내 alias 대상 상대경로 수정

* refactor: 토큰 재발급 실패 시 초기화 필요한 쿼리의 키를 그루핑

* feature: 토큰 재발급 실패 시 쿼리 초기화를 트리거하는 훅 컴포넌트 구현

* feature: QueryProvider 구현 및 적용

* chore(apiClient): tokenProvider 관련 TODO 추가

* chore(playwright.config): 대상 디렉터리 경로 수정

* chore: .env.example 파일 추가

* docs: 작업 범위별 브랜치 명명 기준 통일 (#17)

* [Chore] #14 프론트엔드 디자인 토큰 구성 (#18)

* design: 공통 타이포그래피 토큰 정의

* design: 색상과 버튼 상태 토큰 정의

* design: 전역 스타일의 의미 기반 토큰 연결

* chore: Tailwind CSS 편집기 진단 설정 공유

* design: 버튼 토큰의 유틸리티 연동

버튼의 상태·색상·크기 토큰을 Tailwind theme namespace로 옮겨 공용 컴포넌트에서 이름 있는 유틸리티로 조합할 수 있게 한다.

Constraint: Tailwind CSS v4 theme namespace를 통해 유틸리티를 생성해야 한다
Rejected: :root 버튼 변수 유지 | 컴포넌트에서 일관된 유틸리티 조합 불가
Confidence: high
Scope-risk: narrow
Directive: 버튼 상태와 foreground 토큰은 Button 컴포넌트 variant 조합에서 사용한다
Tested: Prettier, ESLint, TypeScript, Vitest, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 실제 Button 컴포넌트의 키보드 상호작용

* design: focus ring 토큰의 의미 명확화

키보드 focus에 사용하는 색상임을 이름에 드러내고 Tailwind ring 유틸리티와 동일한 의미로 연결한다. 버튼 토큰 변경으로 참조가 사라진 radius mapping도 함께 제거한다.

Constraint: 모든 인터랙션 요소가 공통 focus 색상을 사용해야 한다
Rejected: --focus 이름 유지 | 색상 용도와 적용 대상이 모호함
Confidence: high
Scope-risk: narrow
Directive: 신규 interactive component는 버튼 전용 별칭 대신 ring-focus-ring을 사용한다
Tested: Prettier, ESLint, TypeScript, Vitest, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 실제 브라우저 keyboard focus 시각 점검

* design: 숫자형 타이포그래피 스케일 정리

의미가 겹치는 본문·라벨 토큰을 크기 중심의 숫자 스케일로 통합해 역할별 행간과 자간을 컴포넌트에서 조합할 수 있게 한다.

Constraint: 현재 Figma에서 확인된 14px, 16px, 20px, 64px 위계를 유지해야 한다
Rejected: 역할별 글자 크기 토큰 유지 | 같은 크기의 중복 선언과 확장 기준이 불명확함
Confidence: high
Scope-risk: narrow
Directive: 새 글자 크기는 실제 디자인 사용처가 확인될 때만 숫자 스케일에 추가한다
Tested: Prettier, ESLint, TypeScript, Vitest, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 미구현 화면에서의 시각적 위계 검토

* design: 역할 기반 타이포그래피 토큰 체계 확장

기존 숫자형 글자 크기 토큰을 역할 기반의 caption, label, body, title, heading, display 체계로 재구성해 화면 코드가 의도를 드러내는 유틸리티를 사용할 수 있게 한다.

Constraint: Tailwind CSS v4 text namespace와 숫자형 단계 명명 규칙을 유지해야 한다
Rejected: 기존 숫자형 scale 유지 | 동일한 크기의 역할과 사용 맥락을 표현할 수 없음
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: 신규 타이포그래피는 기존 역할을 재사용하고, 실제 사용처가 확인될 때만 단계를 추가한다
Tested: Prettier, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 구현 예정 화면에서의 시각적 위계 점검

* design: 홈 화면에 의미 기반 타이포그래피 적용

홈 화면의 기본 Tailwind 글자 크기를 역할 기반 토큰으로 바꿔 디자인 시스템이 정의한 행간과 자간을 일관되게 적용한다.

Constraint: 페이지 제목과 본문은 앞선 타이포그래피 토큰 커밋을 소비해야 한다
Rejected: text-4xl과 text-base 유지 | 화면마다 기본 scale과 의미 기반 토큰이 혼재함
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: 신규 화면은 기본 Tailwind font-size 대신 의미 기반 text 토큰을 우선 사용한다
Tested: Prettier, Next.js build, Tailwind 유틸리티 생성 확인
Not-tested: 브라우저별 실제 렌더링의 시각적 위계 점검

* chore(createApiClient): 토큰 재발급 분기 처리 관련 TODO 추가

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* [Feature] #20 공용 버튼 컴포넌트 추가 (#21)

* feature: 서비스 전역 버튼 인터페이스 통일

* refactor: Button 타입과 크기별 스타일을 정리

Button에서만 사용하는 props 타입을 컴포넌트 파일로 옮기고 public entry의 타입 export를 제거했다.
버튼 크기별 모서리 반경도 sm/md와 lg의 위계를 드러내도록 조정했다.

Constraint: Button 타입의 외부 소비처가 없음
Rejected: 별도 타입 파일 유지 | 단일 소비처를 위한 파일 경계가 불필요함
Confidence: high
Scope-risk: narrow
Directive: 외부 타입 소비처가 생기면 필요한 타입만 public entry로 다시 공개할 것
Tested: pnpm check (format, lint, typecheck, component tests, build)
Not-tested: E2E 브라우저 흐름

* refactor: Button 전용 토큰의 소유 위치 정리

Button만 소비하는 시맨틱 토큰을 컴포넌트 폴더로 이동하고, 전역 스타일 진입점에서 등록하도록 import 경로를 분리했다.

Constraint: Tailwind 유틸리티 생성을 위해 @theme 토큰은 전역 CSS에서 import되어야 함
Rejected: foundations 토큰 폴더 유지 | Button 컴포넌트와 토큰의 소유 관계가 분산됨
Confidence: high
Scope-risk: narrow
Directive: 다른 공용 컴포넌트 전용 토큰도 소비처가 하나면 해당 컴포넌트와 함께 관리할 것
Tested: pnpm check (format, lint, typecheck, component tests, build)
Not-tested: E2E 브라우저 흐름

* [Chore] #19 전역예외처리핸들러 초기세팅 (#24)

* chore: domain 패키지 구조 유지 (#19)

* feat: InvalidParam 추가 (#19)

- 유효하지 않은 Param을 전달하기 위함.

* feat: ErrorDetail 추가 (#19)

* feat: RilogBusinessException 추가 (#19)

- 어플리케이션 최상위 커스텀 예외

* feat: ErrorInformation 추가 (#19)

- 커스텀 예외 생성자 시그니처를 Interface로 단축

* feat: GlobalExceptionInformation 추가 (#19)

* feat: GlobalExceptionHandler 추가 (#19)

- 전역 예외처리 핸들러로 한 곳에서 예외처리 관리

* docs: exception-handling.md 추가 (#19)

- 비즈니스 예외를 일관된 API 오류 응답으로 변환하는 방법을 설명

* refactor: 메서드 네이밍 수정 (#19)

* refactor: 자바 기본 예외는 초기세팅에 포함하지 않음. (#19)

* refactor: 클래스 선언 직후, 괄호 닫기 전 개행 추가 (#19)

* [Chore] #27 BaseEntity 초기세팅 (#28)

* build: Spring Data Jpa 라이브러리 추가 (#27)

* feat: BaseEntity 추가 (#27)

* feat: JpaAuditingConfig 추가 (#27)

- JpaAuditing 설정 허용

* feat: Spring Data 관련 예외처리 등록 (#27)

* docs: BaseEntity 사용 가이드.md 추가  (#27)

* chore: 프론트엔드 타입과 모듈 경계 규칙 통일 (#29)

객체 계약은 interface를 기본으로 사용하고 모듈 경계 import만 절대 경로를 사용하도록 기존 코드와 하네스를 함께 정리한다.

Constraint: 같은 모듈 내부 상대 경로는 허용
Rejected: 모듈별 barrel 유지 | 현재 공개 API 규모 대비 관리 비용과 runtime 혼합 위험이 큼
Directive: barrel 재도입은 명시적인 public API 필요가 확인된 뒤 별도 이슈 또는 ADR로 결정
Tested: Node 24.19.0에서 pnpm check 및 Playwright E2E 통과

* [Feature] #31 로그인 사용자 식별자 초기 구현 (#32)

* feat: @LoginUserId 추가 (#31)

* feat: @LoginUserSlug 추가 (#31)

* feat: 임시 LoginUserIdArgumentResolver 추가 (#31)

- 작업 병목을 막기 위한 임시 ArgumentResolver

* feat: 임시 LoginUserSlugArgumentResolver 추가 (#31)

- 작업 병목을 막기 위한 임시 ArgumentResolver

* [Feature] #30 users 테이블 구현 (#33)

* chore: service, repository 패키지 구조 추가

* refactor: HealthController 패키지 위치 변경

* refactor: HealthController 패키지 구조 변경에 의한 수정

* feature: User 테이블 구현

* feature: OnboardingStatus 구현

* test: UserTest 구현

* refactor: Onboarding 입력 값 추가

* test: Onboarding 입력 값 추가에 의한 테스트 케이스 수정

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #34 1차 MVP Entity 초기 구현 (#39)

* refactor: 잘못된 패키지 구조 형식 제거 (#34)

* feature: test 패키지 gitignore 추가 (#34)

* refactor: User 패키지로 이동 (#34)

* refactor: HealthCheckController 패키지 이동 (#34)

* feature: user entity에 UNIQUE 제약 추가 (#34)

* feature: blog entity 추가 (#34)

* feature: post entity 추가 (#34)

* feature: BlogMember entity 추가 (#34)

* feature: local.env gitignore 추가 (#34)

* refactor: BlogMember Entity 잘못된 @table name 속성 수정  (#34)

* feature: application profile별 분리  (#34)

* refactor: author를 user로 변경 (#34)

* [Feature] #42 Swagger 추가 (#44)

* build: swagger 의존성 추가 (#42)

* build: dev, local 환경에 swagger 접속 허용 (#42)

* feature: OpenApiConfig 추가 (#42)

* [Feature] #47 예외 응답 형식 변경 (#48)

* refactor: GlobalExceptionInformation getErrorCode 응답 형식 변경

* docs: 예외 Enum 사용 방식 변경으로 docs 반영

* [Feature] #49 GitHub oauth 로그인 요청 및 callback 구현 (#56)

* refactor: 인증 보조 타입의 도메인 패키지 이동

* refactor: 인증 보조 타입의 패키지 선언 정리

* feature: GitHub OAuth 로그인 요청과 callback 검증 추가

* fix: 온보딩 slug 최초 저장과 재변경 방지

* docs: 아키텍쳐 구조 설명 추가

* fix: 파라미터 버그 수정

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #45 게시글 발행 기능 구현 (#59)

* feature: Blog Entity에 owner 추가

* feature: Post Builder 패턴 적용

* refactor: 잘못 사용된 어노테이션 수정

- LoginUserId -> LoginUserSlug

* refactor: BlogType을 도메인 용어로 수정 COLOG, RILOG

* feat: Colog인지 확인하는 도메인 로직 추가

* feat: Blog 도메인 예외 추가

* Merge branch 'develop' of https://github.com/woowacourse-teams/2026-rilog into be/feature/#45-게시글-발행-기능-구현

# Conflicts:
#	backend/src/main/java/kr/rilog/domain/auth/resolver/LoginUserSlugArgumentResolver.java

* feat: 사용자를 찾을 수 없는 예외 에러 코드 추가

* feat: UserRepository 추가

* feat: BlogRepository 추가

- 개인사용자의 블로그를 조회하는 메서드 추가

* refactor: default 생성자 문제 해결 @Autowired 적용

* feat: PostRepository 추가

* feat: PostPublishRequest 추가

* feat: PostPublishResponse 추가

* feat: PostDetail 추가

* feat: PostSaveCommand 추가

* feat: PostPublishResult 추가

* refactor: default 생성자 문제 해결

* feat: PostService 추가 및 게시글 작성 구현

- 이미지 처리는 다음 이슈에 구현

* feat: PostController 추가 및 게시글 작성 API 구현

- 이미지 처리는 다음 이슈에 구현

* feat: NoResourceException 전역 예외 처리 추가

* feat: Post 게시글 작성 단위 테스트 추가

* refactor: .gradle-codex gitignore에 추가

* refactor: NoResourceFoundException 발생 시 잘못된 예외 코드 수정

* feature: Blog 소유자인지 판단하는 도메인 로직 추가

* feature: 게시글 작성 시, 다른 개인 블로그에 글을 작성할 수 있는 엣지케이스 제거 및 테스트 코드 작성

* [Feature] #57 GitHub access token 교환 및 사용자 정보 조회 구현 (#58)

* fix: GitHub 로그인 시작 생성자 주입 대상 명확화

* feature: GitHub Access Token 교환과 사용자 조회 추가

* refactor: 소셜 로그인 provider 경계 분리

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #60 GitHub 로그인 사용자 생성과 온보딩 대기 처리 (#61)

* feature: GitHub 로그인 사용자 생성과 온보딩 대기 처리

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

* refactor: OAuth 로그인 사용자 조회 흐름과 테스트 정리

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

* fix: 생성자 충돌로 인한 정적 팩토리 메서드로 변경

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #62 전체 게시글 수 조회 API 구현 (#63)

* feature: 전체 게시글 수 조회 메서드 추가

* feature: TotalPostsCountResponse 추가

* feature: 전체 게시글 수 API 구현

* [Feature] #64 특정 게시글 상세 조회 API 구현 (#66)

* feat: hibernate Jackson 버전을 Spring Boot 4.0.x의 기본 Jackson 버전으로 명시

* feat: Post와 Author Fetch Join 메서드 추가

* feat: Post 도메인 예외 추가

* feat: 비공개 게시글 읽기 검증 로직 추가

* feat: 게시글 상세 조회 ResponseDto 추가

* feat: 게시글 상세 조회 비즈니스 로직 추가

* feat: 게시글 상세 조회 API 추가

* refactor: 잘못된 import 경로 수정

* refactor: 메서드명 readPosts에서 readPost로 변경

* refactor: Post에서 사용하지 않는 logoUrl 삭제

* fix: 메서드 시그니처 수정 누락 반영 (#71)

- logoUrl 메서드 시그니처 삭제

* feature: 자체 Access Token 발급과 검증 구현 (#67)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #68 Bearer 인증 인터셉터 구현 (#74)

* feature: Bearer 인증 인터셉터 구현

* refactor: 인증 선언과 사용자 주입 책임 분리

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feature: 역할 기반 인가 처리 구현 (#77)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feataure: 공용 텍스트 인풋 컴포넌트 구현 (#38)

* chore: placeholder 컬러 토큰 추가

* feature: 인풋 text 컴포넌트 구현

* chore: 범용 spacing 토큰 추가

* feature(Input): 아이콘/주소 prefix 등을 위해 인풋 좌측 슬롯 구현

* feature: 텍스트 영역 컴포넌트 구현

* style: css prettier 포맷 통일

* feature: left 컴포넌트를 클릭해도 input에 focus 되는 기능 추가

* feature(Textarea): 포커스 시 아웃라인 색상 지정

* test(Textarea): uncontrolled 방식의 테스트 제거

* [Feature] #72 전체 피드 게시글 목록 조회 (#79)

* feature: 전체 피드 게시글 목록 조회 메서드 구현

- 데이터 양이 많은 content 생략을 위해 Projection 사용.
- 정렬순은 하드코딩, 추후 확장성 고민해야함.

* feature: 전체피드 게시글 목록 Response 추가

- Inner Record를 사용

* feature: 전체피드 게시글 목록 조회 비즈니스 로직 추가

* feature: 전체피드 게시글 목록 조회 API 추가

* feature: 전체피드 게시글 목록 조회 API 추가

* feature: 전체피드 게시글 목록 조회 API Swagger 명세 추가

* feature: FeedService 단위 테스트 추가

* feature: 요청에 필요한 파라미터 누락 예외 상세하게 처리

* refactor: 잘못된 import 경로 수정

* [Refactor] #80 공통 응답 형식 적용 (#82)

* refactor: 공통 응답 ApiResponse 적용

- 소셜 로그인 컨트롤러는 미적용

* feature: ApiResponse 응답 적용

* refactor: 공통 응답 ApiResponse 적용

- 소셜 로그인 컨트롤러는 미적용

* feat: .gradle-user-home/ .gitignore 추가

* feature: 자체 로그인 토큰 흐름 제공 (#85)

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

Tested: git diff --check

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #84 Colog 피드에서 게시글 목록 조회 (#87)

* refactor: 전체피드 게시글 목록 조회 API에 ApiResponse 적용

* feature: 팀 피드 전체 게시글 목록 조회 메서드 추가

* feature: 팀 전체 피드 게시글 목록 응답 Dto 추가

* feature: 블로그 조회 메서드 추가

* refactor: 사용하지 않는 code 필드 제거 - ApiResponse

* feat: 팀피드 게시글 목록 조회 API 추가

* feat: 팀피드 게시글 목록 조회 비즈니스 로직 추가

* refactor: 전체 피드 게시글 목록 조회 비즈니스 로직 메서드명 수정

- 읽는다는 행위가 잘 드러나도록 read로 수정

* feature: 팀피드 게시글 조회 서비스 단위테스트코드 추가

* [Feature] #83 Refresh Token 재발급과 Rotation 처리 (#86)

* feature: Refresh Token 재발급과 Rotation 처리

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

Tested: git diff --check

* [Feature] #84 Colog 피드에서 게시글 목록 조회 (#87)

* refactor: 전체피드 게시글 목록 조회 API에 ApiResponse 적용

* feature: 팀 피드 전체 게시글 목록 조회 메서드 추가

* feature: 팀 전체 피드 게시글 목록 응답 Dto 추가

* feature: 블로그 조회 메서드 추가

* refactor: 사용하지 않는 code 필드 제거 - ApiResponse

* feat: 팀피드 게시글 목록 조회 API 추가

* feat: 팀피드 게시글 목록 조회 비즈니스 로직 추가

* refactor: 전체 피드 게시글 목록 조회 비즈니스 로직 메서드명 수정

- 읽는다는 행위가 잘 드러나도록 read로 수정

* feature: 팀피드 게시글 조회 서비스 단위테스트코드 추가

* feature: Refresh Token 재발급과 Rotation 처리

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

Tested: git diff --check

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>
Co-authored-by: koreaioi <koreaioi@gachon.ac.kr>

* feature: 로고이미지, 깃허브주소, 이메일 필드 추가 (#91)

* feature: #22 공용 모달 컴포넌트 구현 (#35)

* feature: 공용 모달의 접근성과 표시 동작 기반 마련

* feature: 단일 확인 동작을 제공하는 알림 모달 구성

* feature: 위험도와 처리 상태를 반영하는 확인 모달 구성

* feature: 다양한 콘텐츠 구성을 수용하는 범용 모달 제공

* chore: 프론트엔드 pnpm workspace 패키지 범위 명시

* refactor: 모달 Props 계약의 컴포넌트별 소유권 정리

* design: 모달 모서리 곡률을 서비스 스타일에 맞게 조정

* design: 모달 닫기 버튼의 클릭 영역과 배치 조정

* design: 모달 기본 액션 버튼의 높이와 최소 너비 통일

* fix: 모달 표시 중 배경 페이지 스크롤 차단

* design: 모달 백드랍 색상을 중립적인 톤으로 조정

* fix: 모달 pending 중 모든 액션과 종료 동작 차단

* refactor: 모달 처리 상태 계약 통일

* design: 버튼 포커스 링 여백 제거

* design: 버튼 포커스 표현을 아웃라인으로 통일

* feature: #36 공용 파일 인풋 컴포넌트 구현 (#75)

* feature: 파일 업로더 컴포넌트 구현

* feature: 이미지 업로더 컴포넌트 구현

* refactor(FileUploader): 불필요한 props 제거

* feat: change 핸들러 인터페이스 추가

* fix: 파일 업로더에 키보드 접근이 가능하도록 수정

* feature: 이미지 파일 검증 로직 추가

* [Feature] #89 팀 생성 로직 구현 (#95)

* feature: 팀 블로그 생성 도메인 모델 추가

* feature: 팀 블로그 생성 서비스 구현

* feature: 팀 블로그 생성 API 제공

* feature: 팀 블로그 URL 정보 생성 요청 반영

* refactor: @requiredargsconstructor 사용하도록 변경

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #88 나의 팀 목록 요약 API (#96)

* feature: 나의 팀 리스트 조회 메서드 추가

* feature: MyCologResponse 추가

* feature: 나의 팀 목록 조회 비즈니스 로직 추가

* feature: 나의 팀 목록 조회 API 추가

* feature: 나의 팀 목록 조회 단위테스트 추가

* feature: BlogController에 ApiSpec 명세 적용

* hofix: 생성자 중복 삭제 (#101)

* [Feature] 팀 멤버 초대 API 구현 (#98)

* feature: 팀 멤버 초대 API 구현

* fix: CologService 오류 수정

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* fix: Clock 필드 주입 삭제 (#104)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feature: 멤버 초대용 유저 정보 조회 제공 (#106)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #103 사용자 닉네임 슬러그 유효성 검사 구현 (#109)

* feat: 닉네임, 슬러그로 조회 메서드 추가

* feat: 닉네임, 슬러그 중복 예외 추가

* feat: 닉네임, 슬러그 중복검사 비즈니스 로직 추가

* feat: 닉네임, 슬러그 중복검사 API 구현

* feat: 닉네임, 슬러그 중복검사 테스트 코드 작성

* feature: 팀 상세 조회 API 구현 (#111)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feature: 팀 프로필 조회 API 구현 (#113)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #110 colog 전체 멤버 목록 API 구현 (#114)

* feat: 팀목록 조회 메서드 추가

* feat: 팀목록 조회 비즈니스 로직 추가

* feat: 팀목록 멤버 조회 API 추가

* feat: 팀목록 멤버 조회 테스트 코드 추가

* feature: 온보딩 완료 후 정식 인증 세션 발급 (#116)

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

Tested: git diff --check

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #117 글 작성 및 조회 권한 처리 구현 (#118)

* feature: 게시글 상세 조회 선택 인증 지원

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

Tested: git diff --check

* feature: 게시글 작성과 비공개 조회 권한 검증

Tested: JAVA_HOME=/Users/jinriro/Library/Java/JavaVirtualMachines/ms-21.0.10/Contents/Home ./gradlew test

Tested: git diff --check

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #99 S3 PresignedUrl 발급 (#119)

* build: aws sdk s3 의존성 추가

* refactor: 예외 응답 고도화

* refactor: Upload 도메인 예외 추가

* refactor: Upload 도메인 enum 추가

* feat: PresignedUrl 관련 Dto 추가

* feat: S3 관련 환경변수 추가

* feat: S3Config 추가

* feat: S3Properties 추가

* feat: PresignedUrl 발급 비즈니스 로직 추가

* feat: PresignedUrl 발급 API 추가

* refactor: Dockerfile 캐싱 적용

* feat: 등록 가능 contentType, type 예시 추가

* [Build] #123 개발서버 CI-CD 파이프라인 구축 (#124)

* build: 개발서버 CI-CD 파이프라인 구축

* build: 잘못된 Dockerfile 명시 수정

* refactor: Push 에서 deploy job이 동작하도록 수정

* feature: 프론트 연동을 위한 CORS 설정 추가 (#125)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Refactor] #127 크로스 플랫폼 설정과 GHA 캐싱 적용 (#128)

* refactor: 크로스 플랫폼 설정과 gha 캐싱 적용

* refactor: 잘못된 Dockerfile 이름 수정

* refactor: GitActions Runner 환경 ARM64 네이티브 러너 적용

* feature: 전달헤더 설정 추가 (#132)

- Swagger에서 API 요청 시 발생하는 CORS 문제 해결을 위함

* [Refactor] #129 로그인 이후 개인 블로그 생성 흐름 복구 (#130)

* fix: 로그인 이후 개인 블로그 생성 흐름 복구

* refactor: 온보딩 완료 책임의 서비스 의존 제거

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feature: #92 사이드바 구현 (#108)

* feature(Button): fullWidth 추가

* chore: navy 스케일 컬러 토큰 추가

* feature: 사이드바 컴포넌트 구현

* feature: 사이드바 접힘/열림 인터랙션 구현

* feature: 사이드바 관련 페이지 레이아웃 세팅

* feature: Button 스타일의 Link 컴포넌트를 ButtonLink로 분리

* feature: user/colog 공통 아바타 컴포넌트 구현

* feature: 사이드바 내비게이션 버튼 컴포넌트 구현

* feature: 사이드바 푸터 컴포넌트 구현

* feature: 사이드바 헤더 컴포넌트 구현

* refactor: 사이드바 컴포넌트 재구성

* test: 라우트 기반 로그아웃 동작을 버튼 기반으로 변경

* fix(Sidebar): 인가 여부 기본값 제거

* refactor(with-sidebar-layout): 메인 영역에 시맨틱 태그 사용

* feature: 공용 Divider 컴포넌트 구현

* feature: 사이드바에 Divider 추가

* fix(Sidebar): 인가 기본값 제거

* refactor(SidebarLayout): main 태그 제거

* test: 하드코딩된 UI 값 제거

* [Feature] #40 블로그 글 작성 페이지 UI 구현 (#126)

* build: BlockNote 패키지 버전 고정

* build: Pretendard 로컬 폰트 기반 제공

* design: BlockNote 스타일의 Rilog 토큰 연결

* feature: 글 작성 에디터 공개 계약 제공

* feature: 한국어 BlockNote 편집기 제공

* feature: 에디터 로드 실패 복구 상태 제공

* feature: BlockNote 브라우저 전용 로딩 경계 제공

* feature: 게시글 문서 유효성 판별

* feature: 자동 확장 제목 입력 흐름 제공

* feature: 본문 오류와 에디터 접근성 연결

* feature: 본문 이미지 로컬 업로더 제공

* feature: 글 작성 페이지의 기본 편집 흐름 제공

* feature: 글 작성 발행 진입 액션 제공

* feature: 저장되지 않은 글의 이탈 보호 제공

* feature: 게시 설정 도메인 계약과 선택 항목 제공

* feature: 대표 이미지 우선순위와 기본 미리보기 제공

* design: 파일 선택 컨트롤의 포커스 표현 통일

* feature: 접근 가능한 게시 설정 모달 제공

* feature: 게시 설정 유지와 발행 전 검증 제공

* feature: 교체 가능한 mock 발행 계약과 상세 경로 제공

* feature: 발행 상태 전이와 성공 후 이동 제공

* design: 게시 설정 모달의 경계와 포커스 표현 정돈

대표 이미지와 게시 설정 영역을 동일 비율로 배치하고 여백을 넓혀 정보 밀도를 조정한다. 모달 가장자리의 컨트롤은 focus outline을 내부에 표시해 잘림 없이 일관된 키보드 탐색 피드백을 제공한다.

Rejected: 공용 Button의 전역 outline offset 변경 | 모달 밖 버튼의 기존 시각 계약까지 바뀜
Confidence: high
Scope-risk: moderate
Directive: 모달 가장자리의 기본 컨트롤은 내부 focus outline 계약을 유지할 것
Tested: ESLint, TypeScript typecheck, component tests 86개, 키보드 focus 브라우저 확인, git diff check

* fix: 한글 조합 중 제목 Enter 이동 방지

IME 조합 중 발생한 Enter 이벤트를 본문 이동으로 처리하지 않도록
composition 상태를 확인한다.

Confidence: high
Scope-risk: narrow
Tested: PostTitleField component tests

* fix: 확정된 이탈 이동의 history 경쟁 제거

guard entry 제거와 실제 이동을 동기적으로 처리해 history.back과
fallback timer 사이의 중복 이동 가능성을 제거한다.

Rejected: popstate와 fallback timer 유지 | 이동 시점에 따라 두 경로가 경쟁할 수 있음
Confidence: high
Scope-risk: moderate
Tested: PostWriteWorkspace component tests

* fix: 유효한 상세 경로 확인 후 발행 상태 정리

발행 결과의 상세 경로를 먼저 검증해 잘못된 postId가 반환되더라도
작성 상태와 이탈 보호가 유지되도록 한다.

Rejected: 상태 정리 후 경로 생성 | 경로 생성 실패 시 작성 상태를 복구할 수 없음
Confidence: high
Scope-risk: narrow
Tested: PostWriteWorkspace component tests

* fix: BlockNote 표 셀 본문 유효성 판별

일반 content뿐 아니라 tableContent의 rows와 cells를 재귀 탐색해
표 안에 작성된 텍스트도 유효한 본문으로 인정한다.

Confidence: high
Scope-risk: narrow
Tested: post-write validation unit tests

* design: BlockNote 키보드 포커스와 블록 선택 표시 복원

BlockNote의 투명한 ring 값을 공용 focus token에 연결하고 선택된
콘텐츠에 outline을 제공해 현재 조작 대상을 식별할 수 있게 한다.

Constraint: 제목 입력은 기존 무경계 표현 유지
Rejected: box-shadow ring 추가 | 기존 outline 포커스 계약과 시각 효과가 중복됨
Confidence: high
Scope-risk: narrow
Tested: CSS formatting, production build, TypeScript

* fix: 실제 발행 제목과 길이 검증 기준 통일

제목의 앞뒤 공백을 제거한 값을 빈 값과 최대 길이 검증에 함께
사용해 실제 발행되는 제목과 검증 기준을 일치시킨다.

Confidence: high
Scope-risk: narrow
Tested: post-write validation unit tests

* design: 대표 이미지 선택 후 제어 영역 정렬

좁은 모달 열 안에서 이미지 변경과 제거 제어가 줄바꿈되지 않도록
설명과 버튼 행을 분리하고 선택 상태의 버튼 규격을 통일한다.

Rejected: viewport breakpoint 기반 flex 유지 | 실제 열 너비와 무관하게 가로 배치가 활성화됨
Confidence: high
Scope-risk: narrow
Tested: component tests, ESLint, TypeScript, production build, browser visual verification

* feat: 본문 placeholder에 마크다운 단축 문법 안내 제공

* [Feature] #93 로그인 모달 구현 (#137)

* design(Modal): 모달 내 개행 허용 및 레이아웃 조정

* feature: 로그인 모달 구현

* feature: 사이드바 로그인 버튼에 로그인 모달 연결

* feature: 로그인 모달을 전역으로 관리할 수 있도록 Context 구현

* feature: 로그인 상태에 따라 로그인 모달과 기존 액션을 분기하는 공통 훅 구현

* refactor(GuestSidebarFooter): 공통 로그인 모달 로직 적용

* [Feature] #94 온보딩 페이지 구현 (#136)

* chore: 브레이크포인트 토큰 추가

* feature: aside 기반 레이아웃 컴포넌트 구현

* feature: 프로필/커버 이미지 프리뷰 컴포넌트 구현

* feature: 공용 단일 인풋 field 컴포넌트 구현

* feature: 회원가입 폼 구현

* feature: 회원가입 페이지 구현

* design(FileUploader): ring을 outline으로 변경

* refactor: auth 하위 features를 auth/ui로 이동

* refactor: signup을 auth에서 분리

* feature: 공용 체크박스 컴포넌트 구현

* feature: 온보딩 폼에 약관 동의 추가

* fix: 온보딩 컴포넌트 import 경로 수정

* design: 존재하는 aside 영역만 표시하도록 수정

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* [Feature] #140 팀 설정 멤버관리 페이지 구현 (#142)

* feature: 코로그 멤버 모조 데이터 추가

* feature: 코로그 설정 탭 구현

* feature: 코로그 멤버 관리 멤버 행 구현

* feature: 멤버 관리 섹션 구현

* feature: 코로그 설정 내 탭 조합

* feature: 코로그 설정 페이지(멤버 관리) 구현

* design(MemberManagementSection): 우상단 버튼 간격 조정

* [Feature] #93 로그인 모달 구현 (#137)

* design(Modal): 모달 내 개행 허용 및 레이아웃 조정

* feature: 로그인 모달 구현

* feature: 사이드바 로그인 버튼에 로그인 모달 연결

* feature: 로그인 모달을 전역으로 관리할 수 있도록 Context 구현

* feature: 로그인 상태에 따라 로그인 모달과 기존 액션을 분기하는 공통 훅 구현

* refactor(GuestSidebarFooter): 공통 로그인 모달 로직 적용

* [Feature] #94 온보딩 페이지 구현 (#136)

* chore: 브레이크포인트 토큰 추가

* feature: aside 기반 레이아웃 컴포넌트 구현

* feature: 프로필/커버 이미지 프리뷰 컴포넌트 구현

* feature: 공용 단일 인풋 field 컴포넌트 구현

* feature: 회원가입 폼 구현

* feature: 회원가입 페이지 구현

* design(FileUploader): ring을 outline으로 변경

* refactor: auth 하위 features를 auth/ui로 이동

* refactor: signup을 auth에서 분리

* feature: 공용 체크박스 컴포넌트 구현

* feature: 온보딩 폼에 약관 동의 추가

* fix: 온보딩 컴포넌트 import 경로 수정

* design: 존재하는 aside 영역만 표시하도록 수정

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* fix: 아바타가 이미지 소스를 받을 수 있도록 수정

* feature: 멤버 초대 모조 데이터 추가

* feature: 멤버 초대 모달 내 멤버 행 컴포넌트 구현

* feature: 멤버 초대 모달 구현

* feature: 멤버 초대 모달 연결

* design: 멤버 초대 모달 내 스크롤 영역 조정

* refactor: 저장되지 않은 변경 가드 로직을 공통으로 분리

* feature: 멤버 수정 중 페이지 이탈 시 확인 모달 연결

* refactor: 코로그 설정 내 모든 저장되지 않은 변경을 일괄 처리할 수 있도록 개선

* fix(RootLayout): 사용자 정보 캐시 초기화 구독 컴포넌트 import 위치 수정

* feature: 코로그 설정 페이지에 셸 레이아웃 적용

* design: 멤버 목록 표 bg 및 border 설정 변경

* test: 누락된 코로그 설정 페이지 테스트 추가

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* [Feature] #146 팀 생성 페이지 구현 (#147)

* fix: left 요소가 없을 때에도 gap이 적용되는 문제 해결

* chore: 팀 커버 이미지 플레이스홀더 에셋 추가

* feature: 팀 생성 폼 구현

* feature: 팀 생성 페이지 구현

* style: 불필요한 공백 제거

* feature: 팀 생성 버튼을 링크로 변경

* test: 팀 생성 페이지 통합 테스트 추가

* fix: 팀 생성 페이지에서 취소 시 이전 페이지로 리다이렉트하도록 변경

* chore: tailwind 속성 오타 수정

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* [Feature] #81 피드 페이지 UI와 무한 스크롤 구현 (#143)

* feature: 피드 게시글 표시 모델과 날짜 포맷터 정의

* feature: 피드 카드와 이미지 fallback UI 구현

* feature: 목 데이터 기반 피드 페이지 조회 상태 구성

* feature: 피드 무한 스크롤과 요청 상태 UI 구현

* feature: 피드 위젯을 조립해 feeds 페이지 구현

* feature: 루트 진입 경로를 피드로 연결

* feature: 피드 진입 시 콘텐츠로 자연스럽게 이동

* refactor: 피드 Colog 식별자 명명 통일

* refactor: 피드 작성자 프로필 표현을 UserAvatar로 통일

* [Chore] #120 SVGR 기반 아이콘 사용 환경 설정 (#149)

* build: SVG 아이콘의 컴포넌트 사용 환경 제공

Next.js의 Turbopack과 Webpack, Vitest가 동일한 SVG import 계약을 사용하도록 구성한다.

Constraint: 개발 서버와 프로덕션 빌드 양쪽에서 SVG 컴포넌트 import가 동작해야 함
Rejected: SVG 전용 React 래퍼 유지 | 아이콘마다 반복되는 수동 마크업과 컴포넌트가 필요함
Confidence: high
Scope-risk: moderate
Directive: SVG를 URL로 사용할 때는 ?url import를 명시적으로 사용
Tested: pnpm check, Turbopack production build, Webpack production build, frozen lockfile install

* refactor: 사이드바 아이콘 표현 방식 통일

문자 기반 임시 아이콘을 제거하고 currentColor를 사용하는 SVG 컴포넌트로 교체한다.

Constraint: 기존 사이드바의 크기와 디자인 토큰을 유지해야 함
Rejected: 범용 아이콘 레지스트리 추가 | 현재 사용 범위에 비해 추상화 비용이 큼
Confidence: high
Scope-risk: narrow
Tested: pnpm check, 사이드바 component test, visual verification

* style: 기존 코드의 불필요한 빈 줄 정리

검증 도구가 요구하는 포맷을 맞추기 위해 동작에 영향을 주지 않는 공백만 정리한다.

Scope-risk: narrow
Tested: pnpm check

* [Feature] #144 게시글 상세 뷰 구현 (#148)

* feature: BlockNote 게시글 콘텐츠의 서버 렌더링 기반 마련

게시글 상세 화면은 작성 시 저장한 BlockNote 블록을 동일한 스키마로 받아 서버에서 HTML로 변환한다. 렌더러와 도메인 계약, 필요한 패키지 및 Next 외부 패키지 설정을 한 변경 단위로 묶었다.

Constraint: 실제 게시글 API 연동은 후속 작업으로 분리한다
Rejected: 클라이언트 에디터로 읽기 화면을 렌더링 | 읽기 전용 화면에 불필요한 클라이언트 경계를 만든다
Directive: API 연동 시 content 필드는 BlockNote Block 배열 계약을 유지해야 한다
Tested: 대상 파일 Prettier 및 ESLint, staged diff check
Not-tested: develop 기준 기존 포맷 및 인증 import 오류로 전체 pnpm check 미실행

* feature: 게시글 상세 정보와 본문의 도메인 표현 구성

게시글 제목과 작성자, 발행일, 대표 이미지, CoLog 요약 및 본문 HTML 출력을 게시글 도메인 UI로 분리했다. 각 컴포넌트는 화면 조립이나 목차 행동을 알지 않고 게시글 데이터 표현에만 집중한다.

Constraint: 실제 게시글 데이터 조회는 후속 API 작업에서 연결한다
Rejected: 상세 위젯 한 파일에 모든 마크업 배치 | 도메인 표현과 화면 조립의 변경 이유가 섞인다
Directive: 상세 도메인 UI에는 목차 상태나 route 조회 책임을 추가하지 않는다
Tested: 대상 파일 Prettier 및 ESLint, staged diff check
Not-tested: develop 기준 기존 포맷 및 인증 import 오류로 전체 pnpm check 미실행

* feature: 게시글 구조에 맞춘 목차 탐색 흐름 제공

Swagger 계약을 대신하는 상세 목 데이터와 BlockNote h1부터 h3까지의 heading 추출, 현재 위치 추적 및 부드러운 앵커 이동을 하나의 상세 탐색 기능으로 구성했다.

Constraint: 실제 게시글 API 연결 전까지 Swagger 계약 기반 목 데이터를 사용한다
Rejected: 렌더링된 HTML을 다시 파싱해 목차 생성 | 원본 BlockNote 구조와 ID 정보를 중복 해석한다
Directive: API 연동 후에도 목차 입력은 렌더링 HTML이 아니라 BlockNote Block 배열을 사용한다
Tested: 대상 파일 Prettier 및 ESLint, staged diff check
Not-tested: 실제 API 응답 및 브라우저 E2E는 후속 조립 커밋에서 검증

* feature: 게시글 상세 화면의 공개 경로 연결

게시글 도메인 UI와 목차 기능을 읽기 화면으로 조립하고 /posts/[postId] 경로에서 목 데이터를 제공한다. 존재하지 않는 게시글에는 피드 복귀가 가능한 404 화면을 제공하며 BlockNote 본문 스타일을 route 범위에서 적용한다.

Constraint: 실제 상세 API 연결 전까지 route는 동기 목 데이터 조회를 사용한다
Rejected: page 컴포넌트에 상세 마크업 직접 구현 | route와 화면 조립 책임이 결합된다
Directive: API 연동 시 page의 데이터 조회만 교체하고 PostDetail 조립 계약을 유지한다
Tested: 대상 파일 Prettier 및 ESLint, staged diff check
Not-tested: 게시글 상세 Playwright 시나리오는 후속 테스트 작업에서 검증

* fix: develop 병합에서 누락된 BlockNote 서버 외부화 설정 복구

* chore: 각 태그 별 개행 간격 보정

* chore: 각 태그 별 개행 간격 보정 (헤딩 태그 유동적인 개행 간격 설정)

* feature: 전역에서 접근 가능한 공통 푸터 제공 (#69)

브랜드·정책·연락처 정보를 모든 페이지에서 일관되게 제공하도록 정적 Footer를 루트 레이아웃에 연결한다. 재사용 가능한 브랜드와 contact SVG는 public 자산으로 관리하고, 좁은 화면과 키보드 탐색을 회귀 테스트로 보호한다.

Constraint: 실제 정책 페이지와 연락 채널 URL은 후속 작업에서 연결
Rejected: 인라인 SVG 유지 | 다른 화면에서 동일 자산을 재사용하기 어려움
Confidence: high
Scope-risk: moderate
Directive: 실제 채널이 확정되면 Footer의 mock URL만 교체
Tested: format, lint, typecheck, unit 10개, component 11개, build, home E2E 3개

* [Feature] #139 팀 설정 프로필 페이지 구현 (#150)

* refactor: 코로그 요약과 프로필 타입을 단일 정보 모델로 통합

* feature: 코로그 프로필 설정값 검증과 정규화 정책 추가

* refactor: GitHub 로그인 아이콘을 공용 SVG 자산으로 통합

* feature: 코로그 프로필 이미지와 정보 입력 UI 구현

* feature: 팀 설정에 프로필 저장과 이탈 방지 흐름 연결

* test: 팀 프로필 설정의 저장과 이탈 방지 흐름 검증

* fix: 게시글의 긴 제목이 카드 내부에서 줄바꿈되도록 수정

* [Feature] #141 팀 설정 위험 영역 페이지 구현 (#151)

* feature: 팀 설정에서 영구 삭제 전 위험과 결과를 확인

* refactor: 팀 설정 기능을 동등한 섹션 계층으로 정렬

* feature: 클릭 가능한 공통 요소에 포인터 커서 제공

* refactor: SVG 아이콘을 소유 영역으로 이동해 컴포넌트 사용 방식 통일

* refactor: 워크스페이스에서 프로필 저장 상태 책임 분리

* refactor: 활성 설정 탭만 렌더링해 이탈 상태 관리 단순화

* [Feature] #145 팀 홈 페이지 구현 (#153)

* feature(PageShell): header가 전체 크기를 차지하는 레이아웃 추가

* chore: 깃허브/메일/링크 아이콘을 shared로 이동

* chore: 미트볼 아이콘 추가

* chore: 코로그 홈 mock 데이터 추가

* feature: 코로그 홈 히어로 컴포넌트 구현

* feature: 코로그 홈 멤버 목록 컴포넌트 구현

* design: 히어로 상단 더보기 버튼 반응형 위치 조정

* feature: 코로그 홈 게시글 목록 컴포넌트 구현

* test: 코로그 홈 내 컴포넌트 테스트 추가

* feature: 코로그 홈 페이지 구현

* design: 코로그 홈 반응형 추가

* design: 코로그 설명 및 코로그 게시글 캡션 폰트 사이즈 조정

* chore: 코로그 홈 페이지 진입 로직 주석 추가

* design: 코로그 홈 히어로 깃허브/메일 아이콘 사이 간격 조정

* refactor: 기존 도메인 model을 사용하도록 수정

* design: 코로그 소개 글 max-width 설정

* design(PageShell): main 섹션이 항상 중앙 배치되도록 수정

* design(CologMemberList): 유저 아바타 크기 조정

* [Refactor] #134 User Entity VO 고도화 (#158)

* feature: Email VO 추가

* feature: Nickname VO 추가

* feature: Slug VO 추가

* refactor: UserEntity VO 포장 적용

* refactor: Email은 VO이므로 null에 대한 방어 로직 적용

* refactor: Test Code Builder 수정

* feat: slug는 소문자로 저장한다는 정책 반영

* [Feature] #135 운영 서버 ci/cd 배포 파이프라인 추가 (#152)

* ci: 운영 서버 배포 파이프라인 추가

* ci: 운영 이미지 태그의 버전 변수 관리

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feature: 공개 팀 프로필 조회 경로 통합 (#165)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Chore] #155 공통 레이아웃 및 피드 UI 정리 (#157)

* feature: 브라우저 탭 파비콘 적용

* refactor: 루트 피드 리다이렉트를 설정으로 이전

* style: 게시글 상세 헤딩 하단 여백 확대

* refactor: 공통 Shell 합성 구조로 페이지 레이아웃 정리

* style: 게시글 피드 카드 가독성 조정

* chore: 게시글 상세 mock data 수정

* chore: tailwind css 속성값에 맞게 변경

* chore: sidebar/footer shell 제거

* chore: footer가 있는 페이지의 하단 여백을 공용 layout으로 추출

* [Feature] #159 게시글 상세조회 전용 단일 API 추가 (#163)

* feat: slug로 Blog 조회 메서드 추가

* feat: 특정 Post 조회시 연관관계를 함께 조회하는 메서드 추가

* feat: 특정 블로그의 전체 게시글 수 count 조회 메서드 추가

* feature: 해당 블로그의 팀원수를 count하는 집계 메서드 추가

* feature: 게시물 읽기 검증 및 소속 판단 로직 구현

- 테스트 코드추가

* feature: 게시글 소속에 따른 유동적인 응답을 제공하는 Dto 추가

* feature: 블로그의 특정 게시물을 상세 조회하는 통합 API 구현

* refactor: 기존 게시글 상세 조회 API를 V2로 마이그레이션

* feature: rilog, colog에 따른 응답 형식 변환을 Swagger 명세로 작성

* refactor: Controller 네이밍 & 어노테이션 순서 수정

* refactor: Colog 소속은 getColog를 사용하도록 변경

* refactor: 기존 PostDetailResponse
dV2를 PostDetailResponse로 네이밍 이전

* refactor: 도메인 용어를 affiliation에서 owner로 변경

* feature: 마지막 개행 추가

* feature: PostDetailResponse에 잘못된 블로그가 저장되지 않도록 방어하는 테스트 코드 추가

* refactor: jsonPath 수정

* [Feature] #156 팀 생성 페이지 로직 추가 (#160)

* feature: 팀 생성 구조 및 플로우를 팀 프로필 설정과 통일

* refactor: 코로그 생성 및 프로필 수정 공통 폼을 도메인 레이어로 분리

* chore: are로 시작하던 변수명을 is로 수정

* fix(CologCreateForm): 병합 충돌 과정에서 망가진 코드 복구

* fix(CologHomeHero): 테스트 용으로 남아있던 프로필 소개 repeat 제거

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>
Co-authored-by: JetProc <soonjae8297@gmail.com>

* [Refactor] #172 affiliation에서 owner로 수정 (#173)

* [Feature] #161 모바일 반응형 대응 (#162)

* feature: 모바일용 하단 내비게이션바 추가

* design: 모바일 뷰에서도 게시글 상세 본문 텍스트를 16px로 통일

* design: 에디터 및 게시글 상세 list 요소 상하에 여백 추가

* feature: 모바일에서 발행 버튼을 하단으로 이동

* design: 푸터 모바일 반응형 추가

* refactor: 코로그 게시글에서도 PostFeedImage를 사용하도록 수정

* design: 코로그 홈 게시글 리스트 제목 폰트 사이즈 조정

* feature: 모바일용 date format 추가

* feature: 코로그 게시글 목록 닉네임에 truncate 추가

* design(CologPostList): 닉네임 우측 여백 제거

* design(Footer): 모바일 뷰에서 약관 제거

* feature: 모바일 뷰에서 하단 내비게이션바 대신 상단 헤더 사용

* design: 모바일 헤더 프로필에 border 추가

* fix: 사이드바 ui에서 로그아웃이 위로 옮겨짐 현상의 스파이 적출

* fix: footer 좌측에 여백이 중복으로 적용되던 문제 수정

* chore: format-published-date-mobile 파일을 기존 파일에 병합 및 모바일 여부를 인자로 받을 수 있도록 리팩토링

---------

Co-authored-by: JetProc <soonjae8297@gmail.com>

* [Feature] #170 온보딩 폼 로직 연결 (#174)

* feature: 온보딩 폼 로직 추가

* chore(get-service-url-label): 네이밍 규칙에 맞지 않는 파일명 수정

* test(BlockNoteEditor): placeholder 관련 테스트 수정

* chore: navigate 라우터에 replace('/') 속성 추가

* feature: 온보딩 입력 유효성 검사 로직 추가

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>
Co-authored-by: JetProc <soonjae8297@gmail.com>

* [Refactor] #166 공개 블로그 게시글 목록 조회 제공 (#169)

* feature: 공개 블로그 게시글 목록 조회 제공

* fix: 공개 블로그 경로의 골뱅이 표기 복원

* fix: 공개 블로그 조회의 삭제 블로그 제외

공개 블로그 게시글 목록 조회에서 삭제된 블로그를 제외하도록 slug 조회 계약을 변경하고 공개 프로필 조회 진입점을 BlogController와 BlogService로 이동한다.

Tested: backend ./gradlew test

* refactor: 게시글 피드의 블로그 응답 이름 통일

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Fix] #171 코로그 설정 페이지 중첩 스크롤 문제 해결 (#175)

* feature: 코로그 프로필 설정 중첩 스크롤 제거

* refactor: 섹션이 page shell을 관리하도록 변경

* [Refactor] #167 라우트 경로 정리 (#178)

* refactor: App Router 페이지를 통일된 URL 구조로 재배치

* refactor: 내부 링크를 @slug 기반 라우트 계약으로 통일

* refactor: 코로그 설정 탭을 URL query와 동기화

* [Feature] #176 전체 피드 게시물 목록 조회 api 함수 구현 (#181)

* docs(frontend/AGENTS): api 아키텍처 관련 에이전트 지침 추가

* feature: 전체 피드 목록 조회 api 함수 구현

* config(next.config): mock 데이터 수용을 위해 remotePattern 전체 허용

* refactor: ssr prefetch에도 대응할 수 있도록 option/prefetch/query를 모아 관리하는 구조로 개편

* feature: 전체 피드 목록 조회 api 연동

* refactor: src/api 구조 개선

* chore: read-full-feed-posts.md task 파일 삭제

* chore: refactor-query-mutation task 파일 삭제

* refactor: 함수명은 축약하지 않은 상태로 복구

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* fix: 라우터 슬러그에 undefined 되던 버그 수정 (#185)

* [Refactor] #177 blogid를 slug로 통일 (#180)

* refactor: 멤버초대 검증 로직을 BlogMember 내부로 응집화

* refactor: cologId 대신 slug로 통일

* refactor: cologId 대신 slug로 멤버 초대 API 수정

* refactor: 게시글 발행 시 blogId 대신 slug를 사용하도록 통일

* refactor: BlogMember는 blogId로 조회하도록 개선

* refactor: 탈퇴된 Blog는 조회하지 않도록 JPA 쿼리 메서드에 반영

* [Feature]#186 게시글 상세 조회 api 구현 (#188)

* refactor: 피드 API 모듈을 shared 영역으로 이동

* feature: 게시글 상세 조회 API 연동

* refactor: 응답 필드명과 게시글 소유자 구조 통일 (#182)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Refactor] #191 게시글 응답의 작성자 이름 필드명 통일 (#193)

* refactor: 게시글 응답의 작성자 이름 필드명 통일

* test: 전체 피드의 팀 소유자 응답 계약 보강

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Fix]  #189 피드 응답 필드명/소유자 구조 통일 반영 (#190)

* feature: 바뀐 백엔드 응답 형식에 맞게 반영

* fix: 블로그 상세 조회 API 타입 통일 및 author 필드명 호환성 처리

* [Feature] #187 공통 예외처리 로직 구현 (#194)

* chore: 에러 코드 상수화

* style: import문 정렬 수정

* chore: 서버 에러 응답 타입 정의

* feature: 서버 에러 정규화 로직 구현

* test: 테스트 내 401 에러 응답 공통 모듈로 분리

* feature: 블록노트 content 타입을 더 구체적으로 정의

* feature: 에러 정규화 로직을 가진 apiRequest/apiClient 구현 및 적용

* feature: 에러 정규화 로직을 가진 apiRequest/apiClient 구현 및 적용

* fix: 누락된 토큰 재발급 실패 이벤트 발행 로직 연결

* refactor: ky instance 생성 함수명 및 파일명 변경

* fix: requires auth 관련 로직 제거

* refactor: 오류 분류 세분화

* feature: Tanstack Query 전역 재시도 정책 설정

* feature: 폼 필드 에러 추출 함수 구현

* test: 요청 재시도 관련 테스트 추가

* refactor: 응답 필드명과 게시글 소유자 구조 통일 (#182)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* fix: kind/category 혼용되는 용어를 type/kind로 정리

* fix: 백엔드 Author 속성 코드 롤백

* fix: 백엔드 Author 속성 코드 롤백

---------

Co-authored-by: 진리로 <riro12@naver.com>

* [Refactor] #192 Blog Entity의 String slug를 Slug VO로 적용 (#195)

* refactor: Blog Entity의 String slug를 Slug VO로 적용

* refactor: Slug를 Blog 패키지로 이동한다.

* refactor: slug로 Blog 조회 이후는 id를 사용하도록 개선

* fix: Feed 조회 시, Slug VO도입으로 인한 JPQL 파싱 문제 해결 (#199)

* chore: backend-prod 라벨 추가 (#202)

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Refactor] #196 프론트엔드 모델 구조 리팩터링 (#203)

* chore: VSCode 작업 환경 설정 업데이트

* refactor: 도메인 계층 모델 구조 단일화 및 통합

* refactor: 코로그 관련 피처 model 및 lib 책임 분리

* refactor: 게시글 상세 피처 구조 개선 및 ID 매핑 수정

* refactor: 게시글 피드 피처 model 및 lib 책임 분리

* refactor: 게시글 작성 피처 model 및 lib 책임 분리

* refactor: 회원가입 피처 model 및 lib 책임 분리

* refactor: 게시글 피드 카드 및 관련 UI 컴포넌트를 post-feed 피처로 이전

* [Chore] #197 프론트엔드 배포 세팅 (#200)

* chore: pm2 스크립트 추가

* chore: CD 배포 파이프라인 구축 및 self-hosted 러너 연동

* chore: 워크플로우 수동 테스트 수단 추가

* chore: 워크플로우 수동 실행 시 배포 스크립트까지 실행되도록 수정

* chore: 임시로 PR 업데이트 시에도 배포 스크립트가 돌아가도록 설정

* chore: TARGET_DIR 경로 수정

* chore: NVM_DIR 경로 수정

* chore: node 설치 스크립트 추가

* chore: 환경변수 동적 할당 방식으로 변경

* chore: 환경변수를 절대경로로 변경

* chore: 전역 설치된 pnpm 및 pm2를 사용하도록 스크립트 수정

* fix: nvm 로드하는 코드 추가

* fix: nvm 파일 경로 확인되는지 디버깅

* fix: node와 pnpm 조합으로 변경

* fix: ssh 접속 환경과 동기화하는 코드 추가

* chore: NVM 경로를 환경변수 기반으로 변경

* chore: corepack 기반으로 pnpm 실행하도록 수정

* chore: 디버깅 코드 추가

* fix: nvm 자체 설치 로직 추가

* fix: pm2 자동 종료 정책 예외 처리

* chore: 초기 배포 스크립트로 복구

* chore: npm 경로 설정

* chore: env secret 이름 변경

* fix: 배포 환경 무한 재렌더 문제 해결

* chore: 요청 응답 공통 로깅 추가

* fix: 남아있는 배포 환경 무한 재렌더 문제 해결

* chore: 배포 스크립트를 프로덕션으로 전환

---------

Co-authored-by: JetProc <46674347+JetProc@users.noreply.github.com>

* [Feature] #205 파일 업로드 api 구현 (#206)

* feat: 파일 업로드를 위한 Presigned URL API 및 클라이언트 구현

* refactor: Content-Type 방어 로직 추가 및 Presigned 네이밍 일관성 정렬

* refactor: S3 업로드 시 kyInstance 재활용 및 외부 URL 인증 토큰 주입 방어

* refactor: 토큰 만료 응답 판별 로직 캡슐화 및 타입 안정성 개선

---------

Co-authored-by: 송아영 <azerosong@gmail.com>

* [Feature] #207 getpublicprofile api 프론트엔드 연동 (#208)

* feature: 공개 블로그 프로필 조회 API 및 타입 정의

공개 블로그 프로필 정보를 조회하는 백엔드 엔드포인트(/v1/blogs/@{slug}) 호출 함수와 응답 인터페이스를 추가한다.

Tested: readBlogPublicProfile 단위 테스트 통과

* feature: 공개 블로그 프로필 React Query 훅 및 옵션 추가

공개 블로그 프로필 조회를 위한 query key, query options, useQuery 훅 및 prefetch 함수를 추가한다.

Tested: vitest 단위 테스트 및 타입 검사 통과

* feature: 블로그 홈 프로필 정보 API 연동

기존의 목 데이터를 제거하고 실제 getPublicProfile API를 호출하여 블로그 홈의 헤더 프로필 정보를 렌더링한다.
응답 데이터를 화면 컴포넌트 규격에 맞게 변환하는 매핑 유틸 함수를 추가한다.

Tested: mapCologProfileResponse 단위 테스트 통과

* [Feature] #204 서비스 통합테스트 유틸 ServiceSupport 추가 (#220)

* build: 테스트 DB h2 의존성 추가

* feature: 테스트 격리를 위한 DatabaseCleaner 추가

* feature: DatabaseCleanerConfiguration 설정 추가

* feature: 서비스 통합테스트 유틸 ServiceSupport 추가

* feature: application-test.yaml 추가

* chore: 사용하지 않는 주석 제거

* feature: Slug, Nickname 중복검사 서비스 통합테스트 작성

* refactor: 개행 두번을 하나로 삭제

* refactor: 잘못된 서비스 호출 오류 수정

* [Feature] #210 로그아웃 API 제공 (#216)

* feature: 로그아웃 API 제공

* refactor: Refresh Token 쿠키 주입 방식 정리

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* feature: @LoingUserId, @LoginUserSulg 어노테이션 스웨거 무시 설정 추가 (#222)

* [Feature] #217 내 블로그 목록 조회 api 연동 (#223)

* feature: 내 블로그 목록 요약 조회 api 함수 구현

* test: 테스트용 QueryClient 구현

* feature: 사이드바 팀 내비게이션에 내 팀 목록 요약 조회 api 연동

* [Feature] #225 토큰 기반 유저정보 조회 API 추가 (#228)

* refactor: 패키지 유지 용도의 .gitkeep 삭제

* feature: 유저 정보 조회 비즈니스 로직 추가 (by UserId)

* feature: 토큰 기반 유저 정보 조회 API 추가

* refactor: 닉네임, 슬러그 중복 검사 코드 위치 수정

* test: 유저 정보 조회 서비스통합테스트 코드 추가

* feature: 누락된 UserApiSpec 추가

* [Build] #231 deploy job 셀프호스트 라벨 추가 (#232)

* [Feature] #227 GitHub OAuth 프론트 콜백 흐름 제공 (#229)

* feature: GitHub OAuth 프론트 콜백 흐름 제공

* feature: 내부 경로 검증 추가

---------

Co-authored-by: Jinriro <riro12.hanyang.ac.kr>

* [Feature] #211 코로그 홈 게시글 피드 조회 api 연동 (#226)

* feature: 공개 블로그 게시글 목록 조회 API 및 쿼리 구현

* feature: 코로그 홈 게시글 목록 API 연동 및 무한 스크롤 적용

* [Refactor] #211 colog-home 위젯 내부 UI를 features 계층으로 분리

- colog-home 위젯의 CologHomeHero, CologPostList를 위젯의 Public UI(조합 레이어)로 격상
- 기존 colog-home/ui에 혼재되어 있던 기능별 표현 로직을 features 하위(colog-profile, colog-members, colog-post-feed)로 추출
- CologPostList에 스켈레톤 UI(CologPostFeedSkeleton) 적용 및 관련 훅 이동
- page.tsx 내의 불필요한 데이터 fetch 및 매퍼 로직을 제거하고 각 위젯/기능이 스스로 데이터를 책임지도록 개선

* [Feature] #219 멤버 추가 시 유저 정보 조회 api 연동 (#230)

* feature: 슬러그 기반 유저 정보 조회 api 함수 구현

* feature: 멤버 초대 모달 유저 정보 조회 api 함수 연동

* refactor: 멤버 초대 시 유저 조회 로직을 mutation으로 리팩터링

* [Feature] #224 토큰 기반 유저 정보 조회 api 연동 (#234)

* style: 불필요한 공백 제거

* feature: 토큰 기반 유저 정보 조회 api 함수 구현

* feature: 유저 관련 쿼리에 인가 쿼리 키 추가

* feature: 마스터토큰 기반 임시 token provider 구현

* feature: 전역 로그인 상태를 context로 관리

* feature: 전역 인가 상태를 기반으로 분기 로직 수정

* feature: 로그아웃/토큰 만료 시 인증 상태 초기화 로직 추가

* feature: 토큰이 없는 경우 토큰 기반 api가 호출되지 않도록 방어

* feature: map 변환 함수 추가

* [Feature] #213 팀 블로그 생성 api 연동 (#235)

* refactor(colog): 이메일 필드 완전 제거 및 잔재 정리

* [Feature] #213 팀 블로그 생성 API 및 타입 추가

* [Feature] #213 팀 블로그 생성 useMutation 훅 추가

* [Feature] #213 팀 블로그 생성 폼 실제 API 연동 및 모의 데이터 제거

* [Test] #213 팀 블로그 생성 폼 연동 테스트 업데이트

* [Hotfix] #236 멤버 모의 데이터 누락 복구 (#237)

* [Feature] #209 깃허브 소셜 로그인 구현 (#238)

* feature: 깃허브 소셜 로그인 구현

* refactor: auth api 경로를 shared 하위로 이동

* feature: 소셜 로그인 뒤 헤더로부터 토큰을 추출하는 로직 추가

* [Feature] #240 환경변수 추가 설정 (#243)

* refactor: RefreshToken SameSite Option 환경변수로 분리

* feature: AWS_S3_DIRECTORY application.yaml에 환경변수 추가

* [Feature] #215 …
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backend 백엔드 관련 작업입니다. chore 빌드, 설정, 의존성, 개발 환경 등 보조 작업을 수행합니다.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[chore] 전역예외처리핸들러 초기세팅

3 participants