본문 바로가기

분류 전체보기

(265)
[WEB] HTTP Method HTTP Method https://developer.mozilla.org/ko/docs/Web/HTTP/Methods 비교적 자주 사용되는 HTTP 메서드는 다음과 같다. GET: 서버에 특정 리소스를 요청. 정보를 가져올 때 사용 POST: 서버에 데이터를 제출. 데이터를 추가 / 업데이트할 때 사용 PUT: 특정 리소스 전체를 갱신(대체) PATCH: 특정 리소스의 일부를 수정 DELETE: 특정 리소스를 제거 MDN에서는 다음 3가지 특성을 기준으로 HTTP 메서드를 설명한다. 안전함(Safe): 메서드가 서버의 상태를 변경하지 않는다. 안전한 메서드는 멱등성을 가지지만, 역은 성립하지 않는다. ex) PUT은 멱등성을 가지지만, 서버의 상태를 변경한다. GET / HEAD / OPTIONS 캐시..
HTTP HATEOAS 하이퍼미디어는 멀티미디어(텍스트, 이미지, 영상 등)를 하이퍼 링크를 통해 이동할 수 있는 비선형 구조를 의미한다. HATEOAS는 직역하면 "어플리케이션 상태 엔진으로써의 하이퍼미디어"이다. 상태 엔진을 state machine으로 해석하면, 애플리케이션의 상태를 전이(조작)하는데 하이퍼 미디어를 이용한다 정도의 의미가 된다. 구체적으로는 서버가 응답할 때 요청된 자원과 해당 자원과 관련된 링크를 함께 보내는 형식으로 표현된다. { "id": 123, "name": "John Doe", "age": 30, "links": [ { "rel": "self", "href": "https://api.example.com/users/123" }, { "rel": "update", "href": "https://..
[WEB] REST & REST API REST(Representational State Transfer) 논문: https://ics.uci.edu/~fielding/pubs/dissertation/top.htm REST는 네트워크 환경에서 통신을 관리하기 위한 설계 지침을 의미한다. 이때, REST의 모든 제약조건을 지켜야 한다는 의미가 아니라, 지키면 네트워크 통신을 설계하기 유리하다는 측면으로 바라보는 것이 좋다. REST를 만족하는 아키텍처는 다음과 같은 제약조건을 따라야 한다. Client - Server Stateless Cache Uniform Interface Layered System Code On Demand Client - Server 클라이언트와 서버로 분리되어야 하며, 둘은 의존성이 없어야 한다. 관심사 분리를 통해 ..
AOP AOP(Aspect Oriented Programming) 소프트웨어에서 공통적인 관심사를 모듈화하고 분리하는 프로그래밍 방식. 개발을 하다 보면 특정 서비스나 도메인에 종속되지 않고, 여러 서비스에서 공통적으로 사용되는 기능이 존재한다. 예를 들어 트랜잭션, 로깅, API 사용자 권한 검증 같은 작업은 특정 서비스의 핵심 내용과 관련이 없으며, 프로그램 전역에서 공통적으로 사용된다. 이들은 핵심적인 서비스를 구현하기 위해 필요한 부수적인 기능을 수행한다. 이처럼 특정 모듈에 종속되는 대신 여러 모듈에서 공통적으로 사용될 수 있는 프로그램 상 특정 측면(Aspect)을 횡단 관심사(Cross-cutting concern)라고 부른다. 전통적인 객체지향 프로그래밍 방식에서는 서비스의 핵심과 횡단 관심사가 ..
객체 지향 프로그래밍의 배경 도입 현재 널리 사용되는 프로그래밍 패러다임에는 절차적 프로그래밍, 객체지향 프로그래밍, 함수형 프로그래밍이 있다. 이 중 가장 많이 사용되고, 중요하다고 생각하는 프로그래밍 패러다임을 하나 고른다면 대부분의 사람들은 객체지향 프로그래밍을 선택할 것이다. 많은 언어들이 클래스를 시작으로 상속, 인터페이스 등의 객체지향과 관련된 기능을 포함하고 있으며, 실제로 이를 이용하여 개발하는 경우가 많기 때문이다. 그렇다면, 객체지향 프로그래밍 방식은 왜 널리 사용되고, 중요한 패러다임으로 자리 잡았을까? 이번 글에서는 객체지향이 왜 등장한 배경을 다뤄보고자 한다. 소프트웨어의 복잡함 객체지향을 논하기에 앞서, 개발을 통해 달성하고자 하는 목표인 소프트웨어에 대해 생각해 보자. 세상에는 정말 다양한 요구사항이 있으..
[typescript] generic + constructor 타입에서 생성자 파라미터 타입 추론 결론 생성자에 대한 타입을 지정할 때 반환 값 T만 지정하는 대신, 파라미터 P에 대한 정보도 함께 지정하면 ConstructorParameters을 통해 제네릭 타입의 생성자 파라미터를 추론할 수 있다. IConstructor = new (...args: any) => T 정의는 생성자 파라미터가 any로 고정되어 있어 추론이 발생하지 않으나, args의 타입도 추론하도록 제네릭 타입 매개변수 P로 분리해두면 ConstructorParameters가 이를 추론한다. // 생성자 파라미터도 인식하는 클래스 생성자 타입 정의 export type IConstructor = new (...args: P) => T; // 테스트 클래스 export class Bullet extends GameObject { ..
[typescript] ts2345 클라우드 강의 마지막 발표를 위해 기존에 aws 기반으로 구성한 뉴스 댓글 수집 파이프라인을 azure 기반으로 마이그레이션 하고 있다. 이 과정에서 뉴스 데이터를 수집할 때 타입 선언으로 정의한 내용이 있어 인터페이스로 변경해보았는데, 다음과 같은 에러가 발생했다. // 인터페이스로 변경한 타입 interface NLListOptions { query: string; ds: string; de: string; news_office_checked?: string; office_type?: string; mynews?: string; }; // 해당 객체를 이용하는 함수 export async function getNewsLinkList( variable_options: NLListOptions, dela..
[graphql] graphql N+1 문제와 prisma ORM의 해결 방식 Query optimization | Prisma Docs Query optimization How Prisma optimizes queries under the hood www.prisma.io graphql은 resolver을 적절히 연결하고, 이를 결합하여 한번의 요청으로 많은 데이터를 가져올 수 있다. 이때 resolver이 동작하는 과정에서 N+1 문제가 발생하므로, 이를 처리하기 위한 적절한 방법이 요구된다. N+1 문제 1번의 쿼리를 이용하여 A 엔티티를 N개 가진 배열을 읽어왔을 때, A엔티티에 대한 연관 관계 B 엔티티를 가져오기 위해 N번의 쿼리를 추가로 수행하는 상황이다. 간단하게 생각하면, 아래처럼 동작하는 상황이 N+1이라고 볼 수 있다. const users = db.user.f..