전체 글

Spring Cloud Gateway를 이용한 서비스 라우팅 및 JWT 토큰 검증
현재 진행 중인 프로젝트가 MSA 기반의 프로젝트이기 때문에 API Gateway가 필요했다. 클라이언트로부터 들어오는 요청을 라우팅 해주고 특히 사용 중인 마이크로 서비스에서 JWT 토큰을 검증 후 토큰을 파싱해서 사용하는데 동일 로직이 모든 서비스에 들어가는 경우가 생겼다. API Gateway를 서비스 앞 단에서 구축함으로써 필터를 통한 JWT 토큰의 검증 로직을 공통적으로 추출할 수 있고, 마이크로 서비스 간 RestTemplate이나 Feign Client를 이용한 REST API 호출이 필요할 텐데 이 때 Eureka Server와 API Gateway를 사용한다면 보다 효율적일 것이라고 생각했다. Spring Cloud Netflix Zuul, Spring Cloud Gateway 등 API..
![[백준, Java] 19621번 : 회의실 배정 2](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdiRewm%2FbtrCVfz3WTA%2FRY2LOWSmmTBQEEKOGqa7Hk%2Fimg.gif)
[백준, Java] 19621번 : 회의실 배정 2
🔗 문제 링크 https://www.acmicpc.net/problem/19621 😮 문제 해결 방법 문제의 제한 조건에서 K 번째 회의는 K-1 , K+1번째 회의와 겹친다고 했기 때문에 K 기준으로 회의를 참석하는 경우 K-1, K+1회의는 참석할 수 없다. 반대로 회의에 참가하지 않는 경우 K-1, K+1 회의는 참가할 수 있다. 따라서, 첫 회의를 기준으로 참가하는 경우와 불참하는 경우로 DFS를 이용한 완전탐색으로 문제를 해결했다. 회의의 최대 개수가25개까지 주어지므로 DFS를 이용한 완전탐색이 가능하다. 첫 번째 회의 기준으로 참가와 불참 경우로 탐색을 진행한다. 첫 번째 회의에 참가하는 경우 2번째 회의는 참가하지 못하기 때문에 3번째 회의에 참가하도록 depth + 2를 해주고 현재 회의..

Custom Exception을 이용한 예외 처리
애플리케이션을 사용하는 여러 상황에서 보다 직관적으로 예외 메세지를 확인하기 위해 사용자 정의 예외 클래스를 이용해 예외 처리를 진행했다. CheckedException, UncheckedException 사용자 정의 예외 클래스를 만들어 구현하는 방법 이전에 간단하게 CheckedException과 UnchekcedException에 대해 알아보자. 자바에서는 크게 RuntimeException을 기준으로 CheckedException과 UncheckedException을 구분한다. RuntimeException은 이름에서도 알수 있듯이 실행 시점에 예외를 판단한다. 예를 들어, ArrayIndexOutOfBoundException과 같은 예외는 실행 시점에 배열의 인덱스를 벗어나 참조를 하는 경우 발..

