분류 전체보기 251

24/01/17 TIL __ CORS (Cross Origin Resource sharing)

오늘은 cors 에 대해 알아보았다. 종종 마주쳤던 애였는데, 문제가 되진 않아서 넘어간 경우가 있었는데, 오늘은 한번 알아보고자 찾아보았다. 🦊 cors cross origin resource sharing 이라는 말인데, 다른 출처의 리소스를 허용하는 정책이다. 이것이 나온 이유는 안전하게 통신하기 위해서 인데, 서로다른 어플리케이션이 마음껏 소통하는건 꽤 위험한 일이라 정보 탈취의 위험성이 높아진다. (sop의 예외조항중 하나이기도 하다.) url의 구성요소 중 sheme, host, port 이 3가지만 동일하면 출처가 서로 같다고 판단한다. 그리고 이 출처를 비교하는 로직은 브라우저에 있어서 따로 작성하지 않아도 cors 정책이 적용된다. (요청-브라우저 응답분석-cors 위반 안하면 응답, 아..

TIL 2024.01.18

24/01/16 TIL __ MVC패턴

아키텍쳐를 배우면서 언제나 보이고 들려왔던 MVC 에 대해 오늘은 다뤄보려고 한다. 🪺 MVC패턴 모델 뷰 컨트롤러로 나눈 소프트웨어 디자인 패턴을 말하며, 비지니스 로직과, 화면을 구분하는데 중점을 두고 있다. 모델은 데이터와 비지니스 로직을 관리하며, 뷰는 레이아웃 및 화면을 관리, 컨트롤러는 모델과 뷰로 명령을 전달하는 역할을 맡게 된다. 이걸 사용하는 이유는 역할 분리로 서로간의 결합도를 낮춰서 확장성을 높이고, 유지보수를 용이하게 하기 위함이다. 과정 사용자가 웹사이트에 접속 컨트롤러는 모델에게 페이지 보여달라고 요청 모델은 비지니스 로직으로 데이터를 꺼내서 결과를 내주고 그 결과는 view에 반영 및 출력한다. 여기서 컨트롤러는 모델과 뷰의 역할을 분리하는 중요한 요소이다. 또한 컨트롤러는 모..

TIL 2024.01.16

24/01/15 TIL __ 메세지 큐

대용량 트래픽을 다룰 때에 좋은 기술들에 대해 찾다가 메시지큐 에 대해 알아보게 되었다. 메시지 큐에 대해 알기 전에 먼저 메시지 지향 미들웨어와 큐에 대해 간략히 살펴보자. 🐾 메시지 지향 미들웨어 MOM 비동기 방식으로 프로세스간 데이터를 주고받기 위한 시스템을 말한다. 메시지를 전달하는 과정에서 보관이 가능하며, 데이터 변환 또한 가능하다. 🪴 Queue 메시지 큐에서의 큐는 메시지를 임시로 저장하는 공간을 말한다. 데이터를 순차적으로 처리해야 하는 상황에서 효율적으로 사용되는데 선입 선출의 원칙을 따르는 부분 때문일 듯 하다. 사실 queue는 자료구조 중 하나라고 한다. 🌵 메시지 큐 Quere 자료구조를 채택해서 메세지를 전달하는 시스템이며, 메시지 지향 미들웨어(MOM)을 구현한 시스템이다...

TIL 2024.01.15

24/01/14 TIL __ 커넥션 풀

대용량 트레픽 관련 필요한 기술들을 찾다보니 커넥션 풀 이라는 개념을 만났다. 커넥션 풀 네트워크와 데이터베이스 연결을 하는 것 자체가 비용이 든다. 커넥션 풀 없이 데이터베이스에 연결해서 요청을 처리하는 과정을 한번 생각해 보자 ----> 클라이언트가 연결요청을 보내면, 데이터베이스 서버에 연결요청을 한다. ----> 그럼 데이터베이스 서버는 새로운 연결을 생성하고, 클라이언트에게 할당한다. (이때 리소스, 비용 소모) ----> 클라이언트는 할당받은 연결을 이용해서 쿼리를 수행하고, 연결을 종료한다 ----> 연결 종료를 하면 연결은 완전히 해제가 되고, 다시 사용될 수 없다. 유저가 적다면 크게 상관이 없겠지만, 수많은 유저가 동시에 요청을 보낸다면, 엄청난 리소스와 비용이 소모될 것이다. 뿐만 아..

TIL 2024.01.14

24/01/13 TIL __ cache를 사용하기 위한 전략

최종프로젝트의 주제를 라이브 스트리밍 사이트로 생각하다 보니, 대용량 트래픽 관련된 부분을 계속 찾고있다. 많은 기술들이 있지만 오늘은 캐싱 전략에 대해 이야기 해보려 한다. 캐시에 대한 내용은 https://gabojok.tistory.com/262 24/01/04 TIL __ cache 어디선가 많이 들어본듯 한 cache에 대해 오늘은 정리해 보려고 한다. 이 cache는 db효율과 속도를 따져서 사용한다고 얼핏 알고 있었는데 좀더 제대로 알고싶어 찾아보았다. 캐시 cache 자주 사용되 gabojok.tistory.com 캐싱 전략 어떤 서비스를 위해 캐싱을 사용하는지 그 용도에 따라 다르게 전략을 잡으면 좋을것 같다. 왜 그런지 전략들을 하나씩 살펴보자. Cache Aside 캐시를 옆에 두고 ..

TIL 2024.01.13

24/01/12 TIL __ 이벤트 드리븐 아키텍쳐 (EDA)

실시간 스트리밍 서비스(실시간 채팅기능)을 기획하고 있어서 이와 관련된 기술들을 좀 찾아봤다. 오늘은 이벤트 드리븐에 대해 적어보려 한다. 이벤트 드리븐 아키텍쳐 🧐이게 왜 나왔을까?🧐 프로그램이 복잡해 지면서, 동시에 여러 프로그램을 실행하다 보니 이벤트가 몹시 다양하게 발생하게 되었다. 즉 흐름 예측이 힘들다. 따라서 동시에 수행되는 다른 프로그램들을 고려해서 개발을 진행하고자 운영체제가 알아서 처리해 주도록 만든 것!! 데이터 흐름의 실시간 감지나 분석하는데 적합한 구조로 알려져 있는데 이벤트가 발생하자 마자 시스템이 즉각 이를 알고 대응하도록 설계되어 있기 때문이다. 그래서 실시간 채팅과 실시간 라이브 스트리밍 서비스의 기획단계에서 찾아보게 되었다. 이벤트 드리븐 아키텍쳐에 대해 간단하게 말하기 ..

카테고리 없음 2024.01.12

24/01/11 TIL __ 트렐로 만들기 회고

팀프로젝트가 끝났다. 트렐로 와 같은 칸반보드를 만드는게 과제로 주어졌고, 금요일부터 목요일 오전 제출이니깐 6일정도 된거 같다. 프로젝트가 끝날때마다 항상 아쉬움이 남았지만 이번 팀프로젝트에서는 좀더 많은 아쉬움이 남았던거 같다. 이유를 생각해 봤는데 이 프로젝트를 통해 어떤걸 얻어가고 싶은지 명확하게 정하지 않아서 아쉬움이 발생한 것 같다. 명확하게 하지 않고, 마냥 주어진 과제를 따라가다 보면, 할게 많기때문에 선택과 집중이 필요한 짧은 기간의 프로젝트에서 흐지부지 될 수 있는것 같다. 언제나 그랬던것 처럼 최선을 다했지만, 시간은 제한적이기 때문에 선택과 집중이 매우 필요하다고 느꼈다. 카드 정렬 부분을 고민을 많이 했었는데 혼자 고민할게 아니다 보니(카드 뿐만 아니라 리스트도 이동을 해야했기 때..

TIL 2024.01.11

24/01/05 TIL __ nestjs에서 에러처리 HttpExceptionFilter

오늘은 nestjs에서 예외처리를 어떻게 해야할지 알아본걸 정리하려 한다. 스파르타에서 지급된 강의자료에 보면, throw new BadRequestException() 이렇게 처리하고 있는데, 이 경우 express 에서처럼 에러핸들링을 어떻게 해야할지 감이 안잡혔다. 일단 위와 같이 처리를 하게 되면 상태코드를 가지고 있어서 상태코드를 적지 않아도 되지만, 다른 에러들 까지 함께 처리해 줄 수 있도록 express의 미들웨어 같은걸 걸고싶었다. 방법이 있었는데 바로 HttpExceptionFilter이다. import { ArgumentsHost, Catch, ExceptionFilter } from '@nestjs/common'; import { Response } from 'express'; //..

TIL 2024.01.05

24/01/04 TIL __ cache

어디선가 많이 들어본듯 한 cache에 대해 오늘은 정리해 보려고 한다. 이 cache는 db효율과 속도를 따져서 사용한다고 얼핏 알고 있었는데 좀더 제대로 알고싶어 찾아보았다. 캐시 cache 자주 사용되는 데이터를 복사해 두는 임시 저장소이다. 왜 사용할까? 먼저 메모리와 cpu사이의 속도 차이가 너무 크다. 데이터의 비용이나 속도같은 성능 효율적인 측면을 생각해서 사용하며, 서버장애가 발생해도 서비스가 완전히 이용 불가 상태가 아니라, 일부 기능은 지원이 가능하다는 점 또한 매력적이다. 또 모든 데이터를 db에 요청하지 않다 보니 서버의 리소스도 효과적으로 활용이 가능하다. 언제 사용할까? 자주 사용되는 즉 반복적이고 동일한 (이미지 같이 정적 자원도 포함.) 동일한 결과를 돌려주는 경우, 데이터를..

TIL 2024.01.05

24/01/03 TIL __ nest js에서 passport (local)

express 환경에서 passport를 활용해서 local전략과, kakao전략을 사용한 경험이 있다. 그런데 nest 에서는 어떻게 사용해야 할까? nest에서는 약간 사용법이 다르다. 먼저 express에서 사용한 코드를 살펴보자 express에서 passport local import passport from 'passport'; import passportLocal from 'passport-local'; import bcrypt from 'bcrypt'; import jwt from 'jsonwebtoken'; import redis from 'redis'; const redisClient = redis.createClient(); redisClient.connect(); import { pr..

TIL 2024.01.03