분류 전체보기

· JPA
FROM 절에 서브쿼리를 사용해 보자  들어가며프로젝트를 진행하면서, 각 카테고리별로 좋아요 수를 기준으로 상위 2개의 게시물을 조회하는 쿼리가 필요하게 되었다. 하지만 일반 SQL문을 사용하는 것이 아닌 QueryDSL을 사용할 때 FROM 절에 서브쿼리를 어떻게 적용할 수 있는지 한번 알아보도록 하겠습니다. SQL 조회 예시위와 같이, Article 테이블에서 카테고리별로 좋아요 순으로 상위 2개의 게시물을 조회하는 방법에 대해 설명드리겠습니다.카테고리별 좋아요 순 쿼리 - 먼저 각 게시물에 ROW_NUMBER()를 사용하여, 카테고리별로 좋아요 순위를 매깁니다. SQL 쿼리는 다음과 같습니다: SELECT a.*, ROW_NUMBER() OVER (PARTITION BY a.article_categ..
무중단 배포를 한번 해보자!  들어가며새로운 프로젝트를 시작하면서 CI/CD를 구성하게 되었습니다. 이전 프로젝트에서는 새로운 기능이 담긴 JAR 파일을 배포할 때 기존 서버를 종료하고 새로운 서버를 띄우는 과정에서 다운타임이 발생하는 문제가 있었습니다. 이로 인해 짧게는 30초, 길게는 1분 이상 서비스가 중단되어 사용자에게 불편을 초래했습니다. 이번 프로젝트에서는 이러한 문제를 해결하기 위해 무중단 배포를 구현하려고 합니다. 다운 타임다운타임이란 스템, 서버, 네트워크, 또는 애플리케이션이 정상적으로 작동하지 않고, 사용자가 접근할 수 없는 시간을 의미합니다. 다운타임은 계획된 경우와 계획되지 않은 경우로 나뉩니다.계획된 다운 타임 :시스템 유지 보수 : 시스템의 성능을 올리거나 유지보수를 하는 동안..
· MySQL
FULLTEXT with N-GRAM 전문 검색을 사용해 보자  들어가며웹사이트를 사용하다 보면 검색 기능을 쉽게 접할 수 있습니다. 기본적으로 많은 웹사이트는 엘라스틱서치(Elasticsearch)를 사용하여 손쉽게 검색 기능을 구현하고 개선합니다. 그러나 MySQL에서도 FULLTEXT와 N-GRAM을 지원하여 검색 기능을 최적화할 수 있습니다. 이번 포스팅에서는 MySQL을 사용하여 검색 기능을 최적화하는 방법에 대해 알아보겠습니다.  FullText IndexFULLTEXT 검색은 관계형 데이터베이스에서 텍스트 기반의 검색 기능을 제공하는 중요한 기술입니다. 특히 MySQL과 같은 데이터베이스에서는 FULLTEXT 인덱스를 통해 이 기능을 구현할 수 있습니다. 이 인덱스는 텍스트 필드 내의 단어들..
SSL/TLS인증서를 발급받기  들어가며이번 포스팅에서는 스프링 부트를 사용하는 애플리케이션이 Let`s encrypt를 이용한 SSL/TLS 인증서를 발급받고 설정하는 방법을 알아보도록 하겠습니다. SSL/TLS란SSL(Secure Sockets Layer)와 TLS(Transport Layer Secuity)는 인터넷상에서 데이터의 기밀성과 무결성을 보장하는 보안 프로토콜입니다. 이 프로토콜은 주로 웹 서버 간의 통신을 암호화하여 데이터를 안전하게 전송하기 위해 사용됩니다. Let's Encryptet's Encrypt는 무료, 자동, 개방형, 인증 기관(CA)입니다. 인터넷 보안을 개선하고 HTTPS 사용을 장려하기 위해서 비영리 단체로 설립되었습니다. 그래서 Let's Encrypt는 누구나 무료..
@Qualifier 사용해 보자! 들어가며개발을 하다 보면 종종 여러 구현체가 동일한 인터페이스를 구현하게 됩니다. 이럴 때 어떤 구현체를 사용할지에 대해서 지정해 주는 에노테이션입니다. 이번 포스팅에서는 사용방법에 대해서 알아보도록 하겠습니다. @Qualifier이란 @Qualifier 어노테이션은 DI할때 어떤 빈을 등록할 것인지를 명시해 줄 때 사용됩니다. 하지만  기본적으로는 @Autowired을 통해서 DI를 하게 되지만, 동인 한 인터페이스를 가진 구현체가 있을대 @Autowired를 사용하게 되면 빈이 유일하지 않다는 NoUniqueBeanDefinitionException 예외를 발생하게 됩니다.  이럴 때에 구현체를 지정해 주기 때문에 예외를 피할 수 있습니다.즉  👉🏻 동일한 Int..
· 오류관련
오류 발생롬복의  @RequiredArgsConstructor을 통해 생성자 주입을 아주 편리하게 사용하고 있는 도중에동일한 인터페에스를 사용하는 여러 구현체가 있어서  @Qualifier오류가 뜬것이 아닌가.......(┬┬﹏┬┬)그래서 찾아보니.  @RequiredArgsConstructor 어노테이션은 final이거나 @NonNull이 붙은 필드에 대해 생성자를 자동으로 만들어 주기 때문에 @Qualifier 어노테이션이 붙은 필드에 대해서는 @Qualifier 어노테이션을 생성자의 매개변수에 복사하지 않기 때문에 생성자를 주입할 수 없는 오류가 발생했던 것이다.. 해결책Lombock.config 파일의 다음과 같은 설정을 추가해 주고 Rebuild Project를 해주면 된다.lombok.copy..
· MySQL
MySQL에서 데이터를 Import 및 Export 해보자!  들어가며로컬 환경에서 작업한 데이터를 AWS 또는 다른 데이터베이스(DB)로 효율적으로 이관하는 방법을 LOAD DATA INFILE을 사용하는 방법이 있습니다. 이 방법은 데이터를 빠르게 로드할 수 있어 사용하는 방법을 한번 알아보도록 하겠습니다. 설정 확인하기LOAD DATA INFILE을 사용하기 전에 먼저 환경 설정을 확인해야 합니다.SHOW VARIABLES LIKE 'local_infile'; 위 명령어를 통해 해당 Mysql의 설정 정보를 확인해 줍니다. 만약 Value가 Off로 되어있다면 아래 명령어를 입력해 On으로 변경해줍니다.SET GLOBAL local_infile=1; 설정파일 변경 시(Windows 기준)C:\Pro..
SSE를 이용한 실시간 알림을 구현해 보자  들어가며팀 프로젝트를 진행하던 중, 댓글이나 좋아요가 달렸을 때 사용자에게 실시간으로 알림을 제공하는 기능의 필요성을 느끼게 되었습니다. 인스타그램이나 유튜브와 같은 플랫폼에서는 이러한 실시간 알림을 통해 사용자에게 새로운 활동을 즉시 알려줍니다. 원래 계획에는 없었지만, 팀원들과 상의 끝에 실시간 알림 기능을 추가하기로 결정했습니다.실시간 알림 기능을 구현하기 위해 두 가지 주요 방식이 있습니다: WebSocket과 SSE(Server-Sent Events). 이 중, 우리는 SSE 방식을 선택했습니다. 선택한 이유와 구현 방법에 대해 작성해 보도록 하겠습니다.   SSE  VS  WebsoketWebSocket 웹 소켓이란 서로 양뱡향으로 유지한 채로 실시..
코드기록사
'분류 전체보기' 카테고리의 글 목록