전체 글 93

[Network] 공인(Public) IP vs 사설(Private) IP

인터넷 상에서 어떤 네트워크의 IP 주소를 알려고 할 때, 많은 사람들이 IP주소는 하나라고 생각한다. 하지만 그런 생각과는 다르게 IP주소는 공인 IP와 사설 IP로 나뉜다. 그럼 두 IP주소는 다른점이 뭘까? 사용자가 어떤 브라우저에 접근 할 때 경로먼저 네이버의 도메인 주소(www.naver.com) 를 DNS(Domain Name System)가 IP 주소(예: 223.130.195.200)로 변환해준다.이 때, IP 주소가 공인 IP이다.우리가 집에서 쓰는 모든 기기들은 각각 사설 IP를 가지고 있고 모두 공유기(라우터)를 통해 인터넷에 접속한다. 이 때, 공유기로 들어오는 모든 요청은 외부로 나갈 때 공인 IP 주소를 갖고 나가지만 사설 IP를 기억해놨다가 응답이 돌아오면 그 사설 IP에 맞게..

Network 2025.06.14

[Network] ARP vs RARP

컴퓨터끼리 네트워크를 통해 통신할 때, 송신자와 수신자가 어떻게 서로를 알아보고 통신할까? 우리는 웹사이트에 접속할 때 www.google.com 처럼 도메인주소를 이용한다. 컴퓨터는 이걸 IP 주소로 바꾸고, 상대방과 통신을 시작한다. 그런데 여기서 IP주소만 가지고는 데이터가 실제로 도착하지 않는다. IP 주소? MAC 주소?IP 주소(Internet Protocol Address)는 인터넷에 연결된 장치를 식별하기 위한 주소이다. 이 IP주소를 알아도 데이터가 실제로 그 장치에 도달하지 않는데, 정확하게 그 장치에 데이터를 전달하기 위해서는 실제 장치의 물리적인 위치도 알아야 한다.그 주소를 바로 'MAC' 주소라고 한다. 그래서 우리는 IP 주소를 MAC 주소로 변경해주는 또는 MAC 주소를 IP..

Network 2025.06.13

[Network] TCP vs UDP 차이가 무엇일까?

네트워크 전송 계층 중 '전송 계층'에서 사용하는 프로토콜인 TCP와 UDP의 차이에 대해서 알아보자. '전송 계층'은 말그대로 송신자에서 수신자로 가는 데이터의 전송을 맡는 계층이다. 그 데이터를 보내기 위한 규약들이 존재하는데 그것들 중 하나가 TCP, UDP이다. 밑 사진은 OSI 7계층과 TCP/IP 4계층 사진이다.TCP(Transmission Controll Protocol)란?TCP는 인터넷에서 데이터를 메시지 형태로 안정적으로 전송시키는 프로토콜이다. 보통 TCP는 IP와 함께 사용하게 되는데 이 때, TCP는 데이터를 잘게 나누고, 추적하고, 순서대로 재조립하는 역할을 하고, IP는 데이터를 목적지까지 주소를 찾아 보내주는 역할을 하게된다. IP는 데이터를 목적지에 보내주는 역할만 하고..

Network 2025.06.11

[JAVA] 코드의 재사용을 상속(Inheritance)으로 모두 해결할 수 있을까?

프로젝트를 하다 보면, 반복되는 기능을 여러 클래스에서 재사용하고 싶을 때가 있다. 이럴 때 상속을 이용하면 재사용 가능하다. 상속(Inheritance)이란?상속(Inheritance)은 객체지향 프로그래밍의 개념 중 하나로, 기존 클래스의 기능을 자식 클래스가 물려받는 것을 말한다. 중복 코드를 줄이고, 공통 기능을 재사용하기 위한 수단이다.public class Animal { public void breathe() { System.out.println("숨을 쉰다"); }}public class Dog extends Animal { public void bark() { System.out.println("멍멍"); }}이렇게 자식 클래스인 Dog이 부..

JAVA 2025.06.11

[Interview Question] 선언형과 명령형 프로그래밍의 차이점은?

