개발 관련 일지 28

쉽게 시작하는 쿠버네티스 CH1 쿠버네티스 환경 구성

도커 보통 가상화 환경이랑 비교한다. 가상화 환경 : 운영체제를 가상 머신에다가 설치하는 것. 컨테이너 환경 : 하이퍼 바이저를 제외 하고, 운영체제 위에다가 컨테이너들을 올림. 쿠버 네티스 구글의 보그 시스템을 CNCD 재단에다가 기부했다. 쿠버 네티스가 CNCF 에서 관리 되고 있다. 벤더의 종속성이 없다. → 의존성이 생긴다. (Vender-Neutral) 오픈 소스 프로젝트 → 리눅스가 대표적인 시스템. 동일한 형태를 띠는 게 쿠버네티스이다. 배포 종류 관리형 쿠버네티스. : 많은 부분 관리할 필요가 없다. 설치형 쿠버네티스: 랜처나 오픈 쉬프트 → 이미 패키지화 되어있다. (배포용) 구성형 쿠버네티스 : 베어메탈 등 여러 가지 요구사항에 맞지 않고, 자유롭게 요구사항 하고 싶거나 교육용 정도. ..

[우아한테크세미나] Kafka 이벤트 기반 아키텍처 구축

2024.01.08 시청 발단 : 이벤트 기반 아키텍처 왜 사용? 배달 시스템의 복잡도 증가 알림 기능 배달 시간 통계 배달 늦었을 때 쿠폰 기능 배달만 잘 수행하길 바랬지만 요구 사항이 늘어날 수록 복잡도가 커진다. 따라서 해결법으로는 시스템을 분리하자! 이다. 대부분의 기능은 배달과 강한 일관성을 필요로 하지 않는다. 즉, 배달이 변경되었을 때, 관련 기능도 동시에 반영되어야 하는 가가 강한 일관성의 기준이 된다. 통계나, 쿠폰과 같은 개념은 관련 기능이 “언젠가” 반영되면 된다. (= 결과적 일관성) 결과적 일관성 관련 기능이 언젠가 반영되면 된다. 이벤트는 시스템에서 일어난 행위이다. 해결법 → 이벤트 아키텍처를 이용하자! 이벤트 아키텍처 구현법 이벤트는 어떤 정보를 가지고 있어야 할까? 이벤트 ..

[카카오 기출] 호텔 방 배정 풀이

알고리즘 Union-find 풀이 과정 1 ≤ k ≤ 10^12 이하이므로 long 으로 자료형을 설정한다. 주의사항 : 배열 같은 경우, index를 long으로 설정하지 못한다. → Map 자료구조 관리하여야 한다. 어려웠던 점 : parent를 찾을 때 일반적으로 배열을 사용했는데 map 자료구조를 떠올려야 했다. 시간초과 난 부분 맨 처음에 Map을 parent[i] = i 와 같은 식으로 k범위 까지 초기화 시켜줬는데, 시간초과 난다. parent를 계속 갱신 시켜주며, 가장 가까운 호텔을 parent로 다시 갱신한다. 코드 import java.util.*; class Solution { public Map parent = new HashMap(); public long findParent(l..

[백준] 1823 수확 풀이

알고리즘 DP 풀이 과정 n이 최대 2000이므로, 브루트 포스는 안될 것 같다. → 자연스레 DP를 하는 방향으로 갔다. DP는 작은 문제를 → 큰문제로 확장시켜 나가는 방식이다. 즉, 크기를 확장시키는 순서가 있어야 한다. ex) 13152 같은 경우, 양 끝쪽만 빠져나가는 것을 확인 할 수 있었다. 따라서 다음과 같은 점화식을 도출해냈다. BaseCode가 중요한데, start==end 일 경우, 맨 마지막 숫자이므로, dp[start][start] = arr[start] * n이 된다. 이를 코드로 옮기면 다음과 같다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ..

[백준] 2151 거울설치 풀이

알고리즘 BFS 풀이 과정 조합 개수로 반복 DFS를 돌리면서 해볼까 생각했는데, 이는 N ≤ 10 정도 일때만 통과한다. 지금은 1≤ N ≤ 50 이므로 시간 초과 또는 메모리 초과가 난다. 다른 풀이 방법을 생각했어야 했는데, 한쪽 문을 start 지점으로 정하고, 다른 문을 만날때까지 BFS를 진행한다. PriorityQueue는 거울의 최소 개수로 정렬되게 한다. ! 를 만나면, 방향을 바꿀 수 있다. 즉 90도 방향을 바꾸고 PriorityQueue에다가 넣어준다. ‘*’ 를 만나면 벽이므로 이동할 수 없다. 그 외 다른 것들은 방향을 직진해서 갈 수 있다. 이를 코드에 옮겼고, 다음과 같이 같다. 트러블 슈팅 원래는 코드를 다음과 같이 짰었다. 이 조건을 통해 90도 체크가 되는 지 확인했었다..

[백준] 2255 합분해 풀이

알고리즘 다이나믹 프로그래밍 풀이 방법 dp[i][j] = 현재 합은 i이고, k개의 수가 남았을 때 경우의 수. ex) dp[20][2]일때, dp[20][2] = dp[20][1] + dp[19][1] + dp[18][1] + … 로 표현할 수 있다. 해당 식을 일반화 한다면, dp[i][j] = dp[i-j][k-1] ( 0≤ j ≤ i ) 이다. dp의 base 식은 dp[0][0] = 1이다. 0을 만들기 위해서 남은 수가 없을 때 경우의 수는 1가지이기 때문이다. 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; ..

[TrobleShooting] JWT signature does not match locally computed signature.

msa를 구축하다가, token 유효 검증 부분에서 signature가 맞지 않는 다는 에러가 떴다. [apigateway-service] [ctor-http-nio-2] c.e.a.config.Authorization Header Filter : JWT signature does not match locally computed signature. JWT validity cannot be asserted and should not be trusted. 해결법 다음과 같이 secretKey 를 secretKey.getBytes()로 바꾸어주니 정상 작동하였다. public String generateToken(final String userId) { return Jwts.builder() .setExpir..