ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring Boot] IntelliJ에서 profiles 옵션이 적용안되던 이유 해결법
    Spring/Trouble Shooting 2023. 7. 20. 23:08

    일단 가장 먼저 프로젝트를 진행함에 있어, Github Action으로 CI/CD를 구축하여 개발하는 중이였다.

    개발환경에서는 h2 in-memory DB를 활용했어, 배포환경에서는 MySql을 사용하기 위해 apllication.yml을 배포 환경에는 prod를 적용했다.

    따라서 CI/CD는 application-prod.yml을 적용해서 실행되도록 하였는데 실제 환경에서도 돌아가는지 직접 확인하기 위해

    개발환경에서 쓰이던 application.yml과 application-prod.yml를 같이 두고 실행해봤다.

    따로 사용할 profile 이름까지 지정해서 진행했는데

    분명 profile is active: prod 를 확인했다.

    그러나 발생하는 오류

    Hibernate: 
    
        drop table if exists user_info CASCADE 
    2023-07-20 22:23:34.184  WARN 24522 --- [           main] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Warning Code: 1051, SQLState: 42S02
    2023-07-20 22:23:34.184  WARN 24522 --- [           main] o.h.engine.jdbc.spi.SqlExceptionHelper   : Unknown table '...'
    Hibernate: 
    
        create table user_info (
           id bigint generated by default as identity,
            account_type varchar(255),
            is_admin boolean,
            is_ban boolean,
            is_writer boolean,
            sns_id varchar(255),
            user_email varchar(255),
            user_name varchar(255),
            user_password varchar(255),
            primary key (id)
        )
    2023-07-20 22:23:34.213  WARN 24522 --- [           main] o.h.t.s.i.ExceptionHandlerLoggedImpl     : GenerationTarget encountered exception accepting command : Error executing DDL "
        create table user_info (
           id bigint generated by default as identity,
            account_type varchar(255),
            is_admin boolean,
            is_ban boolean,
            is_writer boolean,
            sns_id varchar(255),
            user_email varchar(255),
            user_name varchar(255),
            user_password varchar(255),
            primary key (id)
        )" via JDBC Statement
    
    org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "
        create table user_info (
           id bigint generated by default as identity,
            account_type varchar(255),
            is_admin boolean,
            is_ban boolean,
            is_writer boolean,
            sns_id varchar(255),
            user_email varchar(255),
            user_name varchar(255),
            user_password varchar(255),
            primary key (id)
        )" via JDBC Statement
        at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) ~[hibernate-core-5.6.15.Final.jar:5.6.15.Final]
        at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlString(SchemaCreatorImpl.java:458) ~[hibernate-core-5.6.15.Final.jar:5.6.15.Final]
    
    이하 생략
    

    오류 코드중에서 눈에 보이는 오류 내용을 확인하니

    Caused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'by default as identity,
            account_type varchar(255),
            is_admin bool' at line 2

    MySql에서 사용중인 예약어라는 이상한 말을 내뱉는다...

    이거 때문에 삽질을 했는데 원인은 이것 때문이 아니였다.

    분명히 mysql jdbc가 연결된 prod 설정을 적용했는데, 기본 설정이 적용되어 h2 DB가 사용되는 것이였다.

    속는셈치고 prod의 내용을 그대로 기본 application.yml에 적용해서 실행해보니 잘 실행되는 상황이 연출되었다.

    이거 분명 뭔가 잘못되었다고 원인을 해결하기 위해 방법을 찾았는데

    드디어....

    기본 apllication.yml을 dev라는 이름을 적용해줬더니 해결되었다.

    왜?

    기본으로 profile은 기본 application.yml 또는 properties가 실행된다.

    spring:
      profiles:
        active: dev

    과 같은 설정을 해주지 않으면 dev 환경으로 실행되지 않는다.

    댓글

Designed by black7375.