전체 글

개발 공부 공간
Python/Django

[Django] 간단한 REST API 서버 만들기3 - model, serializer 구현

진행순서 1. user에 관한 model구현 및 DB 마이그레이션 2. request, response 처리를 위한 User Serializer구현 1. user에 관한 model 구현 및 DB 마이그레이션 api_user/models.py 에 user에 필요한 데이터들을 Model을 상속하는 User class에 만들어 준다. models.py에 User class를 통해 User를 추상화 했다면 DB에 테이블의 형태로 User 테이블을 만들어 주어야 한다. 1 2 3 4 5 6 7 8 9 10 11 12 from django.db import models # Create your models here. class User(models.Model): user_id = models.CharField(ma..

Python/Django

[Django] 간단한 REST API 서버 만들기2 - http Request에 대한Response 전달

진행순서 1. djangorestframework 패키지 설치 2. user정보를 CRUD 할 수있는 API를 제공하는 api_user 앱 생성 3. REST API 설계 4. URLConf 설정을 통해 request 라우팅 5. view를 구현하여 request 처리 1. djangorestframework 패키지 설치 conda 명령어를 통해 djangorestframework를 설치하면 아래와 같이 패키지를 못찾는 경우가 있다. $ conda install djangorestframework Collecting package metadata (current_repodata.json): done Solving environment: failed with initial frozen solve. Retr..

Python/Django

[Django] 간단한 REST API 서버 만들기1 - 개발 환경설정

준비물 파이참 : 파이썬 개발 IDE 아나콘다 : 파이썬 라이브러리를 패키징해서 배포하는 툴 진행 순서 1. 아나콘다를 이용하여 파이썬 가상환경을 만든다. 2. 파이참에 아나콘다에서 만든 가상환경의 interpreter를 연결한다. 3. django REST API 서버를 만들기 위한 패키지를 설치한다. 4. django 실행. 1. 아나콘다로 가상환경 만들기 아래와 같이 쉘에 명령어를 이용하여 가상환경을 만드다. $ conda create --name my_django python=3.7 my_django는 가상환경이름이고 다음은 python버전을 입력해 준다. 명령어를 입력하면 아래와 같이 가상환경이 만들어 지면서 기본 패키지들이 설치 된다. 가상환경이 설치된 경로를 확인해 둔다. Collecting..

C and C++

[C++][STL] size()함수 주의사항

STL size()함수 주의사항 STL에서 제공하는 size()함수의 리턴타입을 찾아보면 아래와 같이 부호가 없는 정수형으로 나와있다. std::size_t is commonly used for array indexing and loop counting. Programs that use other types, such as unsigned int 따라서 size()함수를 통해 아래와 같은 코드를 작성하면 문제가 된다. for (int i=0; i < vt.size() - 1 ; i++) doSomething(); 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 #include #include using namespace std; ..

Design Patterns/Behavioral Patterns

Visitor Pattern (C++)

