-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Feat]: Article 조회(단건, 페이징) API 설계 #11
Conversation
val countryName: String?, | ||
val countryImage: String?, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
기존 회원들 중에 국가 설정을 못한 회원들이 있기 때문에 nullable 타입으로 설정하였습니다.
override fun getArticleDetailPage(request: ArticleDetailPageGetRequest): PageResponse<ArticleDetailResponse> { | ||
val articleDetailUnitPage = articleQueryPersistencePort.findArticleDetailUnitPageByCategoryId( | ||
categoryId = request.categoryId, | ||
userId = request.userId, | ||
size = request.size, | ||
page = request.page, | ||
order = request.order | ||
) | ||
|
||
val userPreviewUnits = userQueryPort.getUserPreviewUnits( | ||
userIds = articleDetailUnitPage.contents.map { it.userId }.toSet() | ||
) | ||
|
||
return PageResponse( | ||
totalCount = articleDetailUnitPage.totalCount, | ||
currentCount = articleDetailUnitPage.currentCount, | ||
totalPage = articleDetailUnitPage.totalPage, | ||
currentPage = articleDetailUnitPage.currentPage, | ||
contents = articleDetailUnitPage.contents | ||
.map { | ||
ArticleDetailResponse( | ||
article = it, | ||
writer = userPreviewUnits[it.userId]!! | ||
) | ||
} | ||
) | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
현재 게시글 Detail 페이징 조회에 대한 처리 구조는 아래와 같습니다.
- Article에 대한 Community Rdb에서 한방 쿼리로 조회
- 기존 모놀로틱 서버(Gloddy 서버)에서 게시글 작성자 id에 대한 일괄 조회
- 두개 데이터를 알맞는 Response로 변환
위의 처리 구조는 임시로 개발한 형태입니다. 이후 dynamodb
로 조회에 대한 데이터를 중첩데이터로 저장할 예정입니다. 이유는 다음과 같습니다.
1. 위의 구조는 기존서버와 커뮤니티 서버와의 시스템 간 강한결합 문제가 존재합니다.
Gloddy 서버에 대한 오류 및 성능 저하로 인해 커뮤니티 서버의 게시글 조회에 영향이 갑니다.
커뮤니티 서버가 Gloddy 서버 성능에 영향을 줍니다.
따라서 위의 강한 결합 및 조회 성능을 높이기 위해 미래에 아래와 같은 구조로 변경할 것입니다.
- Gloddy 서버에 존재하는 user 정보를 분산 환경(dynamodb)로 저장(배치를 활용할 예정)
- 게시글 저장 시 중첩데이트(aritlce, writer)를 dynamodb에 key value 형태로 저장
- 유저 정보에 대한 정합성 처리(update가 일어나면)는 dynamodb의 글로벌 보조 인덱스(인덱스를 userId로 설계)를 활용하여 처리할 예정
.leftJoin(articleLikeJpaEntity) | ||
.on( | ||
articleJpaEntity.id.eq(articleLikeJpaEntity.article.id) | ||
.and(articleLikeJpaEntity.userId.eq(userId)) | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
AritlceLikeEntity
의 articleId와 userId의 복합 유니크 한 성격을 이용하여 leftJoin 및 on(articleId, userId)을 활용하여 좋아요 여부를 판별하도록 하였습니다.(null일 경우 -> 좋아요 여부 false, null이 아닐 경우 좋아요 여부 true)
Issue
resolve #7
작업사항
TODO