배운 점
- DTO (Data Transfer Object)
- 계층 간 데이터 전송을 위해 도메인 모델 대신 사용되는 객체
-> Entity를 그대로 넘겨주는 대신에 사용되는 객체
- 도메인 모델을 캡슐화 하여 보호할 수 있다.
- Entity를 넘겨주지 않고 RequestDto, ResponseDto를 통해서 넘겨준다면 Entity에 포함된 필드 중에서 클라이언트에게 노출되면 안되는 필드들을 제외하고 넘겨줄 수 있는 것으로 보인다.
-> 과제를 하면서 생각해보았음.
- DI
- 객체를 직접 생성하는 것이 아니라 객체를 외부에서 생성한 후 주입하는 것
- 같은 객체 내에서 다른 객체를 사용할 경우 계속 새로 생성하는 것이 아니라 이미 생성되어 있는 객체를 가져다가 사용하는 것으로 이해하면 될 듯
- IoC
- 제어의 역전, 객체 생성 > 클래스 내부에서 의존성 객체 생성 > 의존성 객체 호출 순의 제어 흐름을 객체 생성 > 의존성 객체 주입 > 의존성 객체 메서드 호출 순으로 바꾸는 것
- Query Method
- Spring Boot에서는 sql을 직접 짜서 데이터베이스에 보내지 않고, 메서드를 만들면 데이터베이스를 조회, 수정해줌
- 메서드의 이름만 설정함으로써 쿼리를 자동으로 생성
- By 앞 부분은 주어를, 그 뒤 부분은 술어를 의미
- Transaction
- 데이터베이스를 수정할 경우, Annotation으로 Transaction을 추가해주어야 수정할 수 있다.
- 그렇지 않다면, 수정한 query method가 작동은 하지만 데이터베이스에 영향을 줄 수 없다.
- Auditing
- 객체에 다른 객체를 extends하여 사용(예: Memo객체에 Timestamped 객체를 사용)
- 같은 기능을 가진 필드를 별도로 모아서 관리할 때 쓰면 편할 듯
-> 해당 클래스는 abstract 클래스와 같이 다른 클래스에서도 사용할 수 있기 때문
- extends 할 클래스에 @EntityListeners(AuditingEntityListener.class) 라는 Annotation을 추가해주어야 해당 클래스를 auditing할 것이라는 뜻이 되고, 실행되는 메인 메서드가 있는 클래스에 @EnableJpaAuditing를 추가해주어야 사용이 가능하다.
느낀 점
- Spring은 사용자가 쉽게 적용하고 만들 수 있도록 다양한 기능들과 Annotation들을 만들었다는 것
- 이미 구현되어 있는 기능들을 잘 이해하고 외우고 사용하는 것이 중요할 것으로 보임
- 실제로 DI, IoC와 같은 개념들을 잘 이해하고 숙달하지 않으면, 그냥 복붙만 하는 사람으로 될 듯...
잘한 점
- 일단 과제를 제 시간안에 제출한 점
-> 결과물을 정해진 시간안에 낼 수 있는 것을 첫 번째 목표로 생각함
아쉬운 점
- 제대로 이해를 하고 과제를 했다니 보다 이미 주어진 코드를 가지고 변형만 시켜서 제출한 것으로 생각이 된다...
-> 강의 복습과 별도의 Spring 공부가 필요할 것으로 보임