ComputerScience 80

[Database] 데이터베이스란

데이터베이스 데이터베이스는 구조화된 정보 또는 데이터의 조직된 모음으로, 일반적으로 컴퓨터 시스템에서 전자적으로 저장됩니다. 데이터베이스는 일반적으로 데이터베이스 관리 시스템(DBMS)에 의해 제어됩니다. 데이터와 DBMS는 연관된 응용 프로그램과 함께 데이터베이스 시스템으로 불리며 종종 간단히 데이터베이스로 줄여집니다. 오늘날 가장 일반적으로 사용되는 데이터베이스 유형 내의 데이터는 일련의 테이블에서 행과 열로 모델링됩니다. 이를 통해 처리 및 데이터 쿼리가 효율적으로 이루어집니다. 데이터는 쉽게 액세스, 관리, 수정, 업데이트, 제어 및 조직될 수 있습니다. 대부분의 데이터베이스는 구조화된 쿼리 언어(SQL)를 사용하여 데이터를 작성하고 쿼리합니다. Structured Query Language (S..

[DesignPattern] 18개 디자인 패턴 총 정리, 요약

Abstract Factory: Family Creator Makes groups of related items. 관련된 항목들의 그룹을 만듭니다. Builder: Lego Master Builds objects step by step, keeping creation and appearance separate. 단계적으로 객체를 생성하며, 생성과 외관을 분리합니다. Prototype: Clone Maker Creates copies of fully prepared examples. 완전히 준비된 예제의 복사본을 생성합니다. Singleton: One and Only A special class with just one instance. 하나의 인스턴스만 가지는 특별한 클래스입니다. Adapter: Uni..

[Network] REST API vs GRAPHQL

REST API vs GRAPHQL REST와 GraphQL은 둘 다 데이터를 노출하고 현대적인 응용 프로그램을 구동하는 데 사용되는 두 가지 API 접근 방식입니다. 그러나 각각은 특정 상황에서 더 적합한 선택일 수 있습니다. REST CRUD 작업에 대해 GET, POST, PUT, DELETE와 같은 표준 HTTP 메서드를 사용합니다. 별도의 서비스 또는 응용 프로그램 간에 간단하고 일관된 인터페이스가 필요한 경우에 잘 작동합니다. 캐싱 전략은 구현하기가 간단합니다. 하지만 관련된 데이터를 별도의 엔드포인트에서 가져오기 위해 여러 Round-Trip이 필요할 수 있습니다. GraphQL 클라이언트가 필요한 정확한 데이터를 쿼리하기 위한 단일 엔드포인트를 제공합니다. 클라이언트는 중첩된 쿼리에서 필요..

[Network] RESTful web API design

REST REST 아키텍처 스타일은 웹이 1991년에 팀 버너스 리에 의해 탄생함으로써 시작되었습니다. 웹은 하이퍼텍스트를 활용하여 정보를 연결하는 방식으로, 인터넷에서 정보를 공유하는 방법을 제시했습니다. 웹의 기본 구성 요소는 다음과 같습니다. 표현 형식: HTML 식별자: URI 전송 방법: HTTP HTTP는 정보를 웹에서 전송하는 데 사용되는 프로토콜로, 1994년에 로이 필딩이 주도하여 개발되었습니다. 필딩은 HTTP 1.0의 명세 작업에 참여하면서, 기존의 웹과 호환성을 유지하면서 HTTP를 개선하고자 했습니다. 그는 HTTP Object Model 개념을 도입하여 HTTP를 객체 지향적으로 설계할 수 있는 방법을 제시했습니다. 이후, 2000년에 "Representational State ..

[DesignPattern] 상태 패턴 (State Pattern)

상태 패턴 (State Pattern) 상태 패턴을 사용하면 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있다. 마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있다. 상태를 별도의 클래스로 캡슐화한 다음 현재 상태를 나타내는 객체에게 행동을 위임하므로 내부 상태가 바뀔 때 행동이 달라지게 된다는 사실을 쉽게 알 수 있습니다. 클라이언트의 관점에서 지금 상태에 따라 사용하는 객체의 행동이 완전히 달라져 마치 그 객체가 다른 클래스로부터 만들어진 객체처럼 느껴집니다. 상태패턴을 사용하지 않으면, 상태마다 모든 분기를 if문을 사용하여 분기 처리하여야 합니다 즉, 확장에 닫혀있게 되고, 상태패턴을 이용하면 확장에 비교적 열려있게 됩니다. 상태 패턴의 구성은 다음과 같습니다. Context..

[DesignPattern] 컴포지트 패턴(Composite Pattern)

컴포지트 패턴컴포지트 패턴(Composite Pattern)으로 객체를 트리구조로 구성해서 부분-전체 계층을 구현한다. 컴포지트 패턴을 사용하면 클라이언트에서 개별 객체와 복합 객체를 똑같은 방법으로 다룰 수 있습니다. 부분-전체 계층 구조(part-whole hierarchy)란, 부분들이 계층을 이루고 있지만 모든 부분을 묶어서 전체로 다룰 수 있는 구조를 뜻합니다. (트리에서 부모 노드와 자식 노드들의 가장 작은 부분들이 합쳐져서 트리의 전체 구조가 된다는 것을 생각하면 이해하기에 쉽다.) 트리와 구분되는 점은 트리에선 모든 Leaf 노드가 부모 노드가 될 수 있지만, 컴포지트 패턴에서는 Composite 객체만 Leaf 객체들을 관리하는 부모 노드가 될 수 있다는 것입니다. 컴포지트 패턴의 구성에..

[DesignPattern] 템플릿 메소드 패턴 (Template Method Pattern)

템플릿 메소드 패턴 템플릿 메소드 패턴은 알고리즘의 골격을 정의합니다. 템플릿 메소드를 사용하면 알고리즘의 일부 단계를 서브 클래스에서 구현할 수 있으며, 알고리즘의 구조는 그대로 유지하면서 알고리즘의 특정 단계를 서브 클래스에서 재정의할 수도 있습니다. 쉽게 말해 템플릿 메소드 패턴은 알고리즘의 템플릿을 만들고, 이 템플릿은 일련의 단계로 알고리즘을 정의한 메소드입니다. 위 UML Class Diagram 에서, AbstractClass는 templateMethod() 작업을 정의합니다. 이 메서드는 행동의 뼈대를 구현하고, primitive1()과 primitive2() 메시지를 자기 자신에게 보냅니다. 이 메시지들은 SubClass1에서 구현되어 있기 때문에 이 서브클래스에서 해당 알고리즘의 일부를..

[DesignPattern] 퍼사드 패턴(Facade Pattern)

퍼사드 패턴(Facade Pattern) 퍼사드 패턴은 서브 시스템에 있는 일련의 인터페이스를 통합 인터페이스로 묶어줍니다. 또한 고수준 인터페이스도 정의하므로 서브시스템을 더 편하게 쓸 수 있습니다. 위의 UML Class Diagram에서, Client 클래스는 Subsystem 클래스들에 직접적으로 접근하지 않습니다. 대신, Client는 간단한 인터페이스를 구현하고 Subsystem 클래스들 (Class1, Class2 및 Class3)을 통해 작동하는 Facade 클래스를 통해 작업합니다. Client는 단순한 Facade 인터페이스에만 의존하며 복잡한 서브시스템에 대해 독립적입니다. 여기서 중요한 포인트는 Facade 디자인 패턴을 사용하여 복잡한 서브시스템을 단순한 인터페이스로 감싸고, 클라..

[DesignPattern] Adapter Pattern

어댑터 패턴(Adapter Pattern) 어댑터 패턴은 특정 클래스 인터페이스를 클라이언트에서 요구하는 다른 인터페이스로 변환합니다. 이로써 인터페이스가 호환되지 않아 같이 쓸 수 없었던 클래스를 사용할 수 있게됩니다. 위의 UML Class Diagram에서, Target 인터페이스를 필요로 하는 Client 클래스는 Adaptee 클래스의 인터페이스가 Target 인터페이스와 일치하지 않기 때문에 Adaptee 클래스를 직접 재사용할 수 없습니다. 대신 클라이언트는 Adapter 클래스를 통해 작업하며, 이 Adapter 클래스는 Adaptee를 사용하여 Target 인터페이스를 구현합니다. 객체 어댑터 방식은 런타임에 어댑티 객체에 위임함으로써(Adaptee.specificOperation()) ..

[DesignPattern] Command Pattern

커맨드 패턴(Command Pattern) 커맨드 패턴을 사용하면 요청 내역을 객체로 캡슐화해서 객체를 서로 다른 요청 내역에 따라 매개변수화할 수 있습니다. 위의 UML Class Diagram 에서 Invoker 클래스는 직접 요청을 구현하지 않습니다. 대신 Invoker는 요청을 수행하기 위해 Command 인터페이스를 참조합니다(command.execute()). 이로써 Invoker는 요청이 어떻게 수행되는지와는 독립적이게 됩니다. Command1 클래스는 Command 인터페이스를 구현하여 Receiver1 객체에 대한 작업을 수행합니다 (receiver1.action1()). UML Sequence Diagram은 런타임 상호 작용을 보여줍니다. Invoker 객체가 Command1 객체에서..