회원 정보 detail 페이지에 뭔가 추가하고 싶어서 아이디를 생성한 날로부터 며칠이 지났는지를 보여주고자 테이블에 날짜 정보를 추가해보고자 한다.
MySQL에서의 날짜 및 시간 정보를 담는 타입으로는
DATE / DATETIME / TIME / TIMESTAMP 가 있다.
Date : 날짜만 포함 YYYY-mm-dd
DateTime : 날짜 + 시간 YYYY-mm-dd HH:MM:SS
Time : 시간 HH:MM:SS
TimeStamp : 날짜 + 시간 (time_zone 영향 받음) YYYY-mm-dd HH:MM:SS
DateTime과 TimeStamp의 차이로는 둘의 타입이 각각 문자/숫자형인 점, 저장공간이 8byte/4byte인 점, 자동입력의 유무(timestamp O), 타임존의 영향을 받는 점(timestamp O) 정도가 있다.
일단 기존에 만들어뒀던 테이블에 column을 추가해야 하므로 인텔리제이의 mysql console에 다음과 같이 작성한다.
alter table member_table add column create_time date;
alter table (테이블명) add column (칼럼명) (변수타입) 정도로 선언하면 되며, NOT NULL/DEFAULT 및 ON UPDATE 등의 옵션도 있으나 나는 날짜 정보만 필요하므로 다른 옵션은 선택하지 않을 예정이다.
alter table member_table alter column create_time set default (current_date);
행을 추가할 때마다 create_time 칼럼 값에 현재 날짜를 디폴트 값으로 주기 위해 칼럼 옵션에 default (current_date)를 추가해줬다.
-> alter column인지, modify column인지 등에 따라서도 뒤에 따라오는 옵션이 달라진다
이런식으로 분명 디폴트 값을 설정해줬는데도 새로 회원가입을 했을 때 date 란에 현재 날짜가 자동으로 찍히지 않는 것 ...
show columns from member_table;
테이블에 있는 칼럼들의 옵션을 보여주는 코드를 통해 설정된 값을 봤는데 default에 curdate()라고 잘 들어가있어서 더 당황스러웠다.
검색해보니 Entity에 @DynamicInsert 어노테이션을 추가하라는 글을 발견했다.

처음에는 해당 어노테이션을 추가하고 나니 회원가입 페이지에서 white label 오류가 발생했는데, 그 차이인지는 모르겠지만 @Table 어노테이션 밑에 추가해보니 오류가 발생하지 않았다...?