codestates

    [HTTP/네트워크] 기초

    클라이언트-서버 아키텍처 클라이언트(client, 손님)와 서버(server, 서빙하는 사람)라는 단어의 어원을 떠올리면, 보다 이해가 쉽습니다. 리소스에 접근하려는 앱은, 카페로 치면 손님과 같습니다. 손님은 아메리카노를 획득하기 위해, 리소스를 가지고 있는 점원에게 요청해야 합니다. 손님의 요청에 따라, 점원은 리소스를 담아 응답합니다. 이처럼 클라이언트와 서버는 요청과 응답을 주고 받는 관계입니다. 클라이언트-서버 아키텍처에서는 요청이 선행되고, 그 후에 응답이 옵니다. 요청하지도 않았는데, 응답이 오는 경우는 없습니다. 클라이언트처럼 사용자가 직접 눈으로 보고, UI를 클릭 또는 터치하는 등의 상호작용을 할 수 있는 앱을 주로 개발하면 프론트엔드 개발자라고 합니다. 반면, 사용자 눈에 보이지 않지..

    [JS] 비동기, Node.js 모듈, fetch API

    하나의 작업이 끝날 때까지, 이어지는 작업을 "막는 것" blocking 이라 하고 이와 같은 경우에 예시를 들자면, 박해커는 김코딩이 주문한 커피가 나오고 나서야 커피를 주문할 수 있다고 할 때에. 김코딩의 커피 주문 완료 시점과 박해커의 커피 주문 시작 시점이 같습니다. 이렇게 시작 시점과 완료 시점이 같은 상황을 "동기적(synchronous)"이다 라고 합니다. 하지만 보통 커피숍은 이렇게 운영하지 않습니다. 굉장히 비효율 적이기 때문입니다. 보통 커피숍은 커피 주문이 blocking 되지 않고, 언제든지 주문을 받을 수 있습니다. 커피가 완성되는 즉시 커피를 제공합니다. 김코딩의 주문 완료 시점과 박해커의 주문 시작 시점이 같을 필요가 없습니다. Node.js를 만든 개발자도 위 대안이 합리적이..

    Toy 문제3

    문제 두 개의 배열(base, sample)을 입력받아 sample이 base의 부분집합인지 boolean 타입으로 리턴해야 합니다. base, sample 내에 중복되는 요소는 없다고 가정합니다. let base = [1, 2, 3, 4, 5]; let sample = [1, 3]; let output = isSubsetOf(base, sample); console.log(output); // --> true 해석(수도코드) 단순히 비교 분석만 한다면 굉장히 쉬운 문제이지만 '효율'을 생각해보았을 때에 조금 더 복잡 해지는 것 같습니다. sort 메서드를 사용하여 각 배열의 숫자를 정렬을 합니다. 그렇게 되면 비교하는 횟수를 줄일 수 있으며 좀 더 효율적으로 비교가 가능합니다. sample 요소 하나를..

    Toy 문제2

    문제 재귀함수를 사용하여 피보나치 수열 나타내기 반복문 사용 금지 해석(수도코드) 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1입니다. 그 다음 2번째 피보나치 수부터는 바로 직전의 두 피보나치 수의 합으로 정의합니다. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ... 보통 첫 번째는 0, 두 번째는 1로 고정이 되어있고. n>=2 이라면 (n-1)(n-2) 공식이 성립되는 식입니다. 하지만 무작정 재귀 함수를 사용하여 피보나치수열을 나타내게 되면 // let fibonacci = function (n) { // if (n { if (result[n] !== undefined) return result[n]; result[n] = fibo(n - 1) + fibo(n - ..

    Toy 문제 1

    문제 숫자 N 숫자 N의 경우의 수를 나열하였을 때 K가 몇 번째 위치한 경우의 수 인지 찾아야 합니다. 모든 경우의 수가 담긴 배열은 번호가 작을수록 앞에 위치한다고 가정합니다. ex) N = 3일경우, [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 해석 (수도코드) N이 작은 값일 때에는 모든 경우의 수를 구하는 것을 펙토리얼로 구하는 것이 나쁘지 않을 수 있지만, 12!는 약 4억 8천만에 해당하며, 일반적인 수행 속도 상한(약 1억)을 훨씬 상회하므로 순열을 전부 생성하는 것은 올바른 접근 방법이 아닙니다. 그렇기 때문에 배열 번호가 작을수록 앞에 위치해야 한다는 점을 펙토리얼과 함께 활용 해야 합니다. 숫자 N을 5 K가 [3, 2, 1, 4, 5] 라..

    [알고리즘] Graph / Tree / BST

    1. Graph 컴퓨터 공학에서 이야기 하는 자료구조 그래프는 전혀 다른 모습을 가지고 있습니다. 자료구조의 그래프는 마치 거미줄처럼 여러개의 점들이 선으로 이어져 있는 복잡한 네트워크 망과 같은 모습을 가지고 있습니다. 그래프는 여러개의 점들이 서로 복잡하게 연결되어 있는 관계를 표현한 자료구조입니다. 직접적인 관계가 있는 경우 두 점 사이를 이어주는 선이 있습니다. 간접적인 관계라면 몇 개의 점과 선에 걸쳐 이어집니다. 하나의 점을 그래프에서는 정점(vertex)이라고 표현하고, 하나의 선은 간선(edge) 이라고 합니다. 알아둬야 할 그래프 용어들 무(방)향그래프(undirected graph): 서울에서 부산으로 갈 수 있듯, 반대로 부산에서 서울로 가는것도 가능합니다. 단방향(directed) ..

    [자료구조] 자료구조 기초 Stack, Queue

    자료구조? 자료구조란 여러 데이터들의 묶음을 저장하고, 사용하는 방법을 정의한 것입니다. 자료구조는 자료의 집합을 구조화하고, 이를 표현하는 데에 초점이 맞춰져 있습니다. 이미 자료구조를 알게 모르게 많이 접했습니다. 사람이 사용하기에 편리하려고, 사용하기 좋으려고 만들어진 것이 자료구조입니다. 자주 등장하는 네 가지의 자료구조 Stack, Queue, Tree, Graph 대부분의 자료구조는 특정한 상황에 놓인 문제를 해결하는 데에 특화되어 있습니다. 따라서 많은 자료구조를 알아두면, 어떠한 상황이 닥쳤을 때 적합한 자료구조를 빠르고 정확하게 적용하여 문제를 해결할 수 있습니다. 이것은 문제 해결력을 필요로하는 알고리즘 테스트(코딩 테스트)와 굉장히 밀접한 연관성이 있습니다. 특정 문제를 해결하는 데에..

    [자료구조/알고리즘] JSON, Tree UI, 재귀함수 과제

    JSON의 탄생 배경 JSON은 JavaScript Object Notation의 줄임말로, 데이터 교환을 위해 만들어진 객체 형태의 포맷입니다. 네트워크를 통해, 어떤 객체 내용을 다른 프로그램에게 전송한다고 가정하겠습니다. 이 객체 내용을 일종의 메신저 혹은 채팅 프로그램에서 쓰는 하나의 메시지 입니다. const message = { sender: "김코딩", receiver: "박해커", message: "해커야 오늘 저녁 같이 먹을래?", createdAt: "2021-01-12 10:10:10" } 메시지 객체가 전송 가능하려면, 메시지를 보내는 발신자와 메시지를 받는 수신자가 같은 프로그램을 사용하거나, 문자열처럼 범용적으로 읽을 수 있는 형태여야 합니다. 전송가능한 조건 (transfera..

    [JS] 객체 지향

    1. 객체지향 프로그래밍란? 객체 지향 프로그래밍이라는 패러다임이 등장하기 전, 절차 언어가 있었습니다. 우리는 앞서 모든 것을 절차로 생각해왔습니다. 기껏해야 함수로 이동하는 것이 전부였죠. 초기의 C, 포트란같은 언어들은 객체 지향의 개념이 없는 절차 언어(순차적인 명령의 조합)였습니다. 그러나, 객체 지향 프로그래밍이라는 패러다임이 등장하면서, 단순히 별개의 변수와 함수로 순차적으로 작동하는 것을 넘어, 데이터의 접근과, 데이터의 처리 과정에 대한 모형을 만들어 내는 방식을 고안해냈습니다. 따라서, 데이터와 기능이 별개로 취급되지 않고, 한번에 묶어서 처리할 수 있게 되었습니다. 속성과 메소드가 하나의 "객체"라는 개념에 포함되며, 이는 자바스크립트 내장 타입인 object(이하, object li..

    코드스테이츠 후기 (한 달 동안 느낀 점 / Section 1 후기)

    코딩에 대한 교육은 정말 많은데, 국비도 많이 알아 봤지만 저는 많은 돈을 들여서라도 하게 되는 이유는 다른 교육보다 온전히 몰입을 할 수 있는 장점과, 체계적인 시간표, 그리고 집 밖에 나가지 않아도 되는 장점이 있습니다. 그리고 계속해서 수료 후에 관리해주는 점도 중요한 장점이라 생각 됩니다. 제 주관과 한 달동안의 경험에 비추어 코드스테이츠에 대한 생각을 적어 보려 합니다. 저는 생각보다 일을 몰아서 하거나 게으른 순간이 오는 경우가 있습니다. 바로 할만하거나 쉽다고 느껴졌을 때 또는 흥미가 떨어졌을 때, 굉장히 미루는 습관이 있습니다. 그러한 부분을 코드스테이츠를 하면서 많이 잡아주는 것 같습니다. 우선 교육내용을 접해보지 않았으면 굉장히 시간표가 여유롭지 않고 따라가기 급급 할 수 가 있습니다...