본문 바로가기

전체 글

(430)
[Spring Boot] Lombok과 직렬화/역직렬화 Lombok과 직렬화/역직렬화: 문제와 해결 방법Lombok의 @Getter, @Setter, @AllArgsConstructor, @NoArgsConstructor는 코드 작성의 편리함을 제공합니다. 그러나 Java의 직렬화/역직렬화(Jackson, Gson, 기본 직렬화 등)와 함께 사용할 때 문제가 발생하기도 합니다. 이번 글에서는 이러한 문제를 다루고, 해결 방법과 설계 가이드를 제시합니다.  직렬화와 역직렬화란?1. 직렬화(Serialization)정의: 객체를 바이트 스트림으로 변환하여 파일 저장, 네트워크 전송 등에 사용할 수 있도록 만드는 과정입니다.사용 사례:객체 데이터를 파일에 저장할 때.HTTP API 응답으로 JSON 형식의 데이터를 반환할 때.2. 역직렬화(Deserializati..
[백준] 요세푸스 문제(1158번): 커스텀 원형 연결 리스트로 해결하기 코드 힌트문제 흐름n명의 사람들이 원형으로 앉아 있습니다.매 k번째 사람을 제거하는 작업을 반복해 최종 순서를 출력합니다.기본적으로 요세푸스 문제는 큐를 활용한 풀이가 일반적이지만, 이 코드는 원형 연결 리스트를 직접 구현해 해결합니다.핵심 아이디어원형 연결 리스트 구현: 각 노드가 자기 자신을 포함한 원형 구조를 형성합니다. 마지막 노드는 처음 노드를 참조하며 리스트의 끝이 없습니다.현재 노드 추적: pointNode를 활용해 현재 노드를 추적하며, 매 k번째 노드를 제거합니다.출력 최적화: StringBuilder를 사용해 제거된 노드의 순서를 효율적으로 출력합니다.알고리즘 흐름리스트 초기화CircularLinkedList 클래스에서 노드를 추가해 원형 연결 리스트를 구성합니다.첫 번째 노드는 sta..
[Spring Boot] 간단한 실시간 웹소켓 채팅 구현하기 소켓이란?소켓(Socket)은 네트워크 상에서 서로 다른 프로그램이 데이터를 송수신하기 위한 종단점입니다.소켓은 IP 주소와 포트 번호를 기반으로 통신하며, 클라이언트와 서버 간의 연결을 유지하거나 메시지를 교환하는 데 사용됩니다.소켓의 주요 개념IP 주소: 네트워크 상에서 컴퓨터를 식별하는 고유 주소.포트 번호: 특정 애플리케이션(프로세스)을 식별하는 번호.소켓 연결: 클라이언트와 서버가 데이터를 주고받기 위해 소켓을 통해 이루어지는 연결.  웹소켓(WebSocket)이란?기존 HTTP 프로토콜은 요청-응답 기반으로 작동하여 실시간 양방향 통신이 어렵습니다.웹소켓(WebSocket)은 이러한 한계를 극복하기 위해 만들어진 프로토콜로,서버와 클라이언트 간에 지속적인 연결을 유지하며,실시간으로 양방향 데이..
[Spring Boot] AccessToken 및 RefreshToken 인증 구현하기 쿠키, 세션, 토큰이란?1. 쿠키 (Cookie)쿠키는 웹 브라우저에 저장되는 작은 데이터 조각으로, 사용자의 정보나 상태를 추적하는 데 사용됩니다.예를 들어, 사용자가 로그인할 때 서버는 로그인 정보를 쿠키로 브라우저에 저장하고, 그 후 사용자 요청이 있을 때마다 이 쿠키를 사용하여 사용자를 인증할 수 있습니다.특징:클라이언트 측에 저장됩니다.만료 시간이나 특정 정보(예: 사용자 ID, 로그인 상태)를 설정할 수 있습니다.보통 HTTP 요청 시 자동으로 서버에 전송됩니다.보안: HTTPOnly와 Secure 속성을 사용하여 보안성을 강화할 수 있습니다.2. 세션 (Session)세션은 서버 측에서 사용자의 상태 정보를 저장하는 방식입니다. 사용자가 로그인하면, 서버는 세션을 생성하여 고유한 세션 ID를..
[네트워크] 웹 서버, 웹 어플리케이션 서버(WAS) 서버(server)와 클라이언트(client)의 개념서버 (Server)응답하는 대상: 서버는 요청을 받은 후, 클라이언트에게 필요한 정보를 제공하는 역할을 합니다. 서버는 클라이언트의 요청에 대해 적절한 처리를 하고 결과를 반환합니다.예: 웹 서버는 웹 페이지를 클라이언트에게 반환하며, 데이터베이스 서버는 데이터를 조회하여 반환합니다.클라이언트 (Client)요청하는 대상: 클라이언트는 서버에 특정 작업을 요청하는 주체입니다. 클라이언트는 서버로부터 데이터를 요청하거나 서비스를 요청하고, 그에 대한 응답을 받습니다.예: 웹 브라우저가 웹 서버에 페이지 요청을 보내고, 사용자는 그 결과를 웹 페이지 형식으로 받습니다.  서버의 종류웹 서버 (Web Server)웹 서버는 클라이언트(주로 웹 브라우저)로부..
[네트워크] ICMP ICMP (Internet Control Message Protocol): 네트워크 통신의 보조자ICMP는 네트워크 계층에서 동작하며, IP 프로토콜의 한계를 보완하기 위해 설계된 프로토콜입니다. 주로 오류 보고와 진단을 위한 피드백 메시지를 제공하며, 네트워크의 상태를 모니터링하거나 문제를 해결하는 데 중요한 역할을 합니다.  IP 프로토콜의 한계비신뢰성IP는 데이터가 목적지에 정확히 도착했는지 확인하지 않습니다.패킷이 손실되거나 지연되더라도 이를 감지하거나 복구할 수 없습니다.원인: 오류 검출 및 복구 메커니즘 부재.비연결형데이터 전송 전에 송신자와 수신자 간의 연결을 설정하지 않습니다.각 패킷은 독립적으로 처리되며, 순서 보장이나 재전송 메커니즘이 없습니다.피드백 부재IP 자체는 데이터 전송 상태에..
[컴퓨터 구조] RAM, ROM 메인 메모리의 핵심: RAM과 ROM의 역할컴퓨터 시스템에서 메인 메모리는 데이터와 명령어를 임시 저장하고 처리 속도를 높이는 데 핵심적인 역할을 합니다. 메인 메모리는 크게 RAM(Random Access Memory)과 ROM(Read-Only Memory)으로 구성됩니다. RAM (Random Access Memory)RAM은 휘발성 저장장치로, 전원이 꺼지면 저장된 데이터가 사라집니다. 주로 프로그램 실행과 데이터 처리를 위해 사용되며, 빠른 접근 속도를 제공합니다.RAM의 특징휘발성: 전원이 꺼지면 모든 데이터가 삭제됩니다.빠른 속도: CPU와 직접 데이터를 주고받으므로 속도가 빠릅니다.다다익RAM: RAM 용량이 클수록 여러 프로그램을 동시에 실행하거나 대규모 데이터를 처리하는 데 유리합니다...
[네트워크] ARP( Address Resolution Protocol ) MAC 주소와 IP 주소의 관계 및 ARP의 역할통신 과정에서 MAC 주소와 IP 주소는 서로 협력하여 데이터를 목적지에 전달합니다.일반적으로 네트워크 통신에서는 IP 주소를 기반으로 데이터 경로를 설정합니다.하지만 최종적으로 데이터를 전달하려면 MAC 주소가 필요합니다.  왜 MAC 주소 이전에 IP 주소를 사용하는가?MAC 주소의 한계모든 MAC 주소를 알기에는 불가능에 가깝습니다.네트워크 간 경로 설정에는 MAC 주소만으로는 부족합니다.IP 주소의 역할데이터를 네트워크 간 전달할 수 있도록 라우팅 경로를 설정합니다.최종 목적지에 도달한 후 MAC 주소로 해당 네트워크 내의 특정 장치를 찾습니다.  문제: IP 주소는 알고 있지만 MAC 주소를 모를 때대부분의 통신에서 IP 주소는 알고 있지만, 목적..