분류 전체보기 (295) 썸네일형 리스트형 [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.. [데이터베이스] 트랜잭션 https://en.wikipedia.org/wiki/Isolation_(database_systems) 트랜잭션 하나의 논리적 동작을 정상적으로 수행하는데 필요한 DB 연산들을 모아놓은 데이터베이스 시스템 작업의 기본 단위 ACID 원칙 트랜잭션이 가진 4가지 특성 특성 설명 달성 방법 Atomicity (원자성) 트랜잭션 구성 연산은 모두 실행되거나, 하나도 실행되지 않아야 한다. 장애로 인해 연산이 중단되면 트랜잭션 수행 이전으로 작업을 되돌릴 수 있어야 한다. All or Nothing Commit / Rollback Consistency (일관성) 트랜잭션 성공 전·후에 대한 일관성을 유지해야 한다 (완료 시점에 일관된 상태). ex) 계좌 이체 시 총 금액은 일치해야 함 무결성 제약조건 동시성.. [기록] JWT 로그인 & redis Redis https://redis.com/ Remote Dictionary Server의 약자로, key - value 형식의 데이터를 저장하는 NoSQL DBMS의 일종이다. 메모리 기반으로 동작하기 때문에 속도가 매우 빠르다는 것이 장점이다. 우리가 아는 많은 데이터베이스들은 파일시스템에 데이터를 저장한다. CPU는 메모리에 올라온 데이터만 읽을 수 있으므로 특정 데이터를 요구하려면 파일 시스템 → 메모리 → CPU의 과정을 거쳐야 하는데, redis는 파일 시스템 접근이 없으므로 속도가 매우 빠르다. 파일 시스템 상에 백업하는 기능도 지원한다. 다양한 요구사항을 만족할 수 있도록 여러 가지 자료구조도 기본으로 제공한다. https://redis.com/redis-enterprise/data-str.. 이전 1 2 3 4 5 6 7 8 ··· 37 다음