코딩테스트를 대비해 프로그래머스에서 알고리즘 문제를 풀던 중 원인을 알 수 없는 에러를 맞닥뜨렸다. '2021 Dev-Matching: 웹 백엔드 개발자(상반기)' 문제 중 '다단계 칫솔 판매' 위 문제를 요약하면 트리구조를 가진 다단계 회사에서 구성원이 벌어들인 금액을 9:1의 비율로 나눠 9는 해당 구성원이 가지고 1은 추천인에게 상납이 되고, 그 추천인이 받은 상납금을 또 9:1로 나눠 9를 추천인 자신이, 1은 그 추천인을 추천한 추천인에게 상납이되며 더 이상 나눌 수 없을 때 까지 진행한다. 최종적으로 모두 벌어들인 금액이 분배 됐을 때의 상황을 배열로 만들어 반환하는 문제였다. https://programmers.co.kr/learn/courses/30/lessons/77486 function..
Node.JS 마이크로서비스 코딩공작소를 따라해보기 위해 Maria DB를 설치하는 와중에 패키지의 의존성이 맞지않아 설치가 되지 않는 에러를 만났다. 에러를 해결하기 위해 이것 저것 검색해보던 중 기존에 Mysql이 설치된 환경에서는 apt를 가지고 명령어를 통해 maria DB를 설치 할 수 없다고 했다. 해결하기 위해서는 Mysql을 삭제하고 설치해야 하는 상황이었다. sudo apt-get remove mariadb-server mariadb-client mysql-server mysql-client 위의 명령어로 모두 삭제한 후 다시 설치를 했는데 역시 같은 에러를 만났다. 또다시 검색을 해보던 중 mysql-common 또는 libmysqlclient의 버전 번호가 MariaDB 리포지토리보다..
생애 첫 면접을 보고 왔다. Node.JS를 이용해 서버를 구축하는 회사였다. 그래서 가장 첫 질문이 Node.JS에 대한 것이라고 예상을 했고, 그 예상은 정확하게 적중했다. 웹 어플리케이션 개발에 자주쓰이는 Node.JS에 대해 알아보겠다. 1. JavaScript 우선, Javascript는 웹 브라우저에서 동작하도록 만들어진 언어이다. 자바스크립트는 이름에서 알 수 있듯이 스크립트 언어인데, 이는 프로그래밍언어의 한 종류로 이미 존재하는 소프트웨어(어플리케이션)을 제어하기 위한 용도로 쓰이는 언어이다. 즉 스크립트 언어인 자바스크립트는 웹 브라우저를 제어하는 언어라는 것이다. HTML에서 자바스크립트 파일을 실행시키려면 Script태그를 사용해야한다. 위의 예시에서 보면 스크립트 태그부분에서 자바..
AWS는 Amazon Web Service 의 약자이다. AWS는 개발에 있어 필요한 거의 모든 기능들을 지원한다. 그 중 대표적으로 내가 만든 제품을 사용자들에게 사용할 수 있도록 만드는 것을 배포(Deployment)라고 한다. AWS에서 배포를 하기위해 지원하는 기능중 대표적인 것들은 EC2, RDS, S3 가 있다. EC2는 Elastic Computer Cloud 의 약자로 AWS에서 원격으로 제어할 수있는 가상의 컴퓨터를 한 대 빌리는 것이다. 이곳에서 서버를 실행하거나 저장소로 사용하는 등 컴퓨팅 서비스를 제공 받을 수 있다. RDS는 Relational Database Service 의 약자로 관계형데이터베이스의 인스턴스를 생성해서 데이터들을 관리 할 수 있다. EC2를 사용하면서 그곳에 ..
네트워크통신의 순서를 살펴보면 어플리케이션 계층에서 HTTP메시지를 작성한다. 이 메시지가 전송요청이 되면 전송계층으로 넘어가 TCP 혹은 UDP의 방식으로 패킷되어 인터넷계층으로 넘어가게된다. 인터넷계층에서는 TCP로 패킷된 정보를 포함한 IP패킷을 생성해 연결계층으로 보낸다. 연결계층에서는 요청된 목적지로 보내주고 메시지를 전송하기위해 거친 단계들을 역순으로 거치면서 패킷을 하나씩 벗겨내 최종적으로 HTTP메시지를 목적지(주로 서버)의 어플리케이션 계층으로 전달한다. 요청된 사항에 대해 서버에서 응답을 HTTP메시지로 전송하고 위의 절차를 다시 응답이 완료될 때 까지 실행한다. 각 계층에서 사용되는 프로토콜의 특징을 살펴보자. HTTP의 특징은 클라이언트-서버 구조, 무상태성(Stateless), 비..
네트워크의 기본적인 구조는 클라이언트-서버 아키텍처(2티어 아키텍처)로 대표된다. 아키텍처는 구조, 건축물, 건축학 등을 뜻하는 단어이다. 2티어라는 것은 계층이 2개로 나위어진다는 것을 의미한다. 곧, 클라이언트 계층과 서버 계층으로 나뉘어지는 구조를 클라이언트-서버 아키텍처라고 표현하는 것이다. 네트워크 통신은 정보를 주고 받는 것을 목적으로 한다. 한국에 서식하는 동물의 정보를 알려주는 웹페이지가 있다고 가정하자. 이 웹페이지에서 고양이에 대한 정보를 열람하기 위해 고양이 탭을 클릭하면 고양이에 대한 정보가 웹페이지상에 나타나게 된다. 이 일련의 행위들이 네트워크의 기본적인 통신방법이다. 이를 네트워크 통신의 관점에서 보자면, 고양이 탭을 클릭하는 행위는 서버에 고양이에 대한 정보를 보내달라는 요청..
2. Graph, Tree, Binary Search Tree(BST, 이진탐색트리) 1)Graph 그래프는 직선, 곡선, 도형 등 그래픽적인 요소에 의해 시각화된 차트를 말한다. 컴퓨터과학에서 그래프는 vertex와 edge로 구성된 한정된 자료구조를 의미한다. vertex는 정점, edge는 정점과 정점을 연결하는 간선이다. 정점들과 간선들로 서로간의 관계를 표현한 자료구조라고 할 수 있다. 두 정점간에 간선이 존재한다면 두 정점은 직접적인 관계를 가지고 있고, 두 정점간에 간선은 없지만 다른 정점들을 거쳐 도달할 수 있다면 두 정점은 간접적인 관계를 가지고 있다고 할 수 있다. 그림으로 표현하자면 이렇게 표현 할 수있다. 파란원은 정점이고 각 원들 사이의 선은 간선이다. 간선중에는 한쪽으로만 화살표..