본문 바로가기

CS 이론 15

컴파일러가 기본적으로 하는 최적화를 알아보자 컴파일러가 기본적으로 하는 최적화를 알아보자 컴파일러는 실제 코드에 어떤 최적화를 할까?사람이 작성한 코드는 컴퓨터 입장에서 그대로 실행하면 비효율적인 경우가 많습니다.당장 여러 좋은 설계 원칙에서는 코드를 함수나 객체로 분리하라는 경우가 많은데 분리할수록 컴퓨터 입장에서는 함수를 찾고 호출해야 하기 때문에 분리되지 않은 것에 비해서는 비효율적입니다.또, Clean Code에서 말하는 Magic Number를 쓰지 말고 명확히 변수로 분리하라는 원칙도 그렇습니다. // 구의 부피를 계산하는 프로그램: 효율적인 버전fun calculate(radius: Double): Double { return 4.18666667 * radius * radius * radius}// 구의 부피를 계산하는 프로그램: 조금 비효율적이지만 읽기 쉬운 버전fun c.. 2025. 1. 28.
인터넷, VPN, 전용선… 금융권에서 하는 통신 방식 정리 인터넷, VPN, 전용선… 금융권에서 하는 통신 방식 정리 금융권의 통신방식은 뭐가 다를까?보통은 HTTPS만 써서 통신하는 방식도 매우 안전하기 때문에 회사끼리 어떤 정보를 주고받는다고 해도 HTTPS에 방화벽 정도만 하는 경우가 매우 많습니다. 하지만 금융권은 규제도 많고 민감하고 보수적이기 때문에 다양한 통신 방식을 씁니다. 처음 금융 도메인에 오면 이게 너무 낯설고 헤매는 경우가 많아 간단히 정리해 봤습니다.네트워크가 애초에 뭐야?컴퓨터와 컴퓨터를 연결한 것 상상하기 힘들지만 네트워크라는건 컴퓨터와 컴퓨터를 연결한 것입니다. 이 말은 방구석에서 컴퓨터 2대를 사서 연결하면 그게 네트워크가 된다는 겁니다. 물론 방구석 컴퓨터 2대를 연결한다고 해서 그렇게 유용하지는 않겠지만 중요한 건 우리가 인터넷에 접속한다는 건 어떤 형태로든 다른 컴퓨터와 통신을 한다는.. 2024. 2. 29.
프로그래밍 언어는 왜 그렇게 많을까? 프로그래밍 언어는 왜 그렇게 많을까? 프로그래밍 언어는 많다... 엄청.프로그래밍 언어는 엄청 많습니다. 개수만 따지면 8,000개가 넘고, 자주 쓰이는 것만 추려도 50개는 됩니다. 저만 해도 회사와 개인적으로 쓰고 있는 프로그래밍 언어를 세 보면...Kotlin: 회사에서 주로 쓰는 언어Java: 회사의 레거시 프로젝트에서 쓰는 언어Python: 일부 회사 프로젝트에서 쓰는 언어SQL: DB 관련 작업을 할 때 쓰는 언어HTML: 회사나 개인 프로젝트에서 웹사이트, 이메일 등의 UI를 표현할 때 쓰는 언어CSS: 회사나 개인 프로젝트에서 웹사이트, 이메일 등의 UI를 꾸밀 때 쓰는 언어JS: 회사나 개인 프로젝트에서 웹사이트의 로직을 넣을 때 쓰는 언어TS: JS에 Type System을 추가한 언어Swift: iOS 개발을 할 때 쓰는.. 2024. 1. 13.
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.
망분리 (Network Segregation), 왜 필요할까? 망분리 (Network Segregation), 왜 필요할까? 망분리는 말 그대로, 망(네트워크)를 분리한다는 것입니다.보통 우리가 개인적으로 쓰는 컴퓨터는 아무 제한 없이 인터넷을 접속할 수 있습니다. 그렇기 때문에 바이러스에 감염될 수도 있고, 여러 공격의 대상이 될 수도 있습니다.하지만 보안적으로 매우 중요한 곳에 이런 컴퓨터로 접근한다면 어떨까요? 나도 모르게 감염된 바이러스가 옮겨지거나, 내 컴퓨터를 통해 공격을 할 수 있을 지도 모릅니다. 그래서 망분리라는 개념이 나왔습니다.망분리라고 인터넷이 안 되는건 아니다망분리라고 무조건 인터넷이 안 되는건 아닙니다. 망분리의 핵심은 중요한 곳을 접속할 때 보안을 위해 불필요한 네트워크 접근을 차단하는 것이기 때문에, 꼭 필요할 경우 특정 사이트를 허용할 수는 있습니다.망분리를 적용하는 여러가지 방법보안이 어느정도 .. 2023. 9. 27.
동적 계획법(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.
가변 배열(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.
반응형