make it simple
article thumbnail
[Kotlin/Spring Boot] Swagger 에서 JWT 사용해보자
Kotlin 2024. 5. 1. 15:55

개발 환경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..

article thumbnail
[JPA] 예상치 못한 N+1 문제 해결하기
Kotlin 2024. 2. 27. 18:57

문제 JPA를 사용하면 흔히 발생하는 문제 중 하나가 N+1 이다. N+1을 알기전 JPA의 특성을 먼저 알아야한다. JPA는 두 도메인이 @OneToMany, @ManyToOne, @OneToOne, @ManyToMany와 같이 연관관계를 맺어 손쉽게 별도의 쿼리 없이 연관관계 객체를 불러 올 수 있다. 하지만 이렇게 편리한 기능에도 잘못 쓰면 사용자의 의도와 다르게 N+1과 같은 문제가 발생한다. N+1 문제는 사용자가 하나의 객체를 조회하기 위해 1번의 쿼리를 실행했지만, JPA 내부에서는 해당 객체와 연관된 N개의 객체를 조회하기 위해 추가로 N번의 쿼리를 실행하는 상황을 말한다. 사실 작은 서비스에서는 성능상 크게 문제가 되지 않지만 언제든 서비스는 확장될 수 있음을 염두해두고 개발하는것이 좋다..

article thumbnail
[Spring Boot 3.0 / Spring Security 6.0] Controller에서 시큐리티 인증 mocking 후 테스트 하기(401 피하기)
Kotlin 2024. 1. 11. 16:57

문제 스프링 부트 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..

article thumbnail
[클린 코드 Clean Code] 12장, 16장
책/클린코드 Clean Code 2024. 1. 4. 00:08

12장 - 창발성(하위 계층(구성 요소)에는 없는 특성이나 행동이 상위 계층(전체 구조)에서 자발적으로 돌연히 출현하는 현상) 켄트 백은 밑과 같은 규칙을 따르면 설계는 '단순하다'라고 말한다. 모든 테스트를 실행한다 : 시스템은 의도한대로 작동해야한다. 의도한대로 돌아가는지 확인할 수 있는 시스템은 테스트가 가능한 시스템이다. 또한, 결합도가 높으면 테스트하기가 힘들다. 테스트 코드를 짬으로서 결합도를 낮추고 개발할 수 있다. 중복을 없앤다: 테스트 케이스를 작성하고 리팩토링을 한다. 중복 제거는 리팩토링에서 우선순위이다. 중복은 시스템을 지저분하게 만든다. 단 몇 줄이라도 중복을 제거하겠다는 의지가 필요하다. 프로그래머 의도를 표현한다: 의도를 표현하지 않은 코드는 유지보수비가 많이든다. 개발자가 코..

article thumbnail
[클린 코드 Clean Code] 9장 - 11장 정리
책/클린코드 Clean Code 2023. 12. 31. 05:13

9장 - 단위 테스트 테스트 코드는 실제 코드 못지 않게 중요하다. 테스트 코드는 사고와 설계와 주의가 필요하다. 실제 코드 못지 않게 깨끗하게 짜야한다. 테스트는 유연성, 유지보수성, 재사용성을 제공한다. 테스트 케이스가 있으면 변경이 두렵지 않다.( 없었으면 모든 변경이 잠정적인 버그다.) 테스트 코드가 지저분하면 코드를 변경하는 능력이 떨어지며 코드 구조를 개선하는 능력도 떨어진다. 깨끗한 테스트 코드를 만들려면 가독성, 가독성, 또 가독성이 필요하다. -> given / then / when 사용하는 이유 깨끗한 테스트는 다음 다섯가지 규칙을 따른다. 각 규칙에서 첫 글자를 따오면 FIRST가 된다. Fast(빠르게) : 테스트는 빨라야한다. 빨라야 자주 돌리면서 문제를 찾아내 수정한다. Inde..

article thumbnail
[클린 코드 Clean Code] 5장 - 8장 정리
책/클린코드 Clean Code 2023. 12. 29. 00:57

