refactor: 회원 API 로깅 추가

This commit is contained in:
이상진 2025-07-27 22:48:49 +09:00
parent ce4520fdd9
commit e6c08100ee
2 changed files with 35 additions and 11 deletions

View File

@ -1,5 +1,6 @@
package roomescape.member.business package roomescape.member.business
import io.github.oshai.kotlinlogging.KotlinLogging
import org.springframework.data.repository.findByIdOrNull import org.springframework.data.repository.findByIdOrNull
import org.springframework.stereotype.Service import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional import org.springframework.transaction.annotation.Transactional
@ -10,26 +11,37 @@ import roomescape.member.infrastructure.persistence.MemberRepository
import roomescape.member.infrastructure.persistence.Role import roomescape.member.infrastructure.persistence.Role
import roomescape.member.web.* import roomescape.member.web.*
private val log = KotlinLogging.logger {}
@Service @Service
@Transactional(readOnly = true) @Transactional(readOnly = true)
class MemberService( class MemberService(
private val memberRepository: MemberRepository private val memberRepository: MemberRepository,
) { ) {
fun findMembers(): MemberRetrieveListResponse = MemberRetrieveListResponse( fun findMembers(): MemberRetrieveListResponse {
members = memberRepository.findAll().map { it.toRetrieveResponse() } log.debug { "[MemberService.findMembers] 회원 조회 시작" }
)
fun findById(memberId: Long): MemberEntity = fetchOrThrow { return memberRepository.findAll()
memberRepository.findByIdOrNull(memberId) .also { log.info { "[MemberService.findMembers] 회원 ${it.size}명 조회 완료" } }
.toRetrieveListResponse()
} }
fun findByEmailAndPassword(email: String, password: String): MemberEntity = fetchOrThrow { fun findById(memberId: Long): MemberEntity {
return fetchOrThrow("findById", "memberId=$memberId") {
memberRepository.findByIdOrNull(memberId)
}
}
fun findByEmailAndPassword(email: String, password: String): MemberEntity {
return fetchOrThrow("findByEmailAndPassword", "email=$email, password=$password") {
memberRepository.findByEmailAndPassword(email, password) memberRepository.findByEmailAndPassword(email, password)
} }
}
@Transactional @Transactional
fun create(request: SignupRequest): SignupResponse { fun createMember(request: SignupRequest): SignupResponse {
memberRepository.findByEmail(request.email)?.let { memberRepository.findByEmail(request.email)?.let {
log.info { "[MemberService.createMember] 회원가입 실패(이메일 중복): email=${request.email}" }
throw MemberException(MemberErrorCode.DUPLICATE_EMAIL) throw MemberException(MemberErrorCode.DUPLICATE_EMAIL)
} }
@ -39,10 +51,18 @@ class MemberService(
password = request.password, password = request.password,
role = Role.MEMBER role = Role.MEMBER
) )
return memberRepository.save(member).toSignupResponse() return memberRepository.save(member).toSignupResponse()
.also { log.info { "[MemberService.create] 회원가입 완료: email=${request.email} memberId=${it.id}" } }
} }
private fun fetchOrThrow(block: () -> MemberEntity?): MemberEntity { private fun fetchOrThrow(calledBy: String, params: String, block: () -> MemberEntity?): MemberEntity {
return block() ?: throw MemberException(MemberErrorCode.MEMBER_NOT_FOUND) log.debug { "[MemberService.$calledBy] 회원 조회 시작: params=$params" }
return block()
?.also { log.info { "[MemberService.$calledBy] 회원 조회 완료: memberId=${it.id}" } }
?: run {
log.info { "[MemberService.$calledBy] 회원 조회 실패: $params" }
throw MemberException(MemberErrorCode.MEMBER_NOT_FOUND)
}
} }
} }

View File

@ -16,6 +16,10 @@ data class MemberRetrieveResponse(
val name: String val name: String
) )
fun List<MemberEntity>.toRetrieveListResponse(): MemberRetrieveListResponse = MemberRetrieveListResponse(
members = this.map { it.toRetrieveResponse() }
)
data class MemberRetrieveListResponse( data class MemberRetrieveListResponse(
val members: List<MemberRetrieveResponse> val members: List<MemberRetrieveResponse>
) )