전체 글
-
Flask SQLAlchemy vs SQLAlchemy개발 2023. 2. 14. 21:22
파이썬을 서비스를 개발할 때 ORM은 SQLAlchemy 말고 딱히 다른 옵션이 없다. 그런데 Flask 개발자는 일반 SQLAlchemy와 Flask에 최적화된 Flask-SQLAlchemy 중 한가지를 골라야한다. 사실 이 두가지는 완전히 다른 라이브러리는 아니다. Flask SQLAlchemy는 기존 SQLAlchemy에서 일부를 가져와 Flask에 맞게 바꾼 형태다. 세부적으로 말하면 Flask-SQLAlchemy는 세션 관리를 app 컨텍스트에 맞춰 관리해주기 때문에 편하다. 반면 SQLAlchemy를 사용하는 경우에는 세션 관리를 개발자가 직접 해야한다. SQLAlchemy를 사용하는 경우 코드는 아래처럼 짜게 된다. SQLALCHEMY_DATABASE_URL = "postgresql://co..
-
Python - namedtuple개발 2023. 2. 14. 18:23
namedtuple 파이썬에서 튜플은 컴마로 나눠진 데이터의 집합을 말한다. 예로 이런 것들은 모두 튜플이다 data: Tuple[str | int, ...] = (1, 2, 4, "Geek") 튜플은 배열처럼 index로 접근할 수 있으나 Dict처럼 개별 값에 대한 키 값이 없다보니 관리하는게 쉽지 않다. 그래서 파이썬에서는 namedtuple 걸 사용해 필드 값을 설정할 수 있게 했다. from collections import namedtuple Point = namedtuple("Point", ["x", "y"]) point = Point(x=3, y=4) 결과 값은 다음과 같이 나온다. 필드 명에 따라서 값 접근이 가능하기 때문에 더 직관적으로 값을 받을 수 있다. print(point) pr..
-
Python - 데코레이터개발 2023. 2. 14. 16:09
Decorator 파이썬에서는 함수에 데코레이터라는 기능을 추가할 수 있다. 함수가 실행 될 때 다른 함수를 타도록 만드는 기능이다. def to_upper_text(func): text = func() if not isinstance(text, str): raise TypeError("not a string type") return text.upper() @to_upper_text def say(): return "welcome" say 함수 위에 @to_upper_text 라는 데코레이터를 추가했다. 데코레이터 안에서는 전달 받은 func() 함수의 결과 값이 str인지 확인하고 아니면 에러를 호출, 맞으면 upper 함수를 호출해서 대문자로 리턴한다. WELCOME 실행하면 대문자로 바뀌어서 출력된..
-
Nodejs Blocking/Non-Blocking,개발 2023. 1. 26. 17:33
노드제이에스에서 Blocking은 자바스크립트의 실행을 위해 자바스크립트 작업이 아닌(non-JavaScript operation)의 작업이 끝날 때 까지 기다려야 하는 것을 말한다. 주로 I/O 작업의 실행을 위해 기다릴 때 Blocking 이 생긴다. libuv를 사용하는 노드 제이에스 동기 메서드가 대표적인 블로킹 작업이다. 표준 라이브러리의 I/O에서는 대체로 Blocking 메서드와 Non-Blocking 메서드를 모두 제공한다. const fs = require('fs'); const data = fs.readFileSync('/file.md'); // 파일을 읽을 때까지 여기서 블로킹됩니다. console.log(data); moreWork(); // console.log 이후 실행될 것입니..
-
Blocking/Non-Blocking Sync/Async개발/컴퓨터사이언스 2023. 1. 26. 17:28
Blocking/Non-Blocking Blocking, Non-Blocking은 제어권을 처리하는 방법론이다. Blocking은 현재의 작업이 모두 끝난후에 다음 작업에게 제어권을 넘겨준다. 예를 들어 Blocking 방식으로 CPU가 I/O 작업을 처리한다면 CPU는 I/O 작업이 완료 될 때까지 다른 업무를 하지 않는다. Non Blocking은 이와 반대다. 현재 작업이 모두 끝나지 않더라도 다른 작업에게 제어권을 건네줄 수 있다. CPU가 I/O 작업을 모두 처리하지 않더라도 다른 작업에게 제어권을 넘겨준다면 Non-Blocking이다. Sync/Async 작업의 결과값을 신경 쓰느냐 쓰지 않느냐와 관련 있다. Sync는 호출된 함수의 결과를 호출한 함수가 신경 쓴다. 함수의 리턴 값이 필요한 ..
-
socketio redis adapter개발 2023. 1. 6. 17:49
Publish Subscribe Pattern publisher가 subscriber에게 메시지를 바로 보내는게 아니고, publisher와 subscriber 사이에 이벤트 채널을 두는 형태다. publisher는 subscriber 에 대한 정보를 모른체 이벤트 채널에 메시지를 보내면 메시지는 분류화(categorized)돼서 이벤트 채널에 저장된다 저장된다. subscriber도 publisher에 대한 존재를 모른체 관심있는 메시지만 이벤트 채널로부터 수신한다. publisher와 subscriber 사이의 디커플링된 관계는 확장성을 용이하게 한다. Redis Pub/Sub Mechanism redis 는 publish/subscribe 에서 이벤트 채널의 역할을 한다. 외부 애플리케이션에서 re..
-
dart - mixin개발 2023. 1. 4. 19:57
믹스인은 객체를 생성할 때 코드의 일부를 다른 클래스 안에 섞어 재사용할 수 있는 기법이다. 코드 재사용이 가능한 측면에서 상속과 비슷하면서도 결합도 문제를 초래하지 않아 객체간에 유연한 결합을 만들때 좋다. 코드 가져오기 abstract class WalkerInterface { walk(); } class Walker { walk () { } } class Dog with Walker implements WalkerInterface { bark() { walk(); } } Dog 클래스는 Walker 클래스를 믹스인해서 Walker 클래스의 walk() 함수를 가져왔다. 덕분에 WalkerInterface 내부 walk 함수를 구현하지 않아도 된다. 오버라이드 class Dog with Walker ..