전체 글

개발 관련 정보 정리중
CS/네트워크

DNS(Domain Name System)란

네트워크 프로토콜에는 실제 데이터를 실어 나르는 데이터 프로토콜과 이 데이터 프로토콜이 잘 동작하도록 도와주는 컨트롤 프로토콜이 존재한다. 컨트롤 프로토콜에는 ARP, ICMP, DNS가 있다. 이 중 DNS(Domain Name System)는 도메인 주소를 IP 주소로 변환하는 역할을 한다. 도메인 주소가 IP 주소보다 일반 사용자에게 더 익숙하고 서버 IP 변경에 쉽게 대처할 수 있어 네트워크에서 DNS 역할이 매우 중요하다. DNS 소개 웹사이트의 주소는 IP 주소보다 도메인 주소 기반을 자주 사용하는데 이는 사용자가 쉽게 인식하고 기억하기에는 도메인 주소가 적합하기 때문이다. 물론 도메인 주소를 이용하더라도 3계층 IP 주소를 알아야 하고 이를 위해 문자열로 된 도메인 주소를 실제 통신에 필요한..

CS/네트워크

NAT/PAT 란?

NAT(Network Address Translation, 네트워크 주소 변환)는 말 그대로 네트워크 주소를 변환하는 기술이고 구체적으로는 IP 주소를 다른 IP 주소로 변환해 라우팅을 원활히 해주는 기술이다. 우리의 일상에서 흔히 볼 수 있는데 주로 가정에서 사용하는 노트북과 PC는 공유기를 통해, 스마트폰의 5G, LTE에서 사용한다. NAT는 1대1 변환이 기본적이었지만 IP주소가 고갈되는 문제를 해결하기 위해 여러 개의 IP를 하나의 IP로 변환한다. 이를 NAPT(Network Address Port Translation) 혹은 PAT(Port Address Translation)라고 부른다. NAT/PAT의 용도와 필요성 NAT와 PAT는 다양한 곳에서 사용되고 있다. 1. IPv4 주소 고갈..

알고리즘/알고리즘

퀵정렬(Quick Sort)의 개념 및 구현

퀵정렬(Quick Sort)이란? 퀵정렬은 분할정복에 기반한 알고리즘이다. 분할정복이란 전체를 공략하는 대신 전체를 구성하는 구성 요소들을 나누어 잘게 쪼개진 적을 공략하는 개념이다. 퀵 정렬은 아래와 같은 과정으로 분할 정복을 이용해 정렬을 한다. 데이터 집합 내에서 임의의 기준 요소를 선택하고, 기준 요소보다 작은 요소들은 순서에 관계없이 무조건 기준 요소의 왼편에, 큰 값은 오른편에 위치시킨다. 1에서 나눈 데이터 집합들을 다시 1처럼 임의의 기준 요소를 선택하고 같은 방법으로 데이터 집합을 분할한다. 1,2 과정을 더 이상 데이터 집합을 나눌 수 없을 때까지 반복하면 정렬된 데이터 집합을 얻는다. 이를 토대로 예시를 들어보겠다. 요소 5를 기준으로, 5보다 작은 요소는 왼쪽, 5보다 큰 요소는 오..

알고리즘/알고리즘

삽입정렬(Insertion Sort)의 개념 및 구현

삽입 정렬(Insertion Sort) 데이터 집합을 순회하면서 정렬이 필요한 요소를 뽑아내어 이를 다시 적당한 곳에 삽입해 나가는 알고리즘이다. 삽입 정렬도 버블 정렬만큼 구현이 간단해서 프로그래머들에게 애용된다. 삽입 정렬은 아래와 같은 과정을 진행한다.(오름차순 정렬) 데이터 집합에서 정렬 대상이 되는 요소들을 선택합니다. 이 정렬 대상은 왼쪽부터 선택해 나가며, 그 범위가 처음에는 2개지만, 알고리즘 반복 횟수가 늘어날 때마다 1개씩 커진다. 정렬 대상의 최대 범위는 '데이터 집합의 크기 - 1' 이다. 정렬 대상의 가장 오른쪽에 있는 요소가 정렬 대상 중 가장 큰 값을 갖고 있는지 확인한다. 그렇지 않다면 이 요소를 정렬 대상에서 뽑아내고 이 요소가 위치할 적절한 곳을 정렬 대상 내에서 찾는다...

