세션 개체는 직렬화 가능해야 하므로 세션 개체가 참조하는 모든 개체도 직렬화 가능해야 한다
https://stackoverflow.com/questions/9271835/why-composite-id-class-must-implement-serializable
( enum 사용법)
@Enumerated
enum 관련 생활코딩 강좌
https://www.youtube.com/watch?v=vFDsVdaZeao&ab_channel=%EC%83%9D%ED%99%9C%EC%BD%94%EB%94%A9
값 받을때 enum class 선언한 상수값을 value로 받으면 된다
truncated 어쩌구 뜰 때는, mysql에 enum값이 선언돼있지 않은 것.
1. String으로 설정했는데 숫자등으로 값이 들어갈 때 2. java enum class에 선언돼있지 않을 때
변수명.getClass().getName()
참조 블로그
이렇게 따로 분리해놓는 이유는 HTTP Request를 Web Application이 받게 되면 Thread를 생성하게 되는데 비즈니스 로직이 DB로부터 데이터를 얻어오기 위해 매번 Driver를 로드하고 Connection 객체를 생성하게 되면 엄청 많은 커넥션이 일어나므로 DAO를 하나 만들어 DB 전용 객체로만 쓰는 것이다. 이러면 부담이 줄어들게 된다.
@Repository annotation이 붙는 곳. DB와의 연결을 하는 곳
Data Transfer Object의 줄임말이다. VO(Value Object)라고도 표현하는데, 계층간 데이터 교환을 위한 자바빈즈(Java Beans)다.
data 정보를 받거나 담아서 return 해주는 곳
VO란 이렇게 도메인에서 한 개 또는 그 이상의 속성들을 묶어서 특정 값을 나타내는 객체를 의미
https://woowacourse.github.io/javable/2020-06-11/value-object
Service -> 비지니스 로직을 처리하는 곳
Controller -> routing + dto 처리를 해주는 곳