본문 바로가기

전체 글

(471)
[Java] 리스트 인터페이스 구현 자료구조는 프로그래밍에서 데이터를 효율적으로 저장하고 관리하기 위한 중요한 개념입니다. 그중에서도 리스트(List)는 가장 기본적이면서도 다양한 활용성을 가진 자료구조입니다. 이번 글에서는 리스트 인터페이스를 설계하겠습니다.  1. 리스트란?리스트(List)는 자료를 순서대로 저장하는 선형 자료구조입니다.선형 구조란 데이터가 논리적 혹은 물리적으로 순서대로 연결되어 있다는 것을 의미합니다.리스트는 데이터를 추가하거나 삭제, 조회하기 쉽도록 설계된 자료구조로, 순차적 데이터 처리에 적합합니다.리스트의 특징데이터의 앞/뒤 순서를 유지합니다.물리적이거나 논리적으로 선형 구조를 갖습니다.다양한 언어에서 기본적으로 제공되며, 배열(Array)과 비슷하지만 기능이 더 확장되었습니다. 2. 리스트를 구현하는 자료구조..
[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 용량이 클수록 여러 프로그램을 동시에 실행하거나 대규모 데이터를 처리하는 데 유리합니다...