전체 글 (57) 썸네일형 리스트형 [MySQL] Indexing 을 통한 성능 개선을 해보겠습니다. 영화 조회 API 를 구현하며 인덱싱을 통해 성능 최적화를 위해 거친 과정을 공유해보겠습니다. 주요 목표는 검색 및 필터링 기능을 제공하면서도 높은 트래픽 환경에서도 안정적인 성능을 유지하는 것입니다. 비즈니스 요구 사항영화 제목으로 검색 : 영화 제목을 입력받아 검색 결과를 반환영화 장르로 필터링 : 장르에 따라 영화를 필터링정렬 조건영화 개봉일 순서 : 내림차순 (release_at DESC)영화 상영 시간 순서 : 오름차순 (started_at ASC)다음과 같이 테이블이 구성되어 있습니다. 1단계: 검색 및 필터링 구현✅ 영화 제목으로 검색과 영화 장르로 필터링 @RequestParam 어노테이션을 사용하여 파라미터로 영화 제목(title)과 영화 장르(genre)를 요청 받도록 하였습니다.M.. [Java] Synchronized 키워드를 알아보겠습니다. Synchronized 키워드Java 는 synchronized 키워드를 사용하여 멀티 스레드 환경에서 스레드 간 동기화와 상호 배제를 보장하기 위해 모니터 락(Monitor Lock)을 내부적으로 사용합니다. 이 락은 하나의 스레드만 임계 구역에 접근하도록 하여 데이터의 무결성을 보장합니다. 이 과정에서 JVM 은 다음 작업을 수행합니다.락을 얻기 위한 경쟁 처리락 상태 업데이트락 소유자가 해제될 때 다른 대기 중인 스레드에게 락을 전달synchronized 키워드는 다음과 같은 경우에 사용할 수 있습니다.synchronized methodstatic synchronized methodsynchronized block1. Synchronized methodSynchronized Method는 인스턴스 .. [OS] 동시성 이슈에 대해 알아보겠습니다. 동시성(Concurrency)이란?병행성이라고 불리기도 하는 동시성은 논리적으로 두 개 이상의 task 가 동시에 실행되는 것처럼 보이는 상태를 의미합니다. 이를 구현하기 위해 하나의 작업을 일정 부분만 수행한 후, 다음 작업으로 전환하며 실행합니다. 이 과정에서 문맥 교환이 필요합니다. 동시성 환경에서는 여러 스레드가 동시에 공유 자원(shared resource)을 수정하려 할 때 문제가 발생할 수 있습니다. 이를 동시성 이슈라고 합니다. 먼저, 공유 자원과 임계 영역에 대해 알아보겠습니다.공유 자원과 임계 영역이란?공유 자원은 여러 스레드나 프로세스가 동시에 접근할 수 있는 데이터를 의미합니다. 코드 측면에서는 Service 등에 전역 변수가 공유 자원이 될 수 있습니다.프로세스 메모리 영역은 크게.. [책 리뷰]혼자 공부하는 컴퓨터 구조와 운영체제 해당 책을 읽기 된 계기대학교 2학년 때 만난 멘토님께서 "개발자라면 컴퓨터 부품을 직접 해체해보는 경험을 가지는 것이 좋다" 라고 조언해주셨습니다. 하지만 부끄럽게도, 백엔드 개발자로 1년을 근무하면서도 제가 알고 있는 컴퓨터 구조라곤 학부 시절 교양 수업으로 들었던 "그림으로 배우는 컴퓨터 구조"가 전부였습니다. (저희 학부는 소프트웨어 융합 대학교 소속임에도 불구하고, 컴퓨터 구조와 운영체제를 체계적으로 학습할 기회는 없었습니다.) 개발자로 일하며 문제가 발생했을 때, 명확히 알 수 없는 답답함이 자주 느껴졌습니다. 그러던 중 멘토님의 조언이 떠올랐고, 이를 계기로 "혼자 공부하는 컴퓨터 구조와 운영체제" 책을 참고하여 컴퓨터 구조와 운영체제를 다시 학습하기로 결심했습니다. 어떻게 읽었는지공부를 시.. [OS] 멀티프로세스(multi-process)와 멀티스레드(multi-thread)를 비교해보겠습니다. 이번 글에서는 멀티 프로세스와 멀티 스레드를 비교해보록 하겠습니다. 두 개념 모두 "멀티(multi)"가 붙는다는 공통점이 있어 헷갈리는 개념이기도 합니다. "멀티(multi, 다수의)" 를 뗀 "프로세스(process)"와 "쓰레드(thread)"에 대해 먼저 정리해보겠습니다. 프로세스란 무엇일까요?실행중인 프로그램을 프로세스라고 합니다. 다시 말해 보조기억장치에 저장되어 있던 프로그램이 실행 되기 위해서 메모리에 적재되는 순간 프로세스가 됩니다. 이러한 과정을 프로세스가 생성된다라고 표현합니다. 프로세스는 나뉘어서 메모리에 적재됩니다. 메모리에는 커널 영역과 사용자 영역이 있습니다. 커널 영역에는 프로세스 생성시 PCB(Process Control Block)이라는 프로세스와 관련된 정보들이 담긴 .. JWT와 토큰 기반 인증 방식에 대해 알아보겠습니다. 정의JWT(Json Web Token) 는 RFC 7519 에 명세되어 있는 국제 표준으로써, 통신 양자간의 정보를 JSON 형식을 사용하여 안전하게 전송하기 위한 방법입니다. 이는 정보가 토큰 자체에 포함된 (Self-Contained) 토큰입니다.구성요소JWT는 '.' 구분자를 사용하여 Header, Payload, Signature 의 3부분으로 구분되며, 각 부분은 Base64 로 인코딩 되어 표현됩니다. (Base64 은 Binary Data 를 6 bit 씩 자른 뒤 6 bit 에 해당하는 문자를 색인표에서 찾아 Text 로 변경하는 인코딩 방법입니다. ) 1. 헤더(HEADER)는 해싱 알고리즘(alg) 과 토큰 타입 (typ) 의 정보를 지니고 있습니다.- alg : 기본적으로 HMAC, .. [Spring] 로그를 어떻게 남겨야 할까? 1단계 : HTTP Request / Response 로그를 어디에서 처리해야 할까?HTTP Request / Response 로그는 공통 처리가 필요한 영역입니다. 이를 처리하기 위한 방법으로 주로 사용되는 세가지가 있습니다. 1. Servlet FilterServlet Filter 는 Dispatcher Servlet 의 전 / 후에 동작하며, 사용자의 요청이나 응답을 가장 먼저 마주합니다. 필터는 스프링의 고유 기능이 아니라 자바 서블릿에서 제공하는 기능입니다. Filter 는 동일한 Servlet Container (e.g Tomcat) 내에서 필요한 자원들을 활용하여 동작합니다. 2. Handler InterceptorInterceptor 는 Dispatcher Servlet 이 실행된 후 호.. [Spring/JPA] EntityListener 로 효율적인 이벤트 처리를 구현해보도록 하겠습니다. 왜 Entity Listener를 적용하였는가?지난 게시글에서 엔티티를 생성하거나 수정할 때 해당 엔티티의 인덱스를 생성 및 수정하는 작업을 위해 ApplicationEvent를 도입하여 서비스 간의 결합도를 줄이고, 트랜잭션 문제를 개선할 수 있었습니다. 그러나 지난 게시글에서 ApplicationEvent를 사용하는 방식에는 한 가지 단점이 있습니다. 매번 엔티티를 생성하거나 수정할 때마다 applicationEventPublisher.publishEvent() 메서드를 호출하는 코드를 작성해야 한다는 점입니다. 아래의 코드처럼 모든 이를 위해 모든 비즈니스 로직에서 일일이 이벤트 발행 코드를 추가해야 합니다.class UserService( private val userIndexService:.. 이전 1 2 3 4 ··· 8 다음