[인프런 워밍업 클럽]2주차 발자국
6일차
@RestController
API진입 지점을 만들어준다.
해당 클래스를 스프링 빈으로 등록시킨다.
new 해줄 필요가 없다(스프링 빈이니깐)
@Repository, @Service 이 어노테이션도 스프링 빈으로 등록시켜준다.
@Configuration + @Bean 사용방법도 있다.
외부라이브러리나 프레임워크에 만들어져 있는 클래스를 빈으로 등록할때 많이 사용하는 조합니다!
@Qualifier와 @Primary 어노테이션은 특정 빈을 선택할 수 있게 해준다.
우선 순위는 @Qualifiler이 더 높다!
7일차
JPA
Java Persistence API의 약자이다
객체와 관계형 데이터베이스의 테이블을 짝지어 데이터를 영구적으로 저장할 수 있도록 정해진 Java진영의 규칙이다.
테이블에 대응되는 Entity Class를 만들어야한다.
findByName method
함수 이름만 작성하면 알아서 SQL이 만들어진다.
find : 1개의 데이터만 가져온다.
By : 뒤에 붙는 필드 이름으로 WHERE절이 작성된다.
select * from user where name = ? 의 SQL문이 완성된다.
By앞 구절
find : 반환 타입은 객체, Optional<타입>
findAll : 쿼리 결과가 N개인 경우 반환 타입은 List<타입>
exists : 쿼리 결과가 존재하는지 확인 반환 boolean
count : 쿼리 결과 개수를 센다. 반환 long
By뒷 구절
GreaterThan : 초과
GreaterThanEqual : 이상
LessThan : 미만
LessThanEqual : 이하
Between : 사이에
StartsWith : ~로 시작하는
EndsWith : ~로 끝나는
8일차
@Transactional
로직이 정상적으로 작동하면 DB에 적용된다.
로직에 문제가 발생하면 @Transactional으로 rollback된다.
영속성 컨텍스트가 생긴다.
반환받은 객체에 변경이 생기면 자동으로 save method를 실행하여 DB에 적용시킨다.
쓰기 지연능력이 생긴다.
commit이 되는 시점에 SQL을 모아서 실행시킨다.
1차캐싱능력이 생긴다.
같은 쿼리가 실행된다면 최초1회 쿼리만 실행된다.
9일차
책 등록기능, 대출기능, 반납기능 구현
대출기능과 반납기능의 HTTP Body스펙이 동일해도 새로운 DTO를 만드는 것이 좋다!
이후에 대출기능이나 반납기능에 기능추가가 생길경우를 대비하여 만드는 것이 좋다.
2주차 후기
JPA를 배우면서 놀라웠다. 메소드명으로 SQL쿼리를 만들다니?!?!
기본적인 CRUD를 만들때는 생산성이 향상되겠구나 싶었다.
하지만 복잡한 SQL을 만들려면은 더 깊게 공부해야된다고 느겼다.
과제중 JPA로 Group by를 사용하려면 어려운 방법은 사용해야했는데 너무 어려워서 포기를 해버렸다.
기회가 된다면 JPA를 조금더 심층적으로 공부를 해야겠다.
@Transactional 기능 또한 놀라웠다. 영속성 컨텍스트로 변경사항이 있다면 자동으로 DB에 반영해주는게 좋은 기능 같다.
댓글을 작성해보세요.