banner image

전체 글 85

[TS] 타입스크립트 typeof 와 keyof

간단하게 설명하면 typeof는 값의 타입을 가져올 때, keyof는 객체 타입의 키들을 유니온 타입으로 반환할 때 사용합니다. typeof 란?타입스크립트에서 typeof는 자바스크립트의 typeof와 조금 다릅니다.자바스크립트: typeof는 값의 타입을 문자열로 반환타입스크립트: typeof는 값의 타입을 문자열로 반환. 하지만 값의 타입 그 자체를 반환하기도 함예시)/////////////// Javascript ///////////////const js = 1;const jsType = typeof js;// jsType은 'number'라는 문자열이다./////////////// Typescript ///////////////const ts = 1;const tsType = typeof ts;..

백엔드/Node.js 2025.04.09

[AWS] RDS 외부 접속 안될 때 해결 방법(connection timed out)

RDS 데이터베이스를 성공적으로 생성 후 로컬 환경에서 테스트하기 위해 접속하는 과정에 문제가 생기는 경우가 꽤 있습니다. 이를 해결하기 위한 방법은 4가지 정도 존재합니다. AWS RDS 외부 접속 해결 방법방법 1) 퍼블릭 액세스 허용하기RDS 데이터베이스를 클릭해 설정된 옵션을 확인하면 위와 같이 퍼블릭 액세스 가능 여부를 확인할 수 있습니다. 만약 해당 옵션이 '아니요'로 설정되어 있다면 우상단에 위치한 '수정' 버튼을 클릭해 해당 옵션을 '예'로 수정해줍니다. 방법 2) 인바운드 규칙 수정하기RDS 데이터베이스를 클릭해 설정된 옵션을 확인하면 위와 같이 VPC 보안 그룹을 확인할 수 있습니다. 해당 보안 그룹을 클릭해 세부 사항을 확인할 수 있는데요. 여기서 중요한 것은 인바운드 규칙입니다. 내..

에러 2025.04.03

[AWS] RDS 사용법 - 데이터베이스 생성 및 접속하기

AWS RDS(Relational Database Service)란?RDS는 AWS에서 제공하는 관계형 데이터베이스 서비스입니다. AWS 클라우드 환경에서 데이터베이스를 사용하고 싶을 때 단순히 EC2 인스턴스 내부에 데이터베이스를 실행시켜 사용할 수도 있습니다. 하지만 이 경우 백업, 스케일링, 모니터링 등의 설정을 개발자가 직접해야하는 불편함이 존재합니다. 이런 부분을 자동화시켜 불편함을 해소시킨 서비스가 RDS 입니다. 1. RDS 데이터베이스 생성RDS 데이터베이스 생성하기 생성 옵션 설정하기생성 버튼 클릭 이후 설정값은 자신이 원하는대로 설정합니다. 이때 문제될 수 있는 몇 가지 옵션은 다음과 같습니다.퍼블릭 액세스: 퍼블릭 액세스는 RDS에 외부 접속을 허용 여부를 설정한다고 생각하면 됩니다...

[TypeORM] 골치 아픈 Distinct 쿼리 피해 소요 시간 줄이기

저는 nest js 와 typeorm을 활용해 개발 중인데요. 이때 typeorm에서 제공하는 메서드를 사용하게 되면 흔히 접할 수 있는 문제가 있습니다. 바로 distinct 쿼리인데요. 중복을 방지하기 위해 typeorm에서는 디폴트로 distinct 쿼리를 먼저 실행하는 모습을 확인할 수 있습니다. 하지만 이런 부분이 오히려 성능에 악영향을 미치는 경우가 허다한데요. 오늘은 제가 경험한 사례와 해결 방법에 대해 공유해보겠습니다. 예시 상황먼저 제가 사용한 typeorm 메서드는 findAndCount()입니다. 제가 하려던 작업은 특정 페이지 post 조회 기능입니다. 즉, 1페이지를 누르면 1페이지에 해당하는 게시물 10개를 조회하고 2페이지를 누르면 2페이지에 해당하는 게시물 10개를 조회하는 ..

[DDD] 엔티티에 비즈니스 로직 작성하는 것에 대한 나의 생각

최근 OOP와 DDD 관련된 서적을 읽다 궁금한 점이 생겼습니다. 바로 엔티티 클래스와 서비스 클래스에 관한 내용인데요. 저는 기존에 개발 시 엔티티 클래스는 단순 데이터베이스와 매핑되는 클래스로만 이용했습니다. 그리고 모든 비즈니스 로직은 서비스 클래스에 구현했죠. 하지만 이럴 경우 엔티티가 단순한 데이터 구조체로만 사용된다는 아쉬움이 발생합니다. 그래서 도메인 주도 개발이라는 개념이 부상했습니다. 도메인 주도 개발 관점에서는 복잡한 비즈니스 로직만 서비스 클래스에 넣고 도메인 모델(엔티티)과 관련된 비즈니스 로직은 도메인 모델 클래스에 구현해 이런 아쉬움을 해결합니다.저도 이런 내용을 토대로 저의 코드 일부를 수정해보려 했는데요. 이때 의문점이 생겼습니다. 내용은 아래와 같습니다. 엔티티에 비즈니스 ..

