개발 상식
좋은 코드란?
- 읽기 쉬운 코드
- 중복이 없는 코드
- 테스트가 용이한 코드
- 일관성 있는 코드
객체 지향 프로그래밍
인간 중심적 프로그래밍 패러다임인데, 현실 세계에 빗대어서 프로그래밍을 하는 것
현실의 사물들을 객체라고 보고 그 객체로부터 필요한 특징들을 가져와 프로그래밍 하는 것이 추상화이다.
자주 사용되는 로직을 라이브러리로 만들어두면 재사용성이 좋고, 신뢰성을 확보할 수 있다. 거기에 예외 상황을 잘 만들어두면 금상천화
또한, 객체 단위로 코드가 나눠져 작성되기 때문에 디버깅이 쉽고 유지보수에 용이하다.
- SRP(Single Responsibility Principle) 단일 책임 원칙
클래스는 단 하나의 책임을 가져야 하며 클래스를 변경하는 이유는 단 하나의 이유여야 한다.
- OCP(Open-Closed Principle) 개방-폐쇄 원칙
확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다.
- LSP(Liskov Substitution Principle) 리스코프 치환 원칙
상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
- ISP(Interface Segregation Principle) 인터페이스 분리 원칙
인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야한다.
- DIP(Dependency Inversion Principle) 의존 역전 원칙
고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다.
RESTful API
Representational State Transfer 의 약자
하나의 아키텍처(서비스의 동작원리)이며 설계의 중심에 자원이 있고 HTTP Method를 통해 자원을 처리하도록 설계하는 것
- Uniform Interface
URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일
- Stateless
상태정보를 따로 저장하고 관리하지 않는다.
불필요한 정보를 관리하지 않는다.
- Caching
기존 웹표준을 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그대로 활용이 가능합니다.
- Client-Server
REST서버는 API제공, 클라이언트는 사용자 인증이나 컨텍스트 등을 직접 관리하는 구조로 역할이 확실하게 구분되기 때문에 서로간 의존성이 줄어든다.
- Hierarchical system
REST 서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있고 프록시, 게이트웨이 같은 네트워크 기반의 중간매체를 사용할 수 있게 한다.
- Code on demand
어떻게 처리해야 하는지에 대한 코드를 서버가 제공하는 것을 의미, 권장하지는 않는다.
- RESTful하게 API를 디자인하는 것이란?
- 리소스는 URI로 표현하고 이것이 가리키는 것은 명사로 표현되어야 한다.
- 행위는 HTTP Method로 표현하고
GET(조회)
POST(생성)
PUT(기존 entity 전체 수정
PATCH(기존 entity 일부 수정)
DELETE(삭제)
- 메시지는 header와 Body를 명확하게 분리하여 사용한다.
- API 버전을 관리한다.
- 서버와 클라이언트가 같은 방식을 사용해서 요청하도록 한다.
- Open API를 제공하기 쉽다.
- 멀리플랫폼 지원 및 연동이 용이하다.
- 원하는 타입으로 데이터를 주고 받을 수 있다.
- 기존 웹 인프라(HTTP)를 그대로 사용할 수 있다.
- 사용할 수 있는 메서드가 한정적이다.
- 분산환경에는 부적합하다.
- HTTP 통신 모델에 대해서만 지원한다.
Python
- 딕셔너리 에서의 get()
key로 Value 얻기
>>> a = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'}
>>> a.get('name')
'pey'
>>> a.get('phone')
'010-9999-1234'