본문 바로가기

전체 글

카프카란 무엇인가? - 1 1. 카프카를 왜 사용할까요? 설명하기 앞서 단어 두 가지를 정하고 가겠습니다. 이벤트 발생을 하는 곳을 프로듀서(Producer)라 하겠습니다. 발생된 이벤트를 사용하는 곳을 컨슈머(Consumer)라 하겠습니다. 카프카를 사용하기 이전에는 프로듀서와 컨슈머를 연결하는 데이터 파이프라인이 많았습니다. 카프카는 이 문제를 데이터의 중앙화로 해결했습니다. 또한, 그 연결 관계를 느슨하게 합니다. 발생한 이벤트를 카프카에서 낮은 지연(Latency)과 높은 처리량(Throughput)으로 처리할 수 있도록 보장합니다. 또한, 그림과 같이 모든 처리를 분산해서 처리할 수 있도록 합니다. 이러한 이유로 카프라를 분산 이벤트 스트리밍 플랫폼(Distribute Event Streaming Platform)이라 할.. 더보기
Docker + War + Tomcat 배포 실습(Tomcat Port 변경) Windows 운영체제에서 해보도록 하겠습니다. docker 설치 및 war 파일이 준비되었다는 가정하에 실습해 보도록 하겠습니다. 저의 프로젝트 웹 포트는 8050입니다. 저의 프로젝트 구조도입니다. 배포가 완료되면, target 또는 out 파일에 war 파일이 만들어집니다. 해당 war 파일을 톰켓에서 사용할 수 있도록 다음과 같이 Dockerfile을 작성하면 됩니다. 1. FROM tomcat:9.0.70-jdk11-corretto-al2 9.0.70은 톰캣의 버전이고, jdk11은 자바 11버전을 사용하겠다는 의미입니다. https://hub.docker.com/_/tomcat 에서 다양한 JDK용 톰켓 이미지를 확인하실 수 있습니다. tomcat - Official Image | Docker.. 더보기
프로그래머스 - 디펜스 게임(Java) [수정 알림] 파라메트릭 서치 및 우선순위 큐로 문제를 해결했는데, 테케 10번에서 시간초과가 발생하신다는 분이 계셨습니다. 저의 경우 제 방법이 아슬아슬하게 통과를 했던것 같고, 서버 상태에 따라 통과를 못할 수도 있다는 생각을 하게 되었습니다. 시간을 조금이라도 더 줄이고자 우선순큐가 아닌 단순 반복으로 문제를 해결했습니다. 우선순위 큐는 O(NlogN) 시간 복잡도가 소요되고, 힙 구조를 유지하는데도 시간에 소요 될 것입니다. 또한, 우선순위 큐 내부에 값을 집어넣는고 빼는 과정에서 박싱과 언박싱이 발생되기 때문에 시간 초과가 날 수 있다고 생각합니다. 아래는 수정한 방법으로 작성했습니다. 파라메트릭 서치(Parametric Search) 문제입니다. 파라메트릭 서치는 이분 탐색을 통해 주어진 범위.. 더보기
[Spring Boot]java: cannot access org.springframework.context.annotation.Bean bad class file: 최근에 Spring Boot 프로젝트를 만들면 만날 수도 있는 에러입니다. 무의식적으로 Spring Boot 프로젝트를 기본 값으로 만들게 되면, Spring Boot 3 버전의 프로젝트가 만들어지게 됩니다. 이 버전은 최소 JDK 17을 지원합니다, 즉, JDK 8, 11, 14와 같이 17 미만의 버전은 지원하지 않는다는 의미입니다. maven 혹은 gradle을 사용하는 경우 Spring Boot의 버전을 2.x로 낮추면 해결됩니다. 저는 maven을 사용하는 하기 때문에, pom.xml에서 버전을 2.3.0.RELEASE로 낮췄습니다. 더보기
[AWS]Error: checking AWS STS access – cannot get role ARN for current session eksctl create 명령어를 사용하다가 Error: checking AWS STS access – cannot get role ARN for current session: operation error STS: GetCallerIdentity, failed to sign request: failed to retrieve credentials: failed to refresh cached credentials, no EC2 IMDS role found, operation error ec2imds: GetMetadata, request send failed 에러를 만났습니다. 이 에러는AWS CLI를 사용하지만, IAM 설정이 되지 않았을 때 발생하는 에러입니다. 우선 AWS CLI가 정상적으로 깔려 있.. 더보기
프로그래머스 - 점 찍기(Java) 구현 문제입니다. 문제를 요약하면, 거리가 d 이하인 x, y좌표 정수의 개수를 구하는 문제입니다. 단, 각 좌표는 k 배수입니다. 익숙한 그림 아닌가요? 네, 피타고라스 정리를 이용하면 아주 쉽게 문제를 해결할 수 있습니다. 각 좌표는 k의 배수입니다. 즉, x좌표를 0~d까지 k배수만큼 증가를 시키면, 각 x마다 가능한 y를 구해야 하는 방정식이 주어지게 됩니다. 이 방정식이 바로 피타고라스 정리입니다. 거리 d는 고정된 값입니다. 피타고라스 정리를 통해 알게되는 y는 해당 x좌표에서의 최대 y좌표의 거리입니다. y역시 k의 배수이기 때문에, 최대 y좌표의 거리에서 k만큼 나누게 된다면 거리 d이하의 좌표 개수를 알 수 있게 됩니다. [구현 코드] class Solution { public stati.. 더보기
프로그래머스 - 억억단을 외우자(Java) 구현 문제입니다. 이 문제는 약수의 개수를 통해 해결하는 문제입니다. 왜 약수의 개수의 문제를 구해야 하는지 알아보겠습니다. 이 문제의 접근은 세 단계로 이뤄집니다. 왜 약수인가? 약수의 개수 구하기 범위 내 최대 약수의 개수 (중요!) 1. 왜 약수인가? 영우는 s와 e가 주어질 때, "s 더보기
프로그래머스 - 귤 고르기(Java) 구현 문제입니다. 귤의 크기(tangerine)들과 상자에 담을 개수(k)가 주어집니다. 귤의 크기(key)와 그 개수(value)를 Map에 저장하여, 개수가 많은 순 부터 사용하여 k개를 채우면 끝나는 문제입니다. [구현 코드] import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; class Solution { private Map map; public int solution(int k, int[] tangerine) { int answer = 0; // 크기별로 몇 개 있는지 map에 저장함 map = new HashMap(); for (int tan : tangerine) {.. 더보기