분류 전체보기
[HTTP] URL / HTTP 기본
[HTTP] URL / HTTP 기본
2022.08.12URI : Uniform Resource Identifier URL : Uniform Resource Locator URN : Uniform Resource Name URL은 위치를, URN은 이름을 나타낸다. URL과 URI는 보통 같이 쓰이고 주소창에 URL URI를 입력해 웹페이지를 이동한다. https://hanamon.kr/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B8%B0%EB%B3%B8-url-uri-urn-%EC%B0%A8%EC%9D%B4%EC%A0%90/ [네트워크/기본] URI, URL 및 URN의 차이점 - 하나몬 수정 보완 중에 있습니다… 🙏 그래도 의견 있으시면 주세요. ⚡️ URI과 그 하위 개념 URL, URN 개념 이해하기 ❗️URI 이란? U..
[HTTP] 클라이언트와 서버 간의 통신 (TCP, UDP, IP, DNS)
[HTTP] 클라이언트와 서버 간의 통신 (TCP, UDP, IP, DNS)
2022.08.10클라이언트와 서버가 복잡한 인터넷 망을 통해 통신할 때 IP(Internet Protocol)가 필요하다. IP는 패킷이라는 통신 단위로 지정한 IP주소로 데이터를 전달할 수 있도록 정해놓은 규칙이다. 내 IP와 목적지의 IP를 전송할 데이터를 묶어 위와 같이 IP 패킷을 만든다. 만들어진 패킷을 인터넷 망에 던져놓으면, 노드들끼리 패킷의 목적지와 연관된 노드를 찾는 작업을 반복하며 패킷을 전송한다. (여기서 노드는 출발지와 목적지를 중계하는 서버인 라우터 정도로 생각하자.) 패킷이 목적지에 도착하면 다시 패킷을 만들어 잘 받았다고 말해준다. IP는 컴퓨터와 컴퓨터간의 통신을 명확히 구현했지만, 몇 가지 문제점이 있다. 나는 패킷을 보내는데 상대방의 컴퓨터는 꺼져있어 받을 수 없다면? 패킷이 가는 중 어..
[Spring Basic] 빈의 생명주기와 스코프
[Spring Basic] 빈의 생명주기와 스코프
2022.08.09싱글톤 패턴에서 스프링 빈의 라이프사이클은 다음과 같다. 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 객체 사용 -> 소멸 전 콜백 -> 종료 스프링 컨테이너가 초기화되는 시점에 스프링 빈이 생성되고, 이후 객체 초기화 과정에서 빈으로 등록된 객체들이 주입된다. 별도로 설정하지 않았으면 빈으로 관리되는 객체들은 싱글톤으로 관리되고 한 번 주입되 객체들이 공유돼서 사용된다. 내부 값을 조금 변경하는것과 같이 단순한 경우에는 생성자를 통해 두 작업을 함께 처리해도 괜찮지만, 일반적으로 초기화 작업은 메모리를 할당해 객체를 생성하는 작업보다 무거운 작업이기 때문에 분리되어야 한다. 여기서 초기화 콜백과 소멸 전 콜백이 낯선데, 각각 초기화 작업이 수행된 후 메서드를 호..
[Spring Basic] 의존관계 주입
[Spring Basic] 의존관계 주입
2022.08.081. 생성자를 통해 의존관계를 주입하는 경우는 지금까지 사용해 온 방법이고, 가장 많이 사용되는 방법이다. 생성자를 호출하는 시점에만 주입됨을 보장할 수 있고, 때문에 변하면 안 되는 요소와 값이 필수로 주입돼야 하는 요소에 사용한다. @Component를 찾고 빈으로 등록할 때 생성자를 호출하게 되기 때문에 빈의 등록과 의존관계의 주입이 함께 발생한다고 생각해도 좋다. 생성자가 하나만 존재할 경우 @Autowired 애너테이션을 생략해도 자동으로 주입된다. 2. 수정자를 통해 의존관계를 주입하는 경우는 두 번째로 많이 사용되는 방법이고, 변경될 가능성이 높고 선택적으로 주입받아도 괜찮은 요소에 사용한다. 생성자를 통해 의존관계를 주입하는 경우와 다르게 빈을 등록하는 작업과 의존관계가 주입되는 작업이 독..
[백준] 25417 고속의 숫자 탐색 - Java
[백준] 25417 고속의 숫자 탐색 - Java
2022.08.07걸어가는 경우와 뛰어가는 경우 두 가지를 모두 고려해야 한다. visit을 boolean타입이 아니라 int로 설정한 후, 초기값을 -1로 초기화하고 최단거리로 가는 경우면 계속해서 갱신해주는 방식으로 풀었다. visit을 boolean으로 설정하는 대신, Locate객체에 cnt변수를 추가하고 먼저 뛰어가게 한 후 걸어가는 경우를 확인하는 방식으로 bfs를 돌려도 해결할 수 있을 것 같다. 중간에 cur.r 대신 r으로 바꿔써서 시간낭비가 있었다. import java.util.*; import java.io.*; import java.math.*; public class Main { static int[][] map = new int[5][5]; static int[] dr = {-1,1,0,0}; ..
[Spring Basic] Singleton
[Spring Basic] Singleton
2022.08.07클라이언트가 요청 할 때 마다 객체를 만들어서 반환하게 되면 메모리를 계속해서 낭비하게 되고, 심한 경우 서버가 터지는 경우도 발생한다. 공유해서 사용해도 괜찮은 객체는 하나만 생성하고 공유하도록 설계하는게 합리적이고, 이를 싱글톤 패턴이라고 부른다. 싱글톤 패턴을 사용하면 클래스의 인스턴스가 하나만 생성됨을 보장할 수 있다. public class SingletonService { private static final SingletonService instance = new SingletonService(); public static SingletonService getInstance(){ return instance; } private SingletonService(){ } public void lo..
[Spring Basic] 스프링과 IoC
[Spring Basic] 스프링과 IoC
2022.08.06AppConfig를 도입해 제어의 흐름을 가져왔다. 각각의 서비스들은 필요한 인터페이스를 호출하지만, 어떤 구현 객체들이 호출되는지는 모른다. 프레임워크와 라이브러리도 제어의 대상에 따라 구분할 수 있다. 프레임워크가 내가 작성한 코드를 제어하고 대신 실행하면 프레임워크라고 부르고, 반대로 내가 작성한 코드가 직접 제어의 흐름을 담당한다면 라이브러리라고 부른다. 프레임워크의 대표적인 예시로는 JUnit테스트가 있다. 정적인 클래스 의존 관계와 실행 시점에 결정되는 동적인 객체 의존 관계로 나눌 수 있다. 정적인 클래스 의존관계는 클래스에서 import하는 요소들만 보고 의존관계를 판단하는걸 의미한다. OrderServiceImpl은 MemberRepository와 DiscountPolicy에 의존함을 알..
[백준] 16652 Binary tree - Java
[백준] 16652 Binary tree - Java
2022.08.06이진트리니까 트리를 입력받을 때 노드 클래스를 이용해 left와 right를 설정해 주는 방법으로도 풀 수 있지만 간단하게 그래프로 바라보고 풀었다. dfs를 돌리며 높이를 적당히 조절해 주면 된다. import java.util.*; import java.io.*; import java.math.*; public class Main { static int root; static ArrayList[] list; static int N; static boolean visit[]; static int[] arr; static int cnt; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedRead..
[백준] 16652 Email Destruction - Java
[백준] 16652 Email Destruction - Java
2022.08.06Re : 접두사가 달린 이메일 이름은 몇 번이고 삭제될 수 있기에 삭제될 수 있는 최소 개수를 구해 입력받은 n과 비교해야 한다. Re : 는 띄어쓰기를 포함해서 4글자이니, LastIndexOf 메서드를 사용해 Re가 몇 번 나왔는지 계산해줬다. import java.util.*; import java.io.*; import java.math.*; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readL..
[백준] 10895 Great Pow! - Java
[백준] 10895 Great Pow! - Java
2022.08.05종이에 써 가며 하나하나 작성해보면 규칙이 보인다. a가 1 일때의 답은 1 k가 0 일때의 답은 a k가 0이 아니면서 a가 짝수일 때의 답은 1 k가 0이 아니면서 a가 홀수일 때의 답은 a import java.util.*; import java.io.*; import java.math.*; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int a = Integer.parseI..
[백준] 2146 다리 만들기 - Java
[백준] 2146 다리 만들기 - Java
2022.07.311. 섬 마다 구역을 나눈다. (1, 2, 3...) 2. 완전탐색으로 건설할 수 있는 최소 길이의 다리를 구한다. - 구역을 나눌 때 ArrayList를 사용했는데, 더 좋은 방법이 있을 것 같다 - bfs함수를 2개 만들어서 사용했는데, 하나로 통일해서 풀 수 있을 것 같다. import java.util.*; import java.io.*; public class Main { static int N; static int[] dr = {-1,1,0,0}; static int[] dc = {0,0,-1,1}; static int[][] map; static boolean visit[][]; static int min =Integer.MAX_VALUE; static ArrayList island; pub..
최소 신장 트리
최소 신장 트리
2022.07.29그래프에서 일부 간선을 선택해서 만든 트리를 신장 트리 (Spanning Tree)라고 한다. 트리라서 사이클이 있으면 안되니 n개의 정점이 있으면 정점을 모두 잇는 트리의 간선은 n-1개이다. 최소 신장 트리는 신장 트리에서 간선에 가중치가 있다고 할 때 가중치의 합이 최소인 트리를 말한다. 활용 분야는 통신, 회로 등 여러 군데가 있을 수 있고 생각해보면 더 많이 있을 것 같다.. 하지만 나한테는 활용 분야보다 최소 신장 트리를 활용하는 알고리즘 문제가 나온다는거다. 가중치가 있는 그래프가 주어졌을 때 최소 신장 트리를 어떻게 구할 수 있을까? 최단 거리를 구할 때 사용하는 알고리즘인 크루스칼, 프림 알고리즘을 사용할 수 있다. https://chanhuiseok.github.io/posts/algo..