여러분은 평소에도 항상 네트워크를 사용하고 있습니다. 지금 이 글을 볼때도, 서버에서 받아온 메세지를 통해 지금 사용하고 계신 컴퓨터, 스마트폰 등에서 보고 있기 때문입니다. 그래서 네트워크는 대체 무엇일까요? 네트워크란? 네트워크는 여러 장치들이 서로 정보를 주고 받을 수 있는 통신망입니다. 노드(호스트, 메세지를 최초로 송신하거나, 생성하는 대상), 메세지(네트워크 사이에 전달되는 데이터), 링크(노드와 노드 사이를 이어주는 연결)로 이루어져 있습니다. 노드는 서버, 라우터, 스위치, 컴퓨터등 메세지를 송, 수신 할 수 있는 모든 시스템을 말하는데 이때 네트워크 상의 주소를 통해서 메세지를 수신하거나 송신할 대상을 정할 수 있습니다. 인터넷 또한 앞서 설명한 네트워크의 요소를 모두 가지고 있기 때문에..
서론 코딩테스트를 처음 준비하면서 부터 지금까지 dx와 dy를 거의 항상 다음과 같이 쓰고 있었다. int[] dx = {-1, 0, 1, 0}; int[] dy = {0, -1, 0, 1}; 사실 헷갈리지 않는다면 위처럼 적어도 상관없지만 문제의 입력 조건 (방향 d에 따라서 다음 방향이 결정된다. d가 0인 경우 북쪽, 1인 경우 동쪽, 2인 경우 남쪽, 3인 경우 서쪽을 바라보고 있는 것이다.) 따라서 이번 문제와 같은 경우는 각 방향에 맞게 dx와 dy 배열을 수정했다. int[] dx = {-1, 0, 1, 0}; int[] dy = {0, 1, 0, -1}; 풀이 문제의 설명이 여러번 수정된 기록이 있는 것으로 보아 원래부터 설명이 헷갈리게 작성되어 있었던것 같다. 물론 지금 설명도 이해하기는..
서론 위 문제를 풀기 전에 아래 두 문제를 풀어보길 권장한다! https://www.acmicpc.net/problem/14502 https://www.acmicpc.net/problem/17141 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 17141번: 연구소 2 인체에 치명적인 바이러스를 연구하던 연구소에 승원이가 침입했고, 바이러스를 유출하려고 한다. 승원이는 연구소의 특정 위치에 바이러스 M개를 놓을 것이고, 승원이의 신호와 동시에 바이러 www.acmicpc.net 풀이 전형적인 조합 + BFS의 구현 문제지..
웹 브라우저에 URL을 입력하면.. 웹 브라우저에 URL을 가리키면 브라우저는 인터넷에서 사이트를 호스팅하는 서버를 파악합니다. 이때 우리가 사용하는 URL은 보통 도메인으로 이는 도메인 네임 서버를 통해서 고유한 주소인 IP 주소를 받아서 돌려 줍니다. 우리가 IP 주소를 직접 사용하지 않는 이유는 IP 주소가 다음과 같은 숫자로 이루어져 있어서 기억하기 어렵기 때문입니다. (127.0.0.1 과 같은 형태를 가지고 있습니다.) 우리가 휴대폰에 다른 사람의 이름으로 전화번호를 검색하듯이 우리는 도메인 이름을 통해서 웹사이트를 받아옵니다. 도메인의 IP주소 조회 우리가 웹브라우저에 URL을 입력하면 브라우저는 그에 맞는 DNS(Domain Name Server)에서 IP주소를 찾아옵니다. DNS는 웹브라..
IP란? 지정한 IP 주소에 패킷단위로 데이터를 전달하는 인터넷 규칙입니다. 클라이언트는 전송데이터를 보내기 전에 출발 IP와 목적 IP를 지정해야하고 데이터를 패킷이라는 통신단위를 통해 서버에게 전달합니다. 반대로 서버는 패킷을 잘 전달 받았다는 응답을 출발 IP와 목적 IP를 반대로 지정해서 클라이언트에게 서버 패킷을 통해 전달합니다. 단점 비연결성 - 대상 서버의 상태를 확인할 수 없지만 클라이언트는 패킷을 전송합니다. 서버는 패킷을 받을 수 없지만 클라이언트에서는 알 방법이 없습니다. 패킷을 전달 받는 대상이 없을때도 여전히 클라이언트는 패킷을 전달할 수 있습니다. 비신뢰성 - 클라이언트에서 서버로 패킷이 전달되는 과정 중에서 패킷은 소실될 수 있고 혹은 여러개의 패킷을 한번에 보낸다면 전달 순서..
LiveReload란? LiveReload는 개발자가 소스를 수정하면 브라우저에 자동으로 반영해주는 오픈소스 툴입니다. 기존의 스프링으로 개발을 할때 새로운 정적인 페이지를 넣는다던지 의존관계 수정을 하면 일일이 어플리케이션을 수동으로 껐다가 켜야했습니다. 하지만 LiveReload는 그 귀찮은 과정을 매번 파일이 수정될때마다 어플리케이션 전체를 다시 로딩하여 개발자가 수정한 파일이 브라우저에서 바로 확인할 수 있게 도와줍니다. 1. build.gradle 설정 dependencies { developmentOnly 'org.springframework.boot:spring-boot-devtools' } build.gradle에 의존성을 추가합니다. 2. application.properties 설정 s..