2022.11.18 TIL

SUADI·2022년 11월 18일
0

오늘은 거의 대부분 api를 구현했기 때문에 커밋을 많이 하진 않았고, 깃 관련된 이슈를 해결하느라 하루를 다썼던 것 같다.(사실상 깃 이슈는 3시간 정도 썼고, 나머지는 방황하는데 썼다...)

오늘의 커밋

  • enum으로 관리하는 봉사 활동 지원자 승인 여부 String으로 변환

TIL 시작.

[1] enum

자바를 공부할 때에도 enum에 관해서는 깊이 공부하지를 않았고 코드를 짤 때에도 enum을 사용할 일이 별로 없었기 때문에 enum과의 어색한 관계에 있다가 실전 프로젝트에서 멤버 권한, 봉사 활동 승인 여부 등에 필요할 것 같아 이제야 친해지기 위해 노력하고 있다. 구글링으로 빠른 정보 훑기를 통해 학습한거라 매우 얕게 공부를 하게 되었지만 적어도 쓸 줄은 알게 되었다.

{1} enum 사용 이유

enum이라는 것은 enumerated type의 약자로 서로 연관된 상수들의 집합이다. 대표적인 예로는 요일을 enum으로 정의할 수 있다.

public enum Week {
	MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}

이런 식으로 정의를 해놓으면 조건에 맞게 enum 값들을 불러다가 사용할 수 있다.

enum이라는 클래스가 없을 때엔 final 로 선언된 상수를 사용했었는데 예를 들면,

public class Week {
	private final int MONDAY = 1;
    private final int TUESDAY = 2;
    .
    .
 
}

이런 식으로 int 값으로 정의한 후, 초기화된 숫자와 같은 경우 해당 요일로 정의를 해서 사용했다. 이런 방식은 가독성도 떨어지고, 무엇보다 IDE의 자동완성 지원을 받기가 힘들다.

{2} 프로젝트에 enum 적용

public enum Approval {
	WAITING, PASS, FAIL;
}

다음은 일반 멤버가 봉사 활동을 지원했을 때, 관리자 멤버가 승인 여부를 선택하기 위해 만들어진 enum 클래스이다.
먼저, 일반 멤버가 봉사 활동을 지원하면 WAITING으로 초기화가 되도록 설정해 놓았고, 관리자가 이 멤버를 승인하게 되면 PASS, 거절하게 되면 FAIL로 update를 했다.

여기서 몰랐던 사실은 enum 값에 아무것도 초기화를 하지 않은 상태로 사용하게 되면 정의한 순서대로 0,1,2...가 초기화되게 된다. 그래서 봉사 활동을 신청하게 되면 테이블에 WAITING 문자열이 뜨지 않고, 0이 떴다. 이를 해결하기 위해 각 enum 값에 초기화를 해주는 방법도 있지만 구글링을 통해 @Enumerated(EnumType.STRING) 를 알게 되었고, 이를 붙여줌으로써 enum 이름값 그대로 문자열로 저장할 수 있었다.

[2] 깃 커밋 내역 관련 이슈

실전 프로젝트에 와서는 api 별로 이슈 등록을 한 뒤, 각각 브랜치를 파서 작업을 한 후 머지를 하는 방식으로 진행하려고 노력 중이다. 하지만 브랜치에서 작업을 하다보면 갑작스럽게 다른 api의 코드를 수정할 일이 생기곤 하는데 그럴 때마다 브랜치를 바꾸는걸 깜빡한다. 위에 커밋내역은 깜빡해버린 결과이다.

어떤 브랜치에서 작업을 하다가 다른 api를 수정할 일이 생겼지만 기존의 브랜치에서 작업을 해버렸다. 나중에 깨닫고 그때서야 새로운 브랜치를 파서 그대로 커밋을 해버렸다. 근데 중요한건 이전의 브랜치에도 커밋이 존재했기 때문에 두 브랜치를 모두 메인에 머지하였다. 그 때부터 재앙이 시작되었다. 과거의 커밋 내역들이 rebase된 것마냥 좌르륵 붙어버렸다. 게다가 그 사실을 인지하지 못한 상태로 계속 코드 수정하고 커밋을 했고, 그 후로도 메인에 계속 머지하다가 나중에 깨닫게 되었다..

코드 상의 문제는 없었기에 천만다행이였지만 커밋 내역이 더럽혀졌다는 것이 용납이 안되었고, 팀원들에게도 미안한 마음이 들었다. 해결해 보기위해 두명의 매니저님과 동기 여러명에게 도움을 요청하기도 했지만 코드 상의 문제가 없다면 굳이 코드 누락의 위험을 감수하면서까지 뭔갈 시도하려고 하지 말고 그냥 진행하는 것도 방법이라고 해서 해결책은 찾지 못하게 되었다.

이 에피소드를 항상 기억하고 있다가 언젠간 이런 상황에서의 해결책을 찾아 보고 싶다.

[3] 오늘 흘려보낸 잡다한 시간들..

프로젝트가 벌써 마무리되는 듯한 기분은 엄청난 오해였다.. 생각보다 고려해야할 사항이 많았고, 세세하게 들어가면 에러가 나는 상황이 매우 많았다. 그냥 api 잘 구현했고, 겉으로 보기에 에러가 나지 않았기 때문에 어제까진 방심했었던 것 같은데 오늘 이런저런 생각을 하며 코드를 다시 읽어보는데 수정해야할 부분이 너무나 많았다. 게다가 검색 api도 구현해야 하는데 검색 기능을 구현하려면 동적쿼리, querydsl 등을 공부해야 할 것 같다.
오늘은 할게 많아서 오히려 정리가 안되고 뭘할지 몰라서 방황하다 시간이 훌쩍 흐른 것 같아서 아쉬운 하루였다. 체력도 점점 고갈되는게 체감이 되는데 할건 많고.. 오늘은 소주 한 잔 하고 잘란다.ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

내일 또 뭐해야 할지 몰라서 방황하지 말고, 해야할 목록을 적고 TIL을 마무리해야겠다.

[4] 프로젝트 이슈

  • 검색 api(동적 쿼리, querydsl 공부)
  • 봉사활동 지원자 수 관련 데이터 테이블 2개에 존재하기 때문에 데이터 정합성 관련 이슈 해결(Lock, Sync schedule 등 공부)
  • createdAt 타임존 다른 현상
  • 전역 예외 처리
  • 헤더에 상태 코드 전송
  • 자잘한 에러
  • 자동 배포화
  • 웹소켓 (후 순위)

0개의 댓글

관련 채용 정보