반응형

개발 공부를 하다보면 익숙하지 않은 의미의 단어가 많습니다. 일단 영어니까요 ?

 

프로젝트를 스캐폴드 한다는 것은 무슨 뜻일까요? 대략 맥락 상으로는 개발 프로젝트를 처음 시작할 때 뼈대가 되는 구조를 깔아둔다는 의미로 보이긴합니다. 이것을 왜 'scaffold the project' 로 표현하는지 알아보겠습니다.

 

'scaffold'의 사전적 의미는 다음과 같습니다.

 

1. 교수대 처형대

2. (건축 공사장의) 비계

 

시작하지도 않은 프로젝트를 2번의 의미 (건축 공사장의 비계)로 사용되고 있을 가능성이 높아보입니다.

비계? 또 어려운 단어가 나왔군요. 한국어가 막힐 경우가 많습니다. '비계'란 무엇일까요?

 

'비계'의 사전적 의미는 다음과 같습니다.

1. 짐승, 특히 돼지의 가죽 안쪽에 두껍게 붙은 허연 기름조각.

2. 근본적인 대책 없이 임시변통으로 세운 계략.

3. (건설) 높은 곳에서 공사를 할 수 있도록 임시로 설치한 가설물.

 

이 중 scaffold의 2번 의미와 통하는 것은 3번 (높은 곳에서 공사를 할 수 있도록 임시로 설치한 가설물) 입니다.

 

이해를 돕기 위한 사진과 나무위키를 첨부해 보겠습니다.

 

건설 중인 건축물을 쇠파이프들이 정글짐 같은 형태로 둘러싸고 있다.

 

건물을 공사할 수 있도록 주변에 세워 둔 정글짐 같은 형태의 쇠파이프 집합이 보이시나요?

이것이 바로 비계(건축)입니다.

여기까지 알아보고나니 'scaffold the project'가 무슨 의미인지 제대로 와닿네요.

 

아주 유익한 시간이었습니다.

 

그럼 다음에 또 궁금한 점이 생기면 포스트를 등록하겠습니다.

 

좋은 하루 되세요. ^^

반응형
반응형

"API의 컨트롤 자원"이라는 용어는 API 설계와 관련된 컨셉 중 하나이며, 특히 RESTful API 디자인 패턴에서 자주 언급됩니다. API(Application Programming Interface)는 소프트웨어 애플리케이션들이 서로 상호작용하는 방법을 정의하는 명세 또는 프로토콜입니다. RESTful API는 이러한 상호작용을 웹 표준을 이용하여 구현한 API로, 자원(Resource)의 개념을 중심으로 설계됩니다.

 

컨트롤 자원(Control Resource) 이해하기

 

  • 자원(Resource): RESTful API의 핵심 개념 중 하나로, 인터넷 상의 모든 것(문서, 이미지, 서비스 등)을 자원으로 간주하고 이에 대한 조작을 통해 애플리케이션을 구현합니다. 각 자원은 고유한 URI(Uniform Resource Identifier)에 의해 식별됩니다.
  • 컨트롤 자원(Control Resource): 특정 자원에 대한 조작이나 상태 변화를 관리하기 위해 디자인된 API 엔드포인트입니다. 이는 자원의 생성, 조회, 수정, 삭제(CRUD)와 같은 표준 작업을 넘어서, 자원의 특정 행위나 상태 관리를 위한 동작을 정의합니다. 예를 들어, 사용자 계정을 활성화하거나 비활성화하는 동작, 작업을 시작하거나 중지하는 동작 등이 컨트롤 자원에 해당할 수 있습니다.

컨트롤 자원은 자원의 상태를 변화시키는데, 이는 REST 아키텍처에서 중요한 부분입니다. REST 아키텍처의 기본 원칙 중 하나는 상태가 없는(stateless) 통신이지만, 애플리케이션 내에서 자원의 상태를 변경하는 것은 필수적입니다. 따라서, 컨트롤 자원은 이러한 상태 변화를 관리하고 통제하는 역할을 합니다.

 

컨트롤 자원의 설계

 

 

컨트롤 자원을 설계할 때는 다음과 같은 점을 고려해야 합니다.

  • 명확한 엔드포인트 정의: 컨트롤 자원은 명확하게 식별될 수 있어야 하며, 수행하는 동작을 명확하게 표현하는 URI를 사용하는 것이 좋습니다.
  • RESTful 원칙 준수: 가능한 한 RESTful 원칙에 따라 HTTP 메소드(GET, POST, PUT, DELETE 등)를 적절하게 사용해야 합니다.
  • 상태 관리: 컨트롤 자원을 통해 자원의 상태를 변경할 때, 그 변경이 명확하고 예측 가능해야 합니다.

