본문 바로가기

CS 이론 13

인터넷, VPN, 전용선… 금융권에서 하는 통신 방식 정리 인터넷, VPN, 전용선… 금융권에서 하는 통신 방식 정리 왜 금융권의 통신방식을?보통은 HTTPS만 써서 통신하는 방식도 매우 안전하기 때문에 회사끼리 어떤 정보를 주고받는다고 해도 HTTPS에 방화벽 정도만 하는 경우가 매우 많습니다. 하지만 금융권은 규제도 많고 민감하고 보수적이기 때문에 다양한 통신 방식을 씁니다. 처음 금융 도메인에 오면 이게 너무 낯설고 헤매는 경우가 많아 간단히 정리해 봤습니다.네트워크가 애초에 뭐야?컴퓨터와 컴퓨터를 연결한 것 상상하기 힘들지만 네트워크라는건 컴퓨터와 컴퓨터를 연결한 것입니다. 이 말은 방구석에서 컴퓨터 2대를 사서 연결하면 그게 네트워크가 된다는 겁니다. 물론 방구석 컴퓨터 2대를 연결한다고 해서 그렇게 유용하지는 않겠지만 중요한 건 우리가 인터넷에 접속한다는 건 어떤 형태로든 다른 컴퓨터와 통신을 한다는 겁니다... 2024. 2. 29.
Thread Pool에 적합한 Thread의 개수는 몇 개 일까? Thread Pool에 적합한 Thread의 개수는 몇 개 일까? Thread가 많다고 무조건 좋지는 않다 일반적으로 1개의 요청에 1개의 Thread를 사용하는 Spring 같은 Framework를 사용한다면 Thread를 최대한 많이 할당하고 싶은 충동을 느낄 수 있습니다. 하지만 Thread는 논리적 단위라는 걸 기억해야 합니다. 결국 Thread가 돌아가는건 Process 위에서 결국 Process가 돌아가는 CPU Core 위에서 Thread를 실제로 실행하는 주체를 고려하지 않고 무작정 Thread 개수를 늘리기만 하면 Context Switching으로 인한 Overhead만 증가합니다. Core의 개수만큼 Thread? CPU-Bound한 작업이 대부분이라고 가정할 때, CPU 개수 만큼의 Thread를 두는게 좋습니다. 결국 Thread를 실행하는건 C.. 2023. 12. 25.
동적 계획법(Dynamic Programming) 알아보기 동적 계획법(Dynamic Programming) 알아보기 똑같은 계산을 계속 반복해야 하는 알고리즘에서 계산 값을 저장해 둬서 반복하지 않게 하는 방법 동적 계획법이라는 이름은 아마 정적으로 계획없이 똑같은 계산을 반복하는게 아니라 동적(적극적)으로 계획해서 계산을 줄이는 방법이라 그렇지 않을까 개인적으로 추측해 봅니다. 동적 계획법을 쓰던 안 쓰던, 정확성은 Brute-Force와 차이가 없습니다. 하지만, 훨씬 더 효율적입니다. 예시 : 피보나치 수열 구하기 피보나치 수열은 1, 1 부터 시작해서 그 전 2개의 항을 더한게 n번째 항인 수열입니다. 이 정의를 그대로 코드로 구현하면 아래와 같습니다. fun fibo(n: Int): Int { if (n 2023. 4. 15.
코딩 테스트에서 최대공약수(GCD), 최소공배수(LCM) 유클리드 알고리즘으로 구하기 코딩 테스트에서 최대공약수(GCD), 최소공배수(LCM) 유클리드 알고리즘으로 구하기 코딩 테스트를 풀다 보면 의외로 최대 공약수, 최소 공배수를 구해야 할 일이 많습니다. 직접적으로 최대 공약수 / 최소 공배수를 구하라고 하는 문제도 있지만, 아래의 문제는 모두 간접적으로 최대 공약수 / 최소 공배수를 구해 푸는 문제들입니다. 기약 분수로 만들기 n개로 나눌때 모든 사람이 같은 개수를 가질 수 있게 하기 무식하게 최대 공약수 구해보기 두 수의 약수를 모두 구한다 공통된 약수만 남긴다 거기서 가장 큰 수가 최대 공약수! 최소 공배수는 최대 공약수만 구하면 자동으로 최소 공배수의 의미가 뭘까요? x, y의 최소 공배수라 하면, x, y 모두와 나누어 떨어지는 가장 작은 수 즉, 만약 아래와 같이 x, y가 이루어져 있다면 x, y의 최소 공배수는 a, b, c 3개의 숫자로 모두 나누어 .. 2023. 4. 7.
코딩 테스트 속도 높이기 : 내가 자주 쓰는 Java 문법 설탕(Syntax Sugar) 총정리 코딩 테스트 속도 높이기 : 내가 자주 쓰는 Java 문법 설탕(Syntax Sugar) 총정리 문법 설탕이 뭐야? 말하는건 똑같아도 짜증나게 말하는 사람이 있고, 듣기 좋게 말하는 사람이 있듯, 코드도 하는건 똑같아도 읽기 쉬운 코드가 있고 읽기 힘든 코드가 있습니다. 문법 설탕은 꼭 써야 하는건 아니지만 2가지 장점이 있어 알아두면 좋습니다. 1. 더 읽기 쉬운 코드를 쓸 수 있습니다. 2. 자주 쓰는 기능을 내가 직접 구현하지 않고 내장함수를 써 더 빠른 코딩이 가능합니다. 어떻게 활용할까? 우선, 문법 설탕이 아무리 코딩을 빠르게 해 주고 읽기 쉬운 코드를 만들어 준다고 해서 영어 단어 외우듯 외울 필요는 없다고 생각합니다. 대신, 저는 많이 써 보면 자연스럽게 적재적소에 활용할 수 있게 됐습니다. 자연스럽게 활용하기 위해 추천하는건 항상 코딩 테스트나 코드를 작성하고 리팩토링(Refacto.. 2022. 12. 14.
클라우드가 뭘까? IaaS, PaaS, SaaS 이건 또 뭘까? 클라우드가 뭘까? IaaS, PaaS, SaaS 이건 또 뭘까? 아마존, 마이크로소프트, 구글까지. 미국의 빅테크 기업들이 클라우드 사업에 집중하고 있습니다. 클라우드가 뭐고, 뭐가 그렇게 좋길래 그럴까요? 이 외계어 같은 IaaS, PaaS, SaaS는 뭘까요? 클라우드(Cloud)가 뭔지 간단히 서버라는 말은 우리 일상생활 속에서도 많이 사용됩니다. 근데 서버가 정확히 뭘까요? 서버는 역할의 개념입니다. 서버는 우리가 쓰는 컴퓨터, 스마트폰과 크게 다르지 않습니다. 하지만 서버는 서빙(제공하는) 역할을 하는 컴퓨터를 말합니다. 우리가 웹 사이트에 접속하면 서버한테 웹 사이트 내용을 달라고 요구합니다. 문제는, 매우 많은 사람이 동시에 서버에 요청을 한다는 겁니다. 그래서 서버는 우리가 아는 컴퓨터보다 크고, 많고, 빠릅니다. 당연히 이런 서버를 관리하는건 돈도 많.. 2022. 10. 28.
인터넷을 이해해 보자 : OSI 7 계층? TCP/IP 4계층? 인터넷을 이해해 보자 : OSI 7 계층? TCP/IP 4계층? 인터넷은 어떻게 동작할까요? 인터넷은 현대사회를 이루는 가장 핵심적인 기술이고, 우리의 문화와 삶을 바꿨지만 사실 본질은 매우 간단합니다. 곰곰이 생각해보면, 우리가 인터넷에서 하는 모든 일은 누군가가 다른 컴퓨터에 올려놓은 데이터를 보는 일입니다. 넷플릭스는 누군가가 넷플릭스 컴퓨터(서버)에 올려놓은 동영상을 보는 것이고, 구글은 누군가가 구글의 컴퓨터(서버)에 올려놓은 정보들의 묶음을 보는 것입니다. 근데 이상하다고 느끼실 수도 있습니다. 넷플릭스, 구글은 미국 회사인데, 한국이 미국과 연결되어 있다고? 그렇습니다. 전 세계 바다에는 해저케이블이라고 하는 케이블이 있고, 이 케이블은 전 세계에 있는 컴퓨터를 연결하고 있습니다. 해저케이블이 어디에서 어디로 연결되어 있는지 궁금하시다면 아래 링크에서 확.. 2022. 10. 27.
스텐포드 (Stanford) 대학교 컴공과는 어떤걸 배울까? 총 정리! 스텐포드 (Stanford) 대학교 컴공과는 어떤걸 배울까? 총 정리! 전공 필수 어느 대학이나 전공 필수라고 불리는, 그 전공이라면 반드시 들어야 하는 과목이 있습니다. 스텐포드 대학에서는 총 6개의 과목을 들어야 합니다. Systems CS106 Programming Abstraction - C++를 활용한 기초적인 컴퓨터 공학 지식(데이터 구조, 알고리즘, 프로그래밍 방법론 등 ) CS107 Computer Organization and Systems - UNIX 상에서 하드웨어에서 소프트웨어로의 구조 CS110 Principles of Computer Systems - 큰 스케일의 시스템 만들기(프로세스, 파일 시스템, 네트워킹) Theory CS103 Mathematical Foundations of Computing - 컴퓨터 과학을 공부하기 위해 필요한 수학 지.. 2022. 3. 2.
가변 배열(Dynamic Array), 리스트(List) 가변 배열(Dynamic Array), 리스트(List) 가변 배열(Dynamic Array), 혹은 리스트(List)는, 가장 기초적인 자료구조라 할 수 있는 배열을 개조해서 크기가 자동으로 조절되게 만든 자료구조입니다. 배열은 처음에 크기를 고정해야 합니다. 여러가지 이유가 있지만, 가장 큰 이유는 속도 때문입니다. 하지만 현실의 프로그래밍에서는 크기를 미리 정해두면 불편함이 많아서, 자동으로 크기가 조절되는 배열이 매우 유용합니다. 가변배열의 정의, 추상자료형 가변 배열 (리스트)은 말 그대로 크기가 변할 수 있는 배열입니다. 하지만 크기가 변한다는 것 이외에는 일반적인 배열과 똑같습니다. 우선, 가변 배열에 필요한 매소드가 어떤 것이 있을지 생각해 보면 좋을거 같습니다. 우선 가변 배열은 외부적으로는 크기가 정해져 있지 않고 유연하게 늘어나는 것 처럼 .. 2021. 5. 28.
모든 자료구조는 배열(Array)로 통한다 모든 자료구조는 배열(Array)로 통한다 배열은 거의 대부분의 프로그래밍 언어가 가지고 있고, 많은 자료구조의 기초가 되는 중요하고 기본적인 자료구조이다. 배열은 프로그래밍을 조금이라도 한 사람이라면 이미 익숙한 경우가 많겠지만, 자료구조의 관점에서 다시 한번 배열을 들여다보자. 배열의 정의 배열은 데이터와 인덱스가 대응되도록 한 자료구조이다. 배열은 크기가 정해져 있고, 배열의 인덱스는 일반적으로 0에서 시작한다. 배열은 사실상 가장 간단한 자료구조 중에 하나이다. 배열은 단순히 데이터를 정해진 개수만큼 순서대로 배치한 것이기 때문에 이보다 더 간단하게 데이터를 배치할 방법은 없다. 하지만, 그만큼 제한이 많은 데이터 구조 중에 하나이다. 우선, 크기가 정해져 있기 때문에 정해진 크기가 다 차면 더 이상 데이터를 추가할 수 없고, 또 중간에 .. 2021. 5. 24.
추상 자료형(Abstract Data Type)을 왜 알아야 할까 추상 자료형(Abstract Data Type)을 왜 알아야 할까 자료구조를 배우기도 전에 추상 자료형을 배워야 하는 게 좀 이상할 수 있다. 하지만, 특정한 자료구조는 추상 자료형을 구현한 것에 지나지 않는다. 똑같은 추상 자료형도, 다양한 방법과 다양한 프로그래밍 언어로 구현할 수 있고, 구현을 하기 전에 규칙을 정의하는 건 기본이기 때문에 추상 자료형을 잘 이해하는 것은 자료구조를 이해하기 위한 첫걸음이다. 추상 자료형이란? 추상 자료형은 자료구조가 따라야 할 규칙들을 추상적으로 정의한 것이다. 추상 자료형은 실제로 이 자료구조를 어떻게 구현해야 하는지는 전혀 언급하지 않는다. 추상 자료형은, 영어로 Abstract Data Type라고도 하는데, 이를 줄여서 ADT로 나타내는 경우도 많다. 구체적으로는, 추상 자료형은 자료구조가 어떤 자료를 저장하는지와, 어떤 .. 2021. 5. 22.
빅 오 표기법(Big-O Notation), 알고리즘의 효율을 알려줘 빅 오 표기법(Big-O Notation), 알고리즘의 효율을 알려줘 컴퓨터 프로그램을 만들 때 가장 중요한 것은 2가지이다. 얼마나 빠른가 와 얼마나 적은 공간을 차지하는가. 아무리 좋은 프로그램이라도 너무 느리면 소용이 없고, 아무리 좋은 프로그램이라도 너무 크면 소용이 없다. 게임이 아무리 재밌어도 한 번 키는데 1시간이 걸리고, 용량이 2TB라고 해 보자. 그 게임을 사용할 사람은 없을 것이다. 이런 극단적인 예시가 아니라도, 프로그램을 최대한 빠르고 용량을 적게 차지하게 하는 건 중요하다. 이런 효율을 측정해 주는 방법 중 하나가 바로 빅 오 표기법이다. Big-O가 뭘까? Big-O 표기법은, 쉽게 말해 컴퓨터 프로그램의 효율성을 최악을 가장하고 측정해 주는 것이다. BIg-O 표기법에서는, 데이터가 말도 안 되게 커질때의 효율을 측정한다. 사실, 데이터가 적으.. 2021. 5. 20.
자료구조? 그게 뭔데 씹덕아 자료구조? 그게 뭔데 씹덕아 네카라쿠배당토에 갈 꿈을 꾸고 있거나, 프로그래머로서 어디서 말 좀 하고 싶다면 자료구조와 알고리즘을 알아야 한다고 합니다. 흔히 말하는 코딩 테스트가 바로 이 자료구조와 알고리즘을 다루는 능력을 보는 시험입니다. 이 자료구조가 뭐고, 왜 중요하고, 알고리즘이랑 무슨 상관이 있을까요? ⁉️ 자료구조가 뭐야? 어떤 단어가 뭐냐고 물어볼 때 가장 짜증나게 대답하는 방법은 그 단어를 그대로 반복하는 겁니다. 자료구조는 자료를 구조화하는 방법입니다. 더 자세히는 자료(데이터)를 저장하는 방법입니다. 데이터를 저장하는 방법이 왜 그렇게 중요할까요? 그 이유는 세상에는 다양한 종류의 데이터가 있는데 컴퓨터는 기본적으로 모든 자료를 1차원으로 저장하기 때문입니다. 예를 들어체스판도 일종의 데이터라고 할 수 있는데, .. 2021. 5. 18.
반응형