본문 바로가기

전체 글

(17)
[UBLE] 다중 서버 환경에서의 스케줄러 동시성 관리 프로젝트를 진행하며 스케줄러의 동시성을 처리해야 하는 문제가 발생했다.그 과정에서 했던 고민 및 구현 내용에 대해 기록해보고자 한다.✨ 구현 내용대부분의 제휴처에서는 월 1회, 일 1회와 같이 기간에 따른 사용 횟수 제한이 존재한다. 특히 사용자로부터 사용 내역을 등록 받고 있기 때문에, 유저가 현재 특정 매장에서 멤버십 혜택을 사용할 수 있는 지 여부를 확인하는 로직이 필요해졌다. 제휴처 별 이용 가능 최대 횟수를 관리하기 위해 brand 테이블에 주기/횟수 필드를 새롭게 추가하였으며, 각 유저별 제휴처 이용 횟수를 관리하기 위해 usage_count 테이블을 새롭게 생성하였다. 또한, 전체 제휴처를 통틀어 vip콕은 월 1회, 우리 동네 멤버십은 일 1회 사용 가능하다는 특수 제한이 존재했기 때문에 ..
[Elasticsearch] API & Query 정리 💡 개요찾아봤던 API & Query 문법 및 예시들 총정리 (계속 업데이트할 예정)Kibana의 dev_tools 사용하면 자동완성 / 명령어 다중 실행 등의 추가 기능 사용할 수 있어서 postman보다 편함✨ INDEX📌 Index 생성// index 생성// PUT /{index_name}PUT /products// mapping 정의// PUT /{index_name}/_mappingsPUT /products/_mappings{ "properties": { "name": { "type": "text" }, "content": { "type": "text" }, "price": { "type": "integer" } }} 두 쿼리를 합쳐서 한번에 요청을 보내는 것도 가능하..
[Elasticsearch] 기본 개념 정리 🔍 Elasticsearch란?Apache Lucene(아파치 루씬) 기반의 Java 오픈소스 분산 검색 엔진처음에는 Full-text search engine으로 개발되었지만, 지금은 보안, 로그 분석, 위치 기반 정보 데이터 분석 등 다양한 분야에서 활용됨자체적으로 사용되기도 하지만, ELK Stack으로 사용되기도 함간단하게 말하자면 받은 데이터에 대해 인덱싱 과정을 거쳐서 검색하기 좋은 형태로 재구성하고, 실제 데이터 조회 시 이를 활용해서 빠른 조회가 가능하게 만들어주는 역할을 수행하는 검색 엔진이다. 최근에는 주로 검색 기능 및 데이터 분석에서 사용되고 있다.🛠️ Elastic Stack (feat.ELK Stack) ELK Stack : Elasticsearch + Logstash + ..
[JUKSOON] QueryDSL로 페이지네이션 구현하기 (Feat. Index 적용기) 프로젝트에서 홈 화면에 띄울 피드들을 조회하는 API를 담당하게 되었다.이를 구현하는 과정에서 페이지네이션과 인덱스에 대해 많이 고민하고 배울 수 있었기 때문에 해당 내용들을 정리해보고자 한다.💡 개발 환경JDK 17Springboot 3.4.5 (Gradle)MySQL 0.8.3 (Local)💡 요구 사항1. 정렬최신순 or 가격낮은순 으로 선택 정렬 가능2. 필터링현재 상태가 OPEN인 것만 보기키워드 기반 검색 (Feed 제목 / 가게 이름으로 검색 가능)선택한 카테고리의 피드만 보기 (한식, 중식, 일식 등)3. 페이지네이션한 페이지에 8개씩 조회 가능해당 API에서는 조회를 위해 고려해야 하는 조건들이 많기 때문에, 정적 쿼리를 사용한다면 모든 경우의 수를 고려하기 위해 총 2 ^ 4 = 1..
[JUKSOON] JDBC를 활용한 Bulk Insert 구현 프로젝트를 진행하던 중 피드의 이미지들을 한 번에 저장하는 로직에서 saveAll()을 사용할 경우 insert 쿼리가 여러 번 나가게 된다는 리뷰를 받았다. 이 문제를 해결하기위해 JDBC를 사용한 Bulk Insert를 구현하게 되었다. 먼저 .save()와 .saveAll()의 차이를 먼저 확인해보자.📌 .save()하나의 엔티티를 저장각 Entity마다 트랜잭션 처리, 영속성 컨텍스트 반영, 쿼리 실행 등이 발생📌 .saveAll()여러 개의 엔티티를 저장엔티티들을 Iterable 형태로 받아 각각 save 처리여러 개를 저장할 경우, 하나의 트랜잭션 내에서 save가 수행되므로 매번 트랜잭션을 여는 .save()보다 빠름 같은 트랜잭션 내에서 여러 persist()가 실행되면, JPA는 여러..
[네트워크] IP (Internet Protocol) 🏠 IP (Internet Protocol)IP란, 인터넷에서 데이터를 어떻게 보내고 받을지를 정해주는 규칙(프로토콜)을 의미한다.그리고 여기서 각 device를 구분하기 위해 사용되는 고유한 주소를 IP 주소라고 한다. 네트워크 계층 (Network Layer, L3) 에서는 src 호스트에서 dst 호스트로 데이터를 전달하기 위해 IP를 사용한다.그러나 IP는 Connectionless (비연결성)이라는 특징을 가지고 있기 때문에 실제로 데이터가 전달되었는지 여부는 신경쓰지 않는다는 한계가 존재한다. 이를 해결하고 신뢰성 있는 IP를 지원하기 위해, 문제 발생 시 이를 src에게 알려주는 ICMP 등을 함께 사용해 IP를 보조하기도 한다.💡 IP의 주요 기능📌 Addressing (주소 지정)i..
[네트워크] TCP & UDP 🔗 전송 계층 (Transport Layer, L4) 에서의 통신전송 계층(Transport Layer, L4)은 서로 다른 호스트(목적지)간의 신뢰가능한 데이터 전달을 담당한다. 해당 계층에서 데이터의 중복/누락을 검사하고, 오류 없이 순서대로 전송되도록 관리함으로써 다른 계층이 데이터의 유효성을 검사하지 않아도 되는 것이다. 데이터 전달 방식으로는 크게 연결형 통신과 비연결형 통신이 있다. # 연결형 통신데이터를 교환하기 전에 연결을 맺고, 데이터를 교환하는 동안 계속 연결을 관리신뢰성 & 정확성이 높은 데이터 전송 시 사용# 비연결형 통신연결에 대한 초기화 과정 없이, 상대를 확인하지 않고 일방적으로 데이터를 전송효율성이 중요한 데이터 전송 시 사용됨 (동영상 등)여기서 TCP가 연결형 통신, U..
[네트워크] 쿠키 / 세션 / 토큰 (+JWT) 쿠키, 세션, 토큰은 사용자를 인증하기 위해 사용되는 방법들이다. 즉, 특정 요청을 누가 보냈는지 서버가 알아볼 수 있도록 만들기 위한 것이다. 먼저 인증과 인가의 차이에 대해 알아보자.🔐 인증 vs 인가# 인증 (Authentication)- 사용자가 "누구"인지 신원을 확인하는 것을 의미한다. - Ex) ID/PW를 통해 해당 사이트에 로그인하는 것 # 인가 (Authorization)- 인증 이후의 프로세스로, 유저가 특정 자원에 접근할 수 있는지 "자격"을 확인한 후 접근 권한을 부여/거부하는 것을 의미한다.- Ex) 일반 유저, 프리미엄 유저, 관리자 등 역할에 따른 접근 제한 인증은 인가로 이어질 수 있다. 즉, 로그인이 되었다면 해당 유저의 정보를 통해 인가 과정을 거칠 수 있다.그러나 모..