본문 바로가기

👨‍💻 프로그래밍 99

통계를 처리하기 위한 Table을 만드는 설계는 바람직할까? 통계를 처리하기 위한 Table을 만드는 설계는 바람직할까? 통계용 Table을 만든 이유제가 만들고 있는 사이트 책잇아웃에는 1년간의 독서내역 통계를 보여주는 기능이 있습니다.통계는 사이트를 들어갈 때 마다 보이는데, 들어갈 때 마다 1년간의 모든 독서 활동을 SELECT 해서 계산해서 보여주면 너무 비효율적이라 생각해 보여주는 통계를 독서활동을 INSERT 할 때 마다 갱신해서 그 통계만 보여주면 좋을거라 생각해 통계용 Table을 만들었습니다.통계용 Talbe이 재앙이 된 이유우선, SELECT가 INSERT/UPDATE 보다 많은것 자체는 사실입니다. 하지만 INSERT/UPDATE가 일어 날 때 마다 코드 레벨에서 Transaction으로 통계 Table을 갱신해 줘야 하는건 상당한 부담입니다.1. 코드가 쓸데없이 복잡해집니다. 통계용 Table의 역할은.. 2023. 4. 28.
스프링 서큐리티(Spring Security) 구조 이해하기 스프링 서큐리티(Spring Security) 구조 이해하기 스프링 서큐리티 (Spring Security)? 그거 어떻게 하는 건데?Spring Security는 말 그대로 Spring 기반 애플리케이션에 보안을 제공하는 프레임워크입니다. 제공하는 기능은 아래와 같습니다. 인증 / 인가 (아래서 설명)일반적인 보안 위협 방어 (CSRF, XSS, SQL Injection)세션(Session) 관리다른 Spring의 프로젝트들과 연동 보안에 관한 기본적인 용어를 알아보자리소스Resource보호하고자 하는 대상접근 주체Principal접근하는 사람 (일반적으로 아이디)자격 증명Credential접근하는 사람이 본인이라는 걸 증명할 수 있는 정보 (일반적으로 비밀번호)역할RolesPrincipal이 가지고 있는 권한인증Authentication정말 그 사람이 맞는지 .. 2023. 4. 11.
여러가지 프로그래밍 패러다임 알아보기 (명령형, 함수형, 논리형 등) 여러가지 프로그래밍 패러다임 알아보기 (명령형, 함수형, 논리형 등) 세상에는 정말 다양한 프로그래밍 언어가 있습니다. 웹 개발자가 필수적으로 배워야 한다고 여겨지는 프로그래밍 언어만 나열해도 5개는 무조건 넘을 거 같습니다.  하지만 프로그래밍 언어가 다 같은 프로그래밍 언어가 아니라는거 알고 계셨나요? 프로그래밍 언어의 짧은 역사1. 처음 프로그래밍 언어는 기계어와 1:1 매칭되는 어쎔블리(Assembly)에서 시작했습니다.2. 구조적 프로그래밍 : 더 복잡한 구조를 쉽게 표현하기 위해 if, else, while, for 등을 도입3. 절차적 프로그래밍 : 함수를 도입해 코드의 반복, 복잡도를 줄임4. 객체지향 프로그래밍 : 프로그램을 객체들의 협력으로 봄5. 함수형 프로그래밍 : 구체적인 방법을 묘사하지 않고, 원하는 것을 함수들을 사용해 선언프로그래밍 언어의 궁극.. 2023. 4. 8.
쿠버네티스가 뭘까? 작동원리, 아키텍처 정리! 쿠버네티스가 뭘까? 작동원리, 아키텍처 정리! 쿠버네티스 (Kubernetes, K8S)가 뭘까? 컨테이너(Container)를 관리해 주는 소프트웨어 IT 업계가 하나의 큰 서버를 여러개의 마이크로서비스로 나누면서, 각각의 마이크로서비스가 독립적으로 작동할 필요가 생겨, VM보다 가벼운 컨테이너를 사용하게 됐습니다. 처음에는 수동으로 관리하거나, Docker Compose 같이 간단하게 관리하는 것으로 충분했지만, 점점 컨테이너들의 복잡도가 증가하면서 쿠버네티스를 사용해 컨테이너를 관리하게 됐습니다. 컨테이너는 보통 Docker를 떠올리지만, 쿠버네티스는 Docker를 포함해서 Containerd, CRI-O, rkt도 지원합니다. 쿠버네티스에 관한 흥미로운 사실들 구글에서 처음 개발했습니다. Golang이라는 프로그래밍 언어로 개발 됐습니다. 전.. 2023. 4. 2.
로드 밸런서(Load Balancer)에 쓰이는 알고리즘 로드 밸런서(Load Balancer)에 쓰이는 알고리즘 Load Balancer란?서버의 트래픽(요청)을 분산시키는 장치우리가 컴퓨터에 너무 많은 프로그램을 켜 놓으면 느려지고, 최악의 경우 블루스크린이 뜨며 작동을 중지하듯, 서버 또한 너무 많은 요청을 받으면 부담이 됩니다. Load Balancer는 부하(Load)를 밸런싱(Balance)해 주는 장치를 말합니다. 네이버 홈페이지를 생각해 보면, 하루에 네이버를 찾는 사람이 1000만명은 될 겁니다. 이 모든 요청은 1개의 서버가 받는다면 네이버 홈페이지는 터지는게 일상일테지만, 로드 밸런서가 한 요청은 춘전의 데이터센터에 보내고, 한 요청을 서울로 보내는 식으로 분산시킨다면 터지지 않을 것입니다. 그렇다면 로드 밸런서는 어떤 식으로 트래픽을 분산시킬까요?흔히 쓰이는 알고리즘Round Robin라운드 로.. 2023. 4. 1.
마이크로서비스(MSA)를 쓰는 이유 마이크로서비스(MSA)를 쓰는 이유 초반에 프로그래밍을 공부하면서 틈틈히 IT 기업들의 발표회를 보곤 했는데, 거의 알아들을 수 없어서 충격을 받았던 적이 있습니다. 아직 갈 길이 멀구나 좌절하고, 반년 정도 열심히 공부한 후 다시 봤는데, 놀랍게도 똑같이 거의 알아들을 수 없었습니다. 나중에 알고 보니, 제가 알아듣지 못한 내용은 모두 MSA 관련 내용이였습니다. MSA(마이크로서비스 아키텍처), 말 그대로 서비스를 작게(마이크로하게) 만든다는 것입니다.대기업들은 굳이 왜 MSA를 사용할까요? MSA를 배워 보면 그 이유가 명확해 집니다. MSA에 관한 공부를 앞두고 계신다면, 그 전에 MSA가 정말 왜 필요한지 알려드리겠습니다. 크면 클 수록, 관리가 힘들고 예상치 못한 오류들이 많이 나온다구글이나 마이크로소프트 같은 실리콘벨리의 큰 .. 2023. 3. 28.
Github Pages에 React Router 적용된 React App 배포하기 Github Pages에 React Router 적용된 React App 배포하기 Github Pages라는, Github에서 무료로 제공하는 호스팅 서비스가 있습니다. 보통은 HTML/CSS/JS로 만들어진 간단한 페이지를 배포하지만, React App도 build하면 결국 HTML/CSS/JS로 이루어져 있기 때문에 React App도 배포 가능합니다. 하지만 문제가 있습니다. React Router를 사용한 React App을 Github Pages에 배포하면 제대로 동작하지 않고 아래와 같은 화면이 나온다는 겁니다. 이건 왜 발생하고 어떻게 해결할까요? 왜 안 될까? React Router에서는 HTML history라는 기술을 사용해 URI 이동을 구현하고 있는데, Github Pages에서는 HTML history를 지원하지 않는다고 합니다. 그래서 React Router가.. 2022. 11. 11.
Clean Code, 읽기 쉬운 코드를 쓰는 법 Clean Code, 읽기 쉬운 코드를 쓰는 법 처음 프로그래밍을 배우면 문법을 잘 지키는 것만으로도 벅찹니다. 열심히 코드를 쳤는데 console창에 뜨는 무수한 에러를 보면 한숨만 나옵니다. 하지만 점점 프로그래밍에 익숙해지면 요구사항에 맞게 코딩하는 거는 어느 정도 할 수 있게 되지만, 이게 끝이 아닙니다. 더 좋은 프로그래머가 되려면 코드를 단순히 옳바르게 쓰는 거뿐만 아닌, 읽기 쉽게 써야 합니다. 이런 읽기 쉬운 코드를 흔히 Clean Code, 즉 깨끗한 코드라 부릅니다. Clean Code가 왜 중요하고, 어떻게 하면 Clean Code를 쓸 수 있을까요?Clean Code는 왜 중요할까?Clean Code가 중요한 이유는 내가 쓴 코드는 한 번 쓰고 끝이 아니라, 계속 살아 숨쉬기 때문입니다. 즉, 내가 쓴 코드는 나를 포함한 누군가가.. 2022. 9. 17.
도커(Docker)가 뭐고 어디에 쓰는걸까? 도커(Docker)가 뭐고 어디에 쓰는걸까? 요즘 도커(Docker)라고 불리는 기술이 굉장히 인기가 많습니다. 개발자로서 아래의 이미지의 파란색 고래를 한 번쯤은 보신 적이 있으실텐데요. 이 도커! 도대체 뭐고 어디에 쓰는 걸까요? 간단하게 알려드리겠습니다. 도커가 뭐야? 도커(Docker)는 쉽게 말해 가상머신(VM) 같은거라고 생각하면 됩니다. 근데 가상머신의 단점을 빼고 장점만 모은겁니다. 가상머신이 뭘까요? 저는 몇 년째 맥북을 쓰고 있는데, 가끔 어렸을 때 하던 메이플스토리가 하고 싶을 때가 있어요. 하지만 맥북에서는 메이플스토리가 돌아가지 않습니다...! 그래서 맥북에 원도우를 깔아서 메이플스토리를 하곤 했습니다. 이때 MacOS가 돌아가고 있는 상태에서, 또 다른 OS인 Windows를 가상머신의 형태로 설치한 겁니다. 이런 가상머신.. 2022. 8. 16.
프로그래밍 학원/부트캠프 총 정리! 프로그래밍 학원/부트캠프 총 정리! 개발자라는 직업은 매력적인 직업입니다. 진입 장벽이 다른 직업에 비해 적은데 연봉은 높은 편이니 많은 분들이 하려는 게 이해가 갑니다. 정부 입장에서도 개발자라는 직업은 4차 산업 직군이기도 하고, 부가 가치도 높으니 실력 있는 개발자가 많은 게 국가에 나쁜 영향은 끼치지 않습니다. 그래서 관련 학원도 많고 지원도 많은데, 너무 많아서 헷갈리지 않으신가요? 저도 학원을 가기 위해 알아본 정보들을 간단하게 정리해 봤습니다.컴퓨터 학원이라 해도 다 같지는 않다! 컴퓨터 학원의 4가지 종류우선, 같은 컴퓨터 학원이라고 불려도 다 같은 컴퓨터 학원이 아닙니다! 제 마음대로 컴퓨터 학원을 4가지 종류로 나누자면 아래와 같습니다.일반적인 국비지원학원좋은 국비지원학원민간 부트캠프우테코국비지원이라는 건 학원비 전액을 .. 2022. 6. 10.
스텐포드 (Stanford) 대학교 컴공과는 어떤걸 배울까? 총 정리! 스텐포드 (Stanford) 대학교 컴공과는 어떤걸 배울까? 총 정리! 전공 필수어느 대학이나 전공 필수라고 불리는, 그 전공이라면 반드시 들어야 하는 과목이 있습니다. 스텐포드 대학에서는 총 6개의 과목을 들어야 합니다.SystemsCS106 Programming Abstraction - C++를 활용한 기초적인 컴퓨터 공학 지식(데이터 구조, 알고리즘, 프로그래밍 방법론 등 )CS107 Computer Organization and Systems - UNIX 상에서 하드웨어에서 소프트웨어로의 구조CS110 Principles of Computer Systems - 큰 스케일의 시스템 만들기(프로세스, 파일 시스템, 네트워킹)TheoryCS103 Mathematical Foundations of Computing - 컴퓨터 과학을 공부하기 위해 필요한 수학 지식CS109 .. 2022. 3. 2.
프로그래밍을 할려면 영어를 잘해야 할까? 프로그래밍을 할려면 영어를 잘해야 할까? 소개거의 모든 분야에 있어서, 영어가 가능하다면 분명 여러가지 면에서 좋은 점이 많다. 프로그래밍도 당연히 예외는 아니다. 하지만 모든것은 가성비이다. 영어를 배우는게 좋다고 해서 프로그래밍을 시작하기 전에 영어만 몇 년 배울 수는 없는 노릇이다. 또, 같은 영어라고는 해도, Stackoverflow에서 기본적인 내용을 질문/답할 수 있는 영어와, 미국의 회사에서 자유롭게 의사소통하면서 근무할 수 있는 수준의 영어는 다르다. 그렇기 때문에 우선 영어 실력을 분류하고, 상황에 따라 어느 단계까지 가야 하는지 논의해보자. 영어를 수준별로 나눠보자!프로그래머가 해야하는 영어를 수준별로 나눠보자. 일단 5단계로 나눠봤다. 1. 기초적인 영어2. Stackoverflow에 있는 질문/답변을 이해할 수 있는 영어3.. 2021. 8. 1.
방구석에서 스탠퍼드 대학 컴퓨터 공학 학위 따는 법 방구석에서 스탠퍼드 대학 컴퓨터 공학 학위 따는 법 컴퓨터 과학 분야에서 최고의 대학은 어디일까? MIT, 카네기 맬론 등 다양한 대학이 나올 수 있지만 스탠퍼드 대학은 절대 빠지지 않을 것이다. 누구나 꿈꾸는 대학이지만, 그만큼 들어가기도 어렵고, 등록금도 비싸다. 하지만, 만약에 방구석에서 스탠퍼드의 컴퓨터 공학 학위를 딸 수 있다면 어떨까? 정확히 말하자면 스텐포드 수업을 듣고 과제도 하지만 학위를 따는 것은 아니다. 하지만 이 과정을 잘 기록해 두면 하나의 스펙이 될 것은 확실하다. 방구석에서 스텐포드 학위를 딴다는 것의 의미먼저, 방구석에서 어떻게 스탠퍼드 컴공과 학위를 딸 수 있는지 알아보자. 미국의 많은 대학교는 다양한 배경의 사람들이 교육의 기회를 제공받을 수 있도록 유튜브나 각 대학의 사이트에 강의를 무료로 공개하는 경우가 많다. 특히, .. 2021. 6. 21.
코딩 스터디 나가고 느낀 점 코딩 스터디 나가고 느낀 점 프로그래머는 협업이 중요하다고도 하고, 대학을 다니긴 하지만 온라인이라 혼자서만 하니 아무래도 한계를 느껴서 코딩 스터디를 나가보기로 했다. 처음에는 어떻게 구하면 될까 몰라서 무작정 구글에 코딩 스터디라고 검색해, 스터디를 구하는 사이트에 가서 내 목적에 맞는 스터디에게 연락을 취해봤다. 총 4개의 스터디를 나갔고, 지금은 스터디를 나가고 있지 않다. 개인적인 경험을 바탕으로 코딩 스터디를 하기 전에 알아야 할 점을 소개하고자 한다. 개인적인 경험여태까지 나갔던 코딩 스터디에서 무엇을 했고, 어떻게 끝나게 됐는지 설명하고자 한다. 먼저, 첫 번째로 나갔던 스터디는 파이썬과 고 언어를 다루는 스터디였다. 현업에서 일하고 계신 3분과, 저 포함 코딩에 익숙하지 않은 4분이 있던 모임이었다. 첫 번째 모임에.. 2021. 5. 27.
자바 21 - 자바 상속(Inheritance) 자바 21 - 자바 상속(Inheritance) 객체지향 프로그래밍에서 상당히 중요한 개념 중에 하나가 바로 상속이다. 상속은 우리가 일상생활에서도 흔히 쓰는 단어 중 하나인데, 객체지향에서의 상속도 이 일상생활에서의 의미와 상당히 비슷하다. 상속을 사용하는 이유는, 상속을 쓰는게 더 쉽게 코드를 짤 수 있기 때문이다. 상속에 대해 더 자세히 알아보자. 상속이란?객체지향에서 상속은 현실에서의 상속과 마찬가지로 프로퍼티(Prperty)와 매소드(Method)를 물려 받는 것이다. 프로퍼티는 쉽게 말해 클래스 안에 있는 변수이고, 매소드는 쉽게 말해 클래스 안에 있는 함수이다. 현실에서의 상속과 마찬가지로, 모든 프로퍼티와 매소드를 물려 받는 것이 아니라, 접근 제어자가 private인 프로퍼티나 매소드는 상속할 수 없다. 상속에서 상속을 해주는 클래스를.. 2021. 5. 21.
자바 20 - UML 다이어그램 자바 20 - UML 다이어그램 영화를 만드는 사람은 대본을 바탕으로 영화를 만든다. 영화 대본에는 대사뿐만 아니라, 표정 연기나 조명 등 영화를 만들 때 필요한 연출 등을 담고 있다. UML 다이어그램은 프로그래머의 대본이라고 할 수 있다. UML 다이어그램, 그중에서도 클래스 다이어그램(Class Diagram)은, 클래스에 있는 변수와 매소드의 성질과 어떤 데이터를 받는지 등을 나타내 준다. UML 다이어그램이란?UML 다이어그램(Unified Modeling Language)은, 모델링을 하기 위한 언어체계이다. 그중에서도 자주 씌는 클래스 다이어그램은 클래스를 나타내 주는 모형이다. 객체지향 프로그래밍에서 프로그램은 클래스들의 상호작용으로 나타낼 수 있기 때문에 클래스 다이어그램은 프로그램의 핵심을 담고 있다고 해도 과언이 아.. 2021. 5. 10.
자바 19 - static의 의미 자바 19 - static의 의미 새로운 프로그래밍 언어를 배울때 처음으로 하는게 바로 Hello World를 프린트하는 프로그램을 만드는 것이다. 자바에서 Hello World 프로그램은 다음과 같았다. class Ex { public static void main(String[] args) { System.out.println("Hello, world!"); }} 여태까지의 내용을 잘 따라왔다면 이 프로그램이 가지는 의미가 조금은 보일 것이다. 하지만 static은 뭘까? 우선, static이 뭔지 설명하기 전에 객체지향 프로그래밍의 기초적인 내용을 알아야 한다. 객체지향 프로그래밍의 기초는 여기서 배울 수 있다. static의 의미static이 무슨 뜻인지 한 마디로 하자면 인스턴스를 만들지 않고 사용할 수 .. 2021. 5. 8.
자바 18 - 오브젝트(Object), 객체지향 프로그래밍 자바 18 - 오브젝트(Object), 객체지향 프로그래밍 오브젝트와 클래스는 객체지향 프로그래밍을 구현하기 위해 존재한다. 객체지향 프로그래밍이란 뭘까? 왜 중요할까? 객체지향 프로그래밍이란?객체지향 프로그래밍은 프로그램을 객체들이 서로 상호작용하게 구현하는 방법이다. 원래 프로그램을 만든다고 하면, 프로그램이 뭐를 해야 하는지를 차례대로 구현해야 한다. 간단한 계산기 프로그램을 만든다면, 먼저 어떤 연산을 하는지 물어보고, 숫자를 받아오고, 계산을 해서, 결과를 보여주는 식으로 프로그램을 구현할 수 있다. 간단한 프로그램이라면 이런식으로 디자인해도 전혀 문제가 없지만, 문제는 프로그램이 복잡해지면 이러한 방식으로 하기가 쉽지 않다는 것이다. 예를 들어, 체스 프로그램을 이런 식으로 만든다고 하면, 어떻게 접근할지조차 쉽게 떠오르지 않을 것이다. 하지만, 객체.. 2021. 5. 6.
자바 17 - 자바 매소드(Method), 오버로딩, Call-by-Value 자바 17 - 자바 매소드(Method), 오버로딩, Call-by-Value 매소드는 함수라고도 불리며, 데이터를 받아 특정한 작업을 수행하고 다시 데이터를 내보내는 대상이다. - 매소드를 왜 써야 할까?- 매소드 선언- Call-by-Value- 오버로딩(Overloading) 매소드를 왜 써야 할까?매소드는 기본적으로 프로그램을 더 간편하게 하고, 반복되는 코드를 줄여준다. 코드가 반복되는 걸 줄여주는 건 상당히 중요한데, 예를 들어 어떤 기능을 구현했다고 했을 때, 똑같거나 비슷한 코드를 반복해서 사용하면 오류가 일어났을 때나 수정을 하고 싶을 때 코드를 쓴 모든 부분을 수정해야 하지만, 매소드를 사용하면 매소드만 수정하면 매소드가 사용된 모든 부분에서 코드가 자동으로 수정되기 때문에 버그를 고치기도 편하고, 수정하기도 편하고, 테스트하기도 편하고, 개발할 때도 편하고, 코.. 2021. 5. 4.
자바 16 - 2차원 배열 자바 16 - 2차원 배열 컴퓨터는 기본적으로 1차원 자료 구조를 가지고 있다. 그러나, 일상생활에서도 그렇고, 프로그래밍을 할때도 2차원 이상의 자료 구조를 사용하고 싶을때가 많다. 말이 어려울 수 있지만, 쉽게 말해 체스 프로그램을 만든다고 해 보면, 체스 말을 저장할 구조는 2차원이다. 1차원 배열을 사용해서 체스 말을 저장할 수도 있겠지만, 매우 헷갈리고 비효율적이기에, 2차원 배열이 있다. 주의해야 할 것은, 2차원 배열도 컴퓨터 안에서는 1차원 배열도 저장된다는 것이다. 1. 2차원 배열 문법2. 2차원 배열 활용 1. 2차원 배열 문법2차원 배열은 1차원 배열과 마찬가지로 대괄호를 사용해 선언한다. 차이점은, 2차원이기 때문에 2개의 대괄호를 써야 한다는 것이다. int[][] ex = new int[3][4]; 위의.. 2021. 5. 2.
자바 15 - 배열(Arrays) 자바 15 - 배열(Arrays) 배열은 한 변수에 여러개의 데이터를 저장하기 위해 고안됐다. 만약에 우리가 한 학년의 시험점수를 저장하고자 하는데, 그때마다 변수를 선언해야 한다면 매우 불편할 것이다. 이런 상황을 위해 하나의 변수에 많은 데이터를 저정하기 위해 배열이 존재한다. 1. 배열 문법2. 배열 활용 1. 배열 문법배열은 아래와 같이 선언한다. int[] ex; 배열은 원래 있는 데이터 타입 여러개를 한 변수에 저장하는 것이기 때문에 어떤 데이터를 저장할지 명시하고, 대괄호 2개를 써서 배열임을 나타낸다. 배열은 같은 데이터 타입만 저장할 수 있다. 보통은 데이터 타입 바로 뒤에 대괄호를 쓰지만, 변수 이름 뒤에 써도 상관없다. int ex[]; 배열은 크기가 정해져 있다. 그렇기 때문에 처음에 모든 값을 줘서 그 값의 크기만.. 2021. 4. 30.
반응형