2025/01 14

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

DB와 WAS 간 TCP 통신: 효율적인 커넥션 관리와 흐름, 혼잡 제어

DB와 WAS 서버 간의 통신을 위한 TCP 통신 과정DB 드라이버를 통해 TCP/IP  커넥션을 연결 후 ID ,PW 등을 DB 서버로 보내 내부 인증을 완료하면 생성된 커넥션 객체를 응답받을 수 있다.  초기 TCP/IP 연결 과정(DB 커넥션 풀이 필요한 이유) 초기에 TCP/IP 로 연결하는 과정에서 3 way handshake 로 초기 연결을 하는 과정에서 시간이 많이 걸린다.때문에 DB 호출시 커넥션을 맺게되면 쿼리하는 비용보다 커넥션을 맺는 비용이 더 클수 있다.때문에 TCP/IP 로 DB 와 WAS 서버가 연결된 커넥션들을 커넥션 풀에 미리 생성을 해놓고 애플리케이션 로직은 언제든지 커넥션 풀에 이미 생성되어있는 커넥션 객체 참조를 가져다 쓴다. TCP 커넥션을 맺는 비용은 왜 비쌀까?연결..

Network 2025.01.12

Runnable과 Callable

Runnable과 Callable의 차이점은 무엇이고 왜 쓰일까?둘 다 스레드를 만들 때 사용된다. 즉 스레드를 만들어 실행시킨다는 의미는 비동기적으로 실행시킨다는 의미이다. 비동기적으로 실행해야 하는 작업에 대해서 반환값을 받아야 할 때는 Callable 를 쓰고 그 결과를 무시해도 될 때는 Runnable를 사용한다. Thread는 비동기적으로 실행해야 하는 작업이 있을 때 쓰인다.기존 Runnable 은 반환값이 없고 체크 예외를 던질 수 없다는 불편함이 있었다.public interface Runnable { void run();}Runnable  의 run()  은 반환 타입이 void이다. 따라서 값을 반환할 수 없다.예외가 선업되어 있지 않다.  따라서 해당 인터페이스를 구현하는 모든 메서..

JAVA 2025.01.12

트랜잭션 - 이해

데이터를 저장할 때 단순히 파일에 저장해도 되는데, 데이터베이스에 저장하는 이유는 무엇일까?여러 가지 이유가 있지만 , 가장 대표적인 이유는 바로 데이터베이스는 트랜잭션이라는 개념을 지원하기 때문이다. 트랜잭션의 정의트랜잭션이란? 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 연산들을 의미합니다. 이러한 관점에서 데이터베이스 응용프로그램은 트랜잭션의 집합으로 정의할 수 있습니다. 트랜잭션의 필요성트랜잭션은 작업의 완정성을 보장해주는 것입니다.논리적인 작업들을 모두 완벽하게 처리하거나 또는 처리하지 못할 경우 이전 상태로 복구하여 작업의 일부만 적용되는 현상이 발생하지 않게 만들어주는 기능입니다.  트랜잭션 ACID트랜잭션은 ACID 라 ..

DB 2025.01.12

커넥션풀과 데이터소스 이해

커넥션 풀 이해데이터베이스 커넥션을 매번 획득 데이터베이스 커넥션을 획득할 때는 다음과 같은 복잡한 과정을 거친다.1. 애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회한다.2. DB 드라이버는 DB와 TCP/IP 커넥션을 연결한다. 물론 이 과정에서 3 way handshake 같은 TCP /IP 연결을 위한 네트워크 동작이 발생한다.3. DB 드라이버는 TCP / IP 커넥션이 연결되면 ID, PW와 기타 부가 정보를 DB에 전달한다.4. DB 는 ID, PW를 통해 내부 인증을 완료하고 , 내부에 DB 세션을 생성한다.5. DB 는 커넥션 생성이 완료되었다는 응답을 보낸다.6. DB 드라이버는 커넥션 생성이 완료되었다는 응답을 보낸다. 이렇게 커넥션을 새로 만드는 것은 과정도 복잡하고 시..

DB 2025.01.11