전체 글 251

23/12/11 TIL __ TypeScript

타입스크립트에 대해 강의들은 내용을 정리해 보려고 한다. 타입스크립트 는 최종적으로 자바스크립트로 변환된다. 타입스크립트 는 언어이자 컴파일러이다. ts를 js로! 결과물 실행은 결국 js로 변환해서 실행해야만 한다. 타입검사는 해주지만 타입 에러가 난 상태로 컴파일 하면 그대로 컴파일이 된다. 타입스크립트 예시 기본 const a: number = 7; const b: string = "5"; const c: boolean = true; const d: undefined = undefined; const e: null = null; const f: any = true; //모든 타입이 다되는애. 근데 이거 쓰면 타입스크립트가 아니게 됨. 함수의 타입 지정 예시 //이런식으로 다양하게 타입 지정을 할 수..

TIL 2023.12.11

23/12/10 TIL __ AWS EC2 배포 (redis, 카카오 passport) 에러

🐣 상황 내 예상과는 다르게 많은 시간을 passport와 레디스에 사용했다. 배포를 빠르게 끝내고 강의를 들으려고 했는데, 배포에서 또 애를 먹었다. 카카오 로그인 기능작동이 되지 않았고, 배포후 pm2 startup을 통해 서버 재시작 설정을 한 뒤에 ec2 인스턴스 재부팅을 진행하게 되면 서버가 다운되면서 실행되지 않았다. 15분을 기다렸는데도!! 🚙 과정 우분투로 배포 후, pm2 startup을 했고, 잘 되는지 테스트 해보기 위해 ec2의 인스턴스를 재부팅 해봤다. 중지와 다르게 재부팅은 ip주소가 유지되기 때문에 나는 서버가 죽었다가 다시 살아날 것으로 기대하고 있었다. 그러나 그게 아니였다. 서버는 꺼졌고, 15분을 기다려도 돌아오지 않았다. pm2를 stop 후 delete 한 후에, p..

TIL 2023.12.11

23/12/09 TIL __ Redis 사용하기

🧐 상황 리프레쉬 토큰을 저장하는 곳으로 기존에 사용하던 aws rds 저장소에 prisma를 사용해 컬럼을 늘려서 사용했다. 그런데 단점은 만료시간이 되면 직접 처리를 해주지 않는 이상 삭제가 되지 않는다는 것이다. 이에 반해 레디스 라는 저장소는 만료시간이 되면 저절로 삭제가 된다고 한다. 토큰 저장소로 적합할 것 같아 공부해 보기로 했다. 🏞️ 과정 Redis에 대해 아는게 정말 단 1도 없었던 상태로 시작했는데, 찾아보니 정말 많은게 나왔다. 너무 많은 자료가 있었지만, 자료구조에 대한 공부가 부족했던 나는 해쉬를 제외한 대부분의 구조를 이해하지 못했다. 일단 지금까지 알게된 레디스에 대해 정리해 보자면, 인메모리 데이터베이스다. 자료를 찾는 속도가 매우 빠르다. 서버를 재시작 하게되면 데이터 유..

TIL 2023.12.10

23/12/08 TIL __ Passport kakao 카카오 전략 뽀개기

🫠 상황 passport local 전략에 이은 kakao를 시도해 보기로 했다. 지난번 팀과제에서 로그인기능 성공후, 이외에 토큰 처리가 많이 미숙했고, 탈퇴기능, 토큰 재발급 기능 등등이 처리가 안되었다. 또한 배포부분에서 이슈가 있었어서 정말 아쉬웠는데 이번에 다시 제대로 해보기로 했다. 🏞️ 과정 passport kakao 전략을 사용해서 로그인을 구현했기 때문에, 이번에는 탈퇴기능과, 토큰 부분을 위주로 다뤄보겠다. 로그인 연결하는건 카카오 디벨로퍼에 들어가서 앱 만들고, 설정을 해주면 된다. 디벨로퍼 사이트에 작성해둔 경로로 코드에서 요청을 하게 되면, 카카오 로그인 화면이 뜨게 되는데, 여기서 주의점은 callback url을 localhost부터 작성해야 한다. 나의 경우 env 에 환경변..

TIL 2023.12.09

23/12/07 TIL __ Passport 로컬

🐣 상황 주어진 과제를 빠르게 끝내고, 그동안 하고싶었던 것들을 해보기로 했다. 그중 가장 1순위가 passport를 활용한 인증, 인가 및 배포 였다. 아무래도 지난번 팀과제때 제대로 끝내지 못한게 좀 많이 아쉬웠기 때문에 이번에는 제대로 해보고 싶었다. 🤠 과정 이번에는 차분히 passport의 사용법을 다시 읽기 시작했다. 어떤식으로 진행되는지 이해가 가기 시작했는데 그부분을 살짝 살펴보면 아래와 같이 진행된다. 전체적인 플로우는 이렇고, 군데군데 콘솔을 찍어보며 확인하니 더 눈에 잘 들어왔다. deserializeUser 먼저 한번 거친 뒤에 new LocalStrategy 파일이 찍혔었는데, 확인차 훑고 지나간다고 추측하고 있다. passport 로컬전략은 카카오와 다르게 accessToken ..

