TIL ~ 24.04.05

20240219 TIL

wlsds00_ 2024. 2. 29. 06:47

대용량 트래픽 프로젝트

로그인 / 인증기능까지 강의를 다시 참고해서 1차적으로 작성하였다.

예외처리의 경우 임시로 작성해두었고 나중에 통일된 형식으로 처리하기로 했다.

 

refresh token 관련 부분을 적용해보고 싶어서 찾아보는데 음...

개념부터 잘 이해가 안 되는 것 같다.

자료를 보고 적용해서 테이블에 토큰 저장까지는 테스트에 성공을 했는데 이걸 어떻게 활용해야 할지 모르겠다.

 

AdminController

@RestController
@RequestMapping("/api/admins")
class AdminController(
    private val adminService: AdminService
) {

    @PostMapping("/signup")
    fun signUp(@RequestBody request: SignUpWithLoginRequest, email: String): ResponseEntity<SignUpResponse> {
        return ResponseEntity.status(HttpStatus.CREATED).body(adminService.signUp(email, request))
    }

    @PostMapping("/login")
    fun signIn(@RequestBody request: SignUpWithLoginRequest): ResponseEntity<LoginResponse> {
        return ResponseEntity.status(HttpStatus.OK).body(adminService.login(request))
    }

}

 

AdminRepository

interface AdminRepository: JpaRepository<Admin, Long> {
    fun findByEmail(email: String): Admin?
}

 

AdminServiceImpl

@Service
class AdminServiceImpl(
    private val adminRepository: AdminRepository
) : AdminService {

    @Transactional
    override fun signUp(email: String, request: SignUpWithLoginRequest): SignUpResponse {
        val admin = Admin (
            email = request.email,
            password = request.password
        )
        adminRepository.save(admin)

        return SignUpResponse(email)
    }

    @Transactional
    override fun login(request: SignUpWithLoginRequest): LoginResponse {
        val admin = adminRepository.findByEmail(request.email) ?: throw IllegalArgumentException("해당 이메일은 존재하지 않습니다.")

        if (admin.password != request.password) {
            throw IllegalArgumentException("비밀번호가 일치하지 않습니다.")
        }

        return LoginResponse(email = admin.email)
    }
}

 

 

 

마무리

이전에도 느낀거지만, 코드를 좀 관성적으로 짜는 것 같다.

생각을 하고 왜 이렇게 사용했는가? 를 좀더 고려해봐야 할것같다.