전체 글

개발에 관련된 학습 내용들을 기록하는 공간입니다.
Spring

application.properties 여러개 나누어 적용하기

개인 프로젝트를 진행하던 중 properties 파일 여러개를 적용해야하는 상황이 생겼다. 책에서 설명하는 properties 적용 방법도 달라지고 해서 블로그에 정리하려고 함. application.properties 파일은 스프링 부트가 어플리케이션을 구동할 때 자동으로 로딩하여 참조하는 파일이다. 스프링의 설정 파일이라고 할 수 있으며, 형식에 맞게 Key - value 값을 정의하면 해당 설정을 자동으로 참조한다. 이러한 properties 혹은 yml 파일을 보안상의 이유로 여러개 나누어 사용할 때가 있다. Oauth 설정 값이나 DB 설정 파일들은 계정 보안에 아주 중요한 정보들을 담고있기 때문에 따로 properties 파일을 만들어 Git에 푸시하지 않고 관리하게 된다. 필자는 resour..

Spring

컨트롤러 중복 코드 어노테이션 기반으로 개선하기 (with. HandlerMethodArgumentResolver)

최근 학교 졸업 작품을 위해 프로젝트의 로그인 인증 방식을 JWT로 바꾸는 작업을 진행했다. 그러던 중 컨트롤러에서 중복되는 코드를 발견했는데, 해당 코드는 다음과 같다. jwtHandler의 getJwtUser는 클라이언트의 요청에서 받은 JWT를 파싱하고 그것을 JwtUser라는 객체로 반환해주는 역할을 한다. 즉, JWT 값을 가져와서 모델에 추가하는 과정이 중복되는 것이다. 다른 컨트롤러와 메서드에서 이와 같이 JWT 값이 필요하면 그 때마다 똑같은 코드를 반복해서 작성해야한다. 분명 개선이 필요한 부분이다. 예전에 이동욱 님이 쓴 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스'라는 책에서 컨트롤러에서 중복되는 코드를 파라미터 기반으로 변경했던 기억이 있다. 따라서 이 부분을 책에서 봤던대로,..

Test

[Test] Spring Boot - JUnit 5 Test시 No tests were found 발생

웹 설문조사 어플리케이션 개발 중에 JPA 페이징에 대한 테스트를 작성하던 도중 다음과 같은 문제가 발생했다. 😢 오류 발생 상황 TEST RESULT "No tests were found" Nested class 내부에 작성한 테스트를 인식하지 못하는 문제였다. 따라서, JUnit 테스트에서 문제가 발생했을 때 조치해야할 부분에 대해서 찾아보게 되었고, 방법은 크게 두 가지였다. 1. build.gradle에 다음 코드 추가. test { useJUnitPlatform() } 2. File -> Settings -> Build, Execution.. -> Build Tools -> Gradle 탭에서 Run tests using을 Gradle에서 Intellij로 변경 사실 1번은 이미 되어있었고, 2..

Web/Template

[Thymeleaf] 타임리프 #4 - 조건문

타임리프는 기본적으로 HTML 태그 안에 th: 로 시작하는 속성을 지정하여 사용한다. 타임리프에서 반복은 th:if / th:unless (if 반대) 를 사용한다. (개인적으로 가장 많이 사용하는 타임리프 속성이다) switch 문은 th:switch 로 사용 가능하다. 10살 🎈if, unless 사용 예시 나이는 20살 나이는 30살 나이는 30살 보다 적음 20살 아님 40살 아님 나이는 20살 나이는 30살 보다 적음 40살 아님 th:if / th:unless 타임 리프는 조건이 맞지 않으면 태그 자체를 렌더링 하지 않는다. (렌더링 시 없애버림) ${...} 내부에 boolean 값을 넣으면 된다. 비교와 동등 판별 비교 : >, =,

Web/Template

[Thymeleaf] 타임리프 #3 - 반복

타임리프는 기본적으로 HTML 태그 안에 th: 로 시작하는 속성을 지정하여 사용한다. 타임리프에서 반복은 th:each 를 사용한다. 추가로 반복에서 사용할 수 있는 여러 상태 값을 지원한다. ... 🎈반복문 사용 예시 Controller @Controller public class ThymeleafController { @GetMapping public String form(Model model) { List nameList = new ArrayList(); nameList.add("Bob"); nameList.add("Rachel"); nameList.add("Kai"); model.addAttribute("nameList", nameList); return "new-form"; } } View B..

Algorithm

알고리즘의 Big O 표기법

우리가 자주 사용하는 반복문, 정렬 알고리즘, 검색 알고리즘, 재귀 함수 등은 입력값에 따라 해당 알고리즘의 실행시간이 증가하게 된다. 이를 점근적 실행시간(asymptotic runtime)이라고 한다. 점근적 측정의 지표로 시간 복잡도 또는 공간 복잡도를 사용할 수 있다. 반대로 입력 값의 증가와 상관없이 항상 같은 실행 시간을 갖는 것을 상수 시간(constant runtime) - O(1) 이라고 한다. 시간 복잡도 표기법 종류 알고리즘의 효율성을 단순하게 구분하면 '최고의 경우', '최악의 경우', '평균적인 경우'의 세가지 측면에서 생각할 수 있다. 시간 복잡도 또한 이러한 세가지 측면에 따라 다르게 표기한다. Big-Ω(빅 오메가) 표기법 - 알고리즘이 최고의 성능을 낼 수 있도록 특별한 조..

KAispread
기억의 정류장