일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 프로그래머스
- typescript
- Deep Dive
- 인접행렬
- winston
- Spring
- node.js
- puppeteer
- GraphQL
- Interceptor
- 코딩테스트
- 알고리즘
- bean
- Kubernetes
- Linux
- OOP
- TIL
- MySQL
- dfs
- LifeCycle
- javascript
- JWT
- nestjs
- java
- html
- 인접리스트
- 자료구조
- 탐욕법
- REST API
- css
- Today
- Total
목록전체 글 (241)
처음부터 차근차근
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bSt2FM/btsil0842DY/CgnaKs1wUEHokIuRIZOBH0/img.png)
0. Subquery 사용법 - Subquery란? 하나의 SQL 쿼리 안에 또다른 SQL 쿼리가 있는것을 의미한다. 자주 쓰이는 SubQuery 유형 살펴보기 1. Where에 들어가는 Subquery WHERE (필드명) in (or 조건식) (subquery) 2. Select에 들어가는 Subquery 기존 테이블과 함께 보고싶은 통계 데이터를 손쉽게 붙일때 사용 SELECT 필드명, 필드명, (SELECT...) FROM 3. FROM에 들어가는 Subquery 내가 만든 Table을 바로 사용하거나, 혹은 서브쿼리로 만든 Table을 Join할때 사용 1. 비상관 서브쿼리 SELECT CategoryID, CategoryName, Description, (SELECT ProductName FR..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/c3JXb7/btsij6hBruT/qyn64q52BL6KXZUCQ89gqk/img.png)
1. Group BY - 조건에 따라 집계된 값을 가져옵니다. 동일한 범주를 갖는 데이터를 하나로 묶어서, 범주별 통계를 내주는 것을 의미한다. SELECT Country FROM Customers GROUP BY Country; SELECT CategoryID FROM Products GROUP BY CategoryID; ※ 여러 컬럼을 기준으로 그룹화할 수도 있다. SELECT Country, City, CONCAT_WS(', ', City, Country) FROM Customers GROUP BY Country, City; Group by - 그룹 함수 활용하기! 주로 COUNT() 함수와 같이 사용된다. SELECT COUNT(*), OrderDate FROM Orders GROUP BY Ord..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/deqjkT/btsikCgsMPz/vkEZ15rcihkXj6SBE9bZk0/img.png)
1. 시간/날짜 관련 함수들 CURRENT_DATE, CURDATE 현재 날짜 반환 CURRENT_TIME, CURTIME 현재 시간 반환 CURRENT_TIMESTAMP, NOW 현재 시간과 날짜 반환 SELECT CURDATE(), CURTIME(), NOW(); DATE 문자열에 따라 날짜 생성 TIME 문자열에 따라 시간 생성 SELECT '2021-6-1' = '2021-06-01', // 문자열이기 때문에 다르다고 판단 DATE('2021-6-1') = DATE('2021-06-01'), // 날짜로 변경 후 판단 '1:2:3' = '01:02:03', TIME('1:2:3') = TIME('01:02:03'); SELECT '2021-6-1 1:2:3' = '2021-06-01 01:02:0..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bn1HXO/btsh33L3G86/qojZwH5oEwYIKDsU8hsYqK/img.png)
1. 입력정보와 관련된 보안 Nodejs path parse를 검색해보면 path.parse() 메소드는 파일의 경로와 정보를 객체로 전달해준다. 이를 감추기 위해 path.parse().base를 입력하면 입력 정보를 세탁해줄 수 있다. 오염된 정보를 세탁하는 방법으로는 var filteredId = path.parse(queryData.id).base; 이 부분을 통해 입력정보에 대해 보안을 지킬 수 있다. else { fs.readdir('./data', function(error, filelist){ var filteredId = path.parse(queryData.id).base; fs.readFile(`data/${filteredId}`, 'utf8', function(err, descrip..
Javascript의 객체와 모듈을 이용하여 template 함수들을 정리해보자. 1. 객체를 통해서 정리 function templateHTML(title, list, body, control){ return ` WEB ${list} ${control} ${body} `; } function templateList(filelist){ var list = ''; var i = 0; while(i < filelist.length){ list = list + `${filelist[i]}`; i = i + 1; } list = list+''; return list; } 두 항목 공통적으로 template로 묶여있다. var template = { HTML:function(title, list, body, co..
1. Delete 버튼 구현 Control에 Delete를 구현해보자. Delete 버튼을 링크로 만들면 안된다(Ex 구글 플러그인 시스템, Get 방식) 따라서 Form 형식을 사용해서 만든다. update ` pathname === '/delete_process' 도 추가해주자. else if(pathname === '/delete_process'){ var body = ''; request.on('data', function(data){ body = body + data; }); request.on('end', function(){ var post = qs.parse(body); var id = post.id; fs.unlink(`data/${id}`, function(error){ response..
1. Update 버튼 생성하기 Web 홈페이지와 Create 페이지에는 나오지 않고, 각각의 template에 들어갔을때 나올 수 있도록 control이라는 변수로 변경한다. function templateHTML(title, list, body, control){ return ` WEB ${list} ${control} ${body} `; } var template = templateHTML(title, list, `${title}${description}`, `create update` ); + 누구를 수정할지 querystring을 통해 id로 받을것이다. 2. 수정할 정보 전송 Update_process로 Post를 보낸다. 기존 제목을 넣기 위해서 value="${title}"을 넣어준다. 마..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bmt3Hc/btsh16JAnY1/qKROU1YILkEr89Bax4ZPJk/img.png)
웹 어플리케이션에서 Create 진행해보자. 1. 글생성 UI 만들기 1) Create 버튼 제작 templateHTML 화면상 Create 버튼을 제작한다. function templateHTML(title, list, body){ return ` WEB ${list} create ${body} `; } Create 버튼이 생성된 것을 확인할 수 있지만, 클릭해보면 Not found가 뜨는 것을 알 수 있다. 2) 글생성 페이지 제작 } else if(pathname === '/create'){ fs.readdir('./data', function(error, filelist){ var title = 'WEB - create'; var list = templateList(filelist); var te..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bg8Riu/btsh2P0RaMn/wVJdkardbUV5MfdMMLWjTK/img.png)
Synchronous & Asynchronous (동기 & 비동기) 동기(synchronous) 방식 요청과 결과가 동시에 일어나는 방식으로 요청을 보낸 후 응답을 받아야 다음 동작이 진행된다. 요청과 결과가 한 자리에 동시에 나타나는 것으로 사용자가 서버로 요청을 보냈을 경우 요청에 대한 응답을 리턴받기 전까지는 다른 것을 하지 못하고 기다려야 한다. 특정 프로그램을 구동시키는 데 시간이 5분 소요된다고 하면, 이 프로그램이 구동되는 5분동안 컴퓨터는 다른 프로그램을 동작시키지 못하고, 구동되기를 기다려야 한다. 장점 : 설계가 간단하고, 직관적이다. 단점 : 요청에 대한 결과가 반환되기 전까지 대기해야 한다. 비동기(Asynchronous) 방식 요청과 결과가 동시에 일어나지 않는 방식으로 요청과 결..
반복되는 코드는 함수를 이용하여 정리해 줄 수 있다. 현재 두 부분의 코드가 반복해서 보이는데 templateHTML, templateList를 통해 정리해보자. function templateHTML(title, list, body){ return ` WEB ${list} ${body} `; } function templateList(filelist){ var list = ''; var i = 0; while(i < filelist.length){ list = list + `${filelist[i]}`; i = i + 1; } list = list+''; return list; } 함수를 정리해 준 모습이다. var app = http.createServer(function(request,respons..