반응형

전체 글 41

리액트(React) - 고차 함수, 커링(Currying) 기법

고차 함수(Higher-Order Function)와 커링(Currying) 기법이란? 이 두 가지 개념은 리액트에서 정말 많이 사용되는 개념입니다. 우선 고차 함수는 함수를 인자로 전달받거나 리턴값으로 함수를 반환하는 함수를 의미합니다. 파이썬의 데코레이터(Decorator)와 비슷한 개념이라고 생각하시면 됩니다. 커링(Currying) 기법은 인자가 여러개인 함수의 일부 인자를 고정시키는 새로운 함수를 만드는 기법을 의미합니다. 인자가 n개인 함수를 n개로 분리하여 사용하게끔 만드는 기법입니다. 일단 이 정도로만 알고, 자세한 내용은 천천히 설명 드리겠습니다. 고차 함수(Higher-Order Function) 앞서 말씀드렸듯이 고차 함수는 함수를 인자로 전달받거나 리턴값으로 함수를 반환하는 함수를 ..

React 2021.05.27

장고(Django) - media 파일 다루기

서론 장고에서의 media 파일은 ImageField와 FileField를 통해 저장하게 된 파일들을 의미합니다. 단순히 저 두가지 필드만을 통해 저장할 수 있는 것은 아니고 FileField를 상속받아 커스텀 필드를 만들어 저장하는 것도 가능합니다.(ImageField도 내부적으로는 FileField를 상속받고 있습니다.) 다만 필드를 통해 media 파일을 저장한다고 해서 필드에 파일이 직접 저장되는 것은 아닙니다. 필드는 단지 media 파일이 저장된 경로를 저장하고 있을 뿐입니다. ​ Settings.py media 파일을 다루기 위해선 settings.py에서 몇 가지 설정을 해 주어야 합니다. ​ 1. MEDIA_URL 설정 # settings.py MEDIA_URL = "/media/" se..

Django 2021.03.23

서버 이론 - 불변 인프라(Immutable Infrastructure)와 Snowflake, Phoenix서버

불변 인프라(Immutable Infrastructure)란? 불변 인프라는 서버를 배포한 후 수정하지 않는(Immutable) 방식의 패러다임입니다. 만약 서버에 변경이 필요할 경우 수정을 하는 것이 아니라 아예 새로운 서버를 구성하여 그 서버를 배포하고 기존 서버는 폐기해버립니다. 즉 Mutable한 인프라에서는 수정사항이 생겼을때 서버를 수정하여 다시 배포하는 과정을 거쳤다면 불변 인프라에서는 수정사항이 생겼을때 수정사항이 적용된 서버를 구성한 후 테스트를 거쳐 오류가 없다면 그 서버를 새로 배포하는 방식을 따릅니다. 눈송이(Snowflake) 서버와 피닉스(Phoenix) 서버 눈송이 서버와 피닉스 서버는 각각 서버 패턴의 한 종류입니다. 불변 인프라는 피닉스 서버에, Mutable한 인프라는 눈..

서버 이론 2021.02.15

파이썬(python) - 람다 표현식(Lambda expression)

람다 표현식(Lambda expression)이란? 람다 표현식은 ​함수를 사용하는 또 하나의 방법입니다. 기본적으로 파이썬 외의 다른 몇몇 언어도 지원하는 문법이며 JS의 Arrow function과도 비슷한 부분이 있습니다. 형태가 단순하기 때문에 매개변수로 함수를 써야 할 때 자주 사용합니다. 특징 1. 익명 함수(Anonymous function)라고 부르기도 한다. - 람다 표현식은 이름이 없는 함수를 만들기 때문에 람다 표현식으로 만든 함수를 익명 함수라고 부르기도 합니다. ​ 2. 함수 내에 로직을 삽입할 수 없다. - 람다 표현식은 반드시 한 줄로 표현되어야 하기에 반환부를 제외한 다른 로직을 삽입할 수 없습니다.(단, 조건문은 사용 가능합니다. 이는 아래 사용법 문단에서 다루겠습니다.) ..

파이썬 2021.02.14

파이썬(python) - 제너레이터(Generator)

제너레이터(Generator)란? 제너레이터는 쉽게 설명해서 *이터레이터(Iterator)를 생성하는 객체라고 할 수 있습니다. 즉 모든 제너레이터는 이터레이터에 속합니다. 좀 특별한 이터레이터 정도로 이해하셔도 될 것 같네요. 컴프리헨션(Comprehension) 문법 혹은 함수 내부에 yield 키워드를 사용함으로써 만들 수 있습니다. 가장 큰 특징으로는 lazy하다는 점이 있는데 이는 포스팅 후반에 다시 다뤄보도록 하겠습니다. ​ (* 이터레이터(Iterator)와 이터러블(Iterable), 컴프리헨션(Comprehension)에 대한 내용은 이전 포스팅을 참조해주세요) 파이썬(python) - 이터레이터(Iterator) 이터레이터(Iterator)란? 이터레이터는 순서대로 다음 값을 리턴할 수..

파이썬 2020.12.28

