Ip는 네트워크 인터페이스 계층에서 정의되며, 인터넷 계층에서 주력으로 사용되는 프로톨이다. 네트워크 인터페이스 계층에서 정의 되었기 때문에 Ip는 엔드 투 엔드 방식으로 동작한다. 즉, 출발지와 도착지가 명확하다는 이야기다. 데이터 이동 TCP/IP는 총 4계층으로 이뤄져있다. 각 계층은 다음 계층으로 데이터를 전송하고 있다. 데이터는 각 계층마다 서로 다른이름으로 불리고 있다. 이름을 구분 짓는이유는 어떤 계층에서 사용되는 데 b-programmer.tistory.com 여기에서 말했듯이 꼭 도착지가 하나 일 이유일 필요는 없다. 만약, 도착지가 여러개일 경우, 그룹으로 나눌 필요가 있다. 그룹으로 나누는 방법은 비교적 간단하다. 네트워크는 기본적으로 0과1로 이뤄져있다. 데이터가 들어가는 것을 1,..
TCP/IP는 총 4계층으로 이뤄져있다. 각 계층은 다음 계층으로 데이터를 전송하고 있다. 데이터는 각 계층마다 서로 다른이름으로 불리고 있다. 이름을 구분 짓는이유는 어떤 계층에서 사용되는 데이터인지 확인하기 위함이라고 한다. 1계층, 네트워크 인터페이스 계층 이때 전송되는 데이터는 "프레임" 이라고 한다. 프레임은 틀, 구조라는 뜻을 가지고 있다. 데이터이름이 프레임인 이유는 이것이 시작을 알리는 듯한 느낌을 받을 수 있다. 2계층, 인터넷 계층 본격적으로 데이터가 활보하는 시기로, 패킷,데이터 그램이라고 부른다고 한다. JPA의 아버지인 "김영한"님의 말씀을 빌리자면, 패킷은 패키지 + 베스킷의 합성어라고 하셨다. 즉, 묶음이라는 의미라 생각한다. 아무튼 이 계층에서 데이터를 포장하는 느낌으로 전달..
TCP/IP 계층으로 TCP와 IP를 중심으로 만들어진 네트워크 아키텍처. 네트워크 아키텍처는 네트워크 프로토콜들의 집합체이다. 네트워크 인터페이스 계층 모든 네트워크 프로토콜은 이 계층에서 시작된다. 이 계층에서 시작되는 이유는 이 계층이 출입구이기 때문이다. 각 장비에 네트워크를 연결하기 위해서는 어떻게 해야할까? 연결 할 선 같은게 필요하지 않을까? 그래서 이더넷(물리), 무선 네트워크(WIFI)를 통해 각 장비에 네트워크를 주입하는 역할을 한다. 문이기 때문에 연결되는 네트워크 장비가 뭔지는 관심이 없는 그런 계층이다. 인터넷 계층 본격적으로 네트워크를 전송한다. 마치 우리가 이정표를 보고 길을 찾는 것 처럼 어느 네트워크 장비로 라우터를 이용해하여 어디로 이동 시켜줄지 결정하게 된다. 처음 네트..
프록시는 무엇을 뜻하는 걸까? 대안이라는 뜻을 가지고 있다. 가장 대표적인 예로 JPA를 들 수 있다. 간단하게 JPA코드를 작성해보겠다. public interface BookJpaRepository extends JpaRepository { } @SpringBootTest class BookJpaRepositoryTest { @Autowired BookJpaRepository bookJpaRepository; @Test void test() { System.out.println(bookJpaRepository); } } 인터페이스로 만들었지만.. 다양한 메소드를이 나오는 것을 확인 할 수 있다. 물론, 다른 인터페이스를 상속한다음 실행해도 위와 같은 결과는 나온다. 하지만.. 특정 메소드를 실행한다고..
네트워크에서 인터페이스는 포트를 지칭하는 말이다. 즉, 인터페이스로 어떤것을 사용할지 알 수 있게 도와주는 역할을 한다. 자바에서도 마찬가지다. 일반적으로 인터페이스는 규약을 정의할때 사용이 되어진다. 그래서 직접 구현하는 것보다, 추상적으로 서로간의 "약속"을 정할때 사용된다. 그러면 인터페이스는 어떻게 만드는걸까? 간단히 public interface Interfaces { } class => interface로 바꿔주면 된다. 구현하는 방법은 크게 2가지가 존재하는데, 다른 클래스에서 구현하는 방법 public abstract void hello(); 로 구현해되지만 public abstract는 생략이 가능하다. 먼저 메소드 몇 개를 구현해보자. public interface Interfaces ..
네트워크는 LAN과 WAN으로 구분되어있다. LAN은 직접 구축하는 것이고 WAN은 LAN을 이어주는 네트워크이다. 보통 네트워크는 구름(cloud)로 많이 그려진다. 사실 이 그림은 라우터, 스위치 L2, 스위치L3가 포함된것이다. 이것을 통해 어디에서 어디로 연결이 되었는지 알 수 있다. 이것을 우리는 인터페이스라고 부른다. 따라서 각 장비들은 서로 인터페이스로 연결되있다는 것을 알 수 있다. 인터페이스 이제 연결시켜 보자. 첫 번째 네트워크에서 두 번째 네트워크로 연결된 그림이다. 네트워크는 다음처럼 이동된다. 1. 데이터를 수신한다. 2. 데이터를 어느곳에 보낼지 결정한다.(라우터,스위치L3의 역할) 3. 데이터를 보낸다. 참고로 데이터는 0과1로 이뤄져있다. 또한 저선은 연결(링크)라고 부른다고..
리플렉션을 학습하였다. 리플렉션에 대해 살짝 언급한다면, 클래스에 대한 정보를 아무런 제약없이 가져올 수 있다는 것인데... 이것을 잘못 사용할시.. 프로그램의 성능 이슈가 있을 수 있다. 또, 이것은 접근지시자 private도 접근할 수 있기 때문에 신중에 신중을 기여하면서 사용해야한다. 만약, 이렇게 사용할시, 엄청난 문제가 발생할지도 모른다. 리플렉션으로 무언가를 만들 수 는 없을까? 우리는 간단하게 DI 의존성 주입을 만들 수 있다. DI는 프로그램이 만들어지는 순서를 역으로 만든다는 것인데, 원래 객체가 들어가야 되지만 이것을 한번 꺽어서 만든다는 것이 특징이다. 이제 직접 만들어 보자. 일단 어노테이션부터 만들어야 된다. 왜냐하면 어노테이션으로 값을 찾기 때문이다. @Retention(Rete..
스프링을 공부하다보면.. 빈을 주입하는 (객체를 만들어주는)... 것이 나온다. @Repository public class SchoolRepository { } @Service public class SchoolService { @Autowired SchoolRepository schoolRepository; } 그리고 이것을 테스트 해보자. @SpringBootTest class SchoolServiceTest { @Autowired SchoolService schoolService; @Test void test() { System.out.println(schoolService.schoolRepository); } } 나는 분명히 new 키워드를 이용해서 만들지도 않았다. 그런데 정상적으로 객체값이 ..
URI unified Resource Identifier 리소스를 식별하기 위해 만들어졌다. 보통 URI == URL로 해석된다. 그 이유에 대해 설명할 예정이다. 그전에 다음과 같은 그림을 그려 보자. N과 L은 리소스를 어떻게 식별할 것인지 나타내는 식별자 이다. N : 이름별로 ::= "urn:" ":" 이렇게 작성된다고 한다. 하지만 이 방법으로 리소스를 식별하는게 굉장히 어려워진다. 왜냐하면 urn:"book":"hello" 이것을 해석해 보면 book이라는 이름에서 hello라는 이름을 찾게 된다. 하지만 같은 이름이 여러개라면 어떨까요? 이 방식은 최근에는 사용되지 않는 방식이라고 한다. L: 위치별로 어떻게 보면 이름별로 나누는것과 차이가 없다. 다만 이 방식의 장점은 어떤 프로토콜을 사용..