개발 환경spring boot 3.2java 21 스웨거 세팅하기build.gradle.kts에 밑 디펜던시 추가implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0")implementation("org.springdoc:springdoc-openapi-starter-webmvc-api:2.2.0")application.yml 스웨거 관련 옵션 추가springdoc: swagger-ui: path: /webtoon-api // 스웨거 접근 경로 disable-swagger-default-url: true // 스웨거 기본 url 비활성화스웨거 관련 config 파일 추가package rlc.webtoon.api.co..
문제 JPA를 사용하면 흔히 발생하는 문제 중 하나가 N+1 이다. N+1을 알기전 JPA의 특성을 먼저 알아야한다. JPA는 두 도메인이 @OneToMany, @ManyToOne, @OneToOne, @ManyToMany와 같이 연관관계를 맺어 손쉽게 별도의 쿼리 없이 연관관계 객체를 불러 올 수 있다. 하지만 이렇게 편리한 기능에도 잘못 쓰면 사용자의 의도와 다르게 N+1과 같은 문제가 발생한다. N+1 문제는 사용자가 하나의 객체를 조회하기 위해 1번의 쿼리를 실행했지만, JPA 내부에서는 해당 객체와 연관된 N개의 객체를 조회하기 위해 추가로 N번의 쿼리를 실행하는 상황을 말한다. 사실 작은 서비스에서는 성능상 크게 문제가 되지 않지만 언제든 서비스는 확장될 수 있음을 염두해두고 개발하는것이 좋다..
문제 스프링 부트 3.2 / Spring Security 6.0 적용을 한 후 유저가 모임을 생성하는 API를 테스트 해야된다. 하지만 애석하게도 인증 실패로 401이 반환된다. 주어진 상황 설정된 스프링 시큐리티 밑과 같이 http.authorizedHttpRequests 안에 permitAll()된 엔드포인트들만 인증을 안해도 접근이 가능한다. 이 외에 모든 엔드포인트에는 인증이 필요하다. @Bean fun securityFilterChain( http: HttpSecurity, jwtAuthenticationFilter: JwtAuthenticationFilter, ): DefaultSecurityFilterChain { http .csrf { it.disable() } .headers { it.f..
12장 - 창발성(하위 계층(구성 요소)에는 없는 특성이나 행동이 상위 계층(전체 구조)에서 자발적으로 돌연히 출현하는 현상) 켄트 백은 밑과 같은 규칙을 따르면 설계는 '단순하다'라고 말한다. 모든 테스트를 실행한다 : 시스템은 의도한대로 작동해야한다. 의도한대로 돌아가는지 확인할 수 있는 시스템은 테스트가 가능한 시스템이다. 또한, 결합도가 높으면 테스트하기가 힘들다. 테스트 코드를 짬으로서 결합도를 낮추고 개발할 수 있다. 중복을 없앤다: 테스트 케이스를 작성하고 리팩토링을 한다. 중복 제거는 리팩토링에서 우선순위이다. 중복은 시스템을 지저분하게 만든다. 단 몇 줄이라도 중복을 제거하겠다는 의지가 필요하다. 프로그래머 의도를 표현한다: 의도를 표현하지 않은 코드는 유지보수비가 많이든다. 개발자가 코..
9장 - 단위 테스트 테스트 코드는 실제 코드 못지 않게 중요하다. 테스트 코드는 사고와 설계와 주의가 필요하다. 실제 코드 못지 않게 깨끗하게 짜야한다. 테스트는 유연성, 유지보수성, 재사용성을 제공한다. 테스트 케이스가 있으면 변경이 두렵지 않다.( 없었으면 모든 변경이 잠정적인 버그다.) 테스트 코드가 지저분하면 코드를 변경하는 능력이 떨어지며 코드 구조를 개선하는 능력도 떨어진다. 깨끗한 테스트 코드를 만들려면 가독성, 가독성, 또 가독성이 필요하다. -> given / then / when 사용하는 이유 깨끗한 테스트는 다음 다섯가지 규칙을 따른다. 각 규칙에서 첫 글자를 따오면 FIRST가 된다. Fast(빠르게) : 테스트는 빨라야한다. 빨라야 자주 돌리면서 문제를 찾아내 수정한다. Inde..