본문 바로가기

전체 글

(24)
logical cpu란 cpu에는 physical cpu와 logical cpu가 있다.physical cpu를 hardware level에서 threading한 것이 logical cpu다.logical cpu는 software level의 thread와는 달리 concurrently하지 않고 parallelly하다.이를 구현하는 기술로는 hyper threading(intel)과 simultaneous multi threading(AMD)가 있다.pytest에서는 플러그인 성격인 pytest-xdist -n option 을 사용할 때 이 logical cpu를 인식해서 multi processing을 한다.
pytest-xdist -n option -n option을 사용하면 logical cpu개수만큼의 process를 할당한다.logical cpu개수를 넘어서 설정하면 thread를 할당한다.thread에 관해서 global interpreter lock에 의해 process당 하나의 job만 사용할 수 있다고 알고 있는데어떤 원리도 multi threading을 하는지까지는 모르겠다. 조사가 필요하다.-n auto를 사용하면 pytest-xdist가 logical cpu개수를 자동적으로 감지하여 그 개수만큼의 process를 할당한다.-n auto로 설정된 process개수를 넘어서 -n 으로 process개수를 지정하면 multi threading이 가동되므로IO bound로 느려지는 테스트를 개선할 수 있겠지만 테스트 코드에 IO boun..
assert called 정확히는 unittest.mock의 메소드들이지만 pytest에서 mocking할 때 자주 사용하므로 pytest카테고리에 작성한다. @pytest.fixture def mock_s3_client(): def _put_object(body, bucket, key): pass with patch("boto3.client") as mock: mock_client = MagicMock() mock_client.put_object.side_effect = _put_object mock.return_value = mock_client yield mock def test_s3_client(mock_s3_client): client = boto3.client() assert isinstance(client, Magi..
[Django][AWS] 마이그레이션용 컨테이너 분리 배경 회사에서 github action을 사용해서 AWS ECR에는 application server(django+DRF)의 docker image를, AWS ECS에는 task definition을 업로드하고 ECS service로부터 task definition을 사용해서 서버를 기동시키는 방법으로, 배포를 해왔습니다.에러가 발생한 부분은, github action의 aws-actions/amazon-ecs-deploy-task-definition@v1 스탭이었습니다. 30분이 지나자 time error가 발생했습니다. 여태까지 문제없이 배포가 되었는데, github action에서 배포 중, time error가 발생했습니다. 평소에는 배포하는데 테스트를 포함해서 5-6분이면 배포가 완료되었는데 3..
OOP - 주어진 문제 안에서 클래스를 식별하는 방법 OOP에서 개발자가 해야할 일은 클래스를 설계하는 것입니다. 클래스를 설계하려면 구현하고자 하는 현실의 객체의 특성을 파악해야합니다. 그리고 객체의 특성을 파악하기 전에 객체를 식별해야합니다. 무슨 얘기냐면, 개발자가 프로그램을 만들 때에는 해결하고자 하는 문제가 있습니다. 고객, 회사 동료, 자기 자신이 가지고 있는 문제를 프로그램을 통해서 해결합니다. 프로그램으로 문제를 해결하려면 우선은 어떤 문제가 있는지 파악을 해야합니다. 예를 들자면, 편의점에 진열되어 있는 식품들의 종류과 개수를 파악하는 프로그램을 만들고자 한다면(problem description, 이 과제에 대해 어떤 식으로 프로그램을 만들지, 문제에 대한 설명에서 프로그램과 관련된 요소를 추출해야합니다. 이를 problem stateme..
객체 지향 프로그래밍의 장점 OOP의 장점은 대표적으로 3개 있습니다. modularity OOP에서는 클래스를 사용해서 객체를 구현합니다. 클래스는 청사진 역할을 하는데, 이러한 청사진은 다른 프로그램, 다른 클래스들과는 독립적으로 움직입니다. 즉, 프로그램 전체를 고치지 않고 클래스 하나만 변경하는 것으로 쉽게 프로그램을 수정할 수 있습니다. 각각의 클래스, 정확히는 클래스로부터 만들어진 인스턴스는 서로 상호작용하지만 각각의 클래스는 각자만의 특정한 목적을 가지고 움직이며, 이 때도 서로는 독립적으로 움직입니다. 각각의 class는 레고라고 생각하면 편합니다. reusablity class는 청사진 역할을 합니다. class로 여러 개의 instance를 만들 수 있고, 이 class는 독립적이므로 다른 프로그램에서 재사용이 가..
객체 지향 프로그래밍이란 udemy의 강의를 듣고 정리한 내용입니다. 객체 지향 프로그래밍은 객체를 중심으로 해서 소프트웨어 설계를 하는 프로그래밍 패러다임입니다. 프로그래밍 패러다임이란, 프로그램을 만들기 위해 코드를 작성하는 방법을 뜻한다고 보면 됩니다. (패러다임은, 어떤 한 시대 사람들의 견해나 사고를 근본적으로 규정하고 있는 테두리로서의 인식의 체계, 또는 사물에 대한 이론적인 틀이나 체계를 의미하는 개념입니다. 한 시대의 사회 전체가 공유하는 이론이나 방법, 문제의식등의 체계를 뜻합니다. 예를 들어 천동설이 진리로 받아들여지던 시기에 다른 모든 천문 현상은 천동설의 테두리에서 설명되었습니다.) 프로그래밍 패러다임은 명령형((Imperative), 함수형(Functional), 선언형(Declarative)…등이 있습니..
Faker seed를 사용해봤습니다 Faker.seed(0)는 같은 데이터 셋을 편리하게 세팅하게 해주는 메소드다. 정확히는 라이브러리 전체에서 생성되는 난수 시퀀스에 영향을 주는 난수 생성기를 시드하는데 사용된다. 시드 값을 설정하면 생성된 난수 시퀀스가 프로그램의 여러 실행에서 동일하게 유지된다. 정말 그런지 비교해보자. 프로그램을 종료하고 다시 실행해서 같은 seed번호를 설정하면 같은 난수 시퀀스가 설정된다. 예를 들어 seed(0)을 하고 fake.name을 for문으로 5번 반복해서 리스트를 만들고 프로그램을 종료하고 다시 시작해서 같은 방식으로 생성하면 같은 결과가 나온다. seed(0)에서 생성된 fake.name은 항상 ['Norma Fisher', 'Jorge Sullivan', 'El..