오늘은 회사에서 레디스 세션 체크를 통한 로그아웃 로직을 구현하며 알게 된 것을 정리해보려 합니다!Redis주소는 맞게 들어가는데, 왜 값을 못가져올까??처음 보는 상황에 많이 당황했었는데요..Spring Transactional을 사용하면 Redis와 다르게 처리가 되는 방식이라, 제대로 작동이 되지 않았던 것이었습니다!오랜만에 새롭게 알게 된 내용이라 한번 정리를 해보려 합니다. Spring framework를 사용해 애플리케이션을 개발 시, 데이터베이스 트랜잭션 관리를 위해 흔히 @Transactional을 사용하고 있습니다. 그러나 Redis와 NoSQL 데이터베이스를 사용할 때는 @Transactional을 동일하게 사용할 수 없습니다. 이번 글에서는 그 이유와 Redis에서 트랜잭션을 사용하..
TCP와 UDP는 인터넷 프로토콜 스위트의 두 가지 주요 전송 계층 프로토콜입니다. TCP(Transmission Control Protocol)TCP는 신뢰성이 높은 전송 프로토콜로, 데이터의 정확한 전달을 보장합니다.TCP의 특징 1. 연결 지향(Connection-oriented)통신을 시작하기 전에 송신자와 수신자 간에 연결을 설정합니다. 이 과정을 TCP 핸드셰이크 라고 합니다. 3-way handshake: SYN, SYN-ACK, ACK 패킷을 교환하여 연결을 설정하는 것 1. 한 컴퓨터(발신자)가 수신 컴퓨터에게 초기 메시지를 보내 연결 설정을 공식적으로 요청합니다. 이를 SYN 메세지(동기화)라고 합니다. 2. 그 후 수신 컴퓨터는 SYN에 대한 승인(SYN-ACK 메시지)를 보냅니..
TCP/IP 모델TCP/IP모델은 네트워크 통신을 위한 프로토콜 스위트로, 인터넷을 포함한 다양한 네트워크 환경에서 데이터의 효율적이고 신뢰성 있는 전송을 가능하게 합니다. 이 모델은 네 가지 주요 계층으로 구성되며, 각 계층은 특정 기능을 수행합니다. TCP/IP 모델의 계층 구조는 네트워크의 설계와 운영을 위한 종합적인 지침을 제공하며, 서로 다른 네트워크 장치와 애플리케이션 간의 상호 운영성을 보장합니다.TCP/IP 모델의 네 가지 계층 1. 네트워크 인터페이스 계층(Netword Interface Layer)물리적 네트워크 연결을 설정하고 데이터를 전송하는 역할을 담당합니다. 이 계층은 네트워크 하드웨어와 관련된 모든 작업을 처리합니다. 데이터 전송 물리적 매체(ex. 이더넷 케이블, Wi-Fi)..
방화벽(Firewall)이란?방화벽은 네트워크 보안 시스템으로, 신뢰할 수 있는 내부 네트워크와 신뢰할 수 없는 외부 네트워크 간의 트래픽을 모니터링하고 제어하는 역할을 합니다. 방화벽은 트래픽을 필터링하여 불법적인 접근을 방지하고, 데이터의 무단 유출을 막아줍니다. 방화벽은 크게 인바운드(Inbound)와 아웃바운드(Outbound) 트래픽을 관리합니다. 인바운드(Incound) 트래픽인바운드 트래픽은 외부 네트워크에서 내부 네트워크로 들어오는 트래픽을 의미합니다. 인바운드 트래픽은 외부에서 내부 자원에 접근하려는 시도를 포함하므로, 보안상의 이유로 엄격하게 관리되고 필터링됩니다. 인바운드 트래픽의 주로 관리 요소허용된 IP 주소특정 IP 주소나 IP 범위만이 내부 네트워크로 접근할 수 있도록 제한할 ..
Effective Java 3/E 판을 읽고 정리한 기록입니다. try-finally 구문BufferedReader br = new BufferedReader(new FileReader("file.txt"));try { // 파일을 읽고 처리하는 코드} finally { try { if (br != null) { br.close(); } } catch (IOException e) { e.printStackTrace(); }} 기존에는 자원을 해제하기 위해 try-finally 구문을 많이 사용했습니다. 위 코드는 파일을 읽기 위해 BufferedReader 를 열고, try 블록 안에서 파일을 처리한 후, finally 블록..
Effective Java 3/E 판을 읽고 정리한 기록입니다. finalizer와 cleaner는 객체가 더 이상 필요하지 않을 때 정리 작업을 수행할 수 있는 방법을 제공합니다. 하지만 이들은 성능, 안정성, 예측 가능성 등의 측면에서 여러 문제를 일으킬 수 있어 주의해야합니다. Finalizer란 무엇인가? finalizer는 Java에서 객체가 가비지 컬렉션에 의해 회수될 때 호출되는 메서드입니다. Object 클래스의 finalize 메서드를 오버라이드해 정의할 수 있습니다. class Resource { @Override protected void finalize() throws Throwable { try { // 리소스 해제 코드 ..
Effective Java 3/E 판을 읽고 정리한 기록입니다. Java에서 메모리 누수는 가비지 컬렉션(Garbage Collection) 메커니즘이 있음에도 불구하고 여전히 발생할 수 있는 문제입니다.메모리 누수는 더 이상 필요하지 않은 객체가 계속해서 메모리에 남아 있는 경우를 말합니다. 이는 애플리케이션의 성능 저하를 유발하고, 심각한 경우 OutOfMemoryError를 발생시킬 수 있습니다. 메모리 누수의 원인컬렉션에 저장된 객체를 참조 해제하지 않은 경우 import java.util.ArrayList;import java.util.List;public class MemoryLeakExample { public static void main(String[] args) { L..
Effective Java 3/E 판을 읽고 정리한 기록입니다. 불필요한 객체 생성불필요한 객체 생성이란, 이미 존재하는 객체를 재사용할 수 있는 상황에서 새로운 객체를 생성하거나, 불필요하게 많은 객체를 생성하는 것을 의미합니다. 예시반복적으로 동일한 객체 생성매번 동일한 값의 객체를 새로 생성하는 대신,동일한 객체를 재사용할 수 있는 상황에서 객체를 계속 생성하는 것 // 불필요한 객체 생성String str1 = new String("Hello");String str2 = new String("Hello");// 객체 재사용String str3 = "Hello";String str4 = "Hello"; 불필요한 오토박싱과 언박싱 기본형 데이터 타입을 사용하는 것이 더 효율적인 상황에서, 래퍼 클래스..