프로그래밍에는 "무엇을 해야 할지"만 말하는 방식과 "어떻게 해야 할지"까지 지시하는 방식이 있다. 바로 이 차이가 선언형(Declarative)과 명령형(Imperative) 프로그래밍의 차이이다. 선언형 프로그래밍이란?'선언형 프로그래밍' 은 "무엇을 할 것인지(What)"에 집중하는 프로그래밍 방식이다. 즉, "어떻게 처리할지(How)"는 신경 쓰지 않고, 원하는 결과만을 기술한다. 개발자가 결과를 선언하면 구체적인 처리방법은 언어나 라이브러리가 내부적으로 처리한다. 예시 코드List numbers = Arrays.asList(1, 2, 3, 4, 5, 6);List evenNumbers = numbers.stream() .filter(..

Interview Question 2025.06.10

[JAVA] 이터레이터 패턴(Iterator Pattern)이 없어도 될 것 같은데.. 왜 사용할까?

객체에 있는 자료구조를 접근할 때, 직접 객체에 접근하여 반복문을 사용하여 자료를 검색한다. 그럼 이터레이터 패턴을 사용해서 자료구조를 순회하는 이유는 무엇일까? 이터레이터 패턴(Iterator Pattern)이란?이터레이터 패턴은 컬렉션의 내부 구조를 노출하지 않고, 그 안의 요소를 순차적으로 접근할 수 있게 해주는 디자인 패턴이다. 컬렉션이 어떤 방식으로 데이터를 담고 있든, 우리는 그 구조를 몰라도 next() 함수로 다음 데이터를 알아 낼 수 있다. 구현// 집합 인터페이스interface Aggregate { Iterator createIterator();}// 이터레이터 인터페이스interface Iterator { boolean hasNext(); String next();}..

JAVA 2025.06.10

[JAVA] 프록시 패턴(Proxy Pattern)과 데코레이터 패턴(Decorator Pattern)

객체지향 설계에서 자주 등장하는 디자인 패턴 중 하나인 프록시(Proxy) 패턴과 데코레이터(Decorator) 패턴은 구조는 유사하지만 목적은 전혀 다른 패턴이다. 프록시 패턴이란?프록시(Proxy) 패턴은 실제 객체에 접근하기 전, 중간 객체를 통해 접근을 제어하는 패턴입니다. 이 중간 객체는 실제 객체와 동일한 인터페이스를 구현하며, 다음과 같은 용도로 활용된다.접근 제어 : 권한이 있는 사용자만 접근지연 로딩 : 실제 객체를 사용할 시점에 생성캐싱 : 동일 요청에 대해 미리 데이터를 준비해 놓고 빠른 응답로깅 : 호출 및 실행 내역 기록보안 : 요청 유효성 검사 등구현public interface Image { void display();}public class RealImage implem..

JAVA 2025.06.10

[운영체제] 선점형 스케줄링 vs 비선점형 스케줄링

CPU 스케줄러는 CPU 스케줄링 알고리즘에 따라 프로세스에서 해야 하는 일을 스레드 단위로 CPU에 할당한다. 프로그램이 실행될 때는 CPU 스케줄링 알고리즘이 어떤 프로그램에 CPU 소유권을 줄 것인지 결정한다. 이 알고리즘은 CPU 이용률은 높게, 주어진 시간에 많은 일을 하도록 준비 큐에 있는 프로세스는 적게, 응답 시간은 짧게 설정하는 것을 목표로 한다. 비선점형 방식비선점형 방식(non-preemptive)는 프로세스가 스스로 CPU 소유권을 포기하는 방식이며, 강제로 프로세스를 중지하지 않는다. 더 쉽게 이야기 해서 한 번 CPU를 할당받은 프로세스는 자발적으로 CPU를 반환할 때까지 계속 실행된다. 이 작업은 CPU의 소유권이 중간에 넘어가는 일이 없기(강제 종료) 때문에 자원의 상태에 대..

OS 2025.06.08

[운영체제] 멀티스레딩 환경에서 발생하는 문제와 Deadlock을 피하는 방법

멀티스레딩은 CPU 자원을 효율적으로 활용하고 작업 성능을 높이는 데 유용한 기술이다. 하지만 여러 스레드가 동시에 자원에 접근할 수 있는 환경에서는 데이터 충돌, 교착 상태(Deadlock) 등 여러 문제가 발생할 수 있습니다.교착 상태의 조건과 이를 예방하기 위한 전략들을 정리해보자.멀티스레딩멀티스레딩은 프로세스 내 작업을 여러 개의 스레드, 멀티스레드로 처리하는 기법이며 스레드끼리 서로 자원을 공유하기 때문에 효율성이 높다. 예를 들어 웹 요청을 처리할 때 새 프로세스를 생성하는 대신 스레드를 사용하는 웹 서버의 경우 훨씬 적은 리소스를 소비하며, 한 스레드가 중단되어도 다른 스레드는 실행 상태일 수 있기 때문에 중단되지 않은 빠른 처리가 가능하다.멀티스레딩 환경에서 발생할 수 있는 문제1. 동기화..

OS 2025.06.08

[Network] HTTP/1.1과 HTTP/2의 차이는 무엇일까?

HTTP/1.1HTTP/1.0에서 발전한 것이 바로 HTTP/1.1이다. 매번 TCP 연결을 하는 것이 아니라 한 번 TCP 초기화를 한 이후에 keep-alive라는 옵션으로 여러 개의 파일을 송수신할 수 있게 바뀌었다. 한 번 3-way-handshake가 발생하면 그다음부터 발생하지 않는다. 1.1의 헤더에는 쿠키 등 많은 메타데이터가 들어있고 압축이 되지 않아 무겁다. 또한 직렬처리로 인해 순차적으로 데이터를 보낼 때, 한 번에 하나씩 보내므로 HOL Blocking이 발생한다. 네트워크에서 같은 큐에 있는 패킷이 지연되는 현상을 말한다. HTTP/2HTTP/2는 지연시간을 줄이고 응답시간을 더 빠르게 할 수 있다. 멀티플렉싱, 헤더 압축, 서버 푸기, 요청의 우선순위 처리를 지원한다.멀티플렉싱멀..

Network 2025.06.08