본문 바로가기

전체 글

(65)
[Spring Boot]Exception Handling 하기 동작 과정에서 발생하는 Exception을 제어하는 방법을 작성한 포스팅입니다. [관련 포스트] [Spring Boot]Response Handling 하기-MVC [Spring Boot]Response Handling 하기-Flux [활용 목적] 예외 처리된 결과를 특정 포맷으로 변경하여 제공하고 싶은 경우 Exception 별로 별도의 동작(로그, 추가 행동)을 작성하려는 경우 [Dependencies] dependencies { ... implementation 'org.springframework.boot:spring-boot-starter-web' // 별도의 모듈로 만들고 프로젝트가 MVC인지 Flux 인지 모를 경우 // implementation group: 'javax.servlet', ..
[Spring Boot] Feign Client 로그 미동작 해결 Feign Client의 logLevel을 FULL로 설정하면 통신과정에서 주고받는 정보 등을 모두 log로 확인할 수 있습니다. 하지만 jar로 빌드 후 서비스를 배포하면 log가 보이지 않게 됩니다. 해당 현상에 대해 원인 파악 후 알게 된 해결방법을 작성합니다. 문제 Jar File로 배포 후 서비스 동작 시 Feign Client의 log가 확인되지 않는다. 원인 Feign Client를 만드는 과정에서부터 시작됩니다. @Configuration public class VCAClientConfig { @Bean public VCAClient vcaClient(@Autowired ObjectMapper objectMapper, @Value("${client.vca.url}") String url) ..
[Spring Boot] Gradle을 사용하여 편하게 배포하자! 서버 배포 시 매번 수정된 properties 파일과 jar 파일을 여러 번의 명령어를 통해 이동시키는 것이 번거로워 해결했던 방법을 작성하였습니다. * 현재 dockerfile을 통한 배포 및 업데이트를 진행하고 있으므로 추후 내용을 포함하도록 하겠습니다. 우선 제가 진행했던 프로젝트에서 배포할 내용은 다음과 같습니다. application.yml & properties 파일 jar 파일 외부 서버 호출 전용 lib 폴더 암호화 및 인증에 필요한 cert 폴더 목표는 build -> 생성된 파일 run 디렉토리로 이동입니다. 구성 build.gradle에 내용 추가 doLast는 task의 동작 끝에 추가 동작을 설정하는 함수입니다. ext { rootProjectName = getRootProject..
[SpringBoot] 외부 Properties File 사용하기 서버 구성에 필요한 속성을. properties 또는. yml 파일에 작성합니다. 저 같은 경우가 때 src/main/resources 경로에 위치한 application.properties에 작성하는 편인데 서버 배포 과정 중 문제가 있었습니다. 서비스 초기 배포다 보니 스케줄링 설정, 암호화 파일의 경로나 확장 파일의 경로가 추가되는 등 properties가 자주 변경하는 일이 발생하였고, 변경된 properties를 적용하기 위해 반복적으로 서버의 build가 발생하는 상황이었습니다. properties가 변경되었다고 해서 서버의 build가 발생해야 하는 것은 비효율적이라 생각하여 다른 방법을 찾기로 하였습니다. Property 읽는 과정 Property를 바인딩하는 다양한 방법이 존재하듯이 바인..
[JAVA] DFS Flood fill 구현 class Solution { @Test public void solution() { // 5, 5 영역 int[][] board = new int[][] { {0,0,0,0,0}, {0,0,0,1,1}, {0,0,0,1,0}, {1,1,1,1,0}, {0,0,0,0,0} }; DFS_Flood_Fill(board, 1, 1, 3); for(int i = 0; i < board.length; i++) { for(int j = 0; j < board[i].length; j++) { System.out.print(board[i][j] + " "); } System.out.println(""); } } /** * 다차원 배열의 특정 칸과 연결된 영역을 검색하는 알고리즘. * 그림판의 채우기와 같은 기능. * ..
[JAVA] BFS 최단거리 구현 class Solution { @Test public void solution() { int[][] graph = new int[][] { {0,0,0,0,0}, {0,1,1,1,1}, {0,0,0,0,0}, {1,1,1,1,0}, {0,0,0,0,0}, }; 최단경로(graph, 0, 1, 4, 2); } /** * BFS를 활용해 최단경로를 구하기 위한 방법 * @param board 2차원 배열. (값이 0인 영역만 이동하도록 구성됨, 1은 벽) * @param sr - 시작 row * @param sc - 시작 col * @param er - 도착지 row * @param ec - 도착지 col */ void 최단경로(int[][] board, int sr, int sc, int er, int e..
[JAVA] BFS 큐 구현 import java.util.*; class Solution { int n = 5; @Test public void solution() { int[][] graph = new int[n][6]; graph[0][1] = graph[1][0]= 1; graph[0][2] = graph[2][0] = 1; graph[1][3] = graph[3][1] = 1; graph[1][4] = graph[4][1] = 1; graph[2][4] = graph[4][2] = 1; graph[3][4] = graph[4][3] = 1; bfs(graph, 0); } /** * @param graph - 그래프 * @param node - 시작 노드 */ void bfs(int[][] graph, int node) { ..
[JAVA] DFS 재귀 호출 구현 import java.util.*; class Solution { /** * * @param n - 노드의 수 * @param graph - 노드간의 간선이 표현된 그래프 */ @Test public void solution() { int n = 5; int[][] graph = new int[5][6]; graph[0][1] = graph[1][0]= 1; graph[0][2] = graph[2][0] = 1; graph[1][3] = graph[3][1] = 1; graph[1][4] = graph[4][1] = 1; graph[2][4] = graph[4][2] = 1; graph[3][4] = graph[4][3] = 1; dfs(0, graph, new boolean[5]); } public v..