분류 전체보기 121

자바 - IO 기본 (buffer)

데이터 통신을 다루다 보면 버퍼라는 개념이 나온다. 버퍼는 왜 쓰이는 것일까?버퍼에 목적에 대해 알아보자!핵심 요약버퍼는 데이터를 일시적으로 저장하는 메모리 영역데이터 처리 속도가 서로 다른 장치나 프로세스 간의 속도 차이를 조율하거나, 입출력 성능을 향상시키기 위해 사용되는 중간 저장소버퍼(Buffer)의 목적 (임시 저장소로서의 큐 구조)입출력 데이터를 일정량 모아 두었다가 처리함으로써 시스템 전체의 효율과 안정성을 높이는 장치입니다.I/O 호출 횟수 감소로 인한 속도 향상데이터를 버퍼에 모아 한 번에 디스크나 네트워크로 전달I/O 오버헤드 감소 → 병목 완화속도 차이 조정 (Speed Mismatch Absorption)빠른 주체(CPU 등)와 느린 주체(디스크/네트워크 등) 간 속도 불일치 해소빠..

JAVA 2025.01.28

자바 - IO 기본 (InputStream, OutputStream)

자바에서 데이터를 파일이나 네트워크 등을 통해 주고 받을 때 어떤식으로 통신하는지 알아보자  데이터의 통신 과정은 스트림으로 통신한다  자바가 가진 데이터를 hello.dat 라는  파일에 저장하려면 어떻게 해야할까?자바 프로세스가 가지고 있는 데이터를 밖으로 보내려면 출력 스트림을 사용하면 되고, 반대로 외부 데이터를 자바 프로세스 안으로 가져오려면 입력 스트림을 사용하면 된다. 참고로 스프트림을 단방향으로 흐른다. 스트림 시작 스트림 시작 - 예제1package io.start;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class StreamStartMain1_1 { ..

JAVA 2025.01.28

TCP/IP 네트워크 이해하기 (4) - TCP

4계층 프로토콜 전송 계층 (Transport layer) 은 송신자의 프로세스와 수신자의 프로세스를 연결하는 통신 서비스를 제공한다.전송 계층은 연결 지향 데이터 스트림 지원, 신뢰성, 흐름제어 , 그리고 다중화와 같은 편리한 서비스를 제공한다, 전송 프로토콜 중 가장 잘 알려진 것은 연결 지향 전송 방식을 사용하는 전송 제어 프로토콜(TCP) 이다.보다 단순한 전송에 사용되는 사용자 데이터그램 프로토콜(UDP) 도 있다. 포트 번호특정 프로세스와 특정 프로세스가 통신을 하기 위해 사용한다. 하나의 포트는 하나의 프로세스만 사용가능하다.하나의 프로세스가 여러개의 포트를 사용하는 것은 가능하다.포트 번호는 일반적으로 정해져 있지만 무조건 지켜야하는 것은 아니다. TCP 프로토콜 TCP 가 하는 일  전송..

Network 2025.01.27

TCP/IP 네트워크 이해하기 (4) - IPv4, ICMP

IPv4 프로토콜과 패킷의 전송 과정 이해하기 IPv4 프로토콜이란? IPv4는 네트워크 계층에서 사용되는 프로토콜로, 다른 네트워크의 특정 대상에게 데이터를 전송하는 역할을 한다.전송의 신뢰성은 보장하지 않으며, 신뢰성 보장은 전송 계층(TCP 등)에서 담당한다. IP 헤더는 IP 패킷의 앞부분에 위치하며 IP 주소를 비롯한 각종 제어 정보를 담고 있다. IPv4 헤더는 고정 부분 20 바이트와 가변 부분 0~40바이트로 구성되어 있다. 옵션을 지정하지 않았을 때는 최소 크기는 20바이트이다. 버전 : 버전(Version)은 IP의 버전을 나타내는 영역이다. IPv4이므로 4이다.헤더 길이 : 헤더 길이(Header Length)는 4바이트를 기본 단위로 헤더의 길이를 규정하는 영역이다. IPv4에서는..

Network 2025.01.27

TCP/IP 네트워크 이해하기 (2) - 2계층에서 하는 일

2계층(데이터링크 계층)의 역할 물리 계층을 이용해 네트워크 장비 간에 데이터를 전송한다.데이터 링크 계층에서는 일반적으로 이더넷(Ethernet) 프로토콜이 사용된다.  2계층은 하나의 네트워크 대역 즉 같은 네트워크 상에 존재하는 여러 장비들 중에서 어떤 장비가 어떤 장비에게 보내는 데이터를 전달한다.  추가적으로 오류제어 , 흐름제어(누가 누구한테 데이터를 보내는지) 수행한다. 2계층은 하나의 네트워크 LAN 에서만 통신할 떄 사용한다.  다른 네트워크와 통신할 때는 항상 3계층이 도와주어야 한다.3계층의 주소와 3계층의 프로토콜을 이용하여야만 다른 네트워크와 통신이 가능하다. 원하는 목적지에만 데이터를 전달한다.물리계층에서 사용된 허브는 특정한 컴퓨터 한대에만 데이터를 보내려해도 나머지 모든 컴퓨..

Network 2025.01.24

TCP/IP 네트워크 이해하기 (1)

네트워크 통신에서 프로토콜의 중요성 우리가 사용하고 만드는 대부분의 인터넷 서비스는 TCP/IP를 이용해 통신한다.휴대폰 어플에서 인터넷이 안된다고 가정해보자. 아마 이용할 수 있는 어플이 상당히 제한적일 것이다. 어떻게 네트워크를 통해 데이터가 오가는지를 이해하면, 튜닝을 통한 성능 개선이나, 트러블 슈팅등에많은 도움이 된다고 한다. 이번 글에서는 네트워크에서 데이터가 어떻게 오가는지에 대해 살펴보자. 프로토콜 복수의 컴퓨터 사이나 중앙 컴퓨터와 단말기 사이에서 데이터 통신을 원활하게 하기 위한 필요한 통신 규약.신호 송신이 순서, 데이터의 표현법, 오류 검출법 등을 정함. 편지를 보내는 비유 편지를 보낼때 우편번호, 보내는 주소, 우표 등을 꼭 적어야 한다. 우표를 붙이지 않거나 잘못된 주소..

Network 2025.01.24

이펙티브 자바 - 직렬화

"이펙티브 자바"의 마지막 챕터는 직렬화이다.  요즘은 대부분 JSON이나 Protobuf 같은 언어에 독립적인 데이터 교환 형식을 사용하는데, 왜 책에서는 여전히 직렬화를 중요한 주제로 다룰까? 자바에서 기본적으로 제공하는 직렬화(Serialization)와 역직렬화(Deserialization)는 JVM 위에서 동작하며, 데이터를 파일이나 네트워크로 전달할 수 있는 형식으로 변환하는 강력한 기능입니다. 하지만 이 메커니즘은 클래스 설계이 유연성 저하, 보안 취약점, 이식성 부족등의 큰 한계가 존재한다. 그렇다면 책에서는 왜 직렬화 파트를 크게 다룰까?여기서는 크게 직렬화를 하게 되면 유의할 점 등 직렬화시 매커니즘과 유의 사항을 알아보자는 취지로 책을 읽어보자! 직렬화의 목적현재 JVM 메모리 상태를..

지연 연산 vs 즉시 연산: Kotlin과 Java Stream을 통한 최적화 전략 이해하기

지연 연산 (Lazy Evaluation) vs 즉시 연산 (Eager Evaluation) 스트림을 배우다 보면 지연연산이라는 특징을 접하게 된다. 지연연산을 종단연산을 실행하기 전까지 연산을 미루기 때문에 해당 연산을 즉시 실행되지 않는다. 그렇다면 지연 연산이란 무엇일까? Lazy  vs Eager 지연 연산이란 간단히 말해 결괏값이 필요할 때까지 계산을 늦추는 기법이다. 즉, 눈앞에 코드가 주어졌을 때 곧바로 해당 코드를 실행하는 것이 아니라 실행결과가  필요해지는 시점에 실행을 하도록 하는 것이다. 다만, 이러한 방식으로 코드가 동작하기 위해 내부적으로 준비해 주는 작업이 필요하므로  무조건 효율적인 방식이라고 보기 어렵다. 이에 반해 어떠한 작업이 즉시 수행되다면 말 그대로 실행할 코드가 보이..

JAVA 2025.01.17

이펙티브 자바 - 제네릭

아이템26 . 로 타입을 사용하지 말라!로 타입이란?  제네릭 타입에서 타입 매개변수가 정의되지 않을 때를 말한다. 예를 들어 List 의 로 타입은 List 이다.로(raw) 타입을 사용하지 말아야하는 이유는 무엇일까? 즉 매개변수화 타입을 사용하라는 말이다.매개변수화 타입을 사용하면 런타임이 아닌 컴파일 타입에 문제를 찾을 수 있고(안정성 -> 로타임 컬렉션에는 아무원소나 넣은 수 있어 타입 불변식 훼손이 쉽다.)제네릭을 활용하면 이 정보가 주석이 아닌 타입 선언 자체에 녹아든다. (표현력 : ex ) List -> Integer 라는 타입을 넣는다는 사실을 알수 있음)로 타입을 사용하면 안정성과 표현력을 잃게된다.아이템27. 비검사 경고를 제거하라 "비검사(unchecked) 경고 란? "컴파일러가..

HTTP 특징 (Stateless, connectionless)

HTTP 특징http 는 클라이언트 서버 구조로 되어있다. (Request Response 구조)클라이언트가 http 메시지로 서버에 요청을 보내고 서버의 응답이 올때까지 기다린다.서버는 요청에 대한 결과를 만들어서 클라이언트에게 응답한다. 클라이언트 서버 구조는 클라이언트는 UI , 사용성에 집중할 수 있고 서버는 비즈니스 로직에 집중할 수 있는 이점이 있다.양쪽이 독립적으로 진화할수 있다는것이 가장 큰 이점이다.  Stateless vs Stateful 정리 stateless 특성은 응답에 필요한 정보를 모두 실어보내기때문에 중간에 서버가 바뀌어도 올바른 응답을 할 수 있다. 따라서 스케일 아웃이 가능하다. 애플리케이션 설계시 최대한 무상태성으로 설계를 하고 필요한 경우에만 stateful 방식을 취..

Network 2025.01.13