@DataJpaTest 사용 시 Failed To Replace DataSource with an Embedded database for test 이슈
상황 JPA를 이용해 Persistence Layer 로직을 구현한 후 해당 로직들을 @DataJpaTest를 이용해 테스트를 하려는 도중 “Failed To Load ApplicationContext”예외가 발생하면서 “Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource”에러 메세지가 발생되었다. 문제 파악 일단 Error Creating bean with name datasource.. 라는 문구에서 Datasource 관련 설정에서 문제가 발생했구나라고 생각했다. 하지만, application.yml 파일은 정상적으로 설정이 되어있었다. 그래서 에러 메세지를 조금 더 내려보니..
![[백준, Java] 9934번 : 완전 이진 트리](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAlWUU%2FbtrCI2UrimY%2FRsKCKkGQIkVFKKVR8gmH0k%2Fimg.gif)
[백준, Java] 9934번 : 완전 이진 트리
🔗 문제 링크 https://www.acmicpc.net/problem/9934 😮 문제 해결 방법 상근이가 도시를 방문한 조건을 살펴보면 가장 왼쪽에 있는 도시까지 방문한 후 그 부모를 방문 한 뒤 다시 오른쪽을 탐색한다. 즉, inorder 중위 순회 방식과 동일하다. 상근이가 방문한 도시의 트리 모양을 표현해줘야 하는 것이 목적이므로, 노드 번호가 1, 2, 3 순차적으로 증가하는 완전 이진 트리를 새로 만들어줬다. 새로 만든 트리를 이용해 중위 순회를 한 후 방문한 도시들을 스택에 저장한다. 입력으로 받은 도시와 스택에 저장한 도시가 동일한 순서이기 때문에 입력으로 받은 도시와 스택에 저장한 도시를 하나의 클래스로 매핑해준 뒤 새로 만든 트리의 모양대로 만들어준다. 새로 만든 트리는 노드 번호가 ..
![[백준, Java] 9465번 : 스티커](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrN8tl%2FbtrCBNw1s0j%2FcHAI8UU41kdaaK1Awr9sKK%2Fimg.gif)
[백준, Java] 9465번 : 스티커
🔗 문제 링크 https://www.acmicpc.net/problem/9465 😮 문제 해결 방법 매 열마다 1행 혹은 2행의 스티커를 뜯었을 때의 최대 점수를 구해주면 되기 때문에 2차원 배열로 선언해준다. 최대 점수는 n열까지 모두 뜯었을 때 1행 n열 혹은 2행 n열의 점수 중 큰 점수가 가장 최대로 구할 수 있는 점수이다. 현재 열이 3열이라고 가정하고 스티커를 뜯는 경우를 판단해보자. 3열의 스티커를 뜯는 경우는 1행 3열, 2행 3열의 스티커를 뜯는 경우 2가지이다. 1행 3열의 스티커를 뜯는 경우 → row : 0 col : 2 인접한 변을 가진 스티커는 뜯을 수 없기 때문에 **이전 열 대각선(현재 행과 반대되는 행)**에 위치한 최대 점수 값과 현재 스티커 점수를 더해준다. → dp[p..

TCP, UDP
IP 프로토콜은 서버간 데이터 통신을 할 때 패킷과 IP 주소를 이용한다. IP 프로토콜은 몇 가지 한계를 갖고 있다. 출발지 IP에서 보낸 패킷을 받을 대상이 없거나 목적지 IP 서버가 현재 패킷을 받을 수없는 상태이더라도 출발지 IP 서버는 패킷을 보내버린다. 또한, 하나의 데이터는 여러 개의 패킷으로 쪼개질 수 있고, 이 패킷들은 인터넷 내의 많은 노드들을 거쳐 목적지 IP에 도달하는데 거쳐가는 노드가 패킷을 보낼 수 있는 상태가 아니거나, 설령 목적지 IP에 도착하더라도 여러개로 쪼개진 패킷이 순서대로 들어온다는 보장이 없다. 마지막으로, 동일 IP에서 여러가지 애플리케이션을 사용한다면 전송되는 패킷이 어떤 애플리케이션 것인지 구분하는 것이 어렵다. 전송 계층은 이러한 IP 프로토콜의 비연결성, ..
![[백준, Java] 1052번 : 물병](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2wRek%2FbtrCqqnKcrk%2FpjONAtVSlKAKbbHyjHZir0%2Fimg.gif)
[백준, Java] 1052번 : 물병
🔗 문제 링크 https://www.acmicpc.net/problem/1052 😮 문제 해결 방법 문제에서 같은 양이 들어있는 물병끼리 하나로 합칠 수 있고 처음에는 모든 물병에는 물이 1L가 들어있다고 제시되어 있다. 처음부터 두 개의 물병을 한 개의 병으로 합쳐가면, 2L → 4L → 8L 이런식으로 증가할 수 밖에 없다. 이는 물병이 2의 제곱 값이 되어야 병이 하나로 합쳐지는 것을 알 수 있다. N개의 물병을 K개의 물병으로 합치는 경우 최소 개수의 물병을 사기 위해선 남은 물병(N) 보다 작으면서 가장 큰 2의 제곱 값을 매번 구해 빼주는 작업을 K-1번 해주고, 그래도 물병이 남아있다면 마지막(K번째)에는 남은 물병으로 한 병을 만들어야 하므로 남은 물병보다 크면서 가장 작은 2의 제곱값을 ..