본문 바로가기

Computer Science

(9)
DNS 서버는 어떻게 도메인이름을 IP주소로 변환할까? DNS(Domain Name System)는 인터넷에서 도메인 이름과 IP 주소를 연결하여 네트워크 통신을 가능하게 하는 시스템이다. DNS는 도메인 이름을 IP 주소로 변환하여 통신에 사용한다. DNS 테이블 DNS 테이블은 DNS 서버에서 사용되는 데이터베이스이다. DNS 서버는 도메인 이름에 해당하는 IP 주소 정보를 DNS 테이블에 저장하고, 도메인 이름을 검색하면 DNS 테이블에서 해당 도메인 이름에 대한 IP 주소 정보를 찾아서 요청자에게 제공한다. DNS 테이블은 일반적으로 DNS 서버의 캐시(Cache)에 저장되어 빠르게 검색이 가능하다. ISP ISP(Internet Service Provider)는 인터넷 서비스 제공 업체를 의미한다. ISP는 일반 가정이나 회사에 인터넷 서비스를 제공..
대용량 트래픽 처리를 위한 자바의 핵심 기술 멀티스레딩 한 번에 하나의 작업만 처리하는 단일 스레드보다 여러 작업을 동시에 처리할 수 있어서 성능 향상을 기대할 수 있다. I/O 작업을 수행할 때, 대기 시간이 발생하므로 스레드를 대기 상태로 만들고 다른 작업을 수행할 수 있어서, I/O 작업을 효율적으로 처리할 수 있다. 멀티스레딩을 사용하면, 하나의 스레드에서 여러 작업을 처리하므로 작업을 분산시키고 병렬 처리할 수 있다. 이렇게 분산 처리하면, 전체 작업 시간이 감소하여 성능 향상을 가져올 수 있다. 또한, 시스템이 더 많은 클라이언트 요청을 처리할 수 있어서 서버 확장성을 높일 수 있다. public class MyThread extends Thread { @Override public void run() { // 스레드에서 실행될 코드 작..
MVC 패턴에 관한 고찰 프리코스를 진행하며 contoller와 service 계층을 습관적으로 두어서 구현했다. 하지만 지금 시점에서 과연 그런 계층이 왜 존재하는지, 장점은 무엇인지 궁금해졌다. 전에도 포스팅했었던 Spring 웹 계층인데, contoller에서 입출력과 관련된 부분을 맡고 service 계층에서 비즈니스 로직을 담당한다. 과제를 진행하면서 이 부분을 신경 썼다. contoller에서는 최대한 입출력과 관련된 부분을 담당하고 로직은 모두 service로 넘겨 구현했다. 하지만 이러다보니 service 객체가 너무 비대해지고, 프로그램의 모든 부분과 연관되어 있어 거의 모든 객체를 참조해야 한다. 이런 경우 문제점은 service 객체 존재에 명확한 이유가 없다. bridgeGameManager에 있는 메서드들..
주소창에 google.com을 치면 일어나는 일 먼저 network access layer에 대해 알아보자. 1. Application Layer client에서 http request message를 보낸다. http message에는 header, body, status code 등이 포함된다. domian을 IP주소로 바꿔주는 DNS 서버 역시 이 단계에서 일어난다. 2. Transport Layer TCP, UDP 프로토콜을 통해 포트번호를 포함한 데이터가 인코딩된다. 포트번호를 통해 데이터를 보내야 할 프로세스를 확인한다. 3. Internet Layer 목적지인 구글 서버로 가기 위해 IP주소를 이용하여 routing, forwading이 일어난다. 4. Network Layer ARP 프로토콜을 통해 구글 서버의 MAC 주소를 알아낸 후,..
Object Oriented Programming (OOP) 객체 지향 프로그래밍(OOP)란? Object Oriented. 핵심은 현실세계의 사물을 객체로 보고 그 객체로부터 개발하고자 하는 애플리케이션에 필요한 특징들을 뽑아와 프로그래밍 하는 것. 객체 단위로 코드가 나눠져 작성되기 때문에 디버깅이 쉽고 유지보수에 용이하다. OOP의 5가지 설계 원칙 SRP(Single Responsibility Principle, 단일 책임 원칙): 클래스는 단 하나의 목적을 가져야 하며, 클래스를 변경하는 이유는 단 하나의 이유여야 한다. OCP(Open-Closed Principle, 개방 폐쇠 원칙): 클래스는 확장에는 열려 있고, 변경에는 닫혀 있어야 한다. LSP(Liskov Substitution Principle, 리스코프 치환 원칙): 상위 타입의 객체를 하위..
자바의 메모리구조 자바의 프로그램 실행 구조 JVM 구조 Memory Area 구조 1) Method Area JVM이 실행되면서 생기는 공간이다. Class 정보, 전역변수 정보, Static 변수 정보가 저장되는 공간이다. Runtime Constant Pool 에는 말 그대로 '상수' 정보가 저장되는 공간이다. 모든 스레드에서 정보가 공유된다. 2) Heap new 연산자로 생성된 객체, Array와 같은 동적으로 생성된 데이터가 저장되는 공간 Heap에 저장된 데이터는 Garbage Collector 가 처리하지 않는한 소멸되지 않는다. Reference Type 의 데이터가 저장되는 공간 모든 스레드에서 정보가 공유된다. 3) Stack 지역변수, 메소드의 매개변수와 같이 잠시 사용되고 필요가 없어지는 데이터가 ..
@Transactional에 대해 알아보자 트랜잭션이란? DB에서 데이터에 대한 하나의 논리적 실행단계를 트랜잭션이라고 한다. 예를 들어, 은행에서의 계좌이체를 트랜잭션이라고 할 수 있는데, 계좌이체 자체의 구현은 내부적으로 여러 단계로 이루어질 수 있지만 전체적으로는 '송신자 계좌의 금액 감소', '수신자 계좌의 금액 증가'가 한 동작으로 이루어져야 하는 것을 의미한다. 원자성(Atomicity)은 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력이다. 예를 들어, 자금 이체는 성공할 수도 실패할 수도 있지만 보내는 쪽에서 돈을 빼 오는 작업만 성공하고 받는 쪽에 돈을 넣는 작업을 실패해서는 안된다. 원자성은 이와 같이 중간 단계까지 실행되고 실패하는 일이 없도록 하는 것이다. 일관성(Consistency)은 트..
DI(Dependency Injection)이란? 더보기 애플리케이션 실행 시점(런타임)에 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달해서 클라이언트와 서버의 실제 의존관계가 연결 되는 것을 의존관계 주입이라 한다. 객체 인스턴스를 생성하고, 그 참조값을 전달해서 연결된다. 의존관계 주입을 사용하면 클라이언트 코드를 변경하지 않고, 클라이언트가 호출하는 대상의 타입 인스턴스를 변경할 수 있다. 의존관계 주입을 사용하면 정적인 클래스 의존관계를 변경하지 않고, 동적인 객체 인스턴스 의존관계를 쉽게 변경할 수 있다. 먼저 코드로 살펴보자. public class OrderServiceImpl implements OrderService { private final MemberRepository repository = new MemoryMemberRe..