너비 우선 탐색 & 깊이 우선 탐색, 이진 탐색
·
PS/알고리즘
그래프에서는 모든 정점을 방문해야 할 때가 자주 있다.모든 정점을 방문하는 방법은 다양하지만, 대표적으로 BFS와 DFS 방법을 사용할 수 있다.두 방법은 매우 간단하나, 그래프 알고리즘에서 핵심적인 위치를 차지한다.∴ 두 탐색 방법에 대해 아주 깊은 직관을 가져야 할 필요가 있다.트리에 대해 BFS, DFS 수행루트를 시작으로 탐색을 한다면 `BFS`는 먼저 루트의 자식을 차례로 방문함,다음으로 루트의 자식의 자식, 즉 루트에서 두 개의 간선을 거쳐서 도달할 수 있는 정점을 방문= 루트에서 가까운 거리 순으로 방문`DFS`는 루트의 자식 정점을 하나 방문한 다음 아래로 내려갈 수 있는 곳까지 내려감더 이상 내려갈 수가 없으면 위로 되돌아 오다가 내려갈 곳이 있으면 즉각 내려감 일반적인 그래프 G =(V..
TCP의 흐름 제어 & 혼잡 제어
·
Computer Science/네트워크
흐름 제어 (Flow Control)파이프라이닝 기반 전송으로 한 번에 무한히 많은 데이터를 주고 받을 수 있는가? 👉 No!수신 측이 송신 측보다 데이터 처리 속도가 빠르면 문제 없지만, 송신 측의 속도가 더 빠를 경우 문제가 생김수신 호스트가 한 번에 받아서 처리할 수 있는 세그먼트의 양에는 한계가 있기 때문에,한계를 초과한 이후 도착하는 패킷은 손실될 수 있고 만일 손실된 경우 불필요한 추가 패킷 전송 발생📌 TCP의 흐름 제어송신 호스트가 수신 호스트의 처리 속도를 고려하여 송수신 속도를 균일하게 유지하는 기능Stop-and-Wait ARQ를 사용하면, 흐름 제어 필요 없음파이프 라이닝 기반 ARQ를 사용하면 흐름 제어 필요!ACK 응답 마다 윈도우 크기를 포함하여, 수신자가 이후 허용 가능한..
TCP & UDP, TCP의 오류 검출과 재전송
·
Computer Science/네트워크
전송 계층네트워크 계층과 응용 계층 사이에 위치IP한계 보완: `신뢰`할 수 있는 통신과 `연결`형 통신 기능 제공응용 계층의 프로세스 식별: 포트 번호 활용IP 한계신뢰할 수 없는 통신패킷이 수신지까지 제대로 전송되었다는 보장X통신 과정에서 패킷이 잘못 전송되어도 확인X, 재전송X, 순서대로 도착 보장X비연결형 통신송수신 호스트 간에 사전 연결 수립 작업X그저 수신지를 향해 패킷을 보내기만 함∴ IP 패킷의 전달 = 신뢰성이 없는 통신 + 비연결형 통신IP는 왜 신뢰할 수 없는, 비연결형 통신을 하는가 ?비연결형 통신이 나쁜 게 아님👉 신뢰할 수 있는 연결형 통신 = `성능`에 악영향신뢰성 있는 전송이 모든 경우에 필요한 게 아님간단함연결 유지 & 상태 저장X = 라우터가 가볍고 빠르게 작동확장성수십..
Comparable vs Comparator
·
Dev Trivia
TreeSet이나 TreeMap 같은 컬렉션에 저장되는 객체는 저장과 동시에 오름차순으로 정렬이때, 어떤 객체든 정렬될 수 있는 것이 아닌, 객체가 `Comparable` 인터페이스를 구현하고 있어야 가능함Integer, Double, String 타입은 Comparable을 구현하고 있으므로 상관 없음📌 사용자 정의 객체를 저장할 땐 반드시 Comparable을 구현해야 함Comparablecomparable 인터페이스에는 `compareTo()` 메소드가 정의돼 있음∴ 사용자 정의 클래스에서 이 메소드를 재정의하여 비교 결과를 정수 값으로 반환해야 함리턴 타입메소드설명intcompareTo(T o)주어진 객체와 같으면 0,주어진 객체보다 적으면 음수,주어진 객체보다 크면 양수 리턴Comparator..
컬렉션 프레임워크
·
Backend/JAVA
자바는 널리 알려진 자료구조를 바탕으로, 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 관련된 인터페이스와 클래스들을 `java.util` 패키지에 포함시켜 놓음👉 이를 총칭하여 컬렉션 프레임워크라고 부름List와 Set은 객체를 추가, 삭제, 검색하는 방법에 있어서 공통점이 있기에 공통된 메소드만 따로 모아 Collection 인터페이스로 정의 & 상속Map은 키와 값을 하나의 쌍으로 묶어서 관리하는 구조로 List와 Set 과는 사용방법이 다름❓ 인터페이스로 구현한 이유처음에는 공유 코드가 없어서 인터페이스로 설계 했으나, 시간이 흐르며 공통 기능이 필요해졌고 이를 해결하기 위해 `default` 메서드가 도입 됨인터페이스 분류특징구현 클래스CollectionList순서를 유지하고 저장중복 저..
그래프
·
PS/알고리즘
그래프(Graph)는 객체 간의 연결 관계를 표현하는 자료구조노드(Node) 또는 정점(Vertex)과 이를 연결하는 간선(Edge)으로 구성됨.그래프의 활용그래프는 연결 관계를 표현하는 자료구조로, 현실 세계의 다양한 개체와 관계를 모델링할 수 있음SNS 분석사용자 간의 팔로우 관계교통망 & 지도 데이터도시, 도로정거장, 정거장 연결 선컴퓨터 네트워크라우터와 그 연결 관계종류무방향 그래프 (Undirected Graph)간선에 방향성이 없는 그래프, 두 노드는 `양방향`으로 연결됨A → B로 갈 수 있고, B → A로 갈 수 있음 = 서로 연결된 상태방향 그래프 (Directed Graph)간선에 방향성이 있는 그래프, A → B로 향하면, A에서 B로만 이동 가능들어오는 간선과 나가는 간선으로 구분 ..
재귀
·
PS/알고리즘
재귀는 큰 문제를 해결하기 위해 동일한 유형의 더 작은 문제로 나누는 방식자기 자신을 호출하여 반복적으로 작은 문제를 해결해 나가며, 궁극적으로 원래 문제를 해결함📌 완전 탐색, DP, 그래프, 트리 순회와 같은 알고리즘 문제를 푸는 데 중요! 구성 요소기저 조건 (Base Case)더 이상 문제를 쪼갤 수 없거나, 답이 명확해지는 종료 조건기저 조건이 없다면, 무한 호출되며 `Recursion Error` 발생재귀 호출 (Recursive Call)문제를 더 작은 문제로 나누고, 이를 해결하기 위해 자기 자신 호출시간 복잡도재귀의 시간복잡도를 구하는 건 어려움. 수학적으로 접근해 엄밀히 구하려면, 실용성이 떨어짐∴ 대략적으로 계산해야 함📌 시간 복잡도 = 재귀 함수 호출 수 X 재귀 함수 당 시간..
HTTP & HTTPS
·
Computer Science/네트워크
TCP/IP 4계층 모델의 애플리케이션 계층의 프로토콜모두 서버/클라이언트간 데이터를 주고 받기 위해 사용됨HTTP (HyperText Transfer Protocol)데이터를 평문 형태로 전송하므로 데이터 탈취 위험성 존재기본적으로 `80번` 포트데이터의 민감 정보 노출가능성 有HTTPS에 비해 구현과 운영 단순HTTPS (HyperText Transfer Protocol Secure)HTTP에 데이터 암호화가 추가된 프로토콜, 데이터를 암호화하여 전송하므로 중간 공격자의 데이터 읽고 쓰기 방지기본적으로 `443번` 포트데이터 가로채기를 방지하므로 보안 수준 높음서버의 신원을 확인하는 SSL/TLS 인증서가 필요하며, 이로 인해 사용자에게 신뢰성 글 제공📌 최근에는 대부분의 웹사이트가 HTTPS를 기..