분류 전체보기
-
Java 의 생성자 동작 ( GSON 을 통해 Class 를 만들었을 때 기본 값이 설정되지 않는 문제 )기술 2023. 8. 31. 20:44
Java 에서 GSON 라이브러리를 사용해 JSON 데이터를 클래스 객체로 변환할 때 초기값이 설정이 예상대로 동작하지 않은 경우가 있었습니다. 이 문제를 파악한 내용을 공유하려 합니다. 문제 상황 다음과 같은 SomeClass 가 있다고 가정합니다. public class SomeClass { private Boolean isInvalid = false; } GSON.fromJson(json, SomeClass); GOSN 을 사용해 json 데이터를 SomeClass 로 바꿨을 때 isInvalid 가 false 일 것 같지만 실제로는 Null 로 되어 있었습니다. 원인 이 문제의 원인은 GSON 이 Unsafe 모듈의 allocateInstance 메서드를 사용해 객체를 생성하기 때문입니다. 이 메..
-
유지보수를 위해 타입은 선택이 아니라 필수가 되어야합니다.기술/Python 2023. 1. 14. 18:35
개발하면서 항상 마주치는 상황이 있습니다. 내가 만들지 않았거나 너무 오래되서 기억이 잘 나지 않은 메서드나 변수를 가진 코드를 유지보수하는 문제입니다. 우리는 항상 유지보수의 문제와 맞닿아있기 때문에 유지보수하기 쉬운 코드를 목표하기도 해야합니다. 이 때 타입은 유지보수를 위한 최소 조건이라고 생각합니다. 타입을 적용하면 변수는 올바른 유형의 값만 할당할 수 있습니다. 이렇게 하면 오류를 방지하고 코드를 더욱 유지 관리할 수 있습니다. 예를 들어, "int"(정수) 유형의 변수가 있고 "string"(텍스트) 유형의 값을 할당하려고 하면 오류를 발생시킬 수 있습니다. 이것은 큰 문제가 되기 전에 실수를 일찍 발견하는 데 도움이 됩니다. 타입이 없을 때 발생할 수 있는 가장 큰 문제는 사람의 실수로 발생..
-
일반적인 Django 서비스는 단일 앱을 통해 개발해야합니다.기술/Django 2022. 12. 11. 20:22
Django의 프로젝트 구조 Django를 시작하면 아래와 같은 구조로 사용하게 됩니다. - project - namespace1 - models.py - migrations - urls.py - namespace2 - ... 네임스페이스를 하나 정의하고 해당 네임스페이스에서 사용되는 스키마, 뷰, URL를 정의하고 노출합니다. 이를 Django에서는 앱이라고 부르고 있습니다. 문제점 저는 앱을 보통 도메인을 나눠서 관리하면 좋을 것 같다고 생각하게 되면 나눕니다. 유저를 다루는 앱이 있고, 새로 물류와 관련된 기능을 작성해야 한다면 물류라는 앱을 만들고, 계약과 관련한 기능을 나누어 앱을 만드는 것과 같이 어느 정도 큰 단위의 도메인을 다루게 된다면 나누게 되었던 것 같습니다. 하지만 이렇게 앱을 나누..
-
Django 에서 N+1 쿼리 문제 예방, 발견하기기술/Django 2022. 1. 25. 22:18
N+1 이란? 쿼리를 한번으로 N건 가져왔는데, 관련 컬럼을 얻기 위해 N번의 쿼리를 추가수행하는 문제는 N+1 문제라고 합니다. 간단한 예시를 통해 N+1 이 발생하는 원리를 알아봅시다. class PressGroup(models.Model): name = models.CharField(max_length=64) class Reporter(models.Model): full_name = models.CharField(max_length=64) press_group = models.ForeignKey(PressGroup, on_delete=models.CASCADE) class Article(models.Model): headline = models.CharField(max_length=64) conte..
-
Django Application 의 메모리 누수 해결하기기술/Django 2022. 1. 25. 20:00
원본: https://adamj.eu/tech/2019/09/19/working-around-memory-leaks-in-your-django-app/ Working Around Memory Leaks in Your Django Application - Adam Johnson Working Around Memory Leaks in Your Django Application 2019-09-19 Several large Django applications that I’ve worked on ended up with memory leaks at some point. The Python processes slowly increased their memory consumption until crashing. No..
-
linux 에서 가상 카메라를 만드는 방법도구 2021. 9. 24. 20:40
Linux 환경의 경우 akvcam 을 사용하여 가상 카메라를 생성할 수 있다. 아래와 같은 명령어를 통해 가상 카메라를 만들고, Google Meet 같은 곳에서 사용 가능하다. ```bash # Dependencies sudo apt-get install gcc make dkms git clone https://github.com/webcamoid/akvcam.git # 가상 Driver 설치 cd akvcam/src make sudo make dkms_install # 카메라 설정파일 생성 sudo mkdir -p /etc/akvcam sudo touch /etc/akvcam/config.ini sudo chmod -vf 644 /etc/akvcam/config.ini # 아래 링크의 내용을 con..
-
Django Rest Framework 의 APITestCase 에서 API 를 요청할 때 Body 데이터를 보내는 두가지 방법기술/Django 2021. 9. 24. 20:17
APITestCase 에서 POST, PATCH, PUT 을 사용하여 데이터를 보낼 때는 보내는 데이터가 multipart 가 아니면 반드시 content_type 을 지정해주어야 합니다. 이 때 내부 동작을 살펴보며 왜 기본이 multipart 가 선택되는지, 다른 두가지 방법은 어떻게 동작하는지에 대해 설명합니다. APITestCase 에서 API 를 요청하는 두가지 방법 rest framework 에서 API 를 테스트를 할 때는 APITestCase 를 상속받아 client 를 통해 아래와같이 호출하게 됩니다. self.client.post(revese('post-list'), data=data) 이 때 self.client 는 rest_framework.test.APIClient 의 인스턴스 입..