가수면

[Spring Boot] 심화 본문

Java

[Spring Boot] 심화

니비앙 2023. 12. 28. 00:33

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