[개발 일기] 2025.03.16 - Session.invalidate()
·
개발 일기
💡 개요Session.invalidate() 을 하면 세션 저장소에 있는 모든 세션 정보가 삭제될까?  아니면 해당 요청을 한 사용자(스레드) 정보만 삭제될까?  오늘은 이 내용에 대해 정리해보자.   📕 Session.invalidate()invalidate의 사전적 의미는 무효화이다.  invalidate() 메서드도 마찬가지이다.  사용자의 세션 정보를 사용하지 못하게 무효화하는 것이다.  그렇다면 여기서 궁금한 게, invalidate()는 모든 세션 정보를 무효화할 까, 아니면 해당 사용자의 정보만 무효화할까?  정답은 당연하게도 invalidate() 를 호출한 사용자의 정보만 무효화한다.  사실 많은 블로그에서 ‘세션을 완전하게 삭제할 때 invalidate() 사용!’ 이런 식으로 글을..
[개발 일기] 2025.03.15 - LATERAL JOIN
·
개발 일기
💡 개요오늘은 MySQL과 같은 SQL 기반 데이터베이스에서 사용되는 쿼리인 LATERAL JOIN에 대해 정리해보자.   📕 LATERAL JOIN LATERAL JOIN이란 서브 쿼리 내부에서 외부의 컬럼을 참조하고자 할 때 사용하는 방법이다.  역시나 말로는 설명이 어렵다.  다음은 각 사용자가 작성한 게시글 중, 가장 최근에 작성된 게시글을 조회하는 쿼리 예시이다.   회원 테이블 id회원 이름1홍길동2이형석   게시판 테이블 idmember_idboard_titleboard_content11길동이의 일기…21길동이 플레이리스트…32형석이의 성장일기…   LATERAL JOIN 을 사용하지 않은 쿼리 SELECT m.id AS member_id, m.name AS member_na..
[개발 일기] 2025.03.14 - 인메모리는 휘발성이라매
·
개발 일기
💡 개요보통 인메모리는 휘발성이라는 문제를 가지고 있다고 배운다.  물론 나 또한 그렇다.  그런데 Redis에 TTL을 따로 설정하지 않은 데이터를 저장하고 맥북을 껐다가 켜도 데이터는 잘 저장되어 있다.  왜 이럴까?   📕 Redis의 휘발성Redis는 대표적인 인메모리 DB이기도 하지만 데이터를 디스크에 저장하는 기능 또한 제공한다.  ..?  뭔가 이상하다.. 메모리를 사용하지만 디스크도 사용한다..?  맞다. Redis는 하이브리드 형태의 데이터베이스이기 때문에 메모리와 디스크 모두 사용한다.  일반적으로 Redis에 데이터를 저장하거나 조회할 땐 메모리에 접근한다.  하지만 Redis는 휘발성이라는 문제를 극복하기 위해 디스크를 함께 사용하는 지속성(Persistence) 기능을 포함하고..
[개발 일기] 2025.03.13 - @BeforeAll
·
개발 일기
💡 개요오늘은 Spring에서 테스트 코드에서 데이터 셋업에 사용되는 @BeforeAll을 정리해 보자.   📕 @BeforeAll@BeforeAll은 테스트 실행 전에 한 번만 실행되는 메서드에 붙이는 어노테이션이다.  주로 테스트에서 반복적으로 사용되는 데이터를 셋업 할 때 사용된다.  @BeforeAll을 사용하려면 해당 메서드를 static으로 선언하거나, 클래스에 @TestInstance(TestInstance.Lifecycle.PER_CLASS) 어노테이션을 추가해야 한다.   🛠️ static 메서드 사용 @BeforeAllstatic void setup() { // 테스트 실행 전 한 번만 실행됨}  static으로 선언하면 테스트 인스턴스가 생성되기 전에 클래스 레벨에서 실행된..
[개발 일기] 2025.03.12 - filter에서 발생하는 예외
·
개발 일기
💡 개요오늘은 Filter에서 발생하는 예외는 어떻게 처리해야 하는지에 대해 정리해 보자.   📕 Filter 예외Filter는 서버에게 요청을 전달하기 전, 인증・인가나 보안과 관련된 작업을 거치는 공간이다.  여기서 서버란 Dispatcher Servlet을 말한다.  그런데 보통 Spring 환경에선 내부에서 발생한 예외를 처리하기 위해 GlobalExceptionHandler를 사용한다.  그리고 GlobalExceptionHandler는 Dispatcher Servlet 내부에 위치한다.   만약 Filter에서 예외가 발생하면 어떻게 될까?  우리는 공통 예외 처리를 위해 정성 들여 GlobalExceptionHandler를 완성했지만, 요청이 Filter 단계에서 예외가 발생하면 Disp..
[개발 일기] 2025.03.11 - compareTo()
·
개발 일기
💡 개요오늘은 자바에서 문자열 비교에 사용되는 compareTo() 에 대해 정리해 보자.   📕 compareTo()compareTo() 란 문자열을 사전순으로 비교할 때 사용되는 메서드이다.  여기서 말하는 사전 순이란? 각 문자열에 있는 문자를 차례대로 아스키코드를 기준으로 비교하는 것이다.  다음은 String s1과 s2 를 비교하는 코드이다. int result = s1.compareTo(s2);  코드 실행 결과는 다음과 같다. 만약 s1과 s2이 같으면 0s1이 s2보다 사전순으로 뒤에 있으면 양수s1이 s2보다 사전순으로 앞에 있으면 음수 그리고 출력되는 수의 절댓값은 두 문자열에서 첫 번째로 다른 문자의 값 차이다.  apple vs banana System.out.println("..