목록2022/09 (25)
치춘짱베리굿나이스

[Violation] took 1000⬆️ms 이게 뭐지 앞에서 this 바인딩 문제를 해결하니 이번엔 이상한 경고가 출력된다 대충 이 핸들러 호출하고 종료되기까지 1016초 걸렸으니 왠만하면 비동기로 동작하게끔 하는 게 좋겠다 라는 의미이다 또한 이 경고는 숨길 수가 없다고 한다 원인은 경고 출력용 alert 함수 때문이었는데, alert로 출력된 경고 메시지의 ‘확인' 버튼을 눌러야 함수가 종료되었다고 판단하기 때문에 확인 버튼을 언제 누르냐에 따라 위의 경고 메시지의 시간이 달라진다 테스트해보니 3초 뒤에 클릭하면 대충 3초 조금 넘는 시간이 걸렸다고 나왔다 만약 경고 메시지의 확인 버튼을 10분 뒤에 누르면 아마 600,000ms 걸렸다고 나오지 않을까… alert 함수는 위의 함수 종료를 지연시..

이벤트 핸들러 this 오류 문제 클래스 안에 있는 메서드를 핸들러로 부착하니 클래스의 멤버 변수들을 찾지 못하는 상황이 발생했다 처음에는 메서드가 프라이빗 메서드라 그런 건가? 싶어서 이리저리 고쳐봤는데, 알고 보니 this가 클래스 인스턴스를 가리키지 않고 이벤트가 걸린 요소를 가리켜서 그런 것이었다 원인 https://developer.mozilla.org/ko/docs/Web/API/EventTarget/addEventListener MDN 문서에 따르면 이벤트 수신기 (이벤트 핸들러) 의 this는 이벤트가 걸린 대상 요소를 가리키게 된다고 한다 (= e.currentTarget이 가리키는 요소와 같다) 디버깅하느라 별 짓을 다 했는데 이런 이유가 있었다 해결 DOM요소.addEventListe..

웹팩과 웹팩 설정하기 웹팩 공식 홈페이지 webpack webpack 웹팩은 모듈 번들러입니다. 주요 목적은 브라우저에서 사용할 수 있도록 JavaScript 파일을 번들로 묶는 것이지만, 리소스나 애셋을 변환하고 번들링 또는 패키징할 수도 있습니다. webpack.kr 웹팩이란? 공홈페이지에서부터 “~~를 번들해 보세요" 라는 캐치프레이즈가 대문짝만하게 출력되는 것에서도 알 수 있듯, 웹팩은 ‘모듈 번들러' 이다 캐치프레이즈가 한 3~5초 간격으로 바뀌는데, {이미지 | 애셋 | 스크립트 | 스타일 …} 을 번들해 보세요 예시 중 하나로 계속 슬라이딩되는 것으로 보아 프로젝트 내의 이미지, 애셋, 스크립트, 스타일도 번들이 가능한 ‘모듈' 이라고 할 수 있음을 예측가능하다 앞서 적었듯 모듈 번들러는 모..

CPP 08 Templated containers, iterators, algorithms 템플릿 컨테이너, 반복자, 알고리즘 stl Standard Template Library 표준 템플릿 라이브러리라는 이름에서 알 수 있듯 세 개의 구성 요소로 이루어진 템플릿들을 제공한다 그것은 반복자 (iterator), 컨테이너 (container), 알고리즘 (algorithm) 스택, 큐, 덱, 맵, 벡터, 리스트 등 한번쯤 들어봤을 법한 자료구조들과 적합한 알고리즘들이 내장되어 있으며, 필요한 자료구조를 꺼내서 사용하면 된다 container http://www.tcpschool.com/cpp/cpp_container_adapter http://www.tcpschool.com/cpp/cpp_containe..
CPP 07 C++ templates C++ 템플릿 템플릿 template T add(T x, T y) { return x + y; } 같은 이름의 함수를 인자 자료형이나 반환값만 다르게 하여 새로 생성하는 것을 오버로딩이라고 했었다 다만 오버로딩은 int, float, double, … 등 모든 자료형에 대해 함수를 따로따로 생성해주어야 한다는 단점이 있다 (귀찮다) 템플릿을 이용하면 자료형에 구애받지 않고 함수를 작성할 수 있으며, 어떤 자료형이든 내부에서 사용하는 연산자나 함수에 대한 오버로딩이 존재한다면 결과값을 얻어낼 수 있다 템플릿은 template라는 키워드 (예약어) 로 정의하고, typename T에서 T는 아무 단어나 넣어도 되지만 보편적으로 T가 많이 사용된다 template temp..
CPP06 C++ casts C++ 캐스팅 strtod std::string tmp = "33 44 55"; char* endptr; double value = strtod(tmp.c_str(), &endptr); // value = 33 // endptr = " 44 55" char* 형식의 문자열을 받아 double 자료형으로 변환한다 이때 두 번째 인자에는 char* 형식의 변수 주소가 들어가게 되는데, strtod는 첫 번째 문자열에서 숫자 (double) 로 추정되는 부분을 변환하고, 문자열 안에서 숫자로 변환된 부분문자열 다음 포인터를 두 번째 인자 주소에 넣어준다 예시에서 “33 44 55”를 인자로 넣으면, 33까지가 숫자이고 공백 문자열은 숫자가 아니므로 strtod는 공백 전까지를 숫자..
https://www.youtube.com/watch?v=yEW2jgQRhMU 운동 나는 어릴 때부터 운동을 유독 싫어했다 초등학교때부터 고등학교때까지 12년 내내 체육시간은 그저 기본점수만 받고 대충 하는 시간이었다 움직이는 걸 싫어하는 건 아니고, 흥미가 당기지 않는 반복행동을 수행해야 하는 시간이 지루해서 더 그런 것 같다 사실 지금도 운동은 별로 좋아하지 않는데 몸이 많이 망가져서 억지로... 하고 있다 대학교 저학년 때, 주변 사람들이 '요즘은 건강 때문에 운동을 억지로 하게 된다' 며 나한테도 그럴 날이 올 것이라고 충고했다 그때까지만 해도 주의깊게 듣지 않았다 건강이 망가져도 먼 미래의 얘기지 당장 빠른 시일 내로는 악화될 것 같지 않다는 근거없는 믿음이 있어서였을까... 그리고 대학교 3학..

MySQL 나의SQL (아님) 오픈소스 라이선스로 무료이고, 다양한 프로그래밍 언어를 지원하며, ANSI SQL을 준수하고 비교적 빠르고 널리 쓰이는 MySQL을 잡수어보세요 이전에 사용했던 sqlite는 한 파일 = 하나의 데이터베이스 였지만 MySQL은 데이터베이스 서버를 사용하기 때문에 사용이 쫌 복잡하다 sqlite는 단순하고 빠른 구축을 원할 때 사용했지만, 데이터베이스 구조가 조금만 복잡해져도 보안상의 이슈나 동시성 문제 때문에 MySQL이 좋은 해결책이 될 수 있다 설치 및 CLI에서 사용해보기 CLI가 어렵고 복잡하다면 워크벤치를 사용하면 좋다 (GUI다!) 0. 로컬 환경에 MySQL 설치 및 설정 $> brew install mysql $> mysql -V // 버전 확인 기존의 nod..