5장 - 형식 맞추기 코드 형식은 매우 중요하다! 코드는 사라질지라도 개발자의 스타일과 규율은 사라지지 않는다. 신문 기사처럼 작성하라. 이름은 간단하면서도 설명이 가능하게 짓는다. 아래로 내려갈수록 의도를 세세하게 묘사한다. 명백하게 짧은 행이 가독성이 좋다. 들여쓰기를 중요시 여겨야한다. 7장 - 오류 처리 오류 코드보다 예외를 사용해라. public class DeviceController{ ... public void sednShutDown(){ DeviceHandle handle = getHandle(DEV1); // 디바이스 상태를 점검한다. if (handle != DeviceHandle.INVALID){ // 레코드 필드에 디바이스 상태를 저장한다. retrieveDeviceRecord(h..

article thumbnail
[클린 코드 Clean Code] 1장 - 4장 정리
책/클린코드 Clean Code 2023. 12. 28. 03:26

1 장 - 깨끗한 코드 출시에 바빠 코드를 마구 짜고 기능을 추가할수록 코드는 엉망이 되어가고, 결국엔 감당이 불가능한 수준에 이른다. 결국엔 대가를 치른다.(최악의 상황일 경우 서비스 종료 등) 나쁜 코드가 쌓일수록 팀 생산성은 0이된다. 기억해라. 생각날 때 바로 나쁜 코드를 리팩토링하자. 나중에는 오지 않는다. 빨리 가는 유일한 방법은, 언제나 코드를 깨끗하게 유지하는 습관이다. 깨끗한 코드란? 보기에 즐거운 코드, 세세한 사항(오류 등)까지 꼼꼼하게 처리하는 코드 단순하고 직접적이다.깨끗한 코드는 결코 설계자의 의도를 숨기지 않는다. 명쾌한 추상화와 단순한 제어문으로 가득하다. 다른 사람이 고치기 쉽다. 테스트 하기 좋은 코드, 테스트케이스가 없으면 깨끗하지 않다. 중복 줄이기, 한 메소드가 한 ..

article thumbnail
2년차 개발자의 회고 - 에이전시부터 서비스회사까지의 여정
내 생각 2023. 12. 21. 02:04

문득 든 생각 개발을 한 지 어느덧 2년 정도가 흘렀다. 짧으면 짧고 길면 긴 2년이지만 에이전시부터 시작해서 커머스 스타트업에 이직하면서 많이 배우고 많은 좋은 사람들을 만났다. 문득 2년동안 개발자로 일하면서 성장에 대한 나의 생각과 개발에 대한 나의 생각이 어떻게 변했는지 정리하고 싶어서 이 글을 쓰게 되었다. 에이전시에서의 개발자 2021년 8월 말에 입사해서 2022년 3월에 퇴사했다. 비전공자로서 부트캠프를 수료하고 취업 준비를 할 때 중견기업/스타트업/중소기업 등 가리지 않고 많은 곳을 넣었다. 그 당시만 해도 신입도 서류 합격이 잘되던 시기라 여러기업들의 서류 합격을 하여 면접을 보게 되었다. 그중에 붙은 곳 중에 2군데를 고민하게 되었다. 한 군데는 집과 가까우며 내가 당시 하고싶었던 기..

article thumbnail
[Real MySQL 8.0] CH.8 - Index란(B-Tree part 1)?
책/RealMySQL 8.0 2023. 9. 11. 02:22

Index 란? 데이터베이스 쿼리의 성능을 언급하기위해 빼놓을 수 없는 부분이다. 책의 마지막에 있는 "찾아보기"가 인덱스에 비유된다면 책의 내용은 데이터 파일이라고 볼 수 있다. 책의 "찾아보기" 와 DBMS 인덱스의 공통점 가운데 중요한 것은 정렬이다. 책의 찾아보기도 내용이 많아지면 원하는 검색어를 찾아내는데 시간이 걸린다. 그래서 최대한 빨리 찾을 수 있게 "ㄱ", "ㄴ" , "ㄷ" ..과 같은 순서로 정렬되어 있다. DBMS의 인덱스도 마찬가지로 컬럼의 값을 주어진 순서로 미리 정렬해서 보관한다. 인덱스는 데이터베이스 테이블의 검색 성능을 향상시켜주도록 도와주는 자료구조이다. SortedList는 DBMS의 인덱스와 같은 자료 구조이다. 데이터가 저장될 때마다 항상 값을 정렬함으로 저장하는 과정..

article thumbnail
@Converter를 사용하여 Enum값 활용하기
Java 2023. 8. 23. 23:59

개요 간단하게 채용에 관련된 도메인을 설계를 했다. 보통 채용 공고를 작성할 때 경력직의 년차를 설정한다. 하지만 해당값을 Enum으로 관리하고 싶다. Enum값으로 관리하려는 이유는 여러가지가 있다. 해당 필드값을 사용할 때 컴파일러가 Enum값 타입을 검사해줘서 코드의 대한 안정성이 높아진다. 유지보수하기가 쉬워진다. 공통으로 사용하는 Enum은 수정사항이 있을 경우 그 부분만 수정하면된다. 가독성이 좋아진다. 상수값으로 되어있어서 보기가 편하다. 보통은 Enum값이 String으로 하나인경우 @Enumerated(EnumType.STRING) 을 사용하면 된다. 하지만 나의 경우에는 경력직의 년차의 Enum값 같은 경우에는 년도를 나타내는 Year이라는 int값과 해당 데이터를 텍스트로 나타내는 S..