[refactor] alias 응답시 aliasColor 도 같이 반환하도록 수정 + 필요한 사진 데이터 추가#193
Conversation
Walkthrough피드·유저 응답 DTO에서 alias를 aliasName/aliasColor로 분리·확장하고, 매퍼와 서비스 호출부를 이에 맞춰 수정했습니다. Alias enum에 imageUrl과 HEX 색상이 추가되었고, Category 이미지 URL과 일부 테스트·빈 DTO 정리도 함께 변경되었습니다. Changes
Sequence Diagram(s)sequenceDiagram
participant Client
participant FeedController
participant FeedService
participant FeedQueryMapper
participant AliasEnum as Alias
Client->>FeedController: GET /feeds
FeedController->>FeedService: findAll()
FeedService->>FeedQueryMapper: toFeedShowAllResponse(dtoList)
loop each dto
FeedQueryMapper->>AliasEnum: Alias.from(dto.alias).getColor()
AliasEnum-->>FeedQueryMapper: aliasColor
end
FeedQueryMapper-->>FeedService: FeedShowAllResponse(aliasName, aliasColor, ...)
FeedService-->>FeedController: response
FeedController-->>Client: 200 OK
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Assessment against linked issues
Assessment against linked issues: Out-of-scope changes
Possibly related PRs
Suggested reviewers
Poem
📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (2)
✅ Files skipped from review due to trivial changes (1)
🚧 Files skipped from review as they are similar to previous changes (1)
✨ Finishing Touches
🧪 Generate unit tests
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
Test Results374 tests 374 ✅ 31s ⏱️ Results for commit cf182f9. ♻️ This comment has been updated with latest results. |
There was a problem hiding this comment.
Actionable comments posted: 2
🔭 Outside diff range comments (1)
src/main/java/konkuk/thip/feed/application/mapper/FeedQueryMapper.java (1)
27-33: toFeedShowAllResponse: aliasName 매핑 추가 및 aliasColor null-safe 처리 필요
toFeedShowAllResponse매핑에서dto.alias()기반으로 aliasName을 내려주고 있지 않습니다.Alias.from(dto.alias()).getColor()는dto.alias()가null이거나 잘못된 값일 경우IllegalArgumentException을 던져 매핑 전체가 실패할 수 있습니다.- 다른 매퍼 메서드(feedOwner·feedCreator)에는 이미
aliasName/aliasColor매핑이 적용되어 있습니다.권장 최소 변경:
- @Mapping(target = "aliasColor", expression = "java(Alias.from(dto.alias()).getColor())") + @Mapping(target = "aliasName", source = "dto.alias") + @Mapping(target = "aliasColor", expression = "java(dto.alias() == null ? null : Alias.from(dto.alias()).getColor())")더 견고한 방식(@nAmed 헬퍼 사용):
- @Mapping(target = "aliasColor", expression = "java(Alias.from(dto.alias()).getColor())") + @Mapping(target = "aliasName", source = "dto.alias") + @Mapping(target = "aliasColor", source = "dto.alias", qualifiedByName = "mapAliasColor")헬퍼 메서드 추가:
@Named("mapAliasColor") default String mapAliasColor(String alias) { if (alias == null) return null; try { return Alias.from(alias).getColor(); } catch (IllegalArgumentException e) { // 알 수 없는 alias 방어 return null; } }
🧹 Nitpick comments (1)
src/main/java/konkuk/thip/user/adapter/out/persistence/repository/alias/AliasQueryRepositoryImpl.java (1)
27-27: TODO 주석 구체화 제안DB 스키마 변경에 대한 TODO 주석이 추가되었는데, 좀 더 구체적인 정보가 있으면 좋겠습니다. 언제, 어떤 상황에서 이 변경이 필요한지 명시하거나 관련 이슈 번호를 참조하는 것을 추천합니다.
다음과 같이 TODO 주석을 개선할 수 있습니다:
-// TODO : DB에 String alias 만 저장하도록 바뀐다면 쿼리 수정해야함 +// TODO: [이슈번호] DB 스키마가 String alias만 저장하도록 변경될 때 이 쿼리를 alias.value -> alias 로 수정 필요
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (10)
src/main/java/konkuk/thip/feed/adapter/in/web/response/FeedShowAllResponse.java(1 hunks)src/main/java/konkuk/thip/feed/adapter/in/web/response/FeedShowSingleResponse.java(1 hunks)src/main/java/konkuk/thip/feed/application/mapper/FeedQueryMapper.java(3 hunks)src/main/java/konkuk/thip/user/adapter/in/web/response/UserProfileResponse.java(1 hunks)src/main/java/konkuk/thip/user/adapter/in/web/response/UserViewAliasChoiceResponse.java(2 hunks)src/main/java/konkuk/thip/user/adapter/out/persistence/repository/alias/AliasQueryRepositoryImpl.java(1 hunks)src/main/java/konkuk/thip/user/application/port/in/dto/UserViewAliasChoiceResult.java(1 hunks)src/main/java/konkuk/thip/user/application/service/UserMyPageService.java(1 hunks)src/main/java/konkuk/thip/user/domain/Alias.java(1 hunks)src/main/java/konkuk/thip/vote/adapter/in/web/response/DummyResponse.java(0 hunks)
💤 Files with no reviewable changes (1)
- src/main/java/konkuk/thip/vote/adapter/in/web/response/DummyResponse.java
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#113
File: src/main/java/konkuk/thip/recentSearch/adapter/out/persistence/RecentSearchCommandPersistenceAdapter.java:38-44
Timestamp: 2025-07-30T14:05:04.945Z
Learning: seongjunnoh는 코드 최적화 제안에 대해 구체적인 기술적 근거와 효율성 차이를 이해하고 싶어하며, 성능 개선 방식에 대한 상세한 설명을 선호한다.
Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#93
File: src/main/java/konkuk/thip/room/adapter/out/persistence/RoomQueryPersistenceAdapter.java:49-114
Timestamp: 2025-07-28T16:44:31.224Z
Learning: seongjunnoh는 코드 중복 문제에 대한 리팩토링 제안을 적극적으로 수용하고 함수형 인터페이스를 활용한 해결책을 선호한다.
Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#112
File: src/main/java/konkuk/thip/feed/adapter/out/persistence/repository/FeedQueryRepositoryImpl.java:272-272
Timestamp: 2025-07-30T10:44:34.115Z
Learning: seongjunnoh는 피드 커서 페이지네이션에서 LocalDateTime 단일 커서 방식을 선호하며, 복합 키 기반 커서보다 구현 단순성과 성능을 우선시한다.
🔇 Additional comments (11)
src/main/java/konkuk/thip/user/application/port/in/dto/UserViewAliasChoiceResult.java (1)
11-11: 필드명 변경 후 레거시 참조 없음 확인
rg '\.color\(\)'검색 결과,.color()호출이 전혀 발견되지 않음rg 'new AliasChoice.*color'검색 결과, 생성자 인자로color를 사용하는 코드가 없음UserViewAliasChoiceResponse매핑부에서도ac.aliasColor()로 모두 업데이트됨따라서 내부 코드 상에서는 더 이상
color필드를 참조하는 부분이 없어 하위 호환성 문제가 없습니다.src/main/java/konkuk/thip/user/adapter/in/web/response/UserProfileResponse.java (2)
6-7: aliasName과 aliasColor 필드 추가 승인PR 목표에 맞게 alias 정보를 name과 color로 분리하여 제공하도록 개선되었습니다.
9-11: 팩토리 메서드 호출 업데이트 검증 완료
UserProfileResponse.of()호출부가 모두 4개 파라미터로 변경된 것을 확인했습니다.
- src/main/java/konkuk/thip/user/application/service/UserMyPageService.java: 4개 인자(
imageUrl,nickname,aliasName,aliasColor)로 호출됨src/main/java/konkuk/thip/user/adapter/in/web/response/UserViewAliasChoiceResponse.java (2)
15-15: 매핑 로직 업데이트 승인DTO에서
ac.aliasColor()를 사용하도록 매핑 로직이 올바르게 업데이트되었습니다.
25-25: AliasChoice record 필드명 변경 승인중첩 record의 필드명이
color에서aliasColor로 일관되게 변경되었습니다.src/main/java/konkuk/thip/user/domain/Alias.java (1)
17-19: 필드 추가 승인
imageUrl필드가 추가되어 Alias의 시각적 표현을 지원할 수 있게 되었습니다. Lombok의@RequiredArgsConstructor와 잘 연동됩니다.src/main/java/konkuk/thip/user/application/service/UserMyPageService.java (1)
51-51: 서비스 로직 업데이트 승인
UserProfileResponse.of()호출이 새로운 시그니처에 맞게 올바르게 업데이트되었습니다.user.getAlias().getColor()를 통해 도메인에서 색상 정보를 적절히 추출하고 있습니다.src/main/java/konkuk/thip/feed/adapter/in/web/response/FeedShowSingleResponse.java (1)
8-8: 필드명aliasName변경 – 매핑 로직 정상 반영 확인됨
FeedQueryMapper의toFeedShowSingleResponse메서드에@Mapping(target = "aliasName", source = "feedCreator.alias.value") @Mapping(target = "aliasColor", source = "feedCreator.alias.color")가 올바르게 적용되어 있어 추가 수정이 필요 없습니다.
src/main/java/konkuk/thip/feed/application/mapper/FeedQueryMapper.java (3)
10-10: Alias import 추가 적절enum 기반 색상 매핑과 어노테이션
imports지정에 필요한 참조입니다. 문제 없습니다.
22-22: MapStructimports에 Alias 추가 OK
expression = "java(...)"에서 간단명Alias를 사용하려면@Mapper(imports = { ... })에 포함되어야 합니다. 생성된 구현체에 import가 추가되어 컴파일 이슈를 방지합니다.
72-74: 단건 조회 DTO에서 aliasName/aliasColor 매핑 일관화 — LGTM
feedCreator.alias.value/color를 직접 매핑해 FE 계약(aliasName/aliasColor 분리)에 맞췄습니다. 도메인에서alias가 null이 아님이 보장된다면 현재 방식이 가장 단순하고 안전합니다.
| String aliasName, | ||
| String aliasColor, |
There was a problem hiding this comment.
💡 Verification agent
🧩 Analysis chain
aliasName과 aliasColor 필드 추가 승인
기존 alias 필드를 aliasName과 aliasColor로 분리하여 PR 목표에 완벽하게 부합하는 개선이 이루어졌습니다. 이제 클라이언트에서 alias의 이름과 색상을 별도로 활용할 수 있습니다.
다음 스크립트로 매퍼에서 새로운 필드들에 대한 매핑이 올바르게 구현되었는지 확인해보겠습니다:
🏁 Script executed:
#!/bin/bash
# Description: FeedShowAllResponse 매핑 로직 확인
# Expected: aliasName과 aliasColor 매핑이 구현되어 있는지 확인
echo "=== FeedShowAllResponse/FeedDto 매핑 관련 코드 검색 ==="
rg -A 10 "FeedShowAllResponse" --type java | grep -E "(aliasName|aliasColor|toFeedShowAllResponse)"
echo "=== toFeedShowAllResponse 메서드 구현 확인 ==="
ast-grep --pattern 'toFeedShowAllResponse($$$) { $$$ }' --lang java
echo "=== aliasName과 aliasColor 매핑 확인 ==="
rg -A 5 -B 5 "aliasName.*aliasColor" --type javaLength of output: 2506
🏁 Script executed:
#!/bin/bash
# 확인: FeedQueryMapper.toFeedShowAllResponse 구현에서 aliasName과 aliasColor 매핑이 빠짐없이 이루어졌는지 조회
echo "=== toFeedShowAllResponse 메서드 구현 전체 보기 ==="
rg -n -C 10 "toFeedShowAllResponse" src/main/java/konkuk/thip/feed/application/mapper/FeedQueryMapper.javaLength of output: 1129
FeedQueryMapper에 aliasName 매핑 추가 필요
toFeedShowAllResponse 구현부에서 aliasColor만 매핑되고 aliasName 매핑이 빠져 있습니다. 아래 위치에 aliasName 매핑을 추가해주세요.
• 파일: src/main/java/konkuk/thip/feed/application/mapper/FeedQueryMapper.java
위치: 인터페이스 선언부, @Mapping(target = "aliasColor", …) 바로 위
예시 추가 코드:
@Mapping(target = "aliasName", expression = "java(Alias.from(dto.alias()).getName())")
@Mapping(target = "aliasColor", expression = "java(Alias.from(dto.alias()).getColor())")🤖 Prompt for AI Agents
In
src/main/java/konkuk/thip/feed/adapter/in/web/response/FeedShowAllResponse.java
around lines 15 to 16, the mapper mapping for aliasName is missing—update the
FeedQueryMapper interface (file:
src/main/java/konkuk/thip/feed/application/mapper/FeedQueryMapper.java) by
adding a @Mapping for aliasName immediately above the existing @Mapping for
aliasColor; specifically, map aliasName using an expression like
Alias.from(dto.alias()).getName() and keep the aliasColor mapping as-is so both
aliasName and aliasColor are populated in toFeedShowAllResponse.
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (3)
src/test/java/konkuk/thip/room/adapter/in/web/RoomRecruitingDetailViewApiTest.java (2)
31-31: 와일드카드 static import 지양 권장필요한 매처만 명시적으로 import하면 네임스페이스 충돌과 불필요한 의존을 줄일 수 있습니다.
적용 예시:
-import static org.hamcrest.Matchers.*; +import static org.hamcrest.Matchers.hasSize; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.Matchers.startsWith;
191-191: roomImageUrl 검증을 더 강하게: 단순 notNull → URL 형태 확인S3/원격 리소스를 쓰므로 값이 있는지만 보는 것보다 HTTP URL 형태를 보장하는 편이 좋습니다. 버킷/경로를 하드코딩하지 않고도 강건해집니다.
- .andExpect(jsonPath("$.data.roomImageUrl", notNullValue())) // 방 대표 이미지 반환된다 + .andExpect(jsonPath("$.data.roomImageUrl", startsWith("http"))) // 방 대표 이미지: 원격 URL 형태 보장src/main/java/konkuk/thip/user/domain/Alias.java (1)
11-15: S3 버킷 도메인 하드코딩 대신 CDN/설정 주입 고려도메인/리전 변경, 사설 버킷 전환, CDN 적용 등을 대비해 커스텀 도메인(CloudFront) 또는 설정 기반 주입으로 전환하면 운영 유연성이 커집니다.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
src/main/java/konkuk/thip/room/domain/Category.java(1 hunks)src/main/java/konkuk/thip/user/domain/Alias.java(1 hunks)src/test/java/konkuk/thip/room/adapter/in/web/RoomRecruitingDetailViewApiTest.java(2 hunks)src/test/java/konkuk/thip/user/adapter/in/web/UserViewAliasChoiceControllerTest.java(1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#113
File: src/main/java/konkuk/thip/recentSearch/adapter/out/persistence/RecentSearchCommandPersistenceAdapter.java:38-44
Timestamp: 2025-07-30T14:05:04.945Z
Learning: seongjunnoh는 코드 최적화 제안에 대해 구체적인 기술적 근거와 효율성 차이를 이해하고 싶어하며, 성능 개선 방식에 대한 상세한 설명을 선호한다.
Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#93
File: src/main/java/konkuk/thip/room/adapter/out/persistence/RoomQueryPersistenceAdapter.java:49-114
Timestamp: 2025-07-28T16:44:31.224Z
Learning: seongjunnoh는 코드 중복 문제에 대한 리팩토링 제안을 적극적으로 수용하고 함수형 인터페이스를 활용한 해결책을 선호한다.
Learnt from: seongjunnoh
PR: THIP-TextHip/THIP-Server#112
File: src/main/java/konkuk/thip/feed/adapter/out/persistence/repository/FeedQueryRepositoryImpl.java:272-272
Timestamp: 2025-07-30T10:44:34.115Z
Learning: seongjunnoh는 피드 커서 페이지네이션에서 LocalDateTime 단일 커서 방식을 선호하며, 복합 키 기반 커서보다 구현 단순성과 성능을 우선시한다.
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: build
🔇 Additional comments (1)
src/main/java/konkuk/thip/user/domain/Alias.java (1)
11-15: Alias enum 확장(HEX color + imageUrl) 방향 👍응답 스키마(aliasName/aliasColor)와 쓰임새에 정확히 부합합니다. 각 HEX 코드 값도 일관적으로 보입니다.
| SCIENCE_IT("과학·IT", "https://thip-bucket.s3.ap-northeast-2.amazonaws.com/group_science.png"), | ||
| LITERATURE("문학", "https://thip-bucket.s3.ap-northeast-2.amazonaws.com/group_literature.png"), | ||
| ART("예술", "https://thip-bucket.s3.ap-northeast-2.amazonaws.com/group_art.png"), | ||
| SOCIAL_SCIENCE("사회과학", "https://thip-bucket.s3.ap-northeast-2.amazonaws.com/group_sociology.png"), | ||
| HUMANITY("인문학", "https://thip-bucket.s3.ap-northeast-2.amazonaws.com/group_humanities.png"); |
There was a problem hiding this comment.
💡 Verification agent
🧩 Analysis chain
S3 URL 하드코딩 최소화: 베이스 URL 상수화/설정화 권장
현재 각 상수에 전체 S3 URL이 반복되어 환경 변경(버킷/리전/도메인 전환)에 취약합니다. 베이스 경로를 상수(혹은 설정)로 분리해 중복과 변경 비용을 줄이세요.
- 소규모 리팩터(상수화) 예시:
// enum 내부 상단 등 적절한 위치에 추가
private static final String ASSET_BASE = "https://thip-bucket.s3.ap-northeast-2.amazonaws.com/";- SCIENCE_IT("과학·IT", "https://thip-bucket.s3.ap-northeast-2.amazonaws.com/group_science.png"),
- LITERATURE("문학", "https://thip-bucket.s3.ap-northeast-2.amazonaws.com/group_literature.png"),
- ART("예술", "https://thip-bucket.s3.ap-northeast-2.amazonaws.com/group_art.png"),
- SOCIAL_SCIENCE("사회과학", "https://thip-bucket.s3.ap-northeast-2.amazonaws.com/group_sociology.png"),
- HUMANITY("인문학", "https://thip-bucket.s3.ap-northeast-2.amazonaws.com/group_humanities.png");
+ SCIENCE_IT("과학·IT", ASSET_BASE + "group_science.png"),
+ LITERATURE("문학", ASSET_BASE + "group_literature.png"),
+ ART("예술", ASSET_BASE + "group_art.png"),
+ SOCIAL_SCIENCE("사회과학", ASSET_BASE + "group_sociology.png"),
+ HUMANITY("인문학", ASSET_BASE + "group_humanities.png");-
운영 관점 조언:
- 가능하다면 CloudFront 등 CDN 커스텀 도메인(예: https://static.thip.app/)으로 추상화하면 버킷/리전 변경 시 코드 수정이 불필요합니다.
- 환경별 도메인은 설정(yaml/properties)에서 주입받는 형태도 고려해 주세요.
-
원격 리소스 유효성 간단 점검 스크립트:
🏁 Script executed:
#!/bin/bash
set -euo pipefail
for p in group_science.png group_literature.png group_art.png group_sociology.png group_humanities.png; do
url="https://thip-bucket.s3.ap-northeast-2.amazonaws.com/$p"
echo "HEAD $url"
curl -sI "$url" | awk 'NR==1{print}'
doneLength of output: 2329
S3 URL 중복 제거: 베이스 URL 상수화/설정화 적용 필요
curl을 이용해 현재 모든 이미지 URL이 HTTP 200 OK로 유효함을 확인했습니다.
하지만 버킷, 리전, 도메인 변경 시 코드 수정 없이 대응하려면 URL 베이스를 상수화하거나 설정화해야 합니다.
• 적용이 필요한 위치
- src/main/java/konkuk/thip/room/domain/Category.java
• 제안 코드 예시
public enum Category {
// … 기존 상수 정의 전 또는 enum 선언부 상단에 추가
private static final String ASSET_BASE = "https://thip-bucket.s3.ap-northeast-2.amazonaws.com/";
SCIENCE_IT("과학·IT", ASSET_BASE + "group_science.png"),
LITERATURE("문학", ASSET_BASE + "group_literature.png"),
ART("예술", ASSET_BASE + "group_art.png"),
SOCIAL_SCIENCE("사회과학", ASSET_BASE + "group_sociology.png"),
HUMANITY("인문학", ASSET_BASE + "group_humanities.png");
private final String title;
private final String imageUrl;
Category(String title, String imageUrl) {
this.title = title;
this.imageUrl = imageUrl;
}
// getters…
}• 운영 관점 추가 권장 사항
- CloudFront 등 CDN 커스텀 도메인(예: https://static.thip.app/)으로 추상화
- 환경별 베이스 URL을 application.yml/properties 등에서 주입
🤖 Prompt for AI Agents
In src/main/java/konkuk/thip/room/domain/Category.java around lines 19 to 23,
the S3 URL base is duplicated across enum constants; define a single ASSET_BASE
(private static final String) at the top of the enum and replace each full URL
with ASSET_BASE + "<filename>" for each constant, update the enum
constructor/fields unchanged, and optionally make ASSET_BASE configurable by
reading from application properties or injecting via a constant in a config
class so bucket/region/domain changes don't require code edits.
| .extracting("aliasName", "categoryName") | ||
| .containsExactlyInAnyOrder( | ||
| tuple("문학가", "문학", "문학_image", "문학_color"), | ||
| tuple("과학자", "과학·IT", "과학_image", "과학_color") | ||
| tuple("문학가", "문학"), | ||
| tuple("과학자", "과학·IT") | ||
| ); |
There was a problem hiding this comment.
aliasColor 검증이 누락되었습니다 — 계약 보장을 위해 포함하세요
PR 목적(별칭 컬러 반환)에 맞춰 aliasColor 존재/정합을 테스트에 포함하는 것이 바람직합니다.
정확 값까지 보장하는 변경 예시(권장):
- assertThat(choices)
- .extracting("aliasName", "categoryName")
- .containsExactlyInAnyOrder(
- tuple("문학가", "문학"),
- tuple("과학자", "과학·IT")
- );
+ assertThat(choices)
+ .extracting("aliasName", "aliasColor", "categoryName")
+ .containsExactlyInAnyOrder(
+ tuple("문학가", "#A0F8E8", "문학"),
+ tuple("과학자", "#C8A5FF", "과학·IT")
+ );대안(값 고정이 과도하게 빡빡하다면): HEX 포맷과 존재성만 검증
// 추가 검증(대안)
assertThat(choices)
.extracting("aliasColor", String.class)
.allSatisfy(c -> assertThat(c).matches("^#[0-9A-Fa-f]{6}$"));(선택) imageUrl도 원격 URL 형태 보장 체크를 넣으면 회귀 방지에 도움이 됩니다.
assertThat(choices)
.extracting("imageUrl", String.class)
.allSatisfy(u -> assertThat(u).startsWith("http"));🤖 Prompt for AI Agents
In the file
src/test/java/konkuk/thip/user/adapter/in/web/UserViewAliasChoiceControllerTest.java
around lines 75 to 79, the test is missing validation for the aliasColor field.
To ensure the contract is properly tested, add assertions to verify that the
aliasColor field is present and has a valid hexadecimal color format (e.g.
"#RRGGBB"). Additionally, consider adding a validation for the imageUrl field to
ensure it has a valid URL format.
hd0rable
left a comment
There was a problem hiding this comment.
수고하셨습니다!! 리뷰요구사항 확인했습니당 저희가 코드에 Enum으로 저장한 이상 그 값을 활용하는게 맞다고 생각합니당!
또한 버킷관련해서 리뷰남겼는데 확인해주심 감사하겠습니닷
| ART("예술", "예술_image"), | ||
| SOCIAL_SCIENCE("사회과학", "사회과학_image"), | ||
| HUMANITY("인문학", "인문학_image"); | ||
| SCIENCE_IT("과학·IT", "https://thip-bucket.s3.ap-northeast-2.amazonaws.com/group_science.png"), |
There was a problem hiding this comment.
p2: 이거 혹시 환경변수로 저장하는건 어떨까요??.. 버킷을 퍼블릭 엑세스 허용을해둬야 저희 서버에서 버킷으로 저장/삭제 요청을 보낼수 있는 것으로 알고있습니다그래서 퍼블릭 엑세스 허용을 해둔거고, 퍼블릭 엑세스 허용을 하면 저희 버킷이름만알고 요청을 보내도 저희 버킷요금에 포함되는 걸로 알고있어서 버킷이름이 현재 노출되고잇기때문에 환경변수로 불러와야 할것 같습니다
또한 저희가 후에 pre-signed-url 방식으로 바꾸기로 했으니, 그때 s3저장/삭제 로직도 바뀌면서 버킷도 퍼블릭 엑세스를 차단하는것으로 바꾸면 될 것같습니다!
There was a problem hiding this comment.
헉 너무 별 생각없었네요 하하 런타임 시점에 환경변수로부터 base url 불러와서 전체 image url 제공하도록 코드 수정했습니다!!
- aws s3 properties 값이 유효하지 않을 경우에 500 error 발생시키는 코드 추가
- initializer에 의해 aws s3 base url provide func 을 주입받도록 수정

#️⃣ 연관된 이슈
📝 작업 내용
이슈 참고해주시면 됩니다
📸 스크린샷
aliasName, aliasColor, user profile image url, room image url 모두 사진과 같이 응답되도록 구성하였습니다
(로컬 서버, 로컬 DB로 테스트하긴 헀는데 개발 서버, RDS 에서도 잘 될 겁니다 하하)
💬 리뷰 요구사항
현재 DB에는 string alias value, category value 에 해당하는 데이터만 존재하는게 아니라, alias 에 대한 모든 값, category 에 대한 모든값이 저장되어 있습니다
지난 서버에서 이를 DB에는 string alias value, category value, tag value 만을 저장하고, 이를 어플리케이션단에서 java 코드의 enum 클래스와 매핑하여 세부적인 값들은 코드상에서 관리하도록 결정하였습니다.
하지만 이번에 alias color, image url 을 반환하기 위해 기존에 구현된 코드를 보니 조회 코드에서 자바 코드의 enum Alias, Category 로부터 color, imageUrl 값을 얻어오는게 아니라, 쿼리문으로 DB상에 저장된 값을 바로 가져오도록 구현된 코드가 많아 보입니다
일단 RDS와 로컬 DB에 Alias, Category 세부 값들을 직접 저장해두어서 api는 제대로 동작할 거지만, 추후 리펙토링을 진행하면서 이 부분 또한 고려해봐야할 것 같습니다!
일단 눈에 보이는 부분은 todo 주석처리해두었습니다!
관련해서 노션 리펙 정리본에 추가해두겠습니다!
📌 PR 진행 시 이러한 점들을 참고해 주세요
Summary by CodeRabbit
New Features
Refactor
Style
Tests
Chores