일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- mp4fpsmod
- 깡돼후
- JanusWebRTC
- PytestPluginManager
- VARCHAR (1)
- tolerated
- 달인막창
- k8s #kubernetes #쿠버네티스
- table not found
- 오블완
- python
- 코루틴 컨텍스트
- 겨울 부산
- 자원부족
- 개성국밥
- JanusGateway
- terminal
- taint
- 코루틴 빌더
- kotlin
- PersistenceContext
- 티스토리챌린지
- Spring Batch
- 헥사고날아키텍처 #육각형아키텍처 #유스케이스
- Value too long for column
- preemption #
- pytest
- JanusWebRTCServer
- JanusWebRTCGateway
- vfr video
목록개발 (101)
너와 나의 스토리
배경 오류가 발견되면 예외를 던진다. 그러면 적절한 예외 핸들러를 찾을 때까지 콜스택을 타고 위로 전파된다. 예외를 사용하면 오류 코드를 일일이 검사하거나 오류를 식별해 콜스택 위로 던지는 일을 신경 쓰지 않아도 된다. 예외는 프로그램의 정상 동작 범주에 들지 않는 오류를 나타낼 때만 쓰여야 한다. 예외를 던지는 코드를 프로그램 종료 코드로 바꿔도 프로그램이 여전히 정상 동작할지를 따져보고, 정상 동작하지 않을 것 같다면 예외를 사용하지 말라는 신호이다. 이런 경우, 예외 대신 오류를 검출하여 프로그램을 정상 흐름으로 되돌리게끔 처리해야 한다. 절차 콜스택 상위에 해당 예외를 처리할 예외 핸들러를 작성한다. 테스트한다. 해당 오류 코드를 대체할 예외와 그 밖의 예외를 구분할 식별 방법을 찾는다. 정적 검..
에러 git flow로 새로운 브랜치 생성하려고 했는데 다음과 같은 에러가 발생했다. git flow init을 시도해도 같은 에러가 발생함. $ git flow feature start test-123 /usr/local/Cellar/git-flow-avh/1.12.3/libexec/bin/gitflow-shFlags: line 158: _flags_fatal: command not found /usr/local/Cellar/git-flow-avh/1.12.3/libexec/bin/gitflow-shFlags: line 273: [: too many arguments /usr/local/Cellar/git-flow-avh/1.12.3/libexec/bin/gitflow-shFlags: line 273:..
배경 생성자에는 일반 함수에는 없는 제약이 따라붙기도 한다. 가령 자바 생성자는 반드시 그 생성자를 정의한 클래스의 인스턴스를 반환해야 한다. 서브클래스의 인스턴스나 프락시를 반환할 수는 없다. 기본 이름(생성자 이름)보다 적절한 이름이 있어도 사용할 수가 없다. 생성자를 호출하려면 특별한 연산자(보통 new)를 사용해야 해서 일반 함수가 오길 기대하는 자리에는 쓰기 어렵다. 팩토리 함수에는 이런 제약이 없다. Before After leadEngineer = new Employee(document.leadEngineer, 'E'); leadEngineer = createEngineer(document.leadEngineer); 절차 팩터리팩토리 함수를 만든다. 팩토리 함수의 본문에서는 원래의 생성자를 ..
배경 매개변수 목록은 함수의 변동 요인을 모아놓은 곳으로 함수의 동작에 변화를 줄 수 있는 일차적인 수단이다. 다른 코드와 마찬가지로 이 목록에서도 중복은 피하는 게 좋으며 짧을수록 이해하기 쉽다. 피호출 함수가 스스로 "쉽게" 결정할 수 있는 값을 매개변수로 건네는 것은 의미 없이 코드만 복잡해질 뿐이다.. 매개변수를 질의 함수로 바꾸지 말아야 할 상황도 있다. 매개변수를 제거하면 피호출 함수에 원치 않는 의존성이 생길 때 주의 사항: 대상 함수가 참조 투명(referential transparency)해야 한다. * 참조 투명: 함수에 똑같은 값을 건네 호출하면 항상 똑같이 동작 따라서 매개변수를 없애는 대신 가변 전역 변수를 이용하는 일은 하면 안 된다. 절차 필요하다면 대상 매개변수의 값을 계산하..
배경 고객 리스트가 있다고 할 때, 이름과 같은 정보가 적혀있지 않은 미확인 고객이 있을 수 있다. 이런 특이 케이스를 검사하는 코드가 있다고 생각하자. 데이터 구조의 특정 값을 확인한 후 똑같은 동작을 수행하는 코드가 곳곳에 등장하는 경우가 더러 있다. 흔히 볼 수 있는 중복 코드 중 하나다. 특수한 경우의 공통 동작을 요소 하나에 모암서 사용하는 특이 케이스 패턴(Special Case Pattern)이라는 것이 있다. 위와 같은 경우에 적용하면 좋을 메커니즘이다. 이 패턴을 활용하면 특이 케이스를 확인하는 코드 대부분을 단순한 함수 호출로 바꿀 수 있다. 널(null)은 특이 케이스로 처리해야 할 때가 많다. 그래서 이 패턴을 널 객체 패턴(Null Object Pattern)이라고도 한다. 절차 ..
화면 캡쳐 $ adb shell screencap -p > myfile.jpg 위 command를 편하게 사용하기 위해 별칭을 정할 수 있다. $ alias capture="adb shell screencap -p > $@" 이렇게 하면 "capture myfile.jpg" 이런식으로 쉽게 화면을 캡쳐할 수 있다. udid 지정하는 방법 adb 다음 -s 옵션과 함께 udid 입력 예: adb -s $udid shell screenrecord /sdcard/video.mp4 adb -s $udid pull /sdcard/video.mp4 화면 녹화 동영상 녹화의 경우 동영상 파일을 컴퓨터에 다이렉트로 저장할 수 없다. 일단 핸드폰의 sdcard에 저장 후 다운 받아와야 한다. $ adb shell scr..
import logging을 통해 log를 남겼으나 terminal에서 확인 불가... -s 옵션 주기 python3 -m pytest project/test/path/test.py -s -s 옵션을 줘서 실행하면 코드에서 print()한 내용도 terminal에서 확인할 수 있다.
배경 함수는 여러 동작을 하나로 묶어준다. 함수의 이름이 코드의 동작 방식보다는 목적을 말해주기 때문에 함수를 활용하면 코드를 이해하기가 쉬워진다. 함수는 중복을 없애는 데도 효과적이다. 동작을 변경할 때도, 비슷해 보이는 코드들을 일일이 찾아 수정하는 대신 함수 하나만 수정하면 된다. 이미 존재하는 함수와 똑같은 일을 하는 인라인 코드를 발견하면 보통은 해당 코드를 함수 호출로 대체하길 원할 것이다. 하지만 기존 함수의 코드를 수정하더라도 인라인 코드의 동작이 바뀌지 않을 때만 함수 호출로 대체할 수 있다. 이를 판단하는 데는 함수 이름이 힌트가 된다. 인라인 코드 대신 함수 이름을 넣었을 때 말이 돼야 한다. 특히 라이브러리가 제공하는 함수로 대체할 수 있다면 훨씬 좋다. 예: Before let a..