
1. 기존 코드 문제 발생 (첫 번째 문제)https://programming-tree.tistory.com/145 Spring에서 Elasticsearch로 검색 성능 최적화하기1. Elasticsearch가 LIKE 검색보다 나은 이유기존 RDBMS에서는 문자열 검색을 위해 LIKE '%검색어%'를 자주 사용한다. 그러나 이 방식에는 다음과 같은 문제가 있다.오타 허용 불가사용자가 "강아지" 대신programming-tree.tistory.com저번 글을 쓸 때만 해도 nori와 n-gram이 없어도 되지 않을까 생각했다. 한국어 검색이라고 해도 단순 standard analyzer와 Fuzzy 정도로 충분하지 않을까 싶었다. 그런데 막상 여러 데이터를 예로 들어 테스트해보니, 예를 들어“강아지잠옷”..

1. Elasticsearch가 LIKE 검색보다 나은 이유기존 RDBMS에서는 문자열 검색을 위해 LIKE '%검색어%'를 자주 사용한다. 그러나 이 방식에는 다음과 같은 문제가 있다.오타 허용 불가사용자가 "강아지" 대신 "강이지"로 검색하면 매칭되지 않는다.부분 검색 제한LIKE로 부분 문자열은 찾을 수 있지만, 접두어(Prefix)나 접미어, 중간 문자열 등 원하는 형태로 세분화하기 어렵다.공간(Geo) 검색 미지원위도·경도 기준으로 특정 지역만 검색하기가 쉽지 않다. 보통 BETWEEN을 써야 하지만 대규모 데이터에서 성능이 좋지 않다.대규모 데이터 성능 저하LIKE '%검색어%'는 인덱스를 제대로 활용하기 어려워 데이터가 커질수록 매우 느려진다.이와 달리 Elasticsearch는 역색인(In..

캡스톤 졸업 프로젝트를 진행하다가 AWS EC2를 활용해 스프링부트 애플리케이션을 배포하게 되었는데, 초기에는 HTTP 프로토콜을 통해 서비스를 제공했다. 그러나 HTTP는 암호화되지 않은 통신 방식으로, 사용자 데이터가 네트워크 상에서 쉽게 노출될 위험이 있었다. 이 때문에 HTTPS로 전환의 필요성을 느꼈고, 보안 강화를 위해 HTTPS를 적용하게 되었다. 0. HTTPS를 쓰는 것이 보안상 안전한 이유HTTPS(HTTP Secure)는 HTTP에 SSL/TLS 암호화를 더한 프로토콜로, 클라이언트와 서버 간의 통신을 안전하게 보호한다. HTTP와 달리 HTTPS는 데이터를 암호화하여 네트워크 상에서 가로채거나 변경하는 것을 방지하며, 클라이언트가 접속하려는 서버의 신뢰성을 인증서를 통해 검증할 수 ..
1. 🫐 도입프로젝트를 진행하면서 동적으로 데이터를 조회해야 할 상황이 많았다. category, memberId, 정렬 기준 등 조회 조건이 자주 바뀌었고, 이 조건들을 조합하여 유연하게 쿼리를 생성할 수 있는 방식이 필요했다. 특히, 조건이 빈번하게 변경되거나 상황에 따라 추가되는 경우, 코드가 복잡해지고 유지보수도 어려워질 가능성이 컸다.이때 Spring Data JPA의 Specification 기능을 알게 되었고, 이를 통해 다양한 필터 조건을 유연하게 추가하고 조합하여 필요한 데이터를 효율적으로 조회할 수 있음을 알게되었다. Specification을 활용하면 코드의 복잡성을 줄이고, 조건이 변해도 쿼리를 쉽게 관리할 수 있기 때문이다. - 동적 조건 추가: Specification을 사용..
문제 발생No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor ..... 개발 과제를 하던 중에 게시글 단건조회, 전체조회를 할 때 계속 No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor ..... 오류가 발생했다. 찾아보니 이 오류는 데이터 직렬화 과정에서 발생한 문제로, Jackson이 Hibernate의 지연 로딩(lazy loading) 으로 인해 생성된 프록시 객체의 내부를 직렬화하려 할 때 발생한다고 한다. 문제 상황Post 엔티티에서 Blog를 참조하는 경우, 다음과 같은 PostFindDt..

1. 기본 로깅의 한계중복된 로깅 코드로 인한 문제점 //PostController @PostMapping("/posts") public ResponseEntity createPost( @RequestHeader Long memberId, @RequestHeader Long blogId, @Valid @RequestBody PostCreateRequest postCreateRequest) { log.info("Entering createPost: memberId={}, blogId={}, title={}, content={}", memberId, blogId, postCreateReq..

1. 도입로깅이란?로깅(logging)은 소프트웨어 시스템에서 발생하는 모든 행위와 이벤트 정보를 시간 순서대로 기록하는 작업을 말한다. 이러한 기록은 프로그램의 실행 상태를 모니터링하고, 문제를 진단하며, 성능을 평가하는 데 필수적인 역할을 한다.쉽게 말해, 로깅은 프로그램이 어떻게 실행되고 있는지에 대한 ‘흔적’을 남기는 것이다.간단히 System.out.println()을 사용해 콘솔 로그를 남기는 것도 로깅에 해당한다.Spring에서는 일련의 로깅 라이브러리를 제공하고 있다.로깅의 필요성디버깅코드가 예상대로 작동하지 않을 때, 로그는 문제의 원인을 찾는 데 도움을 준다. 예를 들어, 특정 기능이 제대로 작동하지 않는다면, 로그를 통해 어느 부분에서 문제가 발생했는지 확인할 수 있다.성능 모니터링로..

sudo apt updatesudo: 관리자(루트) 권한이 필요한 작업을 실행할 때 사용된다. 일반 사용자가 관리자 권한을 임시로 얻어 명령을 실행할 수 있다.apt: 소프트웨어 패키지를 관리하기 위한 도구로, 소프트웨어 설치, 업데이트 및 제거 등의 작업을 간편하게 수행할 수 있도록 돕는다.update: 시스템의 패키지 리스트를 업데이트한다. vimvim은 고도로 커스터마이징 가능한 텍스트 에디터로, 다양한 프로그래밍 작업에 널리 사용된다. 주로 키보드만으로 작업을 수행할 수 있게 설계되었으며, 다양한 모드(삽입, 명령, 시각적 모드 등)를 통해 효율적으로 텍스트 편집 작업을 할 수 있다. vim application.yml 명령어는 application.yml 이라는 이름의 파일을 Vim 텍스트 에..
- Total
- Today
- Yesterday
- 로그아웃
- 스프링부트
- SQL 레벨업
- 자바 스프링
- 영속
- 로깅
- 지연로딩
- 웹MVC
- JPA
- 준영속
- 파이썬
- elasticsearch
- 북마크
- 커뮤니티
- 비영속
- SQLD
- 스프링 커뮤니티
- SQL
- 스프링
- DP
- 웹 MVC
- 다이나믹 프로그래밍
- 자바
- 프론트엔드
- 인텔리제이
- 백준 파이썬
- 스프링 북마크
- EnumType.ORDINAL
- 회원탈퇴
- 백준
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |