Spring Boot 게시글 조회수 및 좋아요 동시성 문제와 성능 개선 (Redis 도입기)🚨 문제 인식 (Troubleshooting)현재 개발 중인 커뮤니티 플랫폼에서 게시글 상세 조회와 좋아요 기능을 구현했습니다. 기능적으로는 정상 작동하는 MVP(Minimum
JWT 인증이란?JWT(JSON Web Token)는 로그인 후 서버가 사용자에게 발급하는 인증 토큰이다.기존 Session 방식은 서버가 로그인 정보를 저장하지만,JWT 방식은 사용자 정보와 권한을 토큰에 담아 클라이언트가 보관한다.이후 요청마다 토큰을 보내면 서버는
Builder Pattern은 객체를 단계적으로 생성하는 디자인 패턴이다.Spring Boot와 JPA에서는 엔티티(Entity)나 DTO 객체를 생성할 때 가장 많이 사용하는 패턴 중 하나이다.객체의 필드가 많아질수록 생성자(Constructor)나 Setter를 사
JPA는 엔티티(Entity)를 영속성 컨텍스트(Persistence Context) 를 통해 관리한다.엔티티는 생성부터 삭제까지 다음과 같은 4가지 상태를 가진다.비영속 상태는 영속성 컨텍스트가 관리하지 않는 새로운 객체이다.이 객체는 단순히 JVM 메모리에만 존재하
영속성 컨텍스트(Persistence Context)는 JPA가 엔티티(Entity)를 관리하는 메모리 공간이다.개발자가 엔티티를 조회하거나 저장하면 DB와 바로 통신하는 것이 아니라, 먼저 영속성 컨텍스트에서 엔티티를 관리한 후 필요할 때 DB와 동기화한다.영속성 컨
JPA에서 연관 엔티티를 언제 조회할지 결정하는 옵션이다.연관 엔티티를 실제로 사용할 때 조회한다.예를 들어 상품을 조회하면 상품만 가져오고,이 시점에는 Seller를 조회하지 않는다.하지만을 호출하는 순간 판매자를 조회하는 SQL이 실행된다.장점필요한 데이터만 조회하
ArrayList는 Java에서 가장 많이 사용하는 컬렉션(Collection) 중 하나로, 크기가 자동으로 늘어나고 줄어드는 동적 배열(Dynamic Array) 이다.일반 배열(Array)은 크기를 한 번 정하면 변경할 수 없지만, ArrayList는 데이터를 추가
문자열을 저장하는 객체문자열을 수정하면 새로운 객체가 생성됨기존 문자열이 수정되는 것이 아니라 새로운 String 객체가 만들어진다.문자열 길이 반환시간복잡도 : O(1)특정 위치 문자 반환시간복잡도 : O(1)문자열 자르기시작 포함끝 미포함문자의 위치 찾기없으면 -1
1. 자동 바인딩 방식 2. 수동 바인딩 방식 (Model 이용) 3. 명시적 @ModelAttribute 방식
도메인 지식 같은 경우 -> Domain(Entity)에 유효성 검사를 해야한다.도메인 지식과 무관하게 데이터 그 자체가 유효한가에 대한 검사 -> DTO에서 해야한다.@Size를 추가하여 유효성 검사를 추가했다.입력 폼에 대한 @NotEmpty @NotNull을 이용
ApplicationContext -> 스프링 컨테이너이자 인터페이스스프링 컨테이너 xml기반,Annotation을 기반으로 자바 설정 클래스로 만들 수 있다.스프링 컨테이너 생성 스프링 컨테이너에 (key : 빈이름(메소드명),value : 빈 객체(메소드 반환명 i
시간 복잡도는 O(nlogn)\-> 배열의 크기를 n이라 할때, 분할 할때 마다 배열의 크기가 n/2씩 감소. 이때 분할하는데 걸리는 시간은 O(log n)\-> 정복(합병)할때 마다 두 배열을 비교하면서 작은 요소부터 차례로 결과 배열에 추가.이 과정에서 최대 (n)
시간 복잡도최악: O(n^2)평균: O(n\*logn)java에서 Arrays.sort()로 사용한다.배열을 두 부분으로 나눈다.i) 배열 내 기준 요소보다 작으면 앞부분 배열에 위치, 크면 뒷부분 배열에 위치한다.각 분할된 부분을 재귀적으로 정렬한다.
정렬된 부분 (A0), 정렬 되지 않은 부분 (A1 ... An-1)으로 구분하여 정렬.시간복잡도 : O(n^2)
시간복잡도 O(n^2)대규모 데이터에는 부적합 -> 퀵 정렬, 병합 정렬을 주 사용.첫번째 항목부터 마지막 항목까지 순차적으로 이동하면서 인접한 항목을 비교한다.인접한 두 항목을 비교하면서 왼쪽항목(Aj) 이 오른쪽 항목 보다(Aj+1) 크면 위치를 바꾼다.위의 과정을
비선형 자료구조점 : 노드(Node),정점(Vertex)선 : link,edge(간선)degree : 정점(vertex)에 부속된 간선(edge) 수무방향 그래프 : 두 정점을 연결하는데 간선에 방향이 없는 그래프방향 그래프 : 두 정점을 연결하는데 간선에 방향이 있는
완전 이진 트리 일종.힙(Heap)은 삽입 및 삭제 연산에 있어서 뛰어난 성능최대힙,최소힙 => 최대,최소를 찾을때 좋음삽입: O(log n)삭제(최대 또는 최소): O(log n)접근(최대 또는 최소): O(1)