부끄러움은 나의 몫 문뜩 과거의 기억이 떠오른다. 그때의 기억, 수치심은 너무나 명료하고 잊기 힘든 고통스러운 기억이다. 특히나 나의 잘못이 아니라 생각되는 기억은 더욱 고통스럽다. 부끄러움과 동시에 분노가 치밀어 오른다. 그리고 이런 제어할 수 없는 영역의 것들은 나를 무력하게 만든다. 그럼에도 스스로를 탓하며 앞으로 그런 실수를 하지 않겠다, 그런 순간을 만나지 않겠다고 다짐한다. 하지만 그런 다짐은 스스로를 소극적으로 만들어 간다. 내면의 불안이 타인의 인정에 목매달게 만들지만, 그 불안 때문에 내면을 드러내지 못하는 것이다. 이런 방어적 자세는 오히려 우리를 더더욱 고립시키고, 또 다른 후회의 순간을 만들 뿐이다. ‘나는 왜 유독 부끄러움을 잘 느낄까? 다른 사람들은 안 그런 것 같은데, 모든 순..
❗matches 함수의 기본적인 사용방법 matches 함수는 Element의 내장 메서드입니다. CSS 선택 문자열로 요소의 일치 여부를 판단할 수 있습니다. const element = document.getElementById('myElement'); if (element.matches('.myClass')) { console.log('The element matches the selector'); } else { console.log('The element does not match the selector'); } ❗matches를 이용한 버튼 이벤트 추가 다음과 같이 버튼이 있다고 했을 때, 이벤트를 어떻게 부여할 수 있을까요? btn1 btn2 btn3 기본적으로 순회를 통해서 addEvent..
CDN이란? CDN은 Content Delivery Network의 약자로 웹 페이지의 로드 속도를 높혀주는 서버 네트워크입니다. 웹 페이지에서 이미지와 같은 대용량 데이터를 읽어오는데, 서버와의 물리적 거리가 멀다면 로딩되는 속도가 느릴 수 있습니다. 이와 같은 상황에서 물리적으로 가까운 CDN서버에 대용량 데이터를 저장해 빠른 웹페이지 로딩을 기대할 수 있습니다. CDN의 장점? CDN은 컨텐츠 사용자와의 물리적 위치가 가까운 서버에 데이터를 캐싱하여 빠르게 웹페이지를 보여줄 수 있습니다. 서버를 분산시키기 때문에 하나의 서버에 과도한 요청을 보내는 것을 방지해줍니다. 이로써 DDoS 완화를 할 수 있고, 대역폭을 줄여 비용을 절감할 수 있습니다.
우아한 테크코스 2주차 입니다. 이번 미션에서는 조합과 상속에 대해서 공부했습니다! ❗중복 코드 발생 class Lotto { constructor(numbers) { if (numbers.some((number) => number > MAX_NUMBER || number < MIN_NUMBER)) { throw new Error("로또 번호는 1~45 사이의 정수여야 합니다."); } if (numbers.length !== 6) { throw new Error("로또 번호는 6개여야 합니다."); } if (numbers.length !== new Set(numbers).size) { throw new Error("로또 번호는 중복되지 않아야 합니다."); } this.#numbers = number..
"한빛미디어 서평단 활동을 위해서 책을 제공 받아 작성된 서평입니다." You Don’t Know JS (YDKJS) 책은 익히 들어봤습니다. JS 개발자라면 누구나 한 권쯤 가지고 있을 모던 자바스크립트 Deep Dive 책이 기초적인 JS의 개념을 다룬다면, YDKJS책은 닌자 비급이라 불리는 JS Ninja 라는 책과 더불어 자바스크립트의 조금 더 깊은 이해를 도와주는 필독서로 알고 있었습니다. 하지만 이 두 책은 출판 된지 꽤 시간이 흘렀고, 급격히 변하는 웹 프론트 생태계를 공부하는 와중에 7년이 지난 책을 챙겨 읽을 겨를은 없었습니다. 이번에 그 YDKJS의 두 번째 버전의 책이 나왔다는 소식을 들었을 때 명성 있는 책인 만큼 꼭 읽어보겠노라 다짐했고, 정말 감사하게도 ‘한빛 미디어’에서 책을..
❗문제발생! export default class AppError extends Error { static PREFIX = "[ERROR]"; constructor(message) { super(`\\n${AppError.PREFIX} ${message}\\n`); this.name = this.constructor.name; } } Error를 커스텀하여 사용하기 위해, 다음과 같은 코드를 사용하였습니다. 저는 여기서 static 키워드를 사용 것에 대한 의문을 가졌습니다. 하지만 static을 뺀 아래 코드는 에러가 발생하였습니다. export default class AppError extends Error { PREFIX = "[ERROR]"; constructor(message) { super(..