컨트롤 자원은 API를 통해 애플리케이션의 비즈니스 로직을 노출하고, 사용자가 소프트웨어와 상호작용하는 방식을 결정하는 중요한 역할

을 합니다. 따라서, 사용자의 요구 사항을 충족시키면서도 RESTful 아키텍처의 원칙을 유지하는 방식으로 설계하는 것이 중요합니다.

 

컨트롤 자원의 기능

 
REST API에서 컨트롤 자원은 다른 자원의 행동을 조작하거나 제어하는 데 사용되는 특별한 자원입니다. 일반적으로 CRUD 작업(생성, 읽기, 업데이트, 삭제)을 수행하는 자원과 달리 컨트롤 자원은 다음과 같은 다양한 기능을 수행합니다.

1. 상태 변경:

사용자 또는 시스템이 다른 자원의 상태를 변경하도록 허용합니다. 예를 들어, "시작", "중지", "일시 중지", "재시작"과 같은 작업을 수행할 수 있습니다.
 
2. 프로세스 트리거:

다른 자원에서 비동기 작업 또는 프로세스를 트리거합니다. 예를 들어, "보고서 생성", "데이터 동기화", "알림 전송"과 같은 작업을 수행할 수 있습니다.
 
3. 구성 관리:

다른 자원의 설정 또는 구성을 관리합니다. 예를 들어, "사용자 권한 설정", "시스템 설정 변경", "환경 변수 설정"과 같은 작업을 수행할 수 있습니다.
 
4. 탐색 및 검색:

다른 자원을 검색하거나 탐색하는 데 사용되는 메타데이터를 제공합니다. 예를 들어, "가능한 작업 목록", "자원 유형 정보", "필터링 옵션"과 같은 정보를 제공할 수 있습니다.
 
5. 통계 및 분석:

다른 자원과 관련된 통계, 분석 정보 또는 보고서를 제공합니다. 예를 들어, "사용량 패턴", "성능 지표", "오류 보고서"와 같은 정보를 제공할 수 있습니다.

 

컨트롤 자원의 특징

 

- 일반적으로 동사를 사용하여 명명됩니다. : "startJob", "cancelOrder", "configureSettings"
 
- URI 경로에 명확하게 표시됩니다. : "/jobs/{jobId}/start", "/orders/{orderId}/cancel", "/settings/configure"
 
- HTTP 메서드를 사용하여 작업을 지정합니다. : "POST" 메서드는 작업 시작을, "DELETE" 메서드는 작업 취소
 
- 성공 또는 실패를 나타내는 응답 코드를 반환합니다. 필요한 경우, 작업 진행 상황 또는 결과를 포함하는 응답 본문을 제공합니다.
 

 

컨트롤 자원의 예시


- 웹 애플리케이션에서 사용자 계정을 비활성화하는 API
 
- 온라인 스토어에서 주문을 취소하는 API
 
- IoT 장치의 설정을 업데이트하는 API
 
- 데이터 분석 플랫폼에서 보고서를 생성하는 API
 
- 서버 백업 프로세스를 시작하는 API
 
 
컨트롤 자원은 REST API에서 중요한 역할을 하며, 다른 자원을 제어하고 관리하는 데 필요한 기능을 제공합니다. 
컨트롤 자원을 사용하여 다양한 작업을 수행하고, 애플리케이션의 기능을 확장하고, 사용자에게 더 많은 제어 권한을 제공할 수 있습니다.
반응형
반응형

함수 기반 뷰(FBV)데코레이터(Decorator): 간결성과 빠른 구현

  • 함수 기반 뷰는 보통 간결하고 직관적이다.
  • 뷰 함수 하나가 하나의 URL 패턴에 대응되므로 코드의 구조가 단순하다.
  • 빠르게 작성하고 프로토타입을 구축하는 데 유용하다.
  • 함수 기반 뷰와 데코레이터를 사용하면 빠르게 뷰를 구현하고 프로토타입을 만들 수 있다.
  • 데코레이터를 사용하여 특정 기능을 필요한 뷰 함수에 추가하거나 제거할 수 있다.
  • Django에서 내장된 데코레이터들이 많이 제공되므로 사용하기 편리하다.
  • 함수 호출에 대한 오버헤드*가 클래스 기반 뷰보다 작다.
  • 데코레이터로 처리할 수 없는 복잡한 로직을 다루기에는 한계가 있다.

 

