분류 전체보기(109)
-
Kibana 로그 파묘 및 부검 후, 사수님 양지바른 곳으로 매장(?)해드리기
> 이 글은 Elastic APM이 Kibana에 수집하는 데이터를 바탕으로, transaction 및 span 같은 주요 이벤트의 종류와 의미를 분석하며, 이를 통해 성능 병목 문제를 어떻게 확인하고 해결할 수 있는지에 대해 설명합니다. 또한, 실제 사례를 통해 문제가 발생한 원인을 추적하는 과정을 공유합니다.배경최근에 회사에서 검색을 개선하기 위해 저는 Elasticsearch 를 도입했었습니다.그래서 매번 Elasticsearch 관련 이슈가 생길때마다 항상 제가 도맡아 작업을 하게 됐는데,이러다 보니 팀원들에게 이제 Elastic? —> 채훈님? 이라는 인식이 강하게 박혀있던 찰나, 일이 생겼습니다.금주 개발 서버가 갑자기 원인 모를 이유로 매우 아파하는 이슈가 있었습니다.그리고 그럴때마다 항상 ..
2024.11.24 -
왜 Elasticsearch는 Java로 개발되었을까? Compass부터 Lucene까지
이 글은 팀원의 단순한 한마디 "왜 Elasticsearch 는 C 나 C++ 이 아니고 Java 로 개발했어요?성능을 고려한다면 Java 보단 다른게 좋지 않나?" 라는 의문에서 시작된 글입니다.Elasticsearch란?Elasticsearch is a search engine based on Apache Lucene. It provides a distributed, multitenant-capable full-text search engine with an HTTP web interface and schema-free JSON documents. 출처 : https://en.wikipedia.org/wiki/Elasticsearch#External_linksElasticsearch는 Apache L..
2024.11.10 -
MySQL에서 ElasticSearch로 대용량 데이터 마이그레이션: OFFSET vs PK 기반 커서 방식 비교
본 문서는 회사의 기존 RDB 에서 ElasticSearch 로의 데이터 마이그레이션 전략을 다룬 문서입니다!개발 환경JDK : 17 Spring Boot : 3.0.0 MySQL : 8.0.36ElasticSearch : 7.15.1 Spring Data ElasticSearch : 5.0.12배경ElasticSearch 설치 이후, 남은 작업은 국내 숙박 목적지 검색에 사용되었던 호텔, 지역 정보 데이터들을 ElasticSearch 로 옮겨야하는 데이터 마이그레이션 작업입니다. 그래서 이관에 앞서 숙박 목적지 검색에 사용되던 데이터들 총 마이그레이션 데이터의 양을 계산 해야 합니다.기존 목적지 검색 API 의 응답 형태는 다음과 같습니다.{ "regions" : [...], "hotels" : [...
2024.10.27 -
???: 확장&유연한 설계가 중요해요? 그럼 이걸 안 볼수 없는데?
1. 배경과 한계저는 회사의 기존 인증/인가 시스템을 개선하기 위한 작업을 진행했습니다. 회사는 Spring Security를 사용해 인증/인가 시스템을 구축하려 했으나, 도입 과정에서 여러 문제에 직면했습니다. Spring Security는 강력한 기능을 제공하지만, 설정이 복잡하고 유지보수가 어려운 단점이 있었습니다.또한, 기존 전역 필터와 새롭게 도입하려는 Spring Security Filter Chain 간의 충돌 문제가 발생했습니다. 기존 시스템은 전역 필터를 통해 인증과 인가를 처리하고 있었고, 이 필터들이 Spring Security의 Security Context를 사용하고 있었습니다. 이로 인해 새로운 Spring Security Filter Chain과 충돌이 발생했고, 이를 해결하기..
2024.10.13 -
CTE: 장점과 단점, 그리고 가독성 문제에 대한 고찰
💡 본 글은 회사에서 CTE(Common Table Expression) 를 처음보고, 이에 대해 조사해본 글입니다!💡 CTE 문법은 ANSI 표준 중 일부라, 대부분의 DBMS 에서 지원하지만, 내부적으로 동작을 하는 방식은 DBMS 마다 다르니, 참고하세요! (ex. Postgre 에서 CTE는 무조건 Using Temp 지만, MySQL 은 Execution Plan 에 따라 다릅니다! )CTE 의 기본 개념A common table expression (CTE) is a named temporary result set that exists within the scope of a single statement and that can be referred to later within that st..
2024.07.16 -
초보자를 위한 SSL/TLS 가이드: 무료와 유료 인증서의 차이점
1. SSL의 등장 배경과 역사인터넷이 상용화되면서 데이터 전송 과정에서 도청, 변호, 위변조의 위험성이 커졌습니다.예를 들어 사용자가 웹사이트에 로그인할 때 입력하는 ID 와 비밀번호가 중간에서 도청될 수 있습니다.이러한 보안 문제를 해결하기 위해 안전한 데이터 전송 방식의 필요성이 대두됐습니다.개인정보 보호 및 기밀성 유지인터넷에서 전송되는 데이터는 개인 정보나 금융 정보 등 민감한 정보를 포함할 수 있습니다. 이러한 정보가 유출되면 심각한 문제가 발생할 수 있기 때문에, 기밀성을 유지하는 것이 중요합니다.SSL의 탄생1994년, Netscape Communications는 이러한 문제를 해결하기 위해 SSL(Secure Sockets Layer) 프로토콜을 개발했습니다. SSL은 데이터 암호화를 통..
2024.06.10 -
TDD 스터디에서 배운 점: 가독성 높은 테스트 코드 작성법과 코드 리뷰의 중요성
안녕하세요, 저는 현재 TDD 스터디를 진행하고 있는 코랩입니다.이번 주 TDD 스터디를 하면서 배운 내용들을 여러분과 공유하고자 합니다.이번 주 작업 내용저희 팀은 이번 주에 6, 7장 강의를 수강하고,controller 테스트 코드를 작성하며, 서로의 코드를 리뷰하는 시간을 가졌습니다.이번 주에는 강의와 코드 리뷰를 통해 많은 것을 배울 수 있었습니다.강의에서 배운 내용1. 각 테스트 별 given, fixture를 @BeforeEach로 빼지 말자!각 테스트는 독립적으로 실행되어야 하므로, given과 fixture를 @BeforeEach로 분리하는 것은 좋지 않습니다.테스트 코드를 작성할 때, 특히 학습용으로 할 때는 비즈니스를 간단하게 가져가다 보니, given 절에서 반복이 자주 일어납니다. ..
2024.05.12 -
TDD 스터디 회고: 에러 핸들링의 책임과 TDD의 본질
안녕하세요, 저는 현재 TDD 스터디를 진행하고 있는 개발자입니다. 오늘은 이번 주 스터디를 하면서 고민했던 내용들을 여러분과 공유하고자 합니다.1. 에러 핸들링도 하나의 '책임' 이다이번 주에 저번처럼 기획을 기능 명세서로 만든 후,기능 명세서에서 명시한 Exception을 어느 계층에서 던져야 할지 고민이 되더라고요.이전까지는 Controller에서 DTO를 바인딩할 때 @Valid로 모든 검증을 처리했었거든요.필드가 유효하지 않은 값이 있다면, 서비스 로직까지 아얘 오면 안된다고 생각했기 때문입니다.서비스 계층은 비즈니스 로직을 책임지는 계층이지, 값의 유효성에 대한 검증의 책임은 컨트롤러에 있다고 생각하기 때문입니다.그래서 위 카테고리 수정 명세서를 예시로 들어보자면,'name'으로 빈 값이 들어..
2024.05.05 -
TDD 스터디 주간 회고 (4/22 ~ 4/28)
저희 팀은 이미 한 번 리뷰를 해본 적이 있지만,제대로 된 주간 리뷰는 이번이 처음이라 이렇게 글을 남기게 되었어요.스터디 진행 방식저희 팀의 스터디 진행 방식은 다음과 같습니다.1. 박우빈 님의 강의를 정해진 주차까지 듣습니다.2. 팀원들과 회의를 통해 기획명세서를 도출합니다. 이때 GPT에게 회사에서 주는 것처럼 해달라고 요청합니다.3. 기획명세서를 토대로 TDD를 진행합니다. 예전에 TDD를 할 때는 Red, Blue, Green 만 지키다 보니, 본질적인 것은 이게 아니라는 생각이 들었습니다.그래서 저희 팀은 스터디 내용 중에 명세서를 열어보는 것을 가장 중요하게 여기고 있습니다.TDD의 핵심은 명세서를 열어보고 해체하는 과정이라고 생각했어요.4. 서로의 코드와 테스트 코드를 화면에서 보고 리뷰합..
2024.05.01 -
이력서 보고 오셨나요? 저의 Personalities 보여드립니다
안녕하세요, 블로그 주인장 코랩입니다.(코래블러 줄임말 입니다 :) 이번 글은 처음으로 제 자신에 대한 Self-Interview 를 통해 소개해보는 글입니다! 아무래도 이력서나 GitHub 프로필에 무엇(What) 을 어떻게(How) 풀어냈냐에 대한 정보는 담을 수 있지만, 왜(Why) 이렇게 살아왔는지, 왜 이런 글을 쓰는 지는 한번도 제대로 담은 적이 없는거 같아 이번 기회에 저라는 사람에 대해 소개하려고 합니다 :) 아무래도 저의 Why? 를 설명한다고 해도 기본적인 인적사항은 적는 게 좋겠다는 생각에 훑어보겠습니다. 저는 서울 강남에 살고 있는 97년생 Java + Spring 백엔드 개발자이고, 2023년 8월에 컴퓨터공학과를 졸업, 글쓰는 현재 4/2 기준 취준생입니다! 그리고 사진은 4월 ..
2024.04.02