파이썬(python) - 이터레이터(Iterator)

이터레이터(Iterator)란? 이터레이터는 순서대로 다음 값을 리턴할 수 있는 객체를 의미합니다. 자체적으로 내장하고 있는 next 메소드를 통해 다음 값을 가져올 수 있습니다. 여기서 '순서대로'라는 말 때문에 list, tuple과 같은 타입의 객체를 생각하셨을 수도 있는데, 이것과는 다릅니다. 자세한건 아래에서 알아봅시다. 선행학습 : 컬렉션(Collection) 타입과 시퀀스(Sequence) 타입 ​ 컬렉션 타입 - list, tuple, set, dictionary와 같이 여러개의 요소(객체)를 갖는 데이터 타입 ​ 시퀀스 타입 - list, tuple, range, str등과 같이 순서가 존재하는 데이터 타입 Iterable VS Iterator 내부 요소(member)를 하나씩 리턴할 수..

파이썬 2020.12.28

파이썬(python) - MRO(Method Resolution Order)

MRO(Method Resolution Order)란? MRO는 파이썬의 상속과 관련있는 개념입니다. 직역하자면 '메소드 결정 순서'정도가 되겠네요. 파이썬은 기본적으로 다중 상속을 지원합니다. 상속받은 부모 클래스가 서로 겹치지 않는 메소드 네임을 가지고 있다면 딱히 문제될 것이 없습니다. 하지만 만약 부모 클래스들이 똑같은 이름의 메소드를 가지고 있다면 이름부터 무시무시한 죽음의 다이아몬드(the Deadly Diamond of Death) 문제가 발생하게 됩니다. 죽음의 다이아몬드는 다중 상속을 받을 때, 부모 클래스에 동일한 이름의 메소드를 호출하려 할 때 어떤 부모의 메소드를 호출해야 할 지 모르기 때문에 발생하는 문제입니다. 한 마디로 정리하면 하나의 구문이 두 가지 이상의 의미로 해석 될 수..

파이썬 2020.12.12

파이썬(python) - 컴프리헨션(Comprehension) 문법

컴프리헨션(Comprehension) 문법이란? 컴프리헨션은 파이썬의 자료구조(list, dictionary, set)에 데이터를 좀 더 쉽고 간결하게 담기 위한 문법입니다. 여기서 말하는 '쉽고 간결하게' 데이터를 담는 방법이란 반복문과 조건문을 결합하여 하나의 구문으로 만들어 담는 것을 의미합니다. 처음 만나면 그 기괴한 생김새에 당황하실 수 있지만, 익숙해지만 정말 편하고 좋은 문법입니다. 리스트 컴프리헨션(List Comprehension) 리스트에 순차적으로 1부터 10까지의 값을 저장하고 싶을 때 우리는 어떻게 할 수 있을까요? 가장 단순한 방법은 빈 리스트를 만들고 append 함수로 하나씩 추가하는 방법입니다. data = [] data.append(1) data.append(2) ... ..

파이썬 2020.11.25

장고(Django) - 마이그레이션(Migration)

마이그레이션(Migration)이란? 장고 공식 문서에서는 마이그레이션이 모델의 변경 내역을 DB *스키마에 적용시키는 장고의 방법이라고 설명하고 있습니다. 장고는 ORM을 사용하기 때문에 models.py와 클래스를 통해 DB 스키마를 생성하고 컨트롤 하게 되는데, 이 때 DB 스키마를 git처럼 버전으로 나눠서 관리 할 수 있게 해 주는 시스템이라 생각하시면 됩니다. 즉 하나의 마이그레이션 파일은 해당 마이그레이션이 생성된 시점의 모델의 구조(DB의 스키마)를 담고 있습니다. ​ *스키마(Schema)란? : DB 내에서 데이터가 저장되는 구조와 제약 조건을 정의한 것. 장고로 치면 하나의 어플리케이션의 models.py 파일이라고 할 수 있습니다. migration 관련 명령어 ​ 1. python..

Django 2020.11.12

자바스크립트(JavaScript) - 호이스팅(Hoisting)

호이스팅(Hoisting)이란? 영어사전을 찾아보면 호이스팅이 다음과 같은 뜻으로 정의되어있습니다. Hoisting : 끌어 올리기, 들어올려 나르기 네이버 영어사전 자바스크립트에서의 호이스팅도 사전적 의미를 토대로 이해할 수 있습니다. 호이스팅은 선언된 변수, 함수의 선언부를 스코프에 따라 최상단으로 끌어올리는 개념입니다. 스코프가 전역이라면 해당 스크립트의 최상단으로 끌어올려지고 스코프가 함수 내부에 국한된다면 해당 함수의 최상단으로 끌어올려집니다. 간혹 선언과 할당 모두를 끌어올리는 개념으로 알고 계신 분도 계신데 선언부만 끌어올리는 것입니다. 할당은 이루어지지 않습니다. 또한 호이스팅은 실제 메모리에 영향을 주지 않습니다. 살펴보기 여기 아주 간단한 스크립트가 있습니다. console.log(nu..

JS 2020.11.12
반응형