개발
-
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 ..
-
flutter - provider 패턴개발 2023. 1. 4. 19:49
flutter의 상태 관리 방법으로 BLOC은 작업을 추가할 때마다 이벤트 클래스를 매번 생성해야하는 번거로움이 있고 코드가 불필요하게 길어져서 가독성이 떨어진다. 뿐만 아니라 MVVM 패턴에 익숙한 사람에게는 BLOC을 활용하는 작업이 직관적으로 받아들여지지 않는다. 다행히도 나만 불편함을 느낀게 아닌지 BLOC을 대체하는 많은 대체할 수 있는 라이브러리가 다수 존재한다. 나는 Provider 패턴이 가장 쓰기 쉬웠다. 라이브러리 추가 dependencies: flutter: sdk: flutter provider: ^6.0.5 먼저 provider 라이브러리를 추가한다. 작성기준 최신 버전은 6.0.5 다. ChangeNotifier 인스턴스 추가 class ExampleModel with Chang..
-
typeorm - OneToOne, OneToMany, ManyToMany개발 2022. 11. 29. 20:00
typeorm을 사용하면 객체들간의 관계도 데이터베이스상에 매핑이 가능하다. 1:1, 1:N, M:N 처럼 데이터베이스 수업시간에 배웠던 껄끄러운 관계들을 typeorm을 이용해서 일목요연하게 정리해보자. 1. OneToOne 객체와 다른 객체간의 관계가 1:1인 경우다. 객체 A, B가 있다면 A 객체가 B 한개를 소유하고 B 객체는 A에만 속하는 관계가 이렇다. @Entity() export class User { @PrimaryGeneratedColumn() id: number; @Column() name: string; @OneToOne(() => Profile) @JoinColumn() profile: Profile; } @Entity() export class Profile { @Primary..