본문 바로가기

Book & Lecture Review12

'모던자바스크립트 Deep Dive' 를 읽으며 (5장~8장) 5장. 표현식과 문 🧐 '값'은 '표현식'이 평가되어 생성된 결과를 말한다. var sum = 10 + 20 이 간단한 '문'은 '10' 과 '20' 이라는 숫자 '리터럴' 의 합이 '평가'되어 생성된 숫자 '값' 이 할당되는 '할당문'이다. 값으로 평가될 수 없는 변수선언문과 같은 것들은 표현식인 문이 아니다. 간단한 문이라도 기본을 놓치지 말고 깊이있게 이해하려고 노력하자. ✅ 문과 표현식을 구별하고 해석할 수 있다면 자바스크립트 엔진의 입장에서 코드를 읽을 수 있고 실행 결과를 예측하는 데 도움이 된다. 이는 버그를 줄이고 코드의 품질을 높여줄 것이다. 네! 🧐 자바스크립트 엔진이 소스코드를 해석할 때 문의 끝이라고 예측되는 지점에 세미콜론을 자동으로 붙여주는 세미콜론 자동 삽입 기능(ASI)이 암.. 2024. 1. 17.
'모던자바스크립트 Deep Dive' 를 읽으며 (1장~4장) 1장. 프로그래밍 🧐 대부분의 문제(요구사항)은 복잡하며 명확하지 않을 수도 있다. 따라서 문제(요구사항)을 명확히 이해하는 것이 우선되어야 하며 복잡함을 단순하게 분해하고 자료를 정리하고 구분해야 하며 순서에 맞게 행위를 배열해야 한다. 프로그래밍에 대한 내용이긴 했지만, 그 외에도 업무적인 해결 능력이나 프로젝트 진행중 문제 해결능력에 대해서도 기억하고있으면 좋을 만한 내용이라는 생각이 들었다. 개발과 업무, 프로젝트 관리 등 요구사항이나 문제는 항상 복잡하고 명확하지 않을 수 있으며, 그 불명확함을 단순하게하고 배열하는게 문제해결 능력이라는 사실을 기억하자. 🧐 프로그래밍 학습은 일반적으로 문법을 배우는 것부터 시작하는 외국어 학습과 유사하다. 문법을 잘 안다고 해서 외국어를 잘한다고 말할 수는 없.. 2024. 1. 15.
[책 후기] Do it! 모던 자바스크립트 프로그래밍의 정석 읽게된 계기 모던 자바스크립트(es6)를 현재 실무에서 활용하고 있으나, 필요한 부분만 조금씩 찾아보거나 부분적인 강의만 들었을 뿐 전체적으로 한번에 훑어본 적이 없었다. 아직 모르는 지식도 많아서 아는 것들 사이에 중간중간 채워넣기 위해 언젠가 기본서적을 꼭 읽어야겠다고 생각했었는데, 마침 새로운 도서가 나와서 신청하여 읽게되었다. 좋았던 부분 1. 제목에 써있는 대로 정말 교과서처럼 '이해-실습-문제' 과정으로 진행된다. 처음 접하는 분들이 직접 코드를 작성하면서 익혀나가기 좋을 것 같다. 2. 코드예시가 정말 친절하게 단계별로 작성되어있고, 설명도 매우 풀어서 쉽게 작성되어있어 큰 어려움 없이 바로바로 이해하면서 넘어갈 수 있다. (그럼에도 불구하고 이해가 안되면 유튜브에서 무료로 제공되는 동영상 .. 2022. 12. 13.
인덱스 확장 기능 사용법 인덱스 스캔 방식은 여러가지가 있다. 각 스캔 방식의 주요 특징을 비교해보자. 1. Index Range Scan B*Tree 인덱스의 가장 일반적이고 정상적인 형태의 액세스 방식이다. 인덱스 루트에서 리프 블록까지 수직적으로 탐색한 후에 ‘필요한 범위'만 스캔한다. 앞선 내용에 있지만, 범위지정시캔을 하려면 선두 컬럼을 가공하지 않은 상태로 조건절에 사용해야 한다. 다시 강조하지만 인덱스를 태운다고 성능이 좋다고 생각하면 안된다. 스캔 범위와 액세스 횟수를 얼마나 줄일 수 있느냐로 성능이 결정된다. 2. Index Full Scan 수직적 탐색 없이 인덱스 리프 블록을 처음부터 끝까지 수평적으로 탐색하는 방식이다. 대게 데이터 검색을 위한 최적의 인덱스가 없을 때 차선으로 선택된다. Index Full.. 2022. 5. 11.
인덱스 기본 사용법 인덱스를 사용한다는 것 인덱스 컬럼을 가공하지 않아야 인덱스를 정상적으로 사용할 수 있다. 즉, 인덱스 컬럼을 가공하면 인덱스를 정상적으로 사용할 수 없다. 여기서 ‘인덱스를 정상적으로 사용한다'는 표현은 리프 블록에서 스캔 시작점을 찾아 거기서부터 스캔하다가 중간에 멈추는 것, 즉 리프 블록 일부만 index Range Scan을 의미한다. 인덱스 컬럼을 가공해도 인덱스를 사용할 수는 있지만, 스캔 시작점을 찾을 수 없고 멈출 수도 없어 리프 블록 전체를 스캔해야만 한다. 즉 일부가 아닌 전체를 스캔하는 Index full scan 방식으로 작동한다. 인덱스를 Range Scan 할 수 없는 이유 인덱스 스캔 시작점을 찾을 수 없기 때문이다. 일정 범위를 스캔하려면 ‘시작'과 ‘끝' 지점이 있어야함. .. 2022. 5. 11.
인덱스 구조 및 탐색 인덱스 튜닝의 두 가지 핵심요소 인덱스는 큰 테이블에서 소량 데이터를 검색할 때 사용한다. 온라인 트랜젝션 처리 (OLPT) 시스템에서는 소량 데이터를 주로 검색하므로 인덱스 튜닝이 무엇보다 중요하다. 첫번째. 인덱스 스캔 효율화 튜닝 인덱스 스캔 과정에서 발생하는 비효율을 줄이는 것. 두번째. 랜덤 엑세스 퇴소화 튜닝 테이블 액세스 횟수를 줄이는 것. 인덱스 스캔 후 테이블 레코드를 엑세스할 때 랜덤 I/O 방식을 사용함. 데이터 베이스 성능이 느린 이유는 디스크 I/O 때문이다. 읽어야 할 데이터량이 많고, 그 과정에 디스크 I/O가 많이 발생할 때 느리다. 인덱스를 많이 사용하는 OLTP 시스템이라면 디스크 I/O 중에서도 랜덤 I/O가 특히 중요하다. 이 두개중 성능에 미치는 영향이 더 큰 것은 .. 2022. 5. 11.
SQL 데이터 저장 구조 및 I/O 메커니즘 SQL이 느린 이유 SQL이 느린 이유는 십중팔구 I/O 때문이라고 필자는 말한다. OS 또는 I/O 서브시스템이 I/O를 처리하는 동안 프로세스는 잠을 자기 때문이다. 프로세스의 생명주기 실행중인 프로세스는 수시로 실행 준비 상태로 전환했다가 다시 실행 상태로 전환하는 것을 반복한다. 여러 프로세스가 하나의 CPU를 공유할 수 있지만 특정 순간에는 하나의 프로세스만 CPU를 사용할 수 있기 때문에 이런 메커니즘이 필요하다. Waiting : 프로세스 도중에 I/O 작업이 필요하여 I/O 작업을 수행하는 상태이다. 이 때 CPU는 I/O를 기다리며, 다른 프로세스를 수행한다. (필자는 이 과정을 잠을 잔다고 표현함.) Waiting 상태가 끝나면 프로세스는 다시 Ready 상태가 되고, 잠시 후 다시 R.. 2022. 5. 4.
소프트 파싱 vs 하드 파싱 소프트 파싱 vs 하드 파싱 라이브러리 캐시 SQL 파싱, 최적화, 로우소스생성 과정을 거쳐 생성한 내부 프로시저를 반복 재사용할 수 있도록 캐싱해 두는 메모리 공간을 ‘라이브러리 캐시'라고 한다. 라이브러리 캐시는 SGA의 구성요소이다. 하나의 쿼리를 수행하는데 있어 후보군이 될만한 무수히 많은 실행경로를 도출하고, 짧은 순간에 딕셔너리와 통계정보를 읽어 각각에 대한 효율성을 판단하는 과정은 결코 가벼울 수 없다. 이렇게 어려운 작업을 거쳐 생성한 내부 프로시저를 한번만 사용하고 버린다면 이만저만한 비효율이 아니기 때문에 라이브러리 캐시가 필수적이다. SGA(System Global Area) : 서버 프로세스와 백그라운드 프로세스가 공통으로 엑세스하는 데이터와 제어 구조를 캐싱하는 메모리 공간이다. .. 2022. 5. 4.
SQL 파싱과 최적화 SQL 최적화의 ‘최적화'란 무엇을 대상으로하며 어떤 과정을 거치는지 알아보자. 구조적, 집합적, 선언적 질의언어 SQL (Structured Query Language) : SQL is a set-based, declarative query language, not an imperative language such as C or BASIC. 즉, 기본적으로 구조적이고 집합적이고 선언적인 질의 언어이다. 원하는 결과 집합을 구조적, 집합적으로 선언한다. 하지만 그 결과 집합을 만드는 과정은 절차적일 수 밖에 없다. 즉, 프로시저(절차기술)가 필요한데, 그런 프로시저를 만들어내는 DBMS 내부 엔진이 SQL 옵티마이저이다. DBMS 내부에서 프로시저를 작성하고 컴파일해서 실행 가능한 상태로 만드는 전 과정.. 2022. 5. 4.
[SQL-1] 정규화란? - 제 1/2/3정규형 정규화의 개념과 필요한 이유에 대해서 알아보자 1. 제1정규형 : 모든 속성은 반드시 하나의 값을 가져야 한다. 1) 잘못된 사례1 => 다중 값을 가지는 경우 다음과 같은 모델이 있다고 가정했을 때 발생할 수 있는 문제는 다음과 같다. 연락처 정보에서 집전화 번호와 핸드폰 번호를 구별할 수 없다. 집전화가 여러대인 '장소오'와 핸드폰번호가 여러개인 '장소삼'이 혼재되어잇기 때문에 원하는 데이터만 추출하기 어렵다. 이메일처럼 다른 유형의 데이터를 포함할 수도 있어 본연의 의미가 퇴색될 수 있다. 이와 같이 데이터를 관리한다면 '연락처' 속성의 의미는 퇴색될 것이고, 개발의 복잡성은 증가할 것이며 장기적으로 불안정한 데이터 구조를 양산할 것이다. 사원번호 사원명 연락처 10001 장소이 010-1111-2.. 2022. 3. 10.
[readIT 1호 Review] 성장판을 찾아서(1) 우연히 readIT 라는 교보문고에서 발간하는 매거진을 알게되었다. 1호는 21명의 현직자분들이 '개발자로서의 성장'에 대한 이야기를 하는 내용으로 구성되어있다. 개발자로서 성장에 목마름 반, 업무에 지침 반인 상태였던 나로서는 한문장 한문장이 먼저 길을 걸어본 선배님들이 바로 옆에서 건내주는 충고처럼 느껴졌다. (거의 랜선선배 21분 생긴 기분ㅠㅠ) 꼭 기록해놓고 두고두고 보며 개발자의 길을 걷는 동안 들여다보며 좋은 영향과 자극을 받고 싶다는 생각이 절로 들어서 인상깊은 부분들을 짧게나마 남긴다. 06 유한태 _ 성장판을 찾아서 정체보다 더 무서운 건 ‘포기’다. 새로운 자극이 들어와도 무시하는 상태. 현재 상태에 안주하지 말고 새로운 자극을 계속 받아들이자. 사람 들로부터, 책으로부터. 내가 가장 .. 2021. 11. 15.
섹션 1. 인터넷 네트워크 http/웹은 인터넷네트워크를 기반으로 하기때문에 사전학습으로 알아보자. 1. IP (인터넷 프로토콜) 인터넷 프로토콜의 역할 클라이언트가 ip주소를 부여받고 지정한 ip주소에 데이터를 전달한다. 이때 패킷(Packet)이라는 통신 단위로 데이터를 전달하게 된다. 한계 비연결성 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송한다! 정확히는 대상 서버가 패킷을 받을 수 있는지 없는지의 상태를 알 수가 없기 때문에 그냥 일단 보냄. 비신뢰성 중간에 패킷이 사라지거나 패킷이 순서대로 오지 않을 수 있다. 그럼 소실로 이어짐. 메시지가 대략 1500 바이트가 넘으면 끊어서 보내게 되는데, 끊어진 2개의 순서가 보장되지 않음. 패킷들이 중간에 다른 노드를 탈 수 있기 때문이다. ex) Hello, w.. 2021. 1. 10.
반응형