TIL - 0627
java-ims
ControllerAdvice, RestControllerAdvice
- @RestController와 @Controller의 차이 : 응답 데이터가 json이냐 뷰(.html)냐 차이
- @RestControllerAdvice : response를 json으로 변환해주는 역할, rest api 구현할 때 사용
- 컨트롤러의 타입에 따른 예외처리 분기
- 같은 타입의 예외지만 각기 다른 처리를 할 수 있음 : json 응답, redirect 혹은 특정 view 응답
/* RestController */
@RestControllerAdvice(annotations = RestController.class)
@Order(1)
public class SecurityRestControllerAdvice {
...
}
/* Controller */
@ControllerAdvice(annotations = Controller.class)
@Order(2)
public class SecurityControllerAdvice {
...
}
ResponseEntity static 메소드
- ResponseEntity의 새로운 인스턴스를 생성해서 직접 만들어줄 수도 있지만, static 메소드를 통해서 ResponseEntity
를 만들 수 있음 - 빌더 패턴을 사용해서 체이닝을 할 수 있음
@ExceptionHandler(UnAuthenticationException.class)
public ResponseEntity<Void> handleRequireLogin() {
log.debug("Rest Controller UnAuthenticationException is happened!");
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
}
@ExceptionHandler(EntityNotFoundException.class)
public ResponseEntity<Void> handleEntityNotFound() {
log.debug("Rest Controller EntityNotFoundException is happened!");
return ResponseEntity.badRequest().build();
}
jackson 사용할 때 주의할 점
- get 메소드의 반환값을 모두 json 데이터로 변환하려고 함 : 선언되어있는 필드 기준이 아님
- 객체가 반환된다면 해당 반환되는 객체의 get 메소드를 모두 변환하려고 함 : 콜렉션이면 변환 예외 발생함…. jackson 변환 flow를 살펴봐야할 듯
@Entity
public class Issue {
@Embedded
private Comments comments;
// getComments가 없으면 변환하지않음(get 메소드 기준으로 변환함)
public Comments getComments() {
return comments;
}
}
@Embeddable
public class Comments {
private List<Comment> comments;
@JsonIgnore // 해당 어노테이션을 붙이지않으면 변환하려고하다가 예외가 발생함
public List<Comment> getComments() {
return comments;
}
}
JPA
- 쿼리 메소드 사용없이 어노테이션을 통해서 where 쿼리 사용을 지정할 수 있음
@Embeddable
public class Comments {
@OneToMany(mappedBy = "issue")
@Where(clause = "deleted = false")
private List<Comment> comments;
}
데이터베이스
DBMS는 미들웨어
- 미들웨어는 어플리케이션과 OS 사이에서 구동되는 소프트웨어를 뜻함, OS가 아랫계층이기때문에 OS가 구동되고있어야만 DBMS가 구동될 수 있음
- 보통 DBMS는 거의 모든 OS에서 사용할 수 있도록 지원함
- 그렇더라도 OS와 DBMS 조합을 처음 설계할 때 잘 고려해야함 : 쉽게 옮길 수 있는 것이 아님 - 비용이 큼
RDBMS
정의
- 2차원 표를 사용해서 데이터를 관리하는 데이터베이스를 뜻함
- 데이터의 종류와 데이터를 맵핑시켜서 관리 : 데이터 갱신 작업하기가 편함
- 관계형 데이터베이스 작업을 위한 언어 : SQL(어떤 테이블에 어떤 데이터에 어떤 작업을 할 것인지 나타낼 수 있음 - 표처럼 관리하고 있기때문에 딱 지칭하기가 좋음)
- 모든 관계형데이터베이스마다 각각의 SQL 방언(dialect)이 있음 : 조금씩 다름 - JPA를 사용하면 사용하는 데이터베이스만 설정해두면 맞춰서 쿼리 생성함
- 관계형데이터베이스 갱신 SQL : SELECT(검색), INSERT(등록), UPDATE(수정), DELETE(삭제)
SELECT 가져오고자하는컬럼명 FROM 테이블명 WHERE 조건;
SELECT name FROM address WHERE addr LIKE '%서울시';
- 관계형데이터베이스(“R”DBMS)와 데이터베이스를 확실하게 구분해야함
- 데이터베이스 : 데이터를 관리(갱신)하는 기능과 구조를 뜻하는 추상적인 개념임
- 관계형데이터베이스: 추상적인 개념의 구현체(그런 기능을 구현했는데 관계형이라는 표로 데이터를 관리하도록 구현함) - DBMS의 한 종류
제품군
- mysql
- oracle
- postgresql
- db2