May 02, 2023
최근 같은 팀원 중 한분께서 JVM Warm-up 이슈로 인해 발생한 성능 저하 이슈와 그 해결방법에 대해 공유해주셨다. JVM Warm-up 키워드에 대해서는 언젠가 한번 공부해 보아야겠다고 생각했지만, 계속 미뤄두고 있었다. 이 기회에 JVM Warm-up에 대해 공부해보려한다. 배포 직후의 서버의 Latency 이슈 위 사진은 카카오 모빌리티 이형…
April 17, 2023
MSA 환경의 서비스간 장애의 전파 소프트웨어는 모두 실패한다. 아마존 부사장인 버너 보겔스(Werner Vogels)의 이야기다. 이전에는 무결함이나 실패 무결성 즉, 절대 다운되지 않는 완벽한 시스템을 추구했다. 하지만, 버너 보겔스의 말처럼 실패하지 않는 시스템을 만드는 것은 불가능하다. 우리는 완벽한 시스템을 만들기 보다, 실패에 빠르고 유연하게 …
February 19, 2023
회사에서 ELK 스택을 사용한다. 최근 로그를 확인하기 위해 Kibana를 많이 사용했는데, ELK 스택의 각각이 어떤 역할을 수행하고, 데이터가 어떻게 흘러 저장되고, 검색되고, 시각화 되는지 간단히 이해하면 더 좋겠다는 생각이 들었다. 이 글에서는 ELK 스택의 각각의 기술을 하나하나 자세히 알아보기 보다는, 데이터 흐름 관점에서 각각의 기술이 어떤 …
February 12, 2023
멀티 모듈이란 Java에서 모듈이란 패키지의 한 단계 위의 집합체이며, 독립적으로 배포될 수 있는 코드의 단위를 이야기한다. 멀티 모듈 프로젝트는 상호 연결된 여러개의 모듈로 구성된 프로젝트를 의미한다. 멀티 모듈 프로젝트의 각 모듈은 전체 서비스의 구성요소로서 동작한다. 각 모듈은 독립적으로 빌드할 수 있는 것이 특징이다. 즉 한 프로젝트에서 특정 모듈…
February 05, 2023
메시지 큐와 MOM 카프카를 이해하기 위해서는 메시지 큐와 MOM을 먼저 알아야한다. 메시지 큐는 분산화된 환경에서 발신자와 수신자 사이에서 메시지를 전송하고, 수신하는 기술을 의미한다. MOM(message oriented middleware)를 통해서 구현된다. 메시지큐를 왜 사용할까? 메시지 큐를 사용하면 발신자와 수신자가 서로를 직접 알 필요 없…
January 04, 2023
이 포스팅의 목표는 코틀린의 대략적인 문법 체계를 익히는데 있다. 각각의 주제에 대한 깊은 내용은 나중에 기회가 된다면 별도의 포스팅으로 다뤄보겠다. 클래스 클래스의 정의 코틀린에서 클래스는 위와 같이 정의한다. 주 생성자 클래스 이름 우측의 키워드를 통해 클래스의 생성자를 정의할 수 있다. 이를 주 생성자(Primary Constructor) 라고 한…
January 04, 2023
이 포스팅의 목표는 코틀린의 대략적인 문법 체계를 익히는데 있다. 각각의 주제에 대한 깊은 내용은 나중에 기회가 된다면 별도의 포스팅으로 다뤄보겠다. 함수 함수의 정의 위와 같이 이라는 키워드를 사용하여 함수를 정의한다. 반환 타입은 메소드 시그니쳐 맨 뒤에 변수와 동일하게 을 사용하여 명시한다. 나머지는 자바와 비슷하다. 참고로 코틀린의 함수는 자…
December 31, 2022
나는 걸리지 않고 무사히 지나갈 줄 알았던 코로나를 하필이면 연말에 걸리고 말았다 🤒. 연말 약속도 있고, 가족끼리 새해 해돋이도 보러 가기로 했었는데, 아쉽지만 모두 취소했다. 격리 중 할것도 없으니 제주도 여행 중 쓰기 시작한 2022년 회고를 마무리 지어보려고 한다. 우아한테크코스 4기 백엔드 수료 올해 2월부터 11월까지 진행된 우아한테크코스 4…
December 31, 2022
이 포스팅의 목표는 코틀린의 대략적인 문법을 살펴보는데 있다. 각각의 주제에 대한 깊은 내용은 나중에 기회가 된다면 별도의 포스팅으로 다뤄보겠다. 범위 표현식 (Range Expression) 코틀린에서 연산자를 사용하면 특정 수의 범위를 표현할 수 있다. 이렇게 생성된 것을 범위(Range)라고 한다. 좌항부터 우항까지의 범위를 생성한다. 이때, …
December 28, 2022
MySQL 바이너리 로그 MySQL에는 바이너리 로그라는 것이 존재한다. 바이너리 로그에는 MySQL에서 데이터베이스에서 테이블 생성, 변경 작업, 데이터 추가, 삭제, 변경 등의 ‘이벤트’가 저장되어 있다. 단, SELECT 와 같이 데이터베이스를 변경하지 않는 명령에 대한 이벤트는 저장하지 않는다. 이 바이너리 로그는 크게 두 가지로 활용된다. 첫번째…