가수면
[Spring Boot] 심화 본문
API 정적 필터링
model에 응답으로 보내고 싶지 않은 필드를 필터링할 수 있음
// SomeBean
// @JsonIgnoreProperties, @JsonIgnore 둘 다 정적 필터링 가능
@JsonIgnoreProperties({"field1", "field3"}) // field1, field3를 필터링
public class SomeBean {
private String field1;
@JsonIgnore // field2를 필터링
private String field2;
private String field3;
// FilteringController
@RestController
public class FilteringController {
@GetMapping("/filtering")
public SomeBean filtering() {
return new SomeBean("value1","value2", "value3");
}
API 동적 필터링
url에 따라 필터링을 설정해줄 수 있음
// SomeBean
@JsonFilter("SomeBeanFilter")
public class SomeBean {
private String field1;
private String field2;
private String field3;
// FilteringController
@RestController
public class FilteringController {
// field1, field2만 반환
@GetMapping("/filtering")
public MappingJacksonValue filtering() {
SomeBean someBean = new SomeBean("value1","value2", "value3");
// JSON으로 직렬화할 때 적용될 필터를 설정할 수 있게 해줌
MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(someBean);
// 필터링 로직
SimpleBeanPropertyFilter filter = SimpleBeanPropertyFilter.filterOutAllExcept("field1", "field2");
// 필터링 로직을 직렬화 과정에 설정
FilterProvider filters = new SimpleFilterProvider().addFilter("SomeBeanFilter", filter);
mappingJacksonValue.setFilters(filters);
return mappingJacksonValue;
}
// field2, field3만 반환
@GetMapping("/filtering-list")
public MappingJacksonValue filteringList() {
// 위 로직에서 filterOutAllExcept만 "field2", "field3" 다름
데이터베이스 인덱싱
예를 들어 데이터베이스에서 userId를 통해 게시글을 찾거나 postId로 댓글을 찾는 등의 작업을 수행할 때, 인덱스가 설정이 되어있는지 안 되어 있는지에 성능 차이가 있다.
일반적으로 인덱스가 설정되어 있다면 O(log n)의 시간 복잡도를 가질 것이고, 설정되어 있지 않다면 O(n)의 시간 복잡도를 가지게 된다.
@Id를 설정하거나 @ManyToOne 이노테이션과 @JoinColumn을 설정할 경우 인덱스가 자동 설정될 수 있으며, 인덱스를 확인해서 테이블에 필요한 인덱스가 설정되어 있지 않다면 수동으로 인덱스를 설정해주는 것이 좋다.
@ManyToOne과 @OneToMany의 경우 @JoinColumn의 name을 지정할 때 One에 해당하는 id를 적어 참조하도록 설정한다.
인덱스 확인하는 법
SHOW INDEXES FROM [테이블 이름];
인덱스 설정하는 법
예시)
@Table(name = "`comment`", indexes = {
@Index(name = "todo_id_idx", columnList = "todo_id")
})
'Java' 카테고리의 다른 글
스프링 부트 서버에 https 설정 (0) | 2024.01.23 |
---|---|
Spring Security와 JWT (0) | 2024.01.09 |
HATEOAS (1) | 2023.12.26 |
Swagger (0) | 2023.12.26 |
Spring Boot로 REST API 만들기 정리 (0) | 2023.12.19 |
Comments