![[네트워크 이론] 네트워크 계층 - IP 주소 체계](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FACplo%2FbtsNpWob8NM%2FAAAAAAAAAAAAAAAAAAAAAC9s5FUlfWrZEGO9aTFOusZcIMnetYx9dWWsH_h0jTWZ%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DDPh82yXUSNl5JGjBwhDuj1ICnyo%253D)
이글은 혼자 공부하는 네트워크(저자 : 강민철)의 책과 강의 내용을 개인적으로 정리하는 글임을 알립니다.네트워크 주소와 호스트 주소하나의 IP 주소는 크게 네트워크 주소와 호스트 주소로 나뉜다.아이피는 32비트로 구성되어있고, 아래 그림은 네트워크 주소가 16비트, 호스트 주소가 16비트인 IP 주소의 예시이다.네트워크 주소 : 호스트가 속한 특정 네트워크를 식별하는 역할호스트 주소 : 네트워크 내에서 특정 호스트를 식별하는 역할 만약 네트워크 주소가 다음 그림과 같이 하나의 옥텟으로 이루어져 있다면, 한 네트워크당 호스트 주소 할당에 24비트를 사용할 수 있어서 상대적으로 많은 호스트에 IP 주소를 할당할 수 있을 것이다. 또 만약 네트워크 주소가 다음과 같이 세 개의 옥텟으로 이루어져 있다면, 네트워..
![[Spring 핵심원리 - 고급] @Aspect AOP](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2F0OoqW%2FbtsNRKWsDxI%2FAAAAAAAAAAAAAAAAAAAAANl8p5Hz7xngVpIU9f7yI8CoOzBIz5L6AWsQ_f7S0Y20%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D0qnvJg6eI%252BSJ%252FxRMSDj6dvv9uMI%253D)
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다.@Aspect - 코드스프링은 @Aspect 애노테이션으로 매우 편리하게 포인트컷과 어드바이스로 구성되어 있는 어드바이저 생성 기능을 지원한다.import proxy.proxy.trace.TraceStatus;import proxy.proxy.trace.logtrace.LogTrace;import lombok.extern.slf4j.Slf4j;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;@Slf4j@Aspectpublic class..
![[Spring 핵심원리 - 고급] 빈 후처리기(BeanPostProcessor)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FxxVvq%2FbtsNmD5ksA2%2FAAAAAAAAAAAAAAAAAAAAANMPy1EQ8Y61UcZyd-xAdChzqbTr2OT0-aYdo0f1Q2B_%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DptiFysi%252B36vTtgA71HSd4kyjjIE%253D)
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다.빈 후처리기스프링이 빈 저장소에 등록할 목적으로 생성한 객체를 빈 저장소에 등록하기 직전에 조작하고 싶다면 빈 후처리기를 사용하면 된다.빈 포스트 프로세서(BeanPostProcessor)는 번역하면 빈 후처리기인데, 이름 그대로 빈을 생성한 후에 무언가를 처리하는 용도로 사용한다.객체를 조작할 수도 있고, 완전히 다른 객체로 바꿔치기 하는 것도 가능하다. 빈 후처리기 과정생성: 스프링 빈 대상이 되는 객체를 생성한다. (@Bean, 컴포넌트 스캔 모두 포함)전달: 생성된 객체를 빈 저장소에 등록하기 직전에 빈 후처리기에 전달한다.후 처리 작업: 빈 후처리기는 전달된 스프링 빈 객체를 조작하거나 다른 객체로 바꿔..
![[네트워크 이론] 네트워크 계층 - IP 및 ARP 개념](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FemduDJ%2FbtsNniLyus5%2FAAAAAAAAAAAAAAAAAAAAAAvri8QEpcctl3vQv6KGyxwYQ0t8aLNbHhNG83K3lmD8%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DjQOkUgDnz354BIGXV4ZoqkgFMV0%253D)
이글은 혼자 공부하는 네트워크(저자 : 강민철)의 책과 강의 내용을 개인적으로 정리하는 글임을 알립니다.LAN을 넘어서는 네트워크 계층데이터 링크 계층의 한계물리 계층과 데이터 링크 계층만으로 LAN을 넘어서 다른 도시나 다른 국가에 있는 친구와 통신할 수 있을까? 언뜻 들으면 가능할 것 같지만, 데이터 링크 계층에는 송수신지를 특정할 수 있는 잘 보인 MAC 주소라는 개념이 있으니까, 이 정보를 바탕으로 다른 도시, 다른 국가에 있는 수신지로 전송하면 될 것 같다.그러나 결론부터 말하자면 물리 계층과 데이터 링크 계층만으로는 LAN을 넘어서 통신하기 어렵다. 대표적으로 두 가지 이유가 있다. 이 이유는 이번 장에서 학습할 네트워크 계층의 핵심 기능과도 직결된다. 첫째, 물리 계층과 데이터 링크 계층만으..
![[네트워크 이론] 물리 계층 및 데이터링크 계층](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FeGvZ76%2FbtsNm2a0uEA%2FAAAAAAAAAAAAAAAAAAAAABsL91hLTFwIx8EiIGZ0_8HCsHBOcSF2foOweh3RWtyG%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D71PBqJ7IuD0YZWhiCuvZ4vUrhtI%253D)
이글은 혼자 공부하는 네트워크(저자 : 강민철)의 책과 강의 내용을 개인적으로 정리하는 글임을 알립니다.이더넷(Ethernet)물리 계층과 데이터 링크 계층은 서로 밀접하게 연관되어 있다. 오늘날의 두 계층은 이더넷이라는 공통된 기술이 사용되기 때문이다.이더넷(Ethernet)은 현대 LAN, 특히 유선 LAN 환경에서 가장 대중적으로 사용되는 기술이다.예를 들어 두 대의 컴퓨터가 있다고 가정해보자. 이 컴퓨터끼리 정보를 주고받으려면 가장 먼저 케이블과 같은 통신 매체가 필요하다.그리고 그 통신 매체를 통해 정보를 송수신하는 방법이 정해져 있어야 한다.이더넷은 다양한 통신 매체의 규격들과 송수신되는 프레임의 형태, 프레임을 주고받는 방법 등이 정의된 네트워크 기술이다. 이더넷 표준오늘날 유선 LAN 환경..
![[Spring 핵심원리 - 고급] 프록시 팩토리(Proxy Factory)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FJxRD5%2FbtsNlYOlrIh%2FAAAAAAAAAAAAAAAAAAAAANx0Bufi6nHXammd5rZ0MuLQTNGMx1BppYBoBCRrG_s-%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DT8v8DRVf4eFh87unaal8RiLwTaE%253D)
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다.프록시 팩토리인터페이스가 있는 경우에는 JDK 동적 프록시를 적용하고, 그렇지 않은 경우에는 CGLIB를 적용하려면 어떻게 해야할까?-> 프록시 팩토리를 사용하면 된다. 프록시 팩토리는 인터페이스가 있으면 JDK 동적 프록시를 사용하고, 구체 클래스만 있다면 CGLIB를 사용한다.그리고 이 설정을 변경할 수도 있다. 두 기술을 함께 사용할 때 부가 기능을 적용하기 위해 JDK 동적 프록시가 제공하는 InvocationHandler와 CGLIB가 제공하는 MethodInterceptor를 각각 중복으로 따로 만들어야 할까?스프링은 이 문제를 해결하기 위해 부가 기능을 적용할 때 Advice라는 새로운 개념을 도입했..
![[Spring 핵심원리 - 고급] 동적 프록시(Dynamic Proxy)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbBncop%2FbtsNlmaLBC8%2FAAAAAAAAAAAAAAAAAAAAAL4NvPbxueZ9khaIly5FLSY-GbN_tOvJLTszTm_3xiii%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D%252FXGJ9eTolXy4JLQBFK05rW0FvkE%253D)
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다.리플렉션JDK 동적 프록시를 이해하기 위해서는 먼저 자바의 리플렉션 기술을 이해해야 한다.리플렉션 기술을 사용하면 클래스나 메서드의 메타정보를 동적으로 획득하고, 코드도 동적으로 호출할 수 있다.import lombok.extern.slf4j.Slf4j;import org.junit.jupiter.api.Test;import java.lang.reflect.Method;@Slf4jpublic class ReflectionTest { @Slf4j static class Hello { public String callA() { log.info("callA"); ..
![[java] 백준 1325번 문제(효율적인 해킹)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FH5SB9%2FbtsNkn1dAD5%2FAAAAAAAAAAAAAAAAAAAAAGt_ldkJO55wvbZbACVPO_tzLFuMIFnp8a0NeFZ0cqe4%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DoqprmK1e9dBoPlluvGRnzsNnKmI%253D)
원본 링크 : https://www.acmicpc.net/problem/1325문제설명 소스코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.*;public class Main{ static ArrayList[] list; static int[] count; static int n; static List answer = new ArrayList(); public static void main(String[] args) throws IOException { BufferedReader br = new BufferedRe..