CS
12 posts
네트워크 기기

네트워크는 여러 개의 네트워크 기기를 기반으로 구축된다. 네트워크 기기의 처리 범위 네트워크 기기는 계층별로 처리 범위를 나눌 수 있다. 이 때 상위 계층을 처리하는 기기는 하위 계층을 처리할 수 있지만, 그 반대는 불가능하다. 애플리케이션 계층: L7 스위치 인터넷 계층: 라우터, L3 스위치 데이터 링크 계층: L2 스위치, 브리지 물리 계층: NIC, 리피터, AP → L7 스위치: 모든 계층의 프로토콜 처리 가능 / AP: 물리 계층만 처리 가능 애플리케이션 계층 처리 기기 L7 스위치 라고도 하며, 서버의 부하를 분산하는 기기로, 클라이언트로부터 오는 요청들을 뒤쪽의 여러 서버로 나누는 역할을 한다. 이를 통해 시스템이 처리할 수 있는 트래픽을 증가시킬 수 있다. URL, 서버, 캐시, 쿠키들을 기반으로 트래픽 분산 바이러스, 불필요한 외부 데이터 필터링 기능 트래픽 모니터링 헬스 체크를 통해 정상/비정상적인 서버 판별 ❓ 로드밸런서를 이용한 서버 이중화 에러 발생 시 서…

June 12, 2023
CS
TCP/IP 4계층 모델

계층 구조 TCP/IP 계층은 4개의 계층을 가지고 있으며 OSI 7계층과 많이 비교한다. TCP/IP 4계층 → OSI 7계층 애플리케이션 계층 → 애플리케이션, 프레젠테이션, 세션 계층 전송 계층 → 전송 계층 인터넷 계층 → 네트워크 계층 링크 계층 → 데이터 링크, 물리 계층 이 계층들은 특정 계층이 변경되었을 때 다른 계층이 영향을 받지 않도록 설계되었다. ex) 전송 계층에서 TCP → UDP 변경되었다고해도 인터넷 웹 브라우저를 다시 설치하지 않아도 됨 TCP/IP 4계층 대표 스택 애플리케이션 계층: FTP, HTTP, SSH, SMTP, DNS 전송 계층: TCP, UDP, QUIC 인터넷 계층: IP, ARP, ICMP 링크 계층: 이더넷 1. 애플리케이션 계층 애플리케이션 계층은 FTP, HTTP, SSH, SMTP, DNS 등 응용 프로그램이 사용되는 프로토콜 계층이다. 주로 웹 서비스, 이메일 등 사람들에게 실질적으로 서비스를 제공하는 층이다. FTP: 장치…

June 05, 2023
CS
네트워크 기초

네트워크 네트워크란 노드와 링크가 서로 연결되어 있으며, 리소스를 공유하는 집합을 의미한다. 노드: 서버, 라우터, 스위치 등 (네트워크 장치) 링크: 유선/무선 네트워크를 구축할 때 ‘좋은’ 네트워크는 많은 처리량을 처리할 수 있으며, 지연 시간이 짧고, 장애 빈도가 적으며, 좋은 보안을 갖춘 네트워크를 말한다. ❓ 처리량 링크 내에서 성공적으로 전달된 데이터의 양을 말한다. 보통 얼만큼의 트래픽을 처리했는지를 나타낸다. 많은 트래픽을 처리한다 = 많은 처리량을 가진다 트래픽이 많아졌다 = 흐르는 데이터가 많아졌다 처리량이 많아졌다 = 처리되는 트래픽이 많아졌다. 처리량은 다음에 따라 달라질 수 있다. 사용자 접속량에 따라 커지는 트래픽 네트워크 장치 간의 대역폭 네트워크 중간에 발생하는 에러 장치의 하드웨어 스펙 트래픽 서버를 통해 최종 사용자에게 전달된 데이터의 양 (트래픽 = 용량 x 사용자 수 x 개수) 트래픽에서 시간 개념을 추가하게 되면 초당 처리할 수 있는 데이터의 …

June 03, 2023
CS
디자인 패턴

디자인 패턴은 프로그램을 설계할 때 발생했던 문제점들을 객체 간 상호 관계 등을 이용해 해결할 수 있도록 하나의 ‘규약’형태로 만들어 놓은 것을 의미한다. 1. 싱글톤 패턴 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴. 보통 에 많이 사용된다. 하나의 인스턴스를 만들어 놓고 해당 인스턴스를 다른 모듈들이 공유하며 사용한다. 장점: 인스턴스 생성 비용↓, 사용하기 쉽고 실용적 단점: 의존성↑, 모듈 간 결합↑ 미리 생성된 하나의 인스턴스 기반으로 구현하므로 테스트마다 독립적인 인스턴스를 만들기 어려움 → TDD(Test Driven Development) 개발의 단위 테스트 시 좋지 않다. 단위테스트는 테스트가 서로 독립적이어야 하며, 테스트를 어떤 순서로든 실행할 수 있어야 한다. ❓ 의존성 주입(DI, Dependency Injection) 의존성이 있다는 것은 B의 변경 사항에 대해 A 또한 변경해야 하는 것을 의미한다. 의존성 주입을 통해 모듈 간 결합을 조금 더 느슨…