클래스 기반 뷰(CBV)믹스인(Mixin): 높은 확장성과 재사용성

  • 클래스 기반 뷰(CBV)는 객체 지향적인 접근 방식을 제공하며, 비즈니스 로직을 클래스 메서드로 구현할 수 있다. 뷰 로직을 클래스로 구조화하여 관리하기 쉽고, HTTP 메서드에 따라 뷰 로직을 분리하고 관리할 수 있다.
  • 클래스 기반 뷰와 믹스인은 코드 재사용을 더 쉽게 할 수 있다. CBV에 믹스인을 사용하면, 공통 기능을 믹스인 클래스로 정의하고 여러 뷰 클래스에서 상속받아 사용할 수 있으므로 다양한 뷰에서 동일한 기능을 공유할 수 있다.
  • CBV와 믹스인을 함께 사용하면 코드 재사용이 용이하고 유지보수가 편리합니다. 믹스인을 필요한 뷰에 쉽게 추가할 수 있습니다.
  • 클래스 기반 뷰는 복잡한 애플리케이션에서 높은 확장성과 구조를 제공하며, CBV 상속 구조를 통해 코드를 구조화할 수 있습니다.
  • 클래스 기반 뷰와 믹스인은 함수 기반 뷰와 데코레이터로 처리하기 어려운 잡한 로직을 처리해야할 경우에 유용하다.
  • 클래스 기반 뷰와 믹스인을 사용하기 위해서는 일정한 학습 곡선이 필요할 수 있다. 클래스 기반 뷰는 함수 기반 뷰 보다 더 복잡하게 느껴질 수 있으며, 믹스인의 오버라이드와 순서를 관리해야하ㄴ다.

트레이드 오프

 프로젝트의 특성과 요구사항에 따라, 작은 프로젝트나 간단한 페이지를 개발할 때는 함수 기반 뷰와 데코레이터가 간편하게 사용될 수 있고  큰 규모의 프로젝트나 고도의 재사용성이 필요한 경우 클래스 기반 뷰와 믹스인을 활용하는 것이 더 효율적일 수 있다.

 

* "오버헤드(Overhead)"는 어떤 작업을 수행하기 위해 필요한 추가적인 자원 또는 처리 과정을 말한다. 일반적으로 원래 목표를 달성하기 위한 불필요한 부가적인 작업이나 자원 소모를 나타낸다.

 코드 실행 과정에서 함수를 호출하고 반환하는 과정에 따른 추가적인 작업과 시간, 함수 호출은 프로그램의 제어 흐름을 변경하고 스택 메모리를 사용하여 함수의 실행을 관리하기 때문에 성능 손실이 발생할 수 있으다. 함수 호출 오버헤드에는 함수 호출 시 현재 상태를 저장하고 반환하는데 필요한 스택 메모리 관리, 매개변수 전달 과정에서 데이터 복사 작업, 함수 내부의 로컬 변수 생성 및 해제, 프로그램 제어 흐름 변경을 위한 점프 및 반환 명령 실행, 함수 내부로 진입하고 함수에서 빠져나오는 과정을 포함한다.

 함수 호출 오버헤드는 대부분의 경우 무시할 만큼 작다. 그러나 프로그램이 반복적으로 함수를 호출할 경우 또는 함수 호출이 빈번하게 발생하는 경우 유의미한 오버헤드가 발생할 수 있다. 대부분의 경우 성능에 미치는 영향은 매우 작기 때문에 최적화나 코드 구조 변경 보다는 함수 호출을 통환 코드의 모듈화와 가독성 향상이 더 이득이다. 성능에 문제가 될 경우에는 더 복잡한 최적화 전략을 고려해야 한다.

반응형
반응형

다음의 영상을 제가 필요한 내용 위주로 요약한 글입니다.
What is Data Pipeline | How to design Data Pipeline ? - ETL vs Data pipeline (2023)

  • ETL : extract, transform, load 데이터의 추출, 가공, 적재

기본작동 방식 과 아키텍처

What is Data Pipeline

Data pipeline automates data supply(including data processing) to data consumers

  (point A)		(point C, D , E, ... )		(point B)
Data Producers			Data Pipeline		Data Comsumers

Data Consumers' needs

  • Data Science
  • Machine Learning
  • Business Analytics
  • Reporting

Diff between traditional ETL and Data Pipeline

Data pipeline 이 더 넓은 개념이며, ETL은 Data pipeline mechanism 세부 개념이다.

2 types of data pipeline

  1. Real Time Data Pipeline
  2. Batch Data Pipeline
  3. Lambda Architecture (Real Time + Batch)

Lambda Architecture

Data Pipeline Architecture Example

반응형

+ Recent posts