본문 바로가기

파이썬 특징- 덕타이핑(Duck typing) Duck Typing Duck typing이란 특히 동적 타입을 가지는 프로그래밍 언어에서 많이 사용되는 개념으로, 객체의 실제 타입보다는 객체의 변수와 메소드가 그 객체의 적합성을 결정하는 것을 의미 동적 타입 언어인 파이썬은 메소드 호출이나 변수 접근시 타입 검사를 하지 않으므로 duck typing을 넒은 범위에서 활용할 수 있음 서로 상속되거나 하는 관계가 없어도, 내부에 동일한 fly()메소드가 있으면 `lift_off(entity)' 함수에서 fly가 정상적으로 실행 마지막 Whale 클래스는 해당 fly() 메소드가 없기 때문에, AttributeError가 발생 속성과 메소드 존재에 의해 객체의 적합성이 결정 class Parrot: def fly(self): print("Parro..
DOM과 BOM DOM(Document Object Model) 웹페이지를 자바스크립트로 제어하기 위한 객체 모델(문서에 대한 모든 내용을 담고 있음) 텍스트 파일의 문서를 브라우저가 이해할 수 있는 구조로 구성한 것 → HTML 요소의 관계를 반영하여 모든 노드들을 트리구조로 구성한 것 HTML뿐 아니라 다양한 마크업 언어를 제어하기 위한 모델, 문서의 구조화된 표현으로 프로그래밍 언어가 DOM구조에 접근해 문서 구조, 스타일 등을 변경할 수 있도록 함 Document 객체는 윈도우에 로드된 문서를 의미한다고 할 수 있다. 웹에서 발생하는 수많은 이벤트(Event)는 모두 자바스크립트의 객체, 이런 Document 객체(요소)로 구성된 하나의 웹 페이지는 Window를 최상위로 하는 트리를 생성, 각각의 이벤트(객체)..
서버 사이드 렌더링(SSR) vs 클라이언트 사이드 렌더링(CSR) 클라이언트 사이드 렌더링(CSR, client-side rendering) 서버에서 JSON 파일만 보내주고 html을 그리는 역할은 클라이언트가 담당, SPA에서 주로 사용 사용자의 행동에 따라 필요한 부분만 다시 읽어들여 서버측 랜더링 보다 빠른 인터랙션을 기대할 수 있음(페이지를 이동하면 새로운 페이지 요청) 초기 구동 속도가 느림 SEO 문제, CSR 되는 페이지를 빈 페이지로 인식 보안문제, SSR에서는 사용자 정보를 세션으로 관리, 클라이언트 쪽에서는 쿠키 말고는 마땅한 저장공간이 없음 서버 사이드 렌더링(SSR, server-side rendering) 전통적인 방식 서버에서 사용자에게 보여줄 페이지를 모두 구성하여 사용자에게 페이지를 보여주는 방식 모든 데이터가 매핑된 서비스 페이지를 클라..
자바스크립트 Scope와 Closure 스코프(Scope) Scope(스코프) : 변수 이름, 함수 이름, 클래스 이름과 같은 식별자가 본인이 선언된 위치에 따라 다른 코드에서 자신이 참조될 수 있을지 없을지 결정되는 것 블록 레벨 스코프 : 대부분 프로그래밍 언어, (let, const) 함수 레벨 스코프 : 자바스크립트, 함수 내부 전체에서 유효한 식별자 상위스코프 : 함수가 호출되는 시점에 결정(동적 스코프) 함수가 정의되는 시점에 결정(정적 스코프, 렉시컬 스코프) → 자바스크립트 함수는 태어나면서 내부슬롯에 상위 스코프 참조를 저장 함수 호출 → 실행 컨텍스트 생성, 실행 컨텍스트 스택 → 렉시컬 환경 생성 →실행 컨텍스트 스택에서 팝, 제거 Closure(클로저) 두 개의 함수로 만들어진 환경 으로 이루어진 특별한 객체의 한 종류 ..
파이썬, GIL 파이썬 GIL(Global Interpreter Lock) 인터프리터에 락을 걸어 다중코어 환경에서 멀티스레드가 실행되지 못하도록 하는 것 압축, 정렬, 인코딩 등 수행시간에 CPU 의 영향이 큰 작업(cpu bound)을 멀티 스레드로 수행하도록 한 경우 성능 문제 Python 코드(bytecode)를 실행할 때에 여러 thread를 사용할 경우, 단 하나의 thread만이 Python object에 접근할 수 있도록 제한하는 mutex(MUTual EXclusion, 상호배제) GIL 문제 멀티 스레드로 만들었어도 본질적으로 싱글 스레드로 동작 멀티스레드일 경우 thread context switch에 따른 비용도 발생하기 때문에 오히려 싱글스레드보다 시간이 오래 걸리는 문제 파이썬의 멀티스레드는 C..
[DB]트랜잭션(Transaction) 트랜잭션과 잠금(Lock) 트랜잭션 트랜잭션은 작업의 완전성 을 보장해주는 것(= 여러 작업을 논리적인 하나의 작업의 단위로 묶어주는 것) 사용자의 입장에서는 작업의 논리적 단위이며 시스템의 입장에서는 데이터를 접근 및 변경하는 프로그램 단위 트랜잭션은 하나의 논리적인 작업을 구성하는 단위 작업 모두 적용되거나 문제가 있을 시 아무것도 적용되지 않아야 함을 보장(커밋 or 롤백) 예를 들어 1만원이 입금되고 1만원을 송금하는 작업을 트랜잭션으로 묶을 때 둘 중 하나라도 오류가 있으면 작업은 아예 이루어지지 않는다. 멀티트랜잭션 환경, 송금 처리 등 시스템에서 활용 잠금 Lock : 데이터베이스의 일관성과 무결성을 유지하기 위해 트랜잭션의 순차적 진행을 보장할 수 있는 장치 잠금(Lock)은 동시성을 제어..
제너레이터 Generator(제너레이터, 발생자) → *iter()와 next() 메서드로 클래스를 작성하는걸 피하는 우아하고 간결한 문법, 값을 그 때 그 때 생성한다** 제너레이터는 이터레이터를 생성해주는 함수(함수 안에서 yield를 사용) yield에는 값(변수)을 지정 제너레이터는 제너레이터 객체에서 next 메서드를 호출할 때마다 함수 안의 yield까지 코드를 실행함. yield 문이 포함된 제네레이터 함수를 실행하면 제네레이터 객체가 반환되는데 이 때는 함수의 내용이 실행되지 않는다. next()라는 빌트인 메서드를 통해 제네레이터를 실행시킬 수 있으며 next() 메서드 내부적으로 iterator 를 인자로 받아 이터레이터의 __next__() 메서드를 실행시킨다. 제너레이터를 사용하는 이유 메모리..
[JS] this와 bind 자바스크립트 this란? this : 함수가 객체 안에서 사용될 때 그 객체를 참조할 수 있는 키워드 함수 내에서 함수 호출 맥락(context)를 의미(함수를 어떻게 호출하느냐에 따라서 this가 가리키는 대상이 달라짐 = this가 어떤 obj에 binding 됨) js의 함수는 객체, 일급객체(1. 변수나 데이터에 저장, 2. 함수의 인자로 전달 3. 함수의 반환값으로 전달) bind : 함수가 호출될 때마다 this가 결정되는 것을 바인딩 된다고 표현 바인딩 종류 기본바인딩 특정 객체의 메서드가 아니라 함수를 호출하면, 해당 함수 내부 코드에서 사용된 this 는 전역객체에 바인딩 함수일 때 this는 전역객체에 바인딩 - 브라우저 환경에서는 window(엄격 모드일때는 undefined), 노드..