RESTFul API를 구현하거나 네트워크 이미지를 사용하는 경우 종종 URL(Uniform Resource Locator)과 URI(Uniform Resource Identifier)라는 단어를 접하게 된다. 위 두가지와 함께 추가적으로 URN(Uniform Resource Name)이라는 것도 있다. 이를 이해하기 전 우선 우리가 인터넷 환경에서 자원을 식별하기 위해 사용하는 방법에는 Path Variable 방식과 Query Parameter 방식이 있다는 것을 알아야 한다. 아래는 Path Variable 방식의 예이다. /user/id /user/image /user/address 아래는 Query Parameter 방식의 예이다. /user?job=programmer /user?job=prog..
Pyinstaller는 Python으로 실행파일을 생성해 배포하기 위해 사용되는 패키지이다. cx_Freeze나 py2exe 등의 패키지도 있지만 개인적으로 가장 사용이 간편하다고 느껴진다.하지만 고객이 실행파일만 메일로 받고싶어하는 경우도 있고, 실행시 프로그램 부팅 속도를 빠르게 하기위하거나 등 여러가지 이유로 용량이 작은 것이 더 선호된다.이 때 Anaconda를 사용하여 패키지를 import하고 Pyinstaller를 이용해 마지막으로 패키징을 위해 실행파일을 생성하면 예상보다 훨씬 큰 용량이 되는 것을 볼 수 있다. 거기다 onefile을 사용하지 않으면 훨씬 더 큰 용량으로 패키징이 된다. Anaconda를 사용해 패키지를 설치하면 mkl 계열 dll 파일들이 함께 패키징되기 때문이다. MKL..
오버로딩과 오버라이딩은 이름이 비슷해 자주 헷갈리는 개념이다. 간단하게 말하면 오버로딩(Overloading)은 같은 이름의 메소드 여러개를 가지면서 매개변수의 유형과 개수가 달라도 되도록 하는 기술이고, 오버라이딩(Overriding)은 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의해서 사용하는 것을 뜻한다. 오버로딩(Overloading) 우선 오버로딩(Overloading)은 같은 메소드라도 매개변수만 다르면 얼마든지 정의하고 사용할 수 있다. 하지만 너무 많은 오버로드 함수를 가지고 있는 것은 혼란을 야기할 수 있으므로 과도하게 사용하는 것은 좋지 않다. 오버로딩의 특징은 아래와 같다. 메소드 이름이 같아야 함 리턴형이 같아도 되고 달라도 됨 파라미터 개수가 달라야 함 파라미터 개수가 ..
주요 개념 Over-fetching Under-fetching REST-API GraphQL Over-fetching과 Under-fetching은 REST-API의 단점들 중 하나이다. 이 단점은 GraphQL을 사용해 극복할 수 있다. 간단하게 Over-fetching은 API를 호출 시 필요보다 많은 데이터(사용하지 않을)를 가져오는 것이다. 예를 들어 대기 오염 물질 중 미세먼지 데이터만 필요한데 온도, 습도, VOC, NO2 등의 다른 데이터까지 한 번에 받아오게 되는 경우가 있다. 그러므로 서버와 네트워크도 불필요한 자원이 추가되게 되고, 클라이언트도 필요없는 데이터를 수신해 자원을 낭비하게 될 수 있다. Under-fetching은 한 번의 통신으로 필요한 양의 데이터를 가져오지 못한다라는 ..
주요 개념 블랙박스 테스트(Black Box Testing) 화이트박스 테스트(White Box Testing) 소프트웨어 테스트 방식은 크게 두 가지로 나눌 수 있는데 바로 블랙박스 테스트(Black Box Testing)와 화이트박스 테스트(White Box Testing)이다. 블랙박스 테스트는 내부 구조/디자인/요소들 구현에 관한 내용들을 테스터에게 알리지 않고 테스트하는 방식이다. 화이트박스 테스트 또한 내부 구조/디자인/요소들 구현에 대한 테스트를 진행하지만 테스터에게 해당 내용들을 숙지시켜준 후 진행하는 테스트이다. 쉽게 말해 게임을 직접 플레이하며 게임상으로 드러난 결과물을 검사하는 것이 블랙박스 테스트이고, 게임 소프트웨어 내부의 프로그래밍 언어를 실행 단계에 맞게 추적하며 오류를 검사하..
스크린 이동 후 뒤로가기를 수행할 때 또는 Drawer와 Dialog등이 클릭 후 자동으로 숨겨지기 원할 때 pop을 사용한다. 이 때 Navigator.of(context).pop()과 Navigator.pop(context)를 사용하는 두 가지 방식이 있어 차이를 짚고 넘어가려 한다. 사실 두 함수 기능에 큰 차이는 없으며 Navigator.pop(context)이 내부적으로 Navigator.of(context).pop()을 호출하는 구조이다. Navigator.of(context).pop()을 사용하면 가장 타이트하게 떨어져있는 context를 불러올 수 있다. 그러므로 특정 예외상황을 제외하고는 범용적으로 사용될 수 있는 Navigator.pop(context)를 쓰는 것이 낫다. 이 예외 상황..