리액트 빌드 후 CSS 적용 안될 때 시도할만한 방법들

저는 리액트를 통해 웹 페이지를 구현하고 이 빌드 파일을 서버에 배포했을 때, CSS가 적용되지 않아 문제를 겪었던 경험이 있습니다. 배포된 웹 사이트에 접속 시 개발자 도구 Network 탭에서 정상적으로 CSS 파일을 GET하는 부분도 확인할 수 있었기에 도대체 왜 CSS가 적용되지 않는지 이해가 되지 않았습니다. 이런 문제를 겪고 계신 분들에게 도움을 드리기 위해 저의 해결 방법을 공유하겠습니다. CSS 적용 안될 때 해결 방법1. Nginx static 경로 체크저는 해당 방법으로 문제를 해결했습니다. 저는 웹 서버로 nginx를 이용하고 있었는데요. 여기서 js 혹은 css같은 정적 파일을 위한 설정을 다음과 같이 해주었습니다.location /static/ { root /usr/src/bui..

에러 2025.03.20

[NodeJS]이벤트 루프 동작 이해하기

용어 정리콜 스택(Call stack)수행해야 하는 함수들 대기 장소(To Do List 같은 역할). 실제로 노드가 함수들을 실행하기 위해 확인하는 곳이라고 생각하면 됩니다. 노드 엔진은 콜 스택에 함수들이 대기하고 있으면 가장 마지막부터(스택의 성격: 선입후출) 차례로(동기적으로) 해당 함수들을 실행합니다. 이벤트 루프는 콜 스택에 있던 함수들이 모두 처리되어 비어있는지 항상 체크합니다. 만약 이벤트 루프가 콜 스택이 비어있음을 확인하면, 마이크로태스크 큐 / 테스크 큐 / 애니메이션 프레임 순서로 체크하며 해당 큐에서 대기 중이던 콜백 함수를 콜 스택에 채워 넣습니다.이벤트 루프(Event loop)이벤트 루프는 비동기적인 작업 처리를 위해 여러 작업들의 처리 순서를 정리해주는 교통경찰 역할을 많이..

백엔드/Node.js 2025.03.19

저장 장치의 기본 개념 - 디스크, 드라이브, 파티션, 파일 시스템에 대해 알고가자( 리눅스 vs 윈도우 )

저는 aws ec2 볼륨 크기를 늘리면서 디스크, 파티션, 파일 시스템 등의 개념에 대해 잘 알고 있지 못해 곤란했던 적이 있습니다. 이는 컴퓨터를 이해하는데 기본적이고 중요한 개념이므로 확실히 알고가야겠다는 생각이 들었습니다 이때 제가 조사했던 디스크 관련 개념들을 공유해보겠습니다. 디스크, 파티션, 파일시스템이란?지구를 통해 비유하겠습니다.디스크 --> 지구파티션 --> 국가파일 시스템 --> 국가별 법디스크(Disk)는 컴퓨터에 존재하는 저장 장치를 의미합니다. 즉, HDD 혹은 SDD같은 물리적인 저장 장치입니다. 파티션(Partition)은 이런 디스크가 여러 개로 나뉘어진 부분들을 의미합니다. 마치 지구가 여러 국가로 구성된 것과 같습니다. 하지만 여기서 조금 다른점은 존재합니다. 파티션은 물..

RDB에서 외래키 사용하지 않는 이유?

저는 개발을 하면서 레거시 코드를 만져야 하는 경우가 몇 번 있었는데요. 이때마다 데이터베이스(RDB)에 외래키가 설정되지 않은 경우가 굉장히 많았습니다. 이로 인해 데이터베이스 관리 도구를 통해 전체 다이어그램을 보아도 스키마를 이해하기 어렵다는 문제가 발생했습니다. 기존에 저는 개발 공부를 하면서 데이터 무결성을 위해서는 외래키를 설정해야 한다고 알고 있었습니다. 하지만 실무에서 외래키가 적용되어있지 않는 사례가 너무 많다 보니 이에 대한 궁금증이 생겼습니다. 대체 외래키 없는 관계형 데이터베이스는 왜 존재하는 것일까요? 주장 1. 외래키로 인한 성능 저하구글 검색창에 외래키만 검색해도 '외래키 안쓰는 이유', '외래 키 없이 개발' 등의 키워드가 뜨는 모습을 확인할 수 있습니다. 이는 꽤 많은 관계..

[Github] Git 기본 용어 및 명령어 모음

용어기본용어설명Repository프로젝트의 코드와 변경 이력을 저장하는 공간Working Directory실제로 파일을 수정하는 공간 (내 컴퓨터의 현재 프로젝트 상태)Staging Areagit add로 커밋하기 전에 변경 사항을 저장하는 공간Commit특정 시점의 변경 사항을 저장하는 것 (git commit -m "메시지")Branch독립적으로 작업할 수 있는 코드의 분기 (main, develop, feature/xxx 등)Merge다른 브랜치의 변경 사항을 현재 브랜치로 합치는 작업Rebase브랜치의 시작점을 다른 브랜치의 최신 커밋으로 변경하여 깔끔한 히스토리 유지Remote RepositoryGitHub, GitLab, Bitbucket 같은 서버에 저장된 레포지토리Local Reposito..

데브옵스/CI,CD 2025.02.18