전체 글 168

[Effective Java] 아이템 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라

예제 코드는 여기서 보실 수 있습니다. 0. 들어가며 이번 아이템은 싱글턴 패턴을 안정적으로 구현하기 위한 방법들에 대한 내용입니다. 각각의 방법들을 예제 코드와 함께 알아보겠습니다. 1. 싱글턴이란? 싱글턴(singleton)이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. (Effective java 책 23p) '오직 하나만 생성할 수 있다' 라는 말은 '인스턴스가 하나만 존재해야 한다' 라고 해석할 수도 있습니다. 즉, 싱글톤 구현을 위해서는 Java 의 런타임 환경인 JVM 에서 단 하나의 인스턴스만 생성되도록 구현해야 한다고 생각할 수 있습니다. 1.1 싱글턴의 특징 1. 메모리 절약 모든 객체는 생성되면 JVM 의 heap 메모리에 저장됩니다. 그러나..

Java 2022.12.14

[MySQL] R-Tree Index 와 공간 탐색

MySQL 8.0 기준으로 작성한 글입니다. 이 글에서는 MySQL 의 R-Tree 에 대한 개념만 정리합니다. 1. R-Tree R-Tree 는 점, 선, 면(다각형)과 같은 다차원 정보를 효율적으로 저장하기 위한 트리 형태의 자료구조 입니다. 보통 지도에서 좌표, 거리, 지역의 윤곽선 등을 저장하여 해당 개체를 더 빠르게 쿼리하는 목적으로 사용됩니다. (예를 들면 "현재 위치로부터 1km 이내의 식당들 검색") 1.1 MBR : 최소 경계 사각형 R-Tree 의 핵심은 MBR(최소 경계 사각형) 입니다. MBR 은 Minimun bounding rectangle 로 특정 도형을 감싸는 최소 크기의 사각형을 의미합니다. 하나의 도형뿐만 아니라 근처의 도형도 함께 감싸는 저장방식을 통해 도형의 포함 관계..

데이터베이스 2022.11.15

[goorm 세미나] 인프라, 어디까지 구축해 봤어? - 강대명님