June 01, 2023
CS
프로그래밍 패러다임

프로그래밍 패러다임은 프로그래머에게 프로그래밍의 관점을 갖게 해주는 역할을 하는 개발 방법론이다. 크게 선언형, 명령형으로 나뉜다. 선언형: 함수형 명령형: 객체지향형, 절차지향형 1. 선언형 선언형 프로그래밍은 ‘무엇을’ 풀어내는가에 집중하는 패러다임이며, 함수형 프로그래밍이 이에 해당한다. 함수형 프로그래밍 작은 ‘순수 함수’들을 블록처럼 쌓아 로직을 구현하고 ‘고차 함수’를 통해 재사용성을 높인 프로그래밍 패러다임이다. 자바스크립트의 경우 함수형 프로그래밍 방식이 선호된다. ❓ 순수 함수 출력이 입력에만 의존하는 것을 의미한다. 들어오는 매개 변수 a,b 에만 영향을 받는다. 만약 다른 전역 변수 c 등이 출력에 영향을 주면 순수 함수가 아니다. ❓ 고차 함수 함수가 함수를 값처럼 매개변수로 받아 로직을 생성할 수 있는 것을 말한다. 이 때, 고차 함수를 쓰기 위해서는 해당 언어가 일급 객체라는 특징을 가져야 하며, 그 특징은 다음과 같다. 변수나 메서드에 함수를 할당할 수 …

June 01, 2023
CS
선형 자료구조 - 배열

배열 (Array) 여러 개체값을 순차적으로 나열한 선형 자료 구조 대표 속성과 메서드 배열 크기 및 배열 여부 확인: , 추가/삭제: , , , , , 등 탐색: , , 변형: , , 반복: , , , , , 논리연산: , 배열 선언/접근/속성 선언: 혹은 를 통해 선언하며, 사이즈 혹은 값을 입력하여 초기화도 가능 접근 방법: 를 통해 index를 통하여 O(1) 접근 배열 속성: 를 통해 배열 요소의 개수 확인 가능 배열의 실체 자바스크립트에서 배열은 다른 언어에서 말하는 일반적인 배열이 아닌 Hash 기반의 객체이다. 메모리가 연속적인 밀집 배열(dense array)이 아닌 비연속적인 희소 배열(sparse array)이다. 배열 타입 확인 및 요소 삭제 배열 타입 확인 배열 요소 삭제 배열의 일부 요소를 삭제한다. *단 삭제해도 배열 사이즈가 그대로이다. 배열 조작 배열 추가/삭제 (LIFO - Back) 배열 추가/삭제 (LIFO - Front) 배열 삭제…

March 21, 2023
CS
잃어버린 카드 찾기 (연습문제)

문제 등차 수열을 이루는 4개의 숫자 카드를 받았는데, 한 카드를 잃어버렸다. 잊어버린 카드를 찾아주자. 입력은 자연수로 된 3개의 숫자 카드를 받고, 한 가지의 잃어버린 카드의 수를 반환한다. 단, 잃어버린 카드는 가운데 숫자 카드로 한정한다. 예시 예를 들어 1, 7, 10을 입력 받았을 때 초항이 1이고, 두 수의 차가 3인, 등차 수열 1, 4, 7, 10을 찾아 4를 반환하도록 한다. 코드 👉 방법1 👉 방법2 문제 코드 👉 방법1 👉 방법2

March 20, 2023
CS
등차수열의 항 찾기 (연습문제)

문제 입력된 값을 통해서 등차 수열의 몇 번째 항인지를 구하는 프로그램을 작성하시오. 입력은 초항 , 인전합 차이 , 찾는 항의 수 이 주어지며, 값에 해당하는 항 번호를 반환한다. 단, 만약 항 번호가 없을 시에는 -1를 반환한다. 예시 예를 들어 , , 이 주어졌을 때 , , , 이 되므로 에 해당하는 항인 4를 반환한다. 코드 👉 방법1 👉 방법2 (성능↑) 문제 코드 👉 방법1 👉 방법2 (성능↑)

March 19, 2023
CS
점화식(재귀식)

