간혹 서버 어플리케이션을 두 개 이상 켜봐야 할 경우가 있다. 보통 port를 application 설정 파일에서 직접 변경해서 키는데 이는 상당히 불편하다. 그래서 Intellij IDEA에서 제공하는 환경변수를 활용하여 어플리케이션을 동일한 IDE에서 두 개 이상 키는 방법을 공유하고자 한다. 우측 상단의 Run 버튼 옆에 있는 드롭다운을 눌러서 Edit Configurations를 클릭한다. 키면 현재 스프링 부트 어플리케이션이 하나만 있을 텐데, 이를 마우스로 선택하고 저 버튼을 누른다. 그러면 위 그림처럼 복제가 된다. 이름은 자유롭게 변경한다. 복제된 것을 클릭하고 Modify options를 클릭한다. Add VM options를 클릭한다. (처음에 이게 비활성화 되어있어서 찾는데 좀 애먹었..
카카오에서 기술 컨퍼런스가 열려서 구경갔다. 온라인이고 발표자료와 영상까지 무료로 공유해주는게 역시 대기업 답다. 온라인 컨퍼런스를 관람하면서 신기했던 것과 유익했던 것 몇 가지를 정리, 공유하고자 한다. https://if.kakao.com/ if(kakao)dev2022 함께 나아가는 더 나은 세상 if.kakao.com 지난 발표영상은 유튜브에서 볼 수 있다. https://www.youtube.com/@kakaotech kakao tech 더 나은 세상을 만드는 카카오 테크 www.youtube.com # 10.15 카카오 데이터센터 화재 - 장애 이번년도 핫한 IT 이슈 중 하나였을 카카오 대규모 서비스 장애에 대해 원인을 분석하고, 기술적으로 재발방지를 위해 어떻게 개선했는지 설명한다. htt..
Java에는 이상하게도 순열 라이브러리가 없다. 그래서 순열이 필요할 경우 직접만들어서 사용해야한다. static List permResult = new ArrayList(); static int[] output; static int n, r; static boolean[] visited; public static void perm(int cnt) { if (cnt == r) { permResult.add(output.clone()); // 깊은 복사로 새롭게 넣어줘야함 return; } for (int i = 0; i < n; i++) { if (visited[i]) continue; output[cnt] = i; visited[i] = true; perm(cnt + 1); visited[i] = fa..
https://school.programmers.co.kr/learn/courses/30/lessons/43165?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr # 힌트 DFS를 상태 공간 트리를 탐색하는 용도로 사용하는 문제이다. 해당 숫자를 더하는 경우와 빼는 경우 둘 다 DFS를 진행한다. 이런 식으로 상태 공간 트리를 그려보면 이해하기 쉬울 것이다. 해답 보기 더보기 # 해답 layer : 현재 상태 공간 트리의 계층 (이 값은 numbers의 값 + 1과 동일하다. 1은 첫 번째 시작 노드) sum : 현재까지의 숫자를 ..
Kafka를 연동하여 아주 간단한 pub/sub 구조의 서비스를 만들어본다. 스프링 서버로 message 요청이 오면 이를 Kafka 서버로 전달하고, Kafka는 해당 토픽을 구독중인 컨슈머에게 전달하는 아주 간단한 구조이다. # Kafka 설치 윈도우 11기준으로 2.8.0 버전을 설치해서 사용했다. 적당한 위치에 설치하고 폴더명을 kafka (혹은 짧은) 명으로 바꿔준다. 나중에 cli로 명령어를 입력할 때 너무 명령어가 길다는 오류를 보지 않기 위함이다. # Zookeeper 와 Kafka 실행 Kafka는 Zookeeper를 내부적으로 사용한다. Kafka를 실행하기 위해선 반드시 먼저 Zookeeper를 켜줘야 한다. Kafka 설치 경로로 이동하여 cmd를 열어준다. Zookeeper를 실행..
PuTTY SSH 클라이언트를 통해서 AWS EC2에 원격 접속하는 방법을 정리한다. PuTTY 다운로드 공식 홈페이지에서 다운로드 받을 수 있다. https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html Download PuTTY: latest release (0.78) This page contains download links for the latest released version of PuTTY. Currently this is 0.78, released on 2022-10-29. When new releases come out, this page will update to contain the latest, so this is a good..
Redis는 인메모리 데이터 key-value 저장소로, 모든 데이터를 메모리에 관리해서 매우 빠른 성능을 자랑하는 NoSQL 데이터베이스다. 나는 "인 메모리"라는 점에서 의문점이 생겼다. 즉, Redis에 저장된 데이터는 Redis 서버가 다운되면 사라지는가? 로컬로 key를 저장하고 재부팅 후 데이터를 조회하면 남아있는 걸 발견했다. 그래서 의문점이 생겨서 교수님께 질의응답을 진행한 내용을 공유하고자 한다. 결론부터 말하자면, "그렇지 않다" Redis 서버가 다운되더라도 데이터는 보존된다. 이는 Redis Persistance와 연관이 있다. 이와 관련한 질의응답 내용은 아래와 같다. 결국 Redis의 시작은 완전한 인 메모리 DB에서 시작됐지만, 사용자의 니즈에 따라 변화된거로 이해하면 될 것 ..
Chapter 18: Concurrency Control (Database System Concepts 7th Edition)을 공부하며 정리한 글입니다. # 동시성 제어란? 동시에 여러 트랜잭션을 처리할 때 데이터의 일관성을 해치지 않도록 관리하는 방법 (여러 쓰레드가 공유 자원에 접근 시 Race Condition이 발생해서 이를 핸들 해줘야 하는 것과 동일) 비슷한 맥락으로 DB 역시 Lock을 거는 방법으로 동시성 문제를 해결한다. # Lock-Based Protocols DB Lock에는 두 가지 종류가 있다. 배타 잠금(Exclusive Lock) - 읽기/쓰기를 위한 잠금, X-Lock이라고 한다. 공유 잠금(Shared Lock) - 읽기를 위한 잠금, S-Lock이라고 한다. 트랜잭션은 ..