Visitor Pattern (방문자 패턴)목적 객체의 속성과 처리(연산)를 분리함으로써 클래스를 수정하지 않고 새로운 연산을 추가할 수 있다. MVC패턴에서 Model과 View를 나눠 놓은것과 비슷하다. UML상에서 Element은 Model과 매핑되고 Visitor는 Controller에 매핑된다. Element에서 Visitor를 accept했을 자기 자신을 Visitor의 visit메소드로 전달 해주는 구조이다. 사용 시나리오 변수 a와 b를 가지고 있는 Element가 있다고 가정한다. Element의 수정없이 더하기 연산과 곱하기 연산을 추가한다. [Element] class Element { public: virtual ~Element(){}; virtual void accept(Visit..

Design Patterns/Behavioral Patterns

State Pattern (C++)

State Pattern (상태 패턴)목적 객체(Context)가 가질 수 있는 (유한한)상태를 추상화하여 런타임에 상태를 유연하게 변경하도록 한다. UML상 전략패턴과 거의 동일하지만 실제로 다른점은 전략패턴의 경우 사용하는 쪽에서 직접 알고리즘을 교체하지만 상태패턴은 사용하는 쪽에서 내부의 상태가 어떻게 바뀌는지 모른다. FSM(Finite State Machine)을 구현하기에 적합한 패턴이다. 사용 시나리오 전구 상태를 표현하는 시스템이 있다. 전구의 상태는 켜짐과 꺼짐 두개가 존재하며 on/off 버튼을 통해 상태가 변한다. 꺼진 상태 -> on 버튼 -> 켜짐 -> on 버튼 -> 동작 안함 켜진 상태 -> off 버튼 -> 꺼짐 -> off 버튼 -> 동작 안함 [Context] class ..

Design Patterns/Behavioral Patterns

Memento Pattern (C++)

Memento Pattern (메멘토 패턴) 목적 캡슐화를 위배하지 않은 채 객체의 내부 상태를 저장하고 되돌아올 수 있도록 한다. 사용 시나리오 텍스트 에디터를 개발중에 있다고 가정하자 텍스트 에디터에 ctrl Z입력시 이전에 입력했던 텍스트로 상태를 불러오는 기능을 추가한다. [Memento] class InputMemento { public: InputMemento(string& input) { this->input = input; } string getState() { return this->input; } private: string input; }; [Originator] class InputOriginator { public: void setCurrentInput(string input) {..

Design Patterns/Behavioral Patterns

Mediator Pattern (C++)

Mediator Pattern (중재자 패턴) 목적 각각의 객체들(colleague)끼리 서로를 직접 참조하지 않고 mediator(중재자)를 통해 메세지를 주고 받는다. 각각의 객체들은 서로에 대한 정보는 전혀 모르기 때문에 커플링이 느슨하게 한다. 사용 시나리오 스마트폰이 없던 시절 문자로 단체일정을 잡기 위해서는 아래의 그림과 같이 개개인에게 연락을 했어야 했다. 스마트폰의 등장이후로 단체톡방(Mediator)을 만들어서 메세지(일정)를 보내면 된다 [Mediator] class Meditator { public: virtual ~Meditator() {} void addColleague(Colleague* collegue) { this->collegues.push_back(collegue); } ..

Design Patterns/Behavioral Patterns

Command Pattern (C++)

Command Pattern (명령 패턴) 목적 Client가 어떤 기능에 대한 요청을 할 때 요청을 직접 호출하지 않고 요청자체를 캡슐화한다. 명령 패턴의 핵심은 연산을 실행하는 데 필요한 인터페이스를 선언해 놓은 Command 추상 클래스이다. Client입장에서는 필요한 구체화된 Command만 설정해주면 된다. 사용 시나리오 Iot 허브가 있고 허브에서 연결된 things를 제어한다고 가정한다. Iot허브는 Invoker가 되고 things는 Receiver가 된다. things 각각의 명령어를 command로 구체화 한다. 해당 예에서는 IoT기능이 있는 IotTV를 Command패턴을 통해 제어하는 예이다. [Receiver] class IotTV { //Receiver public: void..

Design Patterns/Behavioral Patterns

Chain of Responsibility Pattern (C++)

Chain of Responsibility Pattern (책임 연쇄 패턴) 목적 Request를 보내는 객체와 받는 객체들 간의 결합도를 없애기 위한 패턴이다. 하나의 Request에 대한 처리가 여러 객체에서 가능하다. 현재 객체에서 처리했거나 혹은 처리하지 못한 request를 다음 객체로 넘김으로써 다른 객체에서 Request를 처리할 수 있는 기회를 준다. 이러한 방식은 링크드 리스트 자료구조와 유사하다. 결론적으로 하나의 Request에대한 여러 처리방식을 유연하게 연결(추가)할 수 있다. 사용 시나리오 어떤 API를 사용하기 위해서 인증절차를 거쳐야 한다. 인증 요청은 id값과 token값으로 한다. 인증과정 절차는 id를 확인하는 과정과 token을 확인하는 과정 총 두가지이다. [Requ..

개발새발
개발 공부 공간