점화식 (재귀식) 점화식(재귀식)이란 수열에서 이웃하는 두 개의 항 사이에 성립하는 관계를 나타낸 관계식이다. 대표적인 점화식 등차 수열: *a: 고정된 상수 등비 수열: 팩토리얼: 피보나치 수열: ex) 등차수열 등차수열 F(n) = F(n-1) + a for문 다음 예제의 파라미터에서 각각 의미하는 값은 는 f(1)일 때 시작하는 값, 는 간격, 는 등차수열의 몇번째 값을 구할것인지 f(n)의 n을 의미한다. 재귀함수 재귀 과정 등비수열 F(n) = F(n-1) * a for문 재귀함수 팩토리얼 F(n) = F(n-1) * n 피보나치 수열 F(n) = F(n-1) + F(n-2) 점화식 (재귀식) 등차수열 for문 재귀함수 등비수열 for문 재귀함수 팩토리얼 피보나치 수열

March 18, 2023
CS
경우의 수 (순열과 조합)

경우의 수 어떤 사건 혹은 일이 일어날 수 있는 경우의 가짓수를 수로 표현한 것이다. 그 중 완전 탐색으로 경우의 수를 푸는 대표적 알고리즘으로는 순열과 조합이 있다. 재귀함수 이해하기 들어가기 앞서, 순열과 조합을 구할 때 사용되는 재귀함수에 대해서 먼저 이해하고 넘어가자. 재귀함수는 내부적으로 자기 자신을 호출하는 함수이다. 반드시 종료 조건이 필요하다는 특징을 가지고 있다. 재귀 호출을 너무 많이 하게되면 스택 메모리 영역에 너무 많은 공간을 할당하게 되어 스택 오버플로가 발생할 수 있다는 점을 주의해야 한다. 그래서 재귀 함수를 구현할 때는 최악의 경우 얼마나 많은 재귀 호출이 발생하는지 잘 살펴보아야 한다. 👌 종료 조건을 만족할 때 일어나는 일 재귀호출 후 종료 조건에 도달했을 때 실행 과정을 하나하나 풀어서 써보았다. 시작 재귀 호출을 반복하다가 가 호출되면 값이 5가 되어 종료 조건 만족 return 문을 만나 종료 에서 를 호출했던 위치의 다음 로직으로 2를 …

March 09, 2023
CS
알고리즘 시간 복잡도

알고리즘 평가 지표 정확성 작업량 메모리 사용량 최적성 효율성 - 시간 복잡도 / 공간 복잡도 코딩테스트 진행 시 많이 보게 되는 것이 메모리 사용량과 효율성 중에서도 시간 복잡도 부분이다. 시간 복잡도 효율적인 문제 해결방법을 고민한다는 것은 시간 복잡도를 고민한다는 것과 같다. 알고리즘의 로직을 코드로 구현할 때 시간 복잡도를 고려한다는 것은 ’입력값의 변화에 따라 연산을 실행할 때, 연산 횟수에 비해 시간이 얼마만큼 걸리는가?’ 라는 말이다. 즉, 한다는 말이다. 그리고 이 시간 복잡도는 주로 빅-오 표기법을 사용해 나타낸다. 시간 복잡도는 빅오, 세타, 오메가 세 가지 표기법으로 각각 최악, 평균, 최선의 경우에 대하여 나타낸다. 이 때 빅오 표기법이 최악의 경우를 고려하므로, 프로그램이 실행되는 과정에서 소요되는 최악의 시간까지 고려할 수 있기 때문에 자주 사용된다. 결과를 반환하는데 최선의 경우 1초, 평균적으로 1분, 최악의 경우 1시간이 걸리는 알고리즘을 구현했고,…

February 23, 2023
CS
자료구조/알고리즘 개요

자료구조 자료구조는 선형과 비선형 자료구조로 나눌 수 있다. 선형 자료구조: 배열, 큐, 연결 리스트(이중/원형), 해시 테이블(선형/체이닝/딕셔너리), 스택, 데크 비선형 자료구조: 그래프(BFS/DFS), 트리(이진/이진탐색), 힙, 트라이 알고리즘 1. 알고리즘 복잡도 (시간 복잡도) 입력 크기의 값에 대해 단위 연산을 몇 번 수행하는지 계산하여, 알고리즘의 수행시간을 평가하는 방법 3가지 점근적 표현법 O (빅오): 최악의 상황을 고려하여 성능 측정 결과 표현 Θ (세타): 평균적인 경우에서의 성능 측정 결과 표현 Ω (오메가): 최선의 상황일 때의 성능 측정 결과 표현 2. 경우의 수 (순열과 조합) 어떤 사건 혹은 일이 일어날 수 있는 경우의 가짓수를 수로 표현 일상생활에서의 경우의 수 주사위: 던지는 결과, 1~6 사이의 숫자이므로 경우의 수는 6 윷: 던지는 결과, 도, 개, 걸, 윷, 모 이므로 경우의 수는 5 가위바위보: 게임 결과, 가위, 바위, 보 중에 하나…

February 20, 2023
CS