본문 바로가기

CS23

[CS] 컴퓨터 구조 보호되어 있는 글 입니다. 2023. 10. 13.
[CS] 운영체제 - 메모리 관리 보호되어 있는 글 입니다. 2023. 10. 2.
DNS란 무엇일까? DNS란 무엇일까? 도메인 이름 시스템(Domain Name System)은 사람이 읽을 수 있는 도메인 이름(ex: www.naver.com)을 읽을 수 있는 IP 주소 (ex: 192.0.2.44)로 변환합니다. 스마트폰이나 노트북부터 대규모 소매 웹 사이트의 콘텐츠를 서비스하는 서버에 이르기까지 인터넷 상의 모든 컴퓨터는 숫자를 사용하여 서로를 찾고 통신합니다. 이러한 숫자를 IP 주소 라고 합니다. 웹 브라우저를 열고 웹 사이트로 이동할 때 긴 숫자를 기억해 입력할 필요가 없습니다. 그 대신 example.com과 같은 도메인 이름을 입력해도 원하는 웹 사이트로 갈 수 있습니다. 인터넷의 DNS 시스템은 이름과 숫자 간의 매핑을 관리하여 마치 전화번호부와 같은 기능을 합니다. DNS 서버는 이름을.. 2023. 8. 19.
CDN이란 무엇일까요? CDN (Content Delivery Network: 콘텐츠 전송 네트워크)란 무엇일까? AWS 공식 문서에 의하면 다음과 같습니다. 콘텐츠 전송 네트워크 (cdn)는 데이터 사용량이 많은 애플리케이션의 웹 페이지 로드 속조를 높이는 상호 연결된 서버 네트워크입니다. 사용자가 웹 사이트를 방문할 때 해당 웹 사이트 서버의 데이터는 사용자의 컴퓨터에 도달하기 위해 인터넷을 통해 이동해야 합니다. 사용자는 해당 서버에서 멀리 떨어져 있는 경우 도영상 또는 웹 사이트 이미지와 같은 대용량 파일을 로드하는 데 시간이 오래 걸립니다. 대신 웹 사이트 컨텐츠는 지리적으로 사용자와 가까운 CDN 서버에 저장되며 훨씬 빨리 도달합니다. 즉, CDN은 최종 사용자와 가까운 곳에 콘텐츠를 캐시하는 지리적으로 분산된 서버.. 2023. 8. 15.
함수형 프로그래밍이란? 프로그래밍의 패러다임이란 무엇일까? 프로그래밍 패러다임은 프로그래머에게 프로그래밍의 관점을 갖게 하고 코드를 어떻게 작성할 지 결정하는 역할을 합니다. 새로운 프로그래밍 패러다임을 통해서 새로운 방식으로 생각하는 법을 배우고, 이를 바탕으로 코드를 작성하게 됩니다. 대표적인 프로그래밍 패러다임에는 절차적, 객체지향, 함수형 프로그래밍이 존재합니다. 명령형 프로그래밍 문제를 어떻게 해결해야 하는지 컴퓨터에게 명령을 내리는 방법의 프로그래밍입니다. fun main() { val arr = arrayOf(1, 2, 3, 4, 5) for (num in arr) { println(num) } } 1. 절차(순차)적 프로그래밍 사실 절차지향이라고 알려져 있는 절차적 프로그래밍은 번역 때문에 오해의 여지가 큽니다... 2023. 8. 5.
[알고리즘] Dynamic Programming (동적 계획법) Dynamic Programming (동적 계획법)이란? 기본적인 아이디어로 하나의 큰 문제를 여러 개의 작은 문제로 나누어서 그 결과를 저장하여 다시 큰 문제를 해결할 때 사용하는 것입니다. DP는 왜 사용하는 걸까? 피보나치 수열을 예시로 들 수 있습니다. 피보나치 수열은 아래와 같습니다. 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... => fibo(n) = fibo(n-1) + fibo(n-2) 이런 알고리즘에서 f(n)을 호출한다고 하면 아래와 같이 중복되는 숫자들이 늘어나게 됩니다. 즉, 시간복잡도가 O(2^n)이 걸리게 됩니다. 하지만 이미 계산했던 값들을 저장한다면 O(n)까지 줄일 수 있습니다. 이것이 DP를 사용하는 이유입니다. DP의 접근방식 기본적.. 2023. 2. 12.
[디자인 패턴] 싱글톤(Singleton) 패턴 싱글톤(Singleton)이란? 소프트웨어 디자인 패턴에서 싱글턴 패턴(Singleton pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. 이와 같은 디자인 유형을 싱글턴 패턴이라고 한다. 주로 공통된 객체를 여러개 생성해서 사용하는 DBCP(DataBase Connection Pool)와 같은 상황에서 많이 사용된다. by 위키피디아 핵심은 객체의 인스턴스를 한 개만 생성되도록 만드는 패턴입니다 싱글톤 패턴을 사용하면 총 3가지 측점에서 이점을 얻을 수 있습니다. 1. 메모리 측면 싱글톤 패턴을 사용하게 된다면 한 개의 인스턴스 만을 고정 메모리 영역에 생성하고 추후 해당 객체를.. 2023. 2. 8.
[디자인 패턴] 프록시 (Proxy) 패턴 공부 배경 android context를 공부하며 context, contextImpl, contextWrapper가 프록시패턴으로 이뤄져있다는 것을 확인할 수 있었습니다. 왜 프록시를 사용하여 아래 그림과 같이 구현된 것인지 공부해보려고 합니다. 프록시 패턴이란? 프록시는 대리인이라는 뜻으로, 무엇인가를 대신 처리하는 의미입니다. 일종의 비서라고 생각하면 됩니다. 연예인에게 먼저 접촉하기 전에 매니저과 일정조율을 하듯 먼저 구현체가 아닌 프록시에게 먼저 물어보는 개념입니다. 이렇게 어떤 객체를 사용하고자 할 때, 객체를 직접 참조하는 것이 아니라, 해당 객체를 대행하는 객체를 통해 대상 객체에 접근하는 방식을 사용하면 해당 객체가 메모리에 존재하지 않아도 기본적인 정보를 참조하거나 설정할 수 있고 또한.. 2023. 2. 4.
[알고리즘] 이분 탐색 / 이진 탐색 (Binary Search) 이진탐색이란? 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법이다. 배열 내부의 데이터가 정렬되어 있어야만 사용할 수 있는 알고리즘 찾으려는 데이터와 중간점 위치에 있는 데이터를 반복적으로 비교해서 원하는 데이터를 찾는 것이 핵심 동작방식 이진탐색 알고리즘은 리스트의 중간 값과 비교하여 검색 값을 찾습니다. 중간값을 찾아야 하기 때문에 반드시 정렬된 배열에서만 사용할 수 있습니다. 동작 방식으로는 다음과 같습니다. 1. 배열의 중간 값을 가져옵니다. 2. 중간 값과 검색 값을 비교합니다. 1) 중간 값이 검색 값과 같다면 종료합니다 (mid = key) 2) 중간 값보다 검색 값이 크다면 기준 배열의 오른쪽 구간을 대상으로 탐색 합니다 (mid < key) 3) 중간 값보다 .. 2022. 10. 8.