처음에 랜덤 값을 만드는 방법으로 Random 클래스와 함께 seed 값으로 시스템의 현재 시간을 사용하였습니다.private int makeRewardPoint() { long seed = System.currentTimeMillis(); Random random = new Random(seed); return random.nextInt(10) + 1;} 하지만 프로젝트를 리팩토링하면서 고민해보게 된 2가지로 인해 알아보다가 ThreadLocalRandom클래스로 변경하게 되었습니다.메서드가 동작할 때마다 새로운 Random 클래스를 재생성 해도 괜찮은가?동일한 시간에 여러 개의 요청이 동시에 들어온다면?물론, '잔디일기'의 서비스의 경우 일기를 작성 했을 때 랜덤 값으로 포인트가 적립..
사건의 발단진행 중이던 프로젝트의 브랜치 이름들이 올바르게 생성되어 있지 않아서 수정하려고 했다.하지만 모든 브랜치들이 수정되고 삭제되는 과정으로인해 로컬에 있던 브랜치와 원격 브랜치들이 맞지 않았다.결국 로컬에 있는 코드를 삭제하고 다시 clone을 하는 과정을 진행했다. 하지만 mac book을 오랜만에 켜서 그런진 모르겠지만... Intelij에서 GitHub 연동이 되지 않아 난감했다.이러면 안됐지만 ..!그냥 Fork도 다시 해보자는 생각에 레포지토리를 삭제 해버렸다. 그런데.....삭제하고 생각해보니 왜 레포지토리 앞에 내 이름이 아닌 Organization이 들어있지? 라는 생각이 슥 스쳤다.아 큰일 났다. X 됐다. 이미 일은 저질러진 것이었음을...이때 백엔드 팀 회의를 하면서 작업하고 ..
1. 목표시스템 전반에서 발생할 수 있는 다양한 예외를 포괄적으로 관리하고, 일관된 방식으로 예외를 처리하기 위해 예외 처리 로직이 필요합니다.에러 핸들링을 위한 예외 처리 로직 구현 과정을 정리해 보았습니다. *아직 리팩토링이 진행중인 상태로, 생성되지 않은 예외들이 있어서 추후 에러코드들이 거의 완성된다면 추가 해두겠습니다.2. 예외 코드 정의먼저, 클라이언트와 서버에서 발생할 수 있는 다양한 예외 상황에 대해 정의합니다.에러의 경우 서버와 클라이언트에서 생성되는 2가지의 오류가 있기 때문에 ClientErrorCode와 ServerErrorCode를 enum 클래스로 나누어 정의해 주었습니다.이 때, ErrorCodeModel이라는 인터페이스를 생성해주었습니다.ErrorCodeModel 인터페이스의..
기능을 구현 하면서 정신 차리고 보니 중복된 코드가 너무 많아서 코드 리팩토링을 진행하기로 했습니다. 여러 사람이 작업하면서 PR 날릴 때 코드 리뷰를 진행하지 않은 결과입니다.리뷰를 진행하지 않으면 어떤 나비효과를 불러오게 되었는지 요즘 엄청 잘 느끼고 있습니다.😅 대표 서비스 클래스인 DiaryService만 코드 리팩토링 과정을 나타내 보려고 합니다.미리보는 리팩토링 결과리팩토링 전 341줄로 이루어져있던 코드는 333줄의 코드로 줄었습니다.코드 줄로만 판단했을 때는 많이 줄은 것은 아니나,전반적인 중복 로직에 대한 코드를 메서드로 분리하여 코드의 양이 줄었고, 메서드 내 가독성이 향상되었습니다.신경쓰이는 네이밍도 조금씩 손보아서 코드의 가독성과 명확성이 향상되었습니다.메서드가 많아짐에 따라 ..
아래의 '[잔디일기] 패키지 구조에 대한 고민'에 대한 글로부터 이어지는 글입니다. [잔디일기] 패키지 구조에 대한 고민잔디 일기 서비스의 경우 간단한 서비스였기 때문에 1차 기능 구현 기간까지는 비교적 수월하게 진행을 해 왔으나,1. 초반에 팀원 분들과 서로 상의하지 않고 각자 구현했던 패키지 구조로 인해yeseul-dev.tistory.com 해당 글을 토대로 패키지 구조 변경을 시도 했습니다.하지만 구조 변경을 하면서 필요한 패키지들이 보였고, 기존 예정이었던 아래와 같은 구조에서 조금 변경하게 되었습니다.# 기존 계획⎿ grassdiary ⎿ global ⎿ auth ⎿ util ⎿ common ⎿ request ⎿ response ..
잔디 일기 서비스의 경우 간단한 서비스였기 때문에 1차 기능 구현 기간까지는 비교적 수월하게 진행을 해 왔으나,1. 초반에 팀원 분들과 서로 상의하지 않고 각자 구현했던 패키지 구조로 인해 커져버린 메인 패키지2. 추가해야 할 기능이 늘어남에 따라 중구난방으로 생성되어버린 패키지3. 하나의 기능을 수정하려면 여러 패키지를 수정해야 하는 번거로움해당 부분들 때문에 대규모 패키지 수정이 필요해 보였습니다. 그래서 패키지 구조를 어떤 식으로 고민을 했고, 그래서 어떻게 바꿀 것인지에 대해 적어보았습니다.패키지 구조를 만드는 방식에는 계층형 구조와 도메인형 구조가 있습니다 . 계층형 구조는 쉽게 Controller/Service/Domain으로 나누는 구조로, 다음과 같이 표현되어 서로 메시지를 주고 받습니다...