프로그래밍/Git

[Github]Merge 된 PR을 되돌려보자

필자는 개발자 동기들과 코딩테스트 코드리뷰를 진행하고 있다. 그러는 도중 동기 1명이 PR하고 Merge를 해버린 것이다. 이제 Merge된 상태를 다시 원래 대로 되돌려보겠다. 1. 되돌아갈 Commit을 찾는다. 일단 "git reset"을 쓰기 위해 돌아가야할 commit을 확인해야한다. 확인할 수 있는 방법은 2가지가 있다. Github의 해당 repository에서 병합된 브랜치에서 돌아갈 commit id를 확인한다. 터미널에서 git log 명령어를 입력해서 나온 commit id 확인 2. 찾은 commit id를 활용해 되돌아간다. git checkout 해당 브랜치 git reset --hard 425626b073dea4b9841357fbeb02571cf0c9b0f0(commitID) ..

프로그래밍/오류보고

[JUnit] @BeforeAll 사용시 에러

현상 @BeforeAll public void cleanUp() { postsRepository.deleteAll(); } @Test public void test() { generateDummy(); List list = postsRepository.findByOrderByIdDesc(); log.info(list.toString()); Assertions.assertEquals(4, list.size()); Assertions.assertTrue(list.get(0).getId() > list.get(1).getId()); } 테스트 메소드 실행 전에 DB에 값들을 전부 지우고 진행하고 싶어서 @BeforeAll 어노테이션의 cleanUp 메소드를 만들어서 실행했으나 JUnitException 에러가..

알고리즘/알고리즘

버블정렬(Bubble Sort)의 개념 및 구현

정렬은 사전적 의미로 "물건 등을 가지런히 늘어 세우다" 라는 뜻을 갖고 있다. 우리는 정렬을 왜 할까? 이유는 간단하다. 찾을려고 하는 것을 쉽게 찾고싶어서이다. 즉, 탐색을 위해 정렬을 한다는 것이다. 앞으로 정렬 알고리즘 중 활용도가 높은 버블 정렬, 삽입 정렬, 퀵 정렬 3 가지에 대해 알아볼 예정이고 먼저 버블 정렬(Bubble Sort)부터 소개하겠다. 버블 정렬(Bubble Sort) 버블 정렬은 알고리즘이 데이터를 정렬하는 과정이 마치 물 깊은 곳에서 일어난 거품이 수면을 향해 올라오는 모습과 같다고 해서 붙여진 이름이다. 버블 정렬은 데이터 집합을 순회하면서 집합 내의 이웃 요소들끼리의 교환을 통해 정렬을 수행한다. 이해를 돕기위해 제멋대로 나열되어 있는 수의 집합을 오름차순으로 정렬해보..

CS/네트워크

라우팅 설정 방법

2022.06.24 - [네트워크] - 라우터/L3 스위치 : 3 계층 장비 라우터/L3 스위치 : 3계층 장비 라우터는 3 계층에서 동작하고 이름처럼 경로를 지정해주는 장비이다. 라우터에 들어오는 패킷의 목적지 IP 주소를 확인하고 자신이 가진 경로 정보를 이용해 패킷의 최적의 경로로 포워딩한다. rooftoproom-whale.tistory.com 앞서 라우터의 개념들을 알아보았다. 이번에는 라우팅의 우선순위와 각 라우팅 설정 방법에 대해 자세히 알아보자. 다이렉트 커넥티드 라우터나 PC에 IP 주소, 서브넷 마스크를 입력하면 다이렉트 커넥티드 라우팅 테이블이 생성된다. 라우팅 테이블을 확인해 목적지가 다이렉트 커넥티드라면 라우터는 L2 통신(ARP 요청)으로 목적지에 도달한다. 만약 목적지가 외부 ..

옥탑방고래
고래의 코딩일지