perfect dish | 이거 만들어볼까? (4) - 파일 처리 기록
🍽 Perfect dish 개발 일지
이 글은 개발 여정을 기록한 것으로 틀린 내용이 나올 수 있습니다. 점점 고쳐나가기 때문이죠
member 파트에서 고민이 끝도 없이 이어지므로(멈춰!) 기본 기능만 빌드해 놓고 menu도 구현해 보자
💡File을 어떻게 저장하는 게 좋을까?
우선 메뉴에는 이미지를 삽입한다. 여기서 우리는 이미지파일명이 중복되는 걸 방지하고자 url을 저장 시 파일명과 서버 저장용 파일명으로 나누어 저장한다. 서버 저장용은 중복이 될 수 없으므로 uuid를 통해 생성한다. 동시에 메뉴는 id를 pk로 사용하지 않는 대신 메뉴 이름을 pk로 설정하고 추후 menuBoard에서 hashSet을 사용할 계획이다. 왜? 메뉴는 겹칠 일이 없으니까 ~ 이를 위해 메뉴 클래스에는 equals와 hashCode를 override 해주는 어노테이션을 menuName 필드로 한정지었다.
💡또 어떻게 전달할 것인가?
DTO 클래스는 주로 데이터 전송을 위한 목적으로 사용되기 때문에 업로드된 파일과 같은 바이너리 데이터를 직접 가지지 않는 것이 좋다. 따라서 파일의 경로나 식별자를 dto에 담아 전달하는 것이 일반적이다.
흐름을 그려본다면 request를 통해 메뉴파일명 그대로 전달 -> 서버에서 uuid를 생성해 서버저장용 파일명으로 변환됨. 그렇다면 response로 다시 받을 때는 가독성을 고려하여 uuid가 아닌 원래 파일명을 받아야 한다.
💡enum 메뉴 타입
메뉴 타입은 애피타이저 / 메인 / 디저트 이렇게 3가진데 main이라는 키워드가 main메서드 와 중복이 되므로 지저분하게(?) 상수에 "T_"를 붙이게 되었다. 그래서 toString메서드를 override 하여 로그나 테스트 코드에서는 앞 접두사가 제거되어 깔꼼한 모습을 보여주겠다 😋
그리고 Request 시 enum 그대로 받아 타입 안정성(type safety)을 제공. 클라이언트가 허용된 값을 입력하도록 강제하여 혹시 모를 오타로 발생할 예외를 예방해 주었다.
빨리 보고 싶어서 테스트에 로그까지 꽂아 콘솔에 출력해 봤다
짜잔