SW개발
[Docker]Docker(도커)란? (feat. Linux 컨테이너)
Docker 란? 도커는 IT 소프트웨어로서 Linux 컨테이너를 만들고 사용할 수 있도록 하는 컨테이너화 기술이다. 도커를 사용하면 컨테이너를 매우 가벼운 모듈식 가상머신처럼 다룰 수 있게 된다. 또한 컨테이너를 구축, 배포, 복사하고 한 환경에서 다른 환경으로 이동하는 등 유연하게 사용할 수 있고, 애플리케이션을 클라우드에 최적화하도록 지원한다. Linux 컨테이너란? Linux 컨테이너는 운영체제 수준의 가상화 기술로 리눅스 커널을 공유하면서 프로세스를 격리된 환경에서 실행하는 기술이다. 하드웨어를 가상화하는 가상 머신(VM)과 달리 커널을 공유하는 방식이기 때문에 실행 속도가 빠르고, 성능상의 손실이 거의 없다. 컨테이너로 실행된 프로세스는 커널을 공유하지만, 리눅스 namespaces, cgro..
[Vue]Computed 와 Watch 언제 사용할까? (feat. computed vs methods)
Vue.js 공식 문서 (Computed vs Watch) computed와 watch — Vue.js Vue.js - 프로그레시브 자바스크립트 프레임워크 kr.vuejs.org Computed 속성 Vue.js 의 템플릿 문법에서 Javascript 표현식을 사용하면 원하는 데이터나 연산을 DOM에 쉽게 그릴수 있다. 하지만 복잡한 연산을 템플릿 안에서 하게 될 경우 코드를 이해하고 유지보수하기 어려워진다. {{ message.split('').reverse.join('') }} 위의 예시는 템플릿 문법에서 message 데이터를 역순으로 출력한 예제이다. 지금은 단순해보이지만 연산이 많아진다면 이해하는데 어렵기 때문에 computed 속성을 사용하는 것이 좋다. Computed 사용 방법 원본 메시지..
[Python]파이썬의 언더스코어(_)에 대하여
파이썬에서는 종종 언더스코어(_)가 사용되는 경우가 있다. 다른 언어와는 달리 파이썬에서는 이 문자는 여러 의미를 가지고 있다. 크게 5가지의 경우에서 언더스코어가 사용된다. 인터프리터에서 마지막 값을 저장할 때 값을 무시하고 싶을 때 변수나 함수명에 특별한 의미/기능을 부여하고 싶을 때 국제화/지역화 함수로써 사용할 때 숫자 리터럴값의 자릿수 구분을 위한 구분자로써 사용할 때 인터프리터에서 사용되는 경우 Python 3.6.1 >>> 10 10 >>> _ 10 >>> _ * 5 50 >>> _ - 10 40 파이썬 인터프리터에서는 마지막으로 실행된 결과값이 _라는 변수에 저장된다. 이를 활용해 위처럼 사용할 수도 있다. 값을 무시하고 싶은 경우 # 언패킹시 특정값을 무시 x, _, y = (1, 2, ..
[Vue]v-if vs v-show
Vue.js 공식 문서 (v-if , v-show) 조건부 렌더링 — Vue.js Vue.js - 프로그레시브 자바스크립트 프레임워크 kr.vuejs.org v-if v-if 디렉티브는 조건에 따라 블록을 렌더링 하기 위해 사용된다. v-if 의 경우 디렉티브의 표현식이 true 값을 반환할 때만 렌더링 되어 DOM에 추가되게 된다. // v-if 값이 true일 경우에만 렌더링 됨 블로그 이름은 leffe 입니다 블로그 이름은 leffe가 아닙니다 v-show 반면에 v-show의 경우 엘리먼트는 항상 렌더링되며 DOM에 남아있다. v-show 는 단순히 display의 CSS 속성을 통해 표시를 제어한다. // v-show 엘리먼트는 항상 렌더링 됨 // blog 이름이 leffe가 아닐 경우 dis..
[Django]추천하는 모듈 import 순서
장고에서 개발을 진행하다 보면 수없이 쌓이는 import 문을 볼 수 있다. 그럴때마다 하나의 기준을 가지고 순서를 맞춰놓지 않으면 어디에 위치한지 파악하기 힘들고 심지어 이 모듈을 사용을 했는지 안했는지에 대한 판별도 어려워지게 된다. 따라서 일련의 규칙을 적용해서 import 를 작성하는 것이 보기에도 좋고 관리에도 편할 것이다. 나의 경우에는 다음과 같은 규칙을 따라서 작성을 하고 있다. Django 모듈 import 순서 # 파이썬 표준 라이브러리 임포트 from math import sqrt from os.path improt abspath ... # 코어 장고 임포트 from django.db import models from django.utils.translation import ugett..
[Django]DRF SerializerMethodField() 란?
SerializerMethodFiled() 란? 연결되어 있는 serializer 클래스에서 메서드를 호출하여 값을 가져올 수 있는 읽기 전용 필드이다. 객체의 serializer 된 표현에 모든 종류의 데이터를 추가하는데 사용할 수 있다. 언제 사용해야 하나요? 객체를 serializer 할 때 모델에 없는 필드를 추가하고 싶거나, 모델에 있는 값을 변형해서 새로운 필드의 값으로 넣고 싶을 때 SerializerMethodField()를 사용하면 된다. 어떻게 사용해야 하나요? User 객체의 모델에는 full_name 필드만 있다고 가정하자. # Serializer된 User 객체 "id" : 1, "full_name" : '{"first_name": "Yoon", "last_name": "Jun K..
[Django]FBV vs CBV (함수형 뷰 vs 클래스형 뷰)
Django는 MTV(Model - Template - View)패턴을 기반으로 하는 프레임 워크이다. 여기에서 V에 해당하는 view를 작성하는 방법에는 두 가지가 존재한다. 함수형 뷰 (Function based view) 클래스형 뷰 (Class based view) FBV 란? 뷰를 작성할 때 함수 형식으로 작성하는 방식이다. 아래와 같이 간단하게 뷰 로직을 작성할 수 있다. # urls.py urlpatterns= [ path('', views.index, name='index'), ] # views.py @api_view(['GET', 'POST']) def index(request): if request.method == 'POST': return HttpResponse("Post metho..
[Django]Django ORM, 실수하기 쉬운 Queryset의 특징
Django ORM을 작성하다보면 종종 당연히 '이렇게 수행 될거야' 라고 생각하지만 실제로는 그렇지 않은 부분들이 꽤 많이 존재한다. 이번 포스팅에서는 놓치기 쉽고 실수하기 쉬운 queryset의 특징들에 대해 다루어보려고 한다. 다음과 같은 순서로 설명을 진행하려고 한다. queryset 캐시를 재활용하지 못하는 queryset 호출 prefetch_related() 와 filter()의 올바른 사용법 서브쿼리가 발생하는 조건 values(), values_list() 사용시 주의점 Queryset 캐시를 재활용하지 못하는 queryset 호출 >>> blog_list = list(Blog.objects.prefetch_related('category').all()) SELECT "mysite2_bl..
[Django]예제를 통해 알아보는 Django ORM이 호출하는 SQL의 구조 (feat. select_related, prefetch_related)
이번 포스팅에서는 다양한 예시 ORM을 통해 실제로 생성되는 SQL에 대해 알아볼 것이다. 지난 포스팅에 이어 select_related(), prefetch_related() 를 중점으로 다룰 것이다. 또한, ORM이 생성하는 SQL 구조는 어떻게 되는지, 추천하는 ORM 옵션 작성 순서는 무엇인지에 대해서도 같이 알아보려고 한다. models.py from django.db import models class Blog(models.Model): name = models.CharField(max_length=50) class Category(models.Model): blog = models.ForeignKey(Blog, on_delete=models.CASCADE, related_name='categ..
[Django]Django select_related() 와 prefetch_related()
이번 포스팅에서는 Queryset의 심화 부분인 select_related() 와 prefetch_related()에 대하여 알아볼 것이다. 먼저 장고에서는 Queryset이 어떻게 구현 되어있는지 알아볼 필요가 있다. Queryset은 크게 1개의 메인 쿼리와 0~N 개의 서브 쿼리들로 구성이 되어있다. django.db.models.query.py class QuerySet: """Represent a lazy database lookup for a set of objects.""" def __init__(self, model=None, query=None, using=None, hints=None): self.model = model self._db = using self._hints = hints..