TIL 2023.12.08

23/12/06 TIL __ 세션 저장 후 출력 undefined

🐣 상황 세션에 대한 개념이 헷갈려서 다시 테스트 하던 도중 오류를 만났다. req.session.name = '빌리' 로 해서 저장까지는 성공 했는데, 다른 경로에서 console.log(req.session )을 호출해 보니 안에 name이 없었다. 🫠 문제 __ 세션에 저장한 값을 왜 못불러 오는가? // '/nana' 경로로 저장 후, '/gaga'경로로 요청시 req.session을 출력해 봤다. 세션 Session { cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true, secure: true } } //저장했던 키밸류가 보이지 않는다. 이유를 알지 못해 한참을 뒤적였는데, 그 경험을 공유해 보려 한다. 🚍 해결 ..

TIL 2023.12.06

23/12/05 TIL __ 유클리드 호제법

알고리즘을 풀다가 최대공약수, 최소공배수 문제를 만낫다. 레벨 1 문제였지만 시간이 꽤 걸렸다. 사실 간단한 수학적 원리를 알고있었다면 좀더 효율적으로 풀었을 것 같다. 문제 설명 두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다. 제한 사항 두 수는 1이상 1000000이하의 자연수입니다. 입출력 예 n m (3, 12) return[3, 12] n m(2, 5) return[1, 10] 입출력 예 #2자연수 2와 5의 최대공약수는 1, 최소공배수는..

TIL 2023.12.05

23/12/04 TIL __ 테스트 코드(Jest)

해야할 일은?__ > 단위테스트코드 작성 __> 테스트에 대응하는 실제코드 작성. 단위테스트 (Unit 테스트) 개발자가 개발한 코드 단위. 소스 코드의 개별 단위를 테스트 해서 사용할 준비가 되었는지 확인하는 거임. 개발 라이프 사이클의 초기단계에 버그 식별이 가능. 메소드를 테스트 하는 다른 메소드임. 독립적이여야 함. 어떤 테스트도 다른 테스트에 의존하면 안됨. 격리되어야 함. 테스트 대상이 의존하는 것을 다른것으로 대체해야 한다. 종속성이 있는 다른 클래스들에서 버그 나는거 방지. a 프로그램 이상이 생겨서 수정. 그런데 그 안에 있는 aaa 클래스를 수정한거임? a 프로그램과 b 프로그램 모두에서 쓰이는 aaa 클래스를 수정해버려서 b도 이상이 생김. 그런 상황 방지를 위해 unit테스트 Jes..

TIL 2023.12.04

23/12/03 TIL __ 3계층 아키텍쳐

🐣 상황 3계층 아키텍쳐.. 말만 들어왔는데, 드디어 이부분에 대해 알게되어 정리한다. 🤍 3계층 아키텍쳐 1. mvc 패턴 2. 클린 아키텍쳐 패턴 3. 마이크로 서비스 아키텍쳐 패턴 4. 계층형 아키텍쳐 패턴 일단 이정도로 간략히 살펴보고, 그중에서 계층형 아키텍쳐 패턴에 대해 자세히 알아보자. 🚍 MVC 패턴 소프트웨어 디자인 패턴 중 하나 모델: 데이터베이스와 비지니스 로직 뷰 : 사용자 인터페이스 UI 담당 컨트롤러 : 클라이언트의 요청을 모델과 뷰로 전달해 주는 역할. 컨트롤러는 사용자의 요청을 해석하고 그에 따른 행동을 결정하는 역할을 수행 컨트롤러는 모델과 뷰 사이 중간 매개체 역할 예전에 프론트와 백이 하나의 파일에서 관리되던 때 나옴. 백엔드 아키택쳐 이긴 하지만 백만 있는거 아님. 📷..

TIL 2023.12.03

23/12/02 TIL __ 트랜잭션 3. 격리 수준과 프리즈마에서의 사용.

오늘은 트랜젝션의 격리 수준 및 프리즈마에서 사용법을 알아보겠다. 🏞️ 트랜잭션의 격리 수준 _ Isolation Level 여러 트랜젝션이 동시에 처리될 때 다른 트랜젝션에서 변경 및 조회하는 데이터를 읽을 수 있도록 허용/거부 를 결정하기 위해 사용. 즉 데이터의 일관성과 동시성 처리 성능 사이에 균형을 잡는것. READ UNCOMMITTED 커밋되지 않은 읽기를 허용함. 다른 트랜잭션에 의해 작업중인 데이터를 읽게 되는 것을 말한다.. 가장 낮은수준의 격리. 락을 걸지 않아 동시성은 높으나 데이터 일관성이 쉽게 깨질수 있음. 의도치 않은 데이터를 참조하게 되어 데이터의 일관성이 깨지게 되는 상황이 발생하게 된다. READ COMMITED 커밋된 읽기만 허용 select문 실행시 공유락 건다. 다른 ..

TIL 2023.12.02