본문 바로가기

Programming

(124)
퀵 정렬(Quick Sort)이란? 퀵 정렬(Quick Sort)이란?퀵 정렬은 분할 정복(Divide and Conquer) 방식을 사용하는 효율적인 정렬 알고리즘입니다. "퀵(Quick)"이라는 이름처럼, 평균적으로 가장 빠른 정렬 속도를 자랑합니다.퀵 정렬의 핵심 아이디어는 간단합니다.분할(Divide): 배열 안의 한 원소(이를 피벗, Pivot이라 부릅니다)를 기준으로, 피벗보다 작은 값들은 모두 왼쪽으로, 큰 값들은 모두 오른쪽으로 옮깁니다. 이렇게 하면 피벗은 정렬된 상태에서 자신의 최종 위치를 찾게 됩니다.정복(Conquer): 이제 피벗의 왼쪽과 오른쪽에 있는 두 개의 작은 배열을 각각 다시 퀵 정렬로 정렬합니다.결합(Combine): 퀵 정렬은 피벗이 제자리를 찾아가는 과정 자체가 정렬이므로, 별도의 결합 과정이 필요 없..
무한 스크롤 구현 무한 스크롤이란사용자가 화면을 아래로 스크롤할 때마다 현재 보여주고 있는 데이터의 끝에서 자동으로 다음 데이터를 계속해서 로드하는 방식입니다. 사용자 입장에서는 마치 콘텐츠가 끝없이 이어지는 것처럼 자연스럽게 스크롤이 계속됩니다.구현한 이유개발 중인 프로젝트에서 알림을 발생시킬 때 기존에는 제한 없이 모든 알림을 한 번에 불러와 클라이언트에 표시하고 있었습니다. 데이터 양이 적을 때는 큰 문제가 없었지만 알림이 100개, 1000개 이상 누적되면서 클라이언트에 과부하가 걸리고 성능 저하가 발생하는 이슈가 생겼습니다. 이를 해결하기 위해 무한 스크롤 방식을 도입하게 되었습니다.구현 코드let lastScroll = 0; // 마지막 스크롤 위치let limit_PageNo = 0let pageSize = ..
SSE 구현 및 정리 SSE(Server Send Event)서버에서 이벤트 발생 시 클라이언트로 실시간으로 데이터를 보내주는 방식입니다.HTTP 프로토콜을 사용하며 클라이언트가 서버에 연결을 열어두면 서버가 이벤트를 계속 보낼 수 있습니다. 특징으로는단방향 통신입니다.HTTP 기반으로 특별한 프로토콜 없이 동작합니다.네트워크 문제로 연결이 끊기면 브라우저가 자동으로 다시 연결합니다.서버에서 text/event-stream 타입으로 데이터를 전송합니다.기존 프로젝트에서 Polling 방식을 사용해 서버로부터 실시간 데이터를 받아오고 있었습니다.Polling은 간단하게 말해 일정 주기마다 서버에 HTTP 요청을 보내서 데이터를 받아오는 방식인데 간단하고 구현하기도 쉬웠지만 서버에 무분별하게 요청이 쌓이고 데이터에 변동이 없더라..
@RequiredArgsConstructor 어노테이션 @RequiredArgsConstructor 어노테이션은 롬복(Lombok) 에서 제공하는 어노테이션이다.- 필수 의존성 (final 또는 @NotNull 필드)에 대해 자동으로 생성자를 만들어주는 기능을 한다. 여러 의존성 주입이 있는데 @RequiredArgsConstructor어노테이션을 사용하는 이유로는불변성 유지 : final 필드를 초기화하지 않으면 컴파일 에러 -> 안전한 설계 가능하다.스프링 생성자 주입에 적합 : final 필드만 주입되도록 자동 생성자 생성한다.코드 간결화 : 반복적인 생성자 코드를 줄일 수 있다.테스트 용이성 향상 : 의존성을 명시적으로 주입받기 때문에 mocking 등 용이하다.등이 있다. 비교하자면 생성자 주입의 예시는public class MyService { ..
INET_ATON <-> INET_NTOA INET 함수는 ip를 정수로, 정수를 ip로 변환하는 함수이다.쿼리에서 실행하는 함수와 자바 코드에서 변환하는 방법을 정리하고자 한다. INET_ATONIP 주소를 숫자로 변환한다.IPv4 네트워크 주소가 점으로 구분된 쿼드 문자열로 표현할 때, 네트워크 바이트 순서로 주소의 숫자 값을 나타내는 정수를 반환한다. 인수를 이해하지 못하거나 expr이 NULL인 경우 NULL을 반환한다. 쿼리로는SELECT INET_ATON('10.0.5.9');-> 167773449반환 값은 (10 x 256)^3 + (0 x 256)^2 + 5 x 256 + 9 로 계산된다. 자바 코드로는public static Long inetATON(String ip){ try{ String[] segmen..
[window] openssl 키 생성 openssl 키 생성하는 방법입니다. HTTPSHTTP에서 보안이 강화된 프로토콜로, SSL을 이용하여 암호화를 합니다.기존의 HTTP의 경우 암호화되지 않은 방법으로 데이터를 전송하므로, 메시지를 주고 받는 과정에서 감청당할 수 있습니다. 만약 중요한 정보를 전송한다면, 메시지를 주고받는 과정이 암호화 되지않은 상태로 노출될 수 있습니다.SSLSSL은 서버와 클라이언트간의 통신을 제 3자가 보증하는 전자문서로, 주로 하는 역할은 암호화입니다. SSL은 암호화된 데이터를 전송하기 위해서 공개키와 대칭키를 혼합해서 사용합니다1. openssl 설치openlssl download url : https://sourceforge.net/projects/openssl/링크 타고 들어가서 파일 다운로드 후 압축해..
IllegalArgumentException : Mapped Statements collection does not contain value for ~~~ 원인이 dao에서 반환 타입이 List 인데 mybatis select에서 resultType이 맞지않아서 생기는 오류 해결방법은 dao에서 맞는 타입을맞게 resultType을 설정했습니다^^
[Spring] mybatis selectKey 스프링의 마이바티스에서 디비에 insert 하는 과정 중에 한 메서드에서 두개의 insert를 실행할 때 1번째 실행했던 insert의 id 값을 두 번째 insert구문에 id로 넣어야 하는 상황이 있을 것이다 저도 처음에는 이런 기능을 몰라 SELECT MAX(id) FROM [테이블] 첫 번째 테이블의 가장 높은 값 즉 가장 최근의 값을 가지고 오는 서브쿼리를 두번째 insert구문의 집어넣었다 이것도 나쁜 방법은 아닌데 좋지는 않다 하지만 mybatis에서 selectKey 기능을 제공해준다. SELECT LAST_INSERT_ID() resultType 은 쿼리의 결과를 어떤 데이터 타입으로 반환할지 정의합니다. keyProperty는 객체의 어떤 속성 매핑할 것인지 지정합니다. keyColum..