본문 바로가기
프로그래밍/TIL

[TIL] Spring Legacy - Java의 enum값을 MySQL 넣기

by 코딩중독 2024. 1. 30.

목차

    스프링부트에서 Java의 enum과 데이터베이스의 VARCHAR 타입 연결하는 포스팅은 이전 미니게시판 사이드프로젝트에서 포스팅을 했다. 스프링부트의 메이저 버전에 따라 사용법이 다르기는 하지만..

     

    2024.01.25 - [프로그래밍/Project] - [Project01] MiniBoard(3) - Custom Annotation 생성, 사용자 Model 생성

     

    [Project01] MiniBoard(3) - Custom Annotation 생성, 사용자 Model 생성

    Custom Annotation 생성 각 클래스의 역할 세분화를 위해 Business, Converter Annotation을 만든다. 요청 로직의 흐름은 Client -> Controller -> Business -> Service -> Repository 순으로 흘러가고, 응답은 역순으로 반환한

    story-to-me.tistory.com

     

     

    Spring Legacy를 사용해서 진행해야 하는 토이프로젝트에서는 역시 다른 사용법을 찾아야 한다고 생각해서 팀원들이 다른 코딩을 진행 중일 때 미리 찾아두고 공유할 생각으로 구글링을 해봤지만 Spring Legacy에 대한 자료는 생각보다 너무 적었다. 결국 인텔리제이의 자동완성 기능과 키워드 유추를 통해서 찾아보기로 결심했다.

     

    여차저차 테스트를 진행해서 성공이라는 결론에는 다다랐지만 뭔가 부족한 느낌과 이게 맞나?? 라는 의구심에 여전히 찝찝하다. 일단 내용을 남겨두고 팀원들과 상의해보고 조금 더 찾아봐야겠다.

     

    [enum 생성]

    @AllArgsConstructor
    public enum TripStatus implements EnumNamingStrategy {
    
        DOMESTIC("국내"),
        INTERNATIONAL("국외"),
    
    //    국내("국내"),
    //    국외("국외"),
        ;
    
        private final String statusDescription;
    
        @JsonValue
        public String getStatusDescription() {
            return statusDescription;
        }
    
        @Override
        public String convertEnumToExternalName(String enumName) {
            return enumName;
        }
    
    }

     

    enum클래스에 Jackson라이브러리에서 제공하는 EnumNamingStrategy interface를 상속받아서 convertEnumToExternalName 메서드를 구현했다. 누가 봐도 변환해줄 수밖에 없는 메서드이다.

    이 친구를 찾게된 사연은 스프링부트에서처럼 당연히 어노테이션을 붙인다고 생각해서 Entity의 TripStatus 변수를 선언하고 @Enum까지 적고 자동완성을 추적했다. @EnumNaming이라는 녀석이 보였고...

    EnumNaming
    어디에 쓰는 친구일까

     

    음 EnumNamingStrategy를 상속받는 클래스를.. 뭐 이 정도 알았으니 할 수 있는 건 다 해봤다.

    여행 등록 Post 정보에 "국내"를 입력하니 DOMESTIC이 추가되고, "국외"를 입력하니 INTERNATIONAL이 추가됐다.

    데이터베이스
    그렇군

     

     

    추가되는 값이 "국내"/"국외" 이길 예상했지만 일단은 이쯤에 만족했다.

     

    쨘

     

     

     

    10번 행의 "국외"는 어떻게 입력된 것인가?????

    답은 enum클래스의 주석^^; 혹시나 해서 해봤더니 당황스럽게도 입력이 됐다.

    오늘은 이쯤 하고 내일 팀원들과 상의해서 enum클래스 사용법에 대해서 결정해야겠다!