[스프링부트 블로그 프로젝트] 23 ~ 31강

오젼·2024년 2월 12일
0

23강 JSON 사용법

json: 중간언어

request: json -> 자바 오브젝트
response: 자바 오브젝트 -> json

통신시
@Controller에서 request의 body를 json 형태로 받을 것
response시에는 자바 오브젝트를 json 형태로 바꿔서 던져줄 것

24, 25강 회원가입 위한 insert 테스트

package, class, interface

https://velog.io/@zhy2on/추상클래스-인터페이스-extends-implements

repository

Entity에 의해 생성된 DB에 접근하는 메서드(ex) findAll()) 들을 사용하기 위한 인터페이스
JpaRepository<대상으로 지정할 엔티티, 해당 엔티티의 PK의 타입>
👍 https://whitepro.tistory.com/265

DAO, DTO

Data Access Object
Data Transfer Object
👍 https://ccomccomhan.tistory.com/35

@Autowired

DI(의존성 주입)를 위한 어노테이션
스프링컨테이너의 등록된 bean 중 알맞은 것을 대입해준다.

@DynamicInsert

널 값을 배제하고 쿼리를 날려준다.

원래 role 컬럼디폴트 값을 'USER'로 해줬는데 @ColumnDefault("'USER'")

request json 데이터에 role이 null로 들어왔다면
쿼리에 null이 전달되기 때문에 컬럼디폴트 값이 설정되지 않는다. (role=null)
role에 대한 쿼리 자체가 없어야 함.

그래서 @DynamicInsert를 쓰면 널 값을 배제하고 쿼리를 날려주기 때문에 컬럼 디폴트 값이 잘 들어가게 된다.

그런데!

이렇게 어노테이션을 필요시마다 찾아서 이것저것 다 붙이다 보면 코드가 더럽고 좋지 않음.

그래서 그냥 @DynamicInsert도 빼고, @ColumnDefault("'USER'")도 빼고

UserRepository에서 회원가입시 setter로 role을 'USER'로 설정해서 넣을 수 있게 바꿔준다.

26강 id로 select 테스트

{} 문법

주소로 파라미터를 전달받을 수 있음

Optional

NULL값(또는 값)을 감싸서 던져주는 클래스

https://mangkyu.tistory.com/70

MessageConverter

27강 전체 select 및 paging 테스트

@GetMapping

@PageableDefault

👍 https://velog.io/@albaneo0724/Spring-Pagination과-Page-그리고-Pageable

?page=0 식으로 쿼리스트링 사용해주면 된다.

우와 앞으로 이렇게 써야겠다 마이클스콧 기법

28강 update 테스트 & 29강 영속성 컨텍스트와 더티체킹

@PutMapping

방법1 save()

findById()로 해당 데이터 찾고
해당 데이터 오브젝트를 setter로 값을 바꿔준다.
그 다음 save()

근데 이 방법 말고 업데이트할 때는 더티체킹을 사용할 거다~

방법2 더티체킹

@Transactional: 함수 종료시에 자동 commit이 됨

영속성 컨텍스트에 들어오는 걸 영속화 된다고 함.
위 코드에선 findById(select)로 데이터를 가져올 때 해당 id의 데이터가 영속화 된다.

그 다음 가져온 user 오브젝트의 값을 setter로 변경 하고 함수가 끝났는데

@Transactional 어노테이션을 사용했기 때문에 save()를 하지 않아도 영속화된 오브젝트 값이 변경된 것을 감지해 update문을 수행한다.

30강 delete 테스트

@DeleteMapping

31강 Exception처리하기

@ControllerAdvice, @ExceptionHandler(value = )

@ControllerAdvice로 해당 클래스로 모든 예외를 잡아올 수 있도록 해주고
@ExceptionHandler로 특정 예외에 대한 메소드를 만들게 하는 거 같음🤔

0개의 댓글