미션3 구현
getter 사용으로 데이터를 직접 꺼내는 대신 객체가 일을 하도록 하기 (캡슐화)
if (!id.equals(sessionedUser.getId())) {
throw new IllegalStateException("자신의 정보만 수정할 수 있습니다.");
}
- getId()와 같은 메소드로 데이터를 직접 꺼내는 것이 아니라, User 클래스에서 isIdMatching()과 같은 메소드를 생성한다.
→ getter를 이용해 직접조회하는것을 막는것을 캡슐화라고 함
custom exception 삭제, 기존의 NoSuchElementException 발생하도록 변경
기존의 예외로도 충분히 예외발생 정보를 전달할수 있을거라고 판단
Todo: UserController에서 update()와 updateForm() 에 중복부분 어떻게 제거할지 고민하기
jsessionid란?
jsessionid란??
톰캣 컨테이너에서 세션을 유지하기 위해 발급하는 키
- http프로토콜은 stateless하다. 상태를 저장하기 위해 톰캣은 jsessionid 쿠키를 클라이언트에게 발급하고 이 값을 통해 세션을 유지하도록 한다.
- jsessionid 쿠키 : jsessionid의 세션 유지 방법으로 내부적으로 쿠키를 사용한다.
DAO, DTO, Entity Class의 차이
[DAO] DAO, DTO, Entity Class의 차이 - Heee's Development Blog
DAO
Data Access Object
- 실제로 DB에 접근하는 객체 : qna프로젝트에서 UserRepository랑 QuestionRepository에 해당
- Persistence Layer (DB에 데이터를 CRUD하는 계층)
- Service와 DB를 연결하는 고리역할
- SQL을 사용하여 DB에 접근하고, 적절한 CRUD API 제공
- JPA 대부분의 기본적인 CRUP method를 제공하고 있다.
- extends JpaRepository<User, Long>
DTO
Data Transfer Object
- 계층간 데이터 교환을 위한 객체(Java Beans)
- DB에서 데이터를 얻어 Service나 Controller로 보낼때 사용하는 객체
- Request와 Response용 DTO는 View를 위한 클래스
- toEntity() 메소드를 통해서 DTO에서 필요한 부분을 이용하여 Entity로 만든다.
- Controller Layer에서 Response DTO 형태로 Client에 전달
VO(Value Object) vs DTO
Entity Class
-
실제 DB의 테이블과 매칭될 클래스
-
Entity클래스와 DTO 클래스를 분리하는 이유 (이부분은 이해가 잘 안된다.)
-
View Layer와 DB Layer의 역할을 철저하게 분리하기 위해
-
테이블과 매핑되는 Entity클래스가 변경되면 여러 클래스에 영향을 끼친다.
반면, View와 통신하는 DTO클래스(Request 클래스, Response 클래스)는 자주 변경되므로 분리해야한다.
-
controller : url과 view를 매핑처리, 적절한 ResponseEntity(DTO)를 body에 담아 Client에 반환
-
service : DAO로 DB에 접근하고, DTO로 데이터 전달받고, 비즈니스로직을 처리해서 데이터를 반환한다.
-
repository(DAO) : service와 DB를 연결하는 고리역할, 실제로 DB에 접근하는 객체
오늘 한일
- 호눅스의 DB수업후에 실습 따라해보려고 AWS 서버에 MySQL 설치하고 sequel ace로 연결하려고하는데 실패한다. 오늘 수업 어려웠는데 일단 루카스에 첨부되어있는 강의들로 입문하고, SQL 첫걸음 빌려서 봐야겠다.
- DAO, DTO, Entity class에 대해 학습했다. qna 미션의 클래스들이 어떤 역할을 하는건지 감이 온다. controller, service, repository에 대해서도 계속 학습하면서 개념을 명확하게 만들려고 하는중이다.
- 영한님 스프링 핵심원리 강의 들었다. 스프링 컨테이너 생성하는 방법, 컨테이너에 등록된 빈 조회하는 테스트 코드 짜기, 동일한 타입의 빈이 둘 이상이면 타입뿐만아니라 빈 이름을 지정해서 조회해야한다.
- 미션3 진행중 질문하기 부분 진행하고 내일 pr 날리자
- 주말에 스트레스받는 일이 있어서 피로가 누적된 기분.. 무리하지 말아야지
Todo
내일
[SpringCamp2013] ORM 프레임워크를 활용할 때의 설계, 개발 프로세스