포도가게의 개발일지
준비자료 본문
반응형
좋은 코드란?
- 모두가 읽기쉬운코드, 확장성이 용이한 코드 -> 나는 돈이되는 코드 시간이 지나도 큰 리팩토링없이 돈을 벌어주 줄 수 있는 코드가 좋은 코드
RESTful API?
- API 설계의 중심에 리소스가 있고 http method를 통해 자원을 처리하도록 설계하는 디자인 패턴-> 리소스는 uri, 행위는 http method(Get, post, put, patch, delete) 분명한 목적으로 사용-> entity에 대한 내용은 body에 담는다.
-> API 버전정보, 응답받고자하는 MIME 타입등은 header에 담는다.
-> header와 body는 http header와 http body로 나눌수도 있고, http body에 들어가는 json 구조로 분리할 수도 있다.-> 특정 API를 변경할때는 항상 하위호환성을 보장해야한다.-> 브라우저는 form-data 형식의 submit 으로 보내고 서버에서는 json 형태로 보내는 식의 분리보다는 json으로 보내든, 둘 다 form-data 형식으로 보내든 하나로 통일한다. - 1. 리소스와 행위를 명시적이고 직관적으로 분리한다.
- 4. 서버와 클라이언트가 같은 방식을 사용해서 요청하도록 한다.
- 3. API 버전을 관리한다.
- 2. message는 header와 body를 명확하게 분리하여 사용한다.
REST 6가지 원칙
* Uniform Interface
* Stateless
* Caching
* Client-Server
* Hierarchical system
* Code on demand
장점
- Open API를 제공하기 쉽다.
- 멀티플랫폼 지원 및 연동이 용이하다.
- 원하는 타입으로 데이터를 주고 받을 수 있다.
- 기존 웹 인프라(HTTP)를 그대로 사용할 수 있다.
단점
- 사용할 수 있는 메소드가 4가지 밖에 없다.
- 분산환경에는 부적합하다.
- HTTP 통신 모델에 대해서만 지원한다.
TDD(Test-Driven Development)?
- 매우 짧은 개발 사이클의 반복에 의존하는 소프트웨어 개발 프로세스
- 개발자는 새로운 기능에 대한 자동화된 테스트케이스를 작성하고 해당 테스트를 통과하는 가장 간단한 코드를 작성한다. 일단 테스트를 통과하는 코드를 작성하고 상황에 맞게 리팩토링하는 과정을 거치는 것이다.
- 테스트가 코드 작성을 주도하는 개발 방식
Add a test
- 테스트 주도형 개발에서는 새로운 기능을 추가하기 전 테스트를 먼저 작성한다.
- 개발자는 해당 기능의 요구사항과 명세를 분명히 이해하고 있어야 한다.
Run all tests and see if new one fails
- 어떤 새로운 기능을 추가하면 잘 작동하던 기능이 제대로 작동하지 않는 경우가 발생할 수 있다.
- 최악의 경우 개발자가 이를 미처 인지하지 못하는 경우이다.
- 새로운 기능이 제대로 작동함과 동시에 기존의 기능들이 잘 작동하는지 테스트를 통해 확인할 수 있는 것이다.
Refactor code
- test code가 리팩토링의 중심을 잡아줄 수 있다.
- 뚱뚱한 함수를 여러 함수로 나누는 과정에서 해당 기능이 오작동을 일으킬 수 있지만 간단히 테스트를 돌려봄으로써 이에 대한 안심을 하고 계속해서 리팩토링을 진행할 수 있다.
- 결과적으로 리팩토링 속도도 빨라지고 코드의 퀄리티도 그만큼 향상하게 된다.
함수형 프로그래밍(추가 업데이트)
immutable vs mutable
- immutable이란 말 그대로 변경 불가능함을 의미한다. immutable 객체는 객체가 가지고 있는 값을 변경할 수 없는 객체를 의미하여 값이 변경될 경우, 새로운 객체를 생성하고 변경된 값을 주입하여 반환해야 한다. 이와 달리 mutable객체는 해당 객체의 값이 변경될 경우 값을 변경한다.
MVC 패턴이란 무엇인가?
https://asfirstalways.tistory.com/180
[1. MVC 아키텍쳐에 대한 이해
Things 1. MVC 아키텍쳐에 대한 이해 떠도는 여러 이미지들과 책에 나온 구성도를 내 나름대로 재구성해보았다. MVC에 대한 기본 개념은 모두 동일하기 때문에 Servlet과 JSP를 기준으로 설명하여 보
asfirstalways.tistory.com](https://asfirstalways.tistory.com/180)
Array vs Linked List
Array
- 가장 기본적인 자료구조이며, 논리적 저장순서와 물리적 저장순서가 일치한다.
- 따라서 인덱스(index)로 해당 원소(element)에 접근할 수 있다. 그렇기 때문에 찾고자 하는 원소의 인덱스 값을 알고 있으면 Big-O(1)에 해당 원소로 접근할 수 있다.
- 하지만 삭제 또는 삽입의 과정에서 배열의 연속적인 특징이 깨지면 shift를 해줘야하는 cost가 발생하고 이경우의 시간 복잡도는 O(n)이다.
Linkded List
- 각각의 원소들은 자기 자신 다음에 어떤 원소인지만을 기억하고 있다. 따라서 이 부분만 다른 값으로 바꿔주면 삭제와 삽입을 O(1)만에 해결할 수 있다.
- 하지만 링크드 리스트에 역시 한 가지 문제가 있다. 원하는 위치에 삽입을 하고자 하면 원하는 위치를 search 하는 과정에서 첫번째 원소부터 다 확인해봐야 한다. array와 달리 논리적 저장순서와 물리적 저장 순서가 일치하지 않기 때문이다. 이것을 일단 삽입하고 정렬하는 것과 마찬가지이다.
- 결국 linked list 자료구조는 search에도 O(n)의 time complexity를 갖고, 삽입 삭제에 대해서 O(n)을 갖는다.
- Linked List 는 Tree 구조의 근간이 되는 자료구조이며, Tree 에서 사용되었을 때 그 유용성이 드러난다.
Stack and Queue
Stack
- LIFO 구조
Queue
- FIFO 구조
Tree
트리는 스택이나 큐와 같은 선형 구조가 아닌 비선형 자료구조이다. 트리는 계층적 관계(Hierarchical Relationship)을 표현하는 자료구조이다.트리를 구성하고 있는 구성요소들(용어)
- Node : 트리를 구성하고 있는 각각의 요소를 의미한다.
- Edge : 트리를 구성하기 위해 노드와 노드를 연결하는 선을 의미한다.
- Root Node : 트리 구조에서 최상위에 있는 노드를 의미한다.
- Leaf Node : 하위에 다른 노드가 연결되어 있지 않은 노드를 의미한다.
- Internal Node : 리프 노드를 제외한 모든 노드로 루트 노드를 포함한다.
Binary Tree
- 루트 노드를 중심으로 두 개의 서브 트리(큰 트리에 속하는 작은 트리)로 나뉘어 진다. 또한, 나뉘어진 두 서브 트리도 모두 이진트리어야 한다.
- 공집합, 노드가 하나 뿐인 것도 이진 트리 정의에 만족하게 된다.
- 트리에서는 각 층별로 숫자를 매겨서 이를 트리의 level이라고 한다. 레벨의 값은 0 부터 시작하고 따라서 루트 노드의 레벨은 0이다
- 트리의 최고 레벨을 가리켜 해당 트리의 height라고 한다.
'개발일기' 카테고리의 다른 글
클린 아키텍처 2부 (0) | 2023.08.19 |
---|---|
클린 아키텍처 1부 (0) | 2023.08.15 |
Docker 교과서 (0) | 2022.11.27 |
[회고]오브젝트 OOP (0) | 2022.07.03 |
퇴사 후 개발 공부 0주차 (0) | 2021.06.24 |
Comments