깊은바다거북
개발 공부 기록
깊은바다거북
전체 방문자
오늘
어제
  • 분류 전체보기 (219)
    • JAVA (9)
    • JavaScript (15)
    • 스파르타코딩클럽 (11)
      • [내일배움단] 웹개발 종합반 개발일지 (5)
      • [내일배움캠프] 프로젝트와 트러블 슈팅 (6)
    • SQL | NoSQL (4)
    • CS 등등 (0)
    • TIL | WIL (173)
    • 기타 에러 해결 (3)
    • 내 살 길 궁리 (4)

인기 글

최근 글

최근 댓글

태그

  • TIT (Today I Troubleshot)
  • 최대 힙(Max Heap)
  • 점화식(Recurrence Relation)
  • Til
  • tree
  • 트러블 슈팅 Troubleshooting
  • Leetcode
  • 자잘한 에러 해결
  • DFS(깊이우선탐색)
  • Trie
  • BST(이진 탐색 트리)
  • 최소 힙(Min Heap)
  • Linked List
  • 자료 구조
  • Backtracking(백트래킹)
  • Binary Tree(이진 트리)
  • 코딩테스트 연습문제
  • TypeScript
  • 재귀 함수
  • 자바스크립트 기초 문법
  • 혼자 공부하는 자바스크립트
  • Inorder Traversal(중위 순회)
  • BFS(너비우선탐색)
  • 01. 미니 프로젝트
  • POST / GET 요청
  • Preorder Traversal(전위 순회)
  • leetcode-cli
  • 팀 프로젝트
  • 프로그래머스
  • 시간 복잡도
hELLO · Designed By 정상우.
깊은바다거북

개발 공부 기록

TIL | WIL

1/11 (서버측엔 websockets 모듈, 브라우저측엔 표준 웹 소켓 API, 수) TIL

2023. 1. 11. 22:31

(웹소켓 공부 중)

참고중:

Mozilla MDN - WebSocket을 이용하여 클라이언트 애플리케이션 작성하기 ✔️

웹소켓 공식 문서(?) https://websockets.spec.whatwg.org/#the-websocket-interface ✔️

클라이언트 측 웹소켓 API docs - 속성과 메소드, 이벤트 목록 ✔️

모던 자바스크립트 웹소켓 https://ko.javascript.info/websocket ✔️

WebSockets와 Socket.IO - 비교글 좋음 다시 읽어봐도 좋을 것 https://velog.io/@leeyw2709/WebSocket과-socket.io ✔️

웹소켓과 Socket.IO 코드 예시 - https://velog.io/@delay100/Socket

ws 사용하기 - 이것도 좋음. https://curryyou.tistory.com/348


SQL 문제 풀이

코딩테스트 연습 - 헤비 유저가 소유한 장소
PLACES 테이블은 공간 임대 서비스에 등록된 공간의 정보를 담은 테이블입니다. PLACES 테이블의 구조는 다음과 같으며 ID, NAME, HOST_ID는 각각 공간의 아이디, 이름, 공간을 소유한 유저의 아이디를 나타냅니다. ID 는 기본키입니다.
https://school.programmers.co.kr/learn/courses/30/lessons/77487

시도1.

WHERE 절에는 aggregation 함수들이 들어갈 수 없다는 것은 알고 있었다.

SELECT *
FROM places
WHERE COUNT(host_id) >= 2
ORDER BY id;

=> 실행 결과: SQL 실행 중 오류가 발생하였습니다. Invalid use of group function

시도 2.

GROUP BY와 HAVING으로 해보려 했으나 뭉쳐진 그룹들을 어떻게 다시 해체해서 보여줘야 될지…

SELECT *
FROM places
GROUP BY host_id
HAVING COUNT(host_id) >= 2
ORDER BY id;

⇒ 실행 결과:

IDNAMEHOST_ID
4431977BOUTIQUE STAYS - Somerset Terrace, Pet Friendly760849
16045624Urban Jungle in the Heart of Melbourne30900122

