전체 글
[SQL] WHERE 1=1
프리온보딩 백엔드 과제중 팀원이 작성한 코드에서 이해가지 않는 코드를 발견했었다.. 지금은 이 코드가 무엇인지 알지만... 또 사용할 일을 대비하여,, 기록한다.. const getMeasurementData = async (date1, date2, weight1, weight2) => { const getMeasurementData = await myDataSource.query( ` SELECT user_id as id, weight, date_format(created_at, "%Y-%m-%d %h:%m:%s") as date, JSON_ARRAYAGG(JSON_OBJECT("value", measurement_data.data, "name", data_types.name)) as typeData ..
[JS] 중복되지 않는 알파벳으로 이루어진 가장 긴 문자열 찾기
# 문제 String 형인 str 인자에서 중복되지 않은 알파벳으로 이루어진 제일 긴 단어의 길이를 반환해주세요. str: 텍스트 return: 중복되지 않은 알파벳 길이 (숫자 반환) 예를 들어, str = "abcabcabc" return 은 3 => 'abc' 가 제일 길기 때문 str = "aaaaa" return 은 1 => 'a' 가 제일 길기 때문 str = "sttrg" return 은 3 => 'trg' 가 제일 길기 때문 reduce,, for,, forEach,, 재귀함수 등 여러가지 알고있는 방법 총 동원하여 며칠 씨름하다 해결完,,, 충분히 해결할 수 있는 문제였는데 막무가내 식으로 접근하니 코드가 꼬이고 생각도 꼬이는 구나,, 초기에 어떻게 문제를 해결할지 우선적으로 생각해보고 ..
파싱(Parsing)이란 무엇인가
파싱(parsing: 구문 분석)은 하나의 프로그램을 런타임 환경(ex. 브라우저 내 자바스크립트 v8엔진 등)이 실제로 실행할 수 있는 내부 포맷으로 분석하고 변환하는 것을 의미한다. 즉, 파싱은 문서의 내용을 토큰(token)으로 분석하고, 문법적 의미와 구조를 반영한 파스 트리(parse tree)를 생성하는 과정. 브라우저는 HTML을 DOM TREE로 파싱한다. HTML parsing에는 토큰화와 tree 구조가 포함된다. HTML token에는 시작 태그와 마침 태그가 포함되며, 속성 이름과 값도 포함된다. 형식을 잘 갖춘 문서라면 파싱은 직관적이고 빠르게 진행될 것이다. 파서(parser)는 토큰화된 입력값을 문서에 parsing하며, 다큐먼트 tree를 구성한다. HTML parser가 이..
[Network] 인터넷 네트워크 구조 (IP,TCP,UDP,DNS,PORT)
네트워크란 Net + Work 의 합성어로써 컴퓨터들이 통신 기술을 이용하여 그물망처럼 연결된 통신 이용 형태 네트워크 종류 PAN ( Personal Area Network ) : 가장 작은 규모의 네트워크 LAN ( Local Area Network ) : 근거리 영역 네트워크 MAN (Metropolitan Area Network) : 대도시 영역 네트워크 WAN (Wide Ares Network) : 광대역 네트워크 VAN (Value Added Network) : 부가가치 통신망 정보의 축적과 제공, 통신속도와 형식의 변화, 통신경로의 선택 등 여러 종류의 정보서비스가 부가된 통신망. ISDN (Integrated Services Digital Network) : 종합정보 통신망(=BISDN) ..
[Javascript] Closure
함수를 선언할 때 만들어진 scope가 사라진 후에도 호출할 수 있는 함수 scope가 끝난 외부 함수의 변수를 참조할 수 있다. → 어떤 함수 A에서 선언한 변수 a를 참조하는 내부함수 B를 외부로 전달할 경우, A의 실행 컨텍스트가 종료된 이후에도 변수 a가 사라지지 않는 현상 클로저(closure)란, 외부 함수에 접근할 수 있는 내부 함수 혹은 이러한 원리를 일컫는 용어인데 스코프에 따라서 내부함수의 범위에서는 외부 함수 범위에 있는 변수에 접근이 가능하지만 그 반대는 실현이 불가능하다는 개념이다. 특징으로는 외부함수는 외부함수의 지역변수를 사용하는 내부함수가 소멸될 때까지 소멸되지 않는다.예를 들어 한 함수안에 다른 함수가 있다면 그 안의 함수는 바깥에 정의해놓은 변수를 사용할 수 있지만 그 반..
[OAuth] OAuth 2.0 이란
OAuth를 왜 쓸까 OAuth를 왜 쓸까? 하고 생각해보기 전에 네이버 로그인이나 카카오 로그인을 왜 사용할까? 네이버 로그인이나 카카오 로그인을 쓰는 데에는 여러가지 이유가 있을 수 있다. 나의 경우에는 유저들에게 회원가입/로그인을 쉽게 제공하기 위해 이번 프로젝트에서 카카오 소셜로그인을 구현했다. 그렇다면 내가 만든 사이트에서 카카오 소셜로그인을 사용하려는 유저가 카카오톡을 사용하는 사람인지는 어떻게 알 수 있을까?? 이걸 해결하기 위해 OAuth가 생겼다. OAuth 란? Open Authorization 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 ..
백엔드 웹개발 프로젝트(Node.js, express)
프로젝트 및 기능 소개 로컬 푸드 마켓 '미래식당' 사이트에 사용된 API 들을 참고하여 필요 기능들을 개발한 클론 프로젝트 (https://meesig.com) 사이트 선정이유 - 팀원 모두가 처음으로 진행한 프로젝트인 만큼 웹서비스에서 보편적으로 구현되는 기능들을 이해하고, 적용할 수 있는 것을 목표로 선정 유튜브 시연영상 - https://youtu.be/f1He2K5uwyI (약 4분) 개발기간 - 2022-08-29 ~ 2022-09-08 (11DAYS) 개발인원 - 프론트엔드 4명(박예선,박찬영,이은지,임지영), 백엔드 2명(김민우,이윤재) 사용된 기술 및 스택(백엔드) - Javascript, Node.js, Express, MySQL, Postman, JWT, bcrypt, Slack, T..
[JavaScript] 이진 탐색(Binary Search) 알고리즘
"이진 탐색 알고리즘의 이해와 적용" 1. 이진탐색이란? 데이터가 정렬되어 있는 배열에서 특정한 값을 찾는 알고리즘. ㄴ _본 게시글의 예시의 경우 오름차순으로 되어 있는 데이터를 사용 배열의 있는 임의의 중간 값을 선택하여 찾고자 하는 값 X 와 비교한다. X 가 중간 값보다 작으면 좌측 데이터를 대상으로, X 가 중간 값보다 크면 우측 데이터를 대상으로 다시 탐색한다. X 값을 찾을 때까지 동일한 방법을 반복한다. _(up-down 숫자맞추기 게임과 유사) Database Index 적용의 장단점 장점 - Full Table Scan에 비해 데이터 검색 속도 및 성능이 향상된다. 단점 - 탐색을 위한 정렬된 테이블이 추가되기 때문에 메모리를 사용한다. - DB가 수정될 때마다 인덱스의 업데이트가 필요..
[Javascript] Math 함수 정리
Math is a built-in object that has properties and methods for mathematical constants and functions. It’s not a function object. -> Math 객체는 수학에서 자주 사용하는 상수와 함수들을 미리 구현해 놓은 자바스크립트 표준 내장 객체이다. -> 생성자가 존재하지 않아서 따로 인스턴스를 생성하지 않더라도 Math 객체의 모든 method나 property를 바로 사용할 수 있다. 자주 사용하는 함수 정리 Math.min(x,y,z....) 가장 작은 값 반환 Math.max(x,y,z....) 가장 큰 값 반환 Math.random() 0보다 크거나 같고 1보다 작은 무작위 숫자 반환 Math.round(..
[Javascript] Array 함수 훈련
알고리즘 문제를 풀며 array 함수의 중요성을 다시 깨달았다... 앞으로 많이 사용할 것으로 예상되니,, 머릿속에 깊게 새길 수 있도록.. 반복된 훈련을 통해 익히자. 아래는 array를 훈련하며 사용된 문제와 함수이다. 실제로는 더 복잡하게 사용되지만 우선 어떤 함수들이 있으며 어떻게 사용되는지 간단 명료하게 정리하였다. // Q1. make a string out of an array { const fruits = ["apple", "banana", "orange"]; const join = fruits.join(","); console.log(join); } // Q2. make an array out of a string { const fruits = "🍎, 🥝, 🍌, 🍒"; const resu..