본 포스팅은 강대명님이 발표하신, goorm 4회 인프라, 어디까지 구축해 봤어? 를 듣고 정리한 내용 입니다 1. 어떤 인프라 구성이 좋은 구성일까? 일단, 가장 중요한 것은 회사와 서비스의 규모 에 맞는 구성이다. 그래도 꼭 몇가지를 요소를 생각해 보면 다음과 같다 장애에 강건한 구조 확장이 쉽다 관측(모니터링)이 쉽다 비용이 적게 든다 (인프라를 효율적으로 사용하고 있다?) 1.1 소규모 서비스(스타트업 등) 만약 On-prem 인프라를 구성한다면? 장비가 몇년 뒤에 들어올 수 있음을 잘 알아야 함 반도체 대란으로 제때 수급이 힘듦 충분한 여유분의 HW 를 보유해야함 좋은 SE(Server Engineer)인력이 있어야 함 이런 분들은 보통 큰 회사에 많음..(작은 규모 회사에서 채용하기 쉽지 않음..

세미나 2022.09.21

블로그에 목차 적용하기(TOC : Table Of Contents)

본격적으로 TOC 적용하기 설며에 앞서, 제가 유명한 스킨들을 사용하지 않고 커스텀한 이유를 말씀드리겠습니다. 그래서 제가 개인적으로 깔끔해서 좋아하는 기본 스킨인 Book Club 을 조금 수정하기로 마음먹고 시작하게 되었습니다. (튜닝의 끝은 순정..) Q. TOC 를 제공하는 스킨이 많은데, 왜 커스텀을 했는지? A. 검색하며 봤던 스킨 중 TOC 가 있는 스킨은 미넴 스킨, hELLO 이 있었습니다. 미넴스킨 은 제 취향이 아니었고, hELLO 는 얼핏 보니 h2 태그부터 제목으로 부터 인식하여 TOC 를 생성하는것 같았습니다. 저는 목차를 생성할 때, 제일 큰 제목(h1 태그, #) 부터 작성하는 편이라 이 부분이 아쉬웠습니다. 0. 준비물 Book Club : Tistory 기본 제공 스킨 G..

이것저것 2022.09.19

[번역] Redis vs Kafka vs RabbitMQ

영문 독해 연습을 위해 번역한 글이라 의역, 오역이 있을 수 있습니다. 잘못된 부분이 있다면, 댓글로 알려주시면 감사하겠습니다🙏 Redis vs Kafka vs RabbitMQ 마이크로서비스 환경에서 비동기 통신을 할 때, 메세지 브로커를 사용하는 것이 일반적입니다. 메세지 브로커는 서로 다른 마이크로서비스 간 신뢰성, 안정성을 보장하며, 시스템 내에서 메세지를 관리하고 모니터링 하고 메세지가 손실되지 않도록 합니다. 다양한 규모와 데이터 수용력에 따라 선택할 수 있는 몇개의 메세지 브로커가 있는데요. 이 글에서는 가장 유명한 3개의 메세지 브로커를 비교할 것 입니다.(RabbitMQ, Kafka, Redis) Microservices Communication: Synchronous and Asynchr..

다크모드 프로그램 추천(Dark Reader, Chrome 확장 프로그램)

Dark Reader 모든 웹사이트에 다크 모드를 적용합니다. 밤이나 일상적인 웹 브라우징을 할 때 어두운 테마를 사용하여 눈을 보호하십시오. chrome.google.com 크롬 다크모드 Exteention 인데, 왠만한 다른 Extention 보다 다크모드로 전환된 화면이 깔끔하고 자연스럽다...! 지금 작성하고 있는 이 Tistory 블로그 글쓰기 페이지는 원래 하얀 화면이다. 하지만 다크 모드를 키면 이렇게 자연스러운 다크모드로 변경된다. 그리고 네이버 메인처럼 컨텐츠가 많고 복잡한 페이지의 경우에도 깔끔하게 변경된다. 아래는 네이버가 자체적으로 제공하는 다크모드인데, 이 둘을 비교해 보면 이 Extention 이 얼마나 자연스럽게 변환해 주는지 알 수 있다!

이것저것 2022.09.17

ECS 의 OutOfMemory 오류 해결과정(feat. 502 에러가 발생하는데요)

이전에 goorm 에서 개최했던 장애 대응 세미나에 참석한 적이 있습니다. 세미나에서 장애를 해결만 하고 넘어가기 보다는 이 과정을 되돌아보며 회고하는 과정이 중요하다고 했던 것이 인상깊었는데요. 마침 사이드 프로젝트 배포 및 테스트를 하던 과정에서 발생한 장애 해결 과정을 기록으로 남기기 위해 글을 작성합니다. 1. 개요 프로젝트 막바지에 QA 를 위해 모든 팀원들이 함께 서비스의 이곳 저곳을 쑤시며 테스트를 하고 있었습니다. 그러던 중 팀원이 보내준 장애 사진으로부터 장애 상황 인지하고 장애 대응이 시작되었습니다. 2. 트러블 슈팅 과정 1) AWS ALB 대상그룹 Health Check 확인 ⇒ 대상그룹에 포함된 인스턴스 정상 확인되어 그 다음으로 ALB 모니터링 지표 확인해보기로 함 2) ALB ..

인프라 2022.09.16

[goorm 세미나] 트래픽이 몰려온다, 장애 대응 - 강대명님

본 포스팅은 강대명님이 발표하신, goorm 3회 세미나 트래픽이 몰려온다 장애 대응을 요약한 내용 입니다 1. 어느 날 갑자기 장애가 발생한다면? 팀이 장애가 난 것을 알고 있는지? 고객문의(CS)를 통해서 안다? = 최악의 상황 1.1 만약, 고객이 먼저 장애를 접한다면? 고객 불만 고객수 감소(이탈) 회사 매출 감소 내가 짤린다(?) 즉, 고객보다 먼저 장애를 인지 하는 것이 중요하다. 1.2 만약, 회사에서 먼저 인지한다면? 장애를 인지한다. 고객이 발견하기 전에, 수정한다 조용히 배포한다. 없던 일로 만든다 운영에서 이를 인지하고 해결하는것이 필요하다. 즉, 서비스가 제대로 돌아가고 있는지 계속 확인해야함. 모니터링을 통해, 현재의 상황을 인지 하는것이 중요 Q) 무엇을 모니터링 하는게 좋은지?..

세미나 2022.08.29

TestContainer 재사용하기(feat. 테스트 실행시간 최적화)

0. 계기 Sikdorak 프로젝트를 진행하며 팀원들과 테스트 DB에 대한 고민을 했었는데요.(ku-kim,Seokho-Ham) 토론한 결과 실행환경과 비슷한 조건에서 테스트하기위해 TestContaienr 를 도입하기로 결정했습니다. 하지만, 테스트 수행 시 컨테이너를 실행하는 과정이 여러번 반복되어 시간이 많이 걸리는 것이 아쉬웠는데요. 그래서 이를 해결해보기 위해, Testcontainer 에 대해 알아보며 개선하게 되었습니다. (관련 PR : https://github.com/jjik-muk/sikdorak/pull/55) 테스트 실행 환경 1. 문제상황 @Testcontainers public abstract class MysqlTestContainer { private static final ..

Java 2022.08.06