정답 :

튜터와 진행한 풀이 과정에서 서브 쿼리 문법을 배웠다.

SELECT *
FROM places
WHERE host_id IN 
(SELECT host_id FROM places 
 GROUP BY host_id 
 HAVING COUNT(host_id) >= 2)
ORDER BY id;

⇒ 실행 결과(요구 결과와 같음) :

IDNAMEHOST_ID
4431977BOUTIQUE STAYS - Somerset Terrace, Pet Friendly760849
5194998BOUTIQUE STAYS - Elwood Beaches 3, Pet Friendly760849
16045624Urban Jungle in the Heart of Melbourne30900122
17810814Stylish Bayside Retreat with a Luscious Garden760849
22740286FREE PARKING - The Velvet Lux in Melbourne CBD30900122

새로 알게 된 점

: 서브 쿼리 작성법(의 예시 하나)을 알게 되었다.

특히 저 IN 뒤의 서브 쿼리에서 SELECT한 컬럼 ‘하나’가 IN 앞의 컬럼 ‘하나’에 대응(주입)되는 원리라는 것이 흥미로웠다.

문제 풀이 - [핸드폰 번호 가리기]

코딩테스트 연습 - 핸드폰 번호 가리기
https://school.programmers.co.kr/learn/courses/30/lessons/12948?language=javascript

내 정답:

function solution(phone_number) {
    var answer = '';
    const len = phone_number.length;
    for (let i = 0; i < len - 4; i++) {
        answer += '*';
    }
    answer += phone_number.slice(-4)
    return answer;
}

새로 알게 된 것

자바스크립트에서 문자열 슬라이싱용 String.slice()라는 아주 편한 메소드가 있다는 것을 알게 되었다.

String.slice(시작 인덱스, 끝 인덱스)

  • 끝 인덱스는 옵셔널이며 '미포함'이다.
  • 파이썬에서처럼 음수 인덱싱도 가능하다. 사실상 파이썬의 슬라이싱과 완전히 동일한 문법 같다.
// 예시: 
const str = 'The lazy dog.';

console.log(str.slice(4));
// expected output: "lazy dog."

console.log(str.slice(4, 8));
// expected output: "lazy"

console.log(str.slice(-4));
// expected output: "dog."

console.log(str.slice(-9, -5));
// expected output: "lazy"


오늘 웹소켓, 특히 자바스크립트의 websockets 모듈에 대해 공부했다. 기존의 강의 노트에 엄청 보강을 해놔서 여기에는 따로 올릴 게 없다.

가장 궁금했던 점인, 어디서 ws.on("message", function() {…}) 같은 문법이 튀어나와서 사용되는 것인가에 대한 해답도 튜터님에게 찾아가서 얻었다. websockets 모듈의 경우, API 도큐먼트에 “해당 클래스는 EventEmitter를 상속하고 있음” 이란 문장이 적혀 있었는데, 이 한 문장이 엄청난 의미를 담고 있는 해답이었던 것이다. EventEmitter는 Node.js의 내장 모듈이고(…) 여기에 .on("이벤트명", …)같은 메소드가 여럿 오버로딩 되어 있는 것이다. 그래서 이를 상속하는 websockets 모듈의 WebSocket 클래스나 WebSocketServer 클래스도 모두 WebSocket.on("message", function() { … })같은 식으로 운용될 수 있었던 것이다.


Uploaded by N2T

    'TIL | WIL' 카테고리의 다른 글
    • 1/13 (Socket.IO “방”의 개념 예제, 금) TIL
    • 1/12 (공부가 느려서 초조한 하루, 목) TIL
    • 1/10 (이벤트와 form 잡학상식, 화) TIL
    • 1/6 (3번째 프로젝트 KDT 회고, 금) TIL
    깊은바다거북
    깊은바다거북

    티스토리툴바