포도가게의 개발일지

준비자료 본문

개발일기

준비자료

grape.store 2021. 12. 17. 00:34
반응형

좋은 코드란?

  • 모두가 읽기쉬운코드, 확장성이 용이한 코드 -> 나는 돈이되는 코드 시간이 지나도 큰 리팩토링없이 돈을 벌어주 줄 수 있는 코드가 좋은 코드

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