💻 프로젝트/🍝 홍잇

    [HongEat] 리팩토링 - Enum/ParameterBinding(Converter)

    ParameterBinding 앞서 Dto로 전달한 Category의 viewName으로 가게리스트를 카테고리별로 조회하는 기능을 만들고자 했다. /** * 가게 리스트 종류별 조회 */ @GetMapping("/category/{category}") @Operation(summary = "카테고리별 가게 리스트 조회 요청", description = "카테고리별 가게 리스트 조회 요청 API 입니다.") public ResponseEntity getStoresByType( @PathVariable("category") Category category) { List getStoreDtos = storeService.getStoresByType(category); return ResponseEntity.o..

    [HongEat] 리팩토링 - Enum/toJson(@JsonValue)

    @JsonValue Enum 변수를 Json으로 변환하였을 때 enum의 value(=viewName) 값이 아닌 name이 출력되는 현상이 나타났다. @JsonValue는 전체 인스턴스를 직렬화할 때 사용하는 단일 메서드를 나타낸다. 예를 들어, enum에서 getViewName 메서드에 @JsonValue를 넣어주어 이름을 통해 직렬화하게 한다. public enum Category { RESTAURANT("음식점"), CAFE("카페"), BAKERY("베이커리"), PUB("주점"), BAR("바"), ETC("기타"); private String viewName; @JsonValue public String getViewName() { return viewName; } ... } Dto에 get..

    [HongEat] 리팩토링 - Enum/toEntity(@JsonCreator, @EnumValid)

    @JsonCreater 가게의 카테고리를 Enum을 사용하여 표현해 주었다. @Getter @AllArgsConstructor public enum Category { RESTAURANT("음식점"), CAFE("카페"), BAKERY("베이커리"), PUB("주점"), BAR("바"), ETC("기타"); private String viewName; } 모든 가게의 정보가 이미 데이터베이스에 들어있거나 enum값(CAFE)을 이용하여 가게를 추가하는 게 아니라 요청 시 viewName을 사용하기 위해선 enum값을 맵핑해줘야 한다. @Getter @NoArgsConstructor public class PostStoreDto { ... @ApiModelProperty(value = "가게 종류", ex..

    [HongEat] 리팩토링 - 변경사항

    데이터베이스 변경 PostgreSQL → MySQL으로 변경했다. PostgreSQL의 대표적인 장점은 다음과 같다. 복잡한 쿼리에 탁월 NoSQL 및 다양한 형식(JSON, hstore, XML 등) 지원 다중 버전 동시성 제어 해당 프로젝트에서는 이러한 장점을 하나도 써먹지 못하고 있었다. 복잡한 쿼리가 아닌 JPA로 해결했고, 다른 형식을 저장하지도 않으며, 동시성 제어를 고민할 필요가 없었던 것이다. 단순히 '써보고 싶다'를 넘어 해당 기술을 쓰는 이유가 있어야 한다고 생각해서 바꾸게 되었다. 설치와 관리가 비교적 쉽고, 빠르고, 안정적이며 간단한 데이터베이스인 MySQL으로 변경하게 되었다. 상세정보: MySQL vs PostgresSQL Entity 수정 1. 필요 없는 어노테이션 제거 //빌..

    [HongEat] 리팩토링, 어떻게 진행했는가

    리팩토링 과정을 간략하게 여기에 적어보고 자세한 사항은 추후 포스팅에서 다루겠다. 변경사항 데이터베이스 변경 서비스 Entity 구성 변경 Dto 분할, toDto 로직 생성 Enum 관련 로직 변경 toEntity 로직, validate 어노테이션 및 에러 처리 toJson Enum value 전달