일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
- 코딩테스트
- 189-Awaited
- TypeScript
- 타입챌린지 Readonly2
- 스터디 회고
- network
- Conditional Types
- Type Challenge
- type challenge omit
- 백엔드
- 타입챌린지
- 타입 챌린지 IndexOf
- 해커톤
- nestjs
- HTTP
- Mappilogue
- node.js
- TypeScript 타입챌린지
- Array.prototype.push
- typeorm
- 맵필로그
- 와글와글 해커톤
- 타입 챌린지 Deep Readonly
- 와글와글
- 노드 교과서 개정2판
- 타입스크립트
- 월간cs
- 타입 챌린지
- npm
- 이펙티브 타입스크립트
- Today
- Total
목록전체 글 (50)
iamkanguk.dev
이제 express가 아니라 NestJS를 하면서 자연스럽게 TS와 친해지려고 노력하고 있다. 최근에 Nest로 프로젝트를 하면서 tsconfig.json 파일을 만질 때가 있었는데, 정확히 이 파일이 어떤 역할을 하는지 모르고 사용을 했던 것 같다. 그리고 프로젝트를 하는 도중에 내가 작성한 소스를 한번 쭉 그냥 보고 있었는데 최대한 any 타입을 지양하고 각종 메서드나 변수 등에 타입을 꼭 달아주었다. 그런데도 몇 군데 빼먹은 곳이 있었는데 생각해보니까 얼핏 이런걸 에러로 보여주는 기능이 있는데? 라고 알고 있었는데 적용이 안되어서 내가 실수한 부분이 몇 군데 있구나 싶었다. 보니까 strict 모드가 활성화 되어있지 않은 것. 그래서 이번 포스팅에서는 strict mode를 어떻게 활성화 했는지 (..
개인적으로는.. 알고리즘 문제 푼 걸 블로그에 올려두지는 않는 편이다. 하지만 특정 코딩테스트를 준비할 때마다 짧고 굵게 공부를 하는 편인데 문제를 풀면서 새로 알게된 지식들이나 어려웠던 문제는 조금조금씩 기록을 해두려고 한다. 문제링크 https://www.acmicpc.net/problem/1527 1527번: 금민수의 개수 첫째 줄에 A와 B가 주어진다. A는 1보다 크거나 같고, 1,000,000,000보다 작거나 같은 자연수이다. B는 A보다 크거나 같고, 1,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 풀이 from itertools import product a, b = map(str, input().split(' ')) la, lb = len(a), len..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bqggUX/btsDBboqBkZ/GfrTtsI6nWvVKkZ2VKpoEk/img.png)
필자는 맵필로그라는 프로젝트에서 사용자 인증에서 JWT 토큰을 사용하기로 결정했다. 하지만 단순히 Access Token만 사용하는 것이 아닌 Refresh Token 사용을 도입을 하기로 결정했다. 각 개발자분들 마다 어떤식으로 구현을 하는지 각각 다르기 때문에 인터넷에서도 각기 다른 자료들을 볼 수 있다. 그래서 필자는 이번 포스팅에서는 해당 프로젝트에서 JWT를 왜 도입했는지, 어떤식으로 Access Token과 Refresh Token 전략을 사용했는지에 대해서 정리를 해보려고 한다. 그리고 지금부터 Access Token은 AT로, Refresh Token은 RT로 표기하는 점 참고해주세요! 또한, 이 포스팅에서는 JWT의 자세한 개념에 대해서는 언급을 하지 않을 예정이니 다른 포스팅으로 한번 ..
문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/60058 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 def isRight(p): # 문자열 p가 올바른 괄호 문자열인지 확인하는 함수 stack = [] for i in p: if i == '(': stack.append(i) else: if not stack: return False stack.pop() return True if not stack else False def splitToUAndV(p): # 문자열 p를 u와 v로..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dQHrk9/btsDfM3sL7r/eUg1PsG2PKJafAIv0efcLk/img.png)
해당 포스팅은 김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 토대로 작성된 글입니다. 인증 Authorization (요청) - 클라이언트 인증 정보를 서버에 전달할 때 사용한다. - value 값은 인증 방식에 따라 다양하다. 우리가 흔히 아는 Bearer도 이에 해당한다. WWW-Authenticate (응답) - 리소스 접근 시 필요한 인증 방법을 정의 - 401 Unauthorized 응답과 함께 사용한다. 쿠키 (Cookie) - 로그인하지 않은 사용자가 서버에 /welcome을 요청하게 되면 서버는 ~손님을 응답한다. - 사용자가 id, password 정보를 담아서 서버에 /login을 POST로 요청하면 서버에서는 로그인 성공 응답을 할 것이다. - 그리고 사용자가 로그인을 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Zrv1N/btsC8TbEpFP/1zXk2jCiEBRZyFMFWziUwK/img.png)
해당 포스팅은 김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 토대로 작성된 글입니다. HTTP Header 개요 (1) HTTP Header - header-field = field-name ":" OWS field-value OWS (OWS는 띄어쓰기 허용을 의미한다) - field-name은 대소문자를 구분하지 않는다. 하지만 value는 구분한다. (2) HTTP 헤더의 용도 - 기본적으로 HTTP 전송에 필요한 모든 부가정보를 담는다. - 예를 들어 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 캐시관리 정보 등이 있다. - 그리고 우리는 필요시 임의의 헤더를 추가할 수 있다. (key-value) (3) HTTP Header 추가 정보 위의 사진은 RFC2616 기준인 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/rRneK/btsCSCVAuOG/VNFz17STtMGQWtqE2rE6q1/img.png)
해당 포스팅은 김영한님의 모든 개발자를 위한 HTTP 웹 지식 강의를 토대로 작성된 글입니다. HTTP 상태코드 소개 상태코드는 클라이언트가 보낸 요청의 처리 상태를 응답에서 번호로 알려주는 것이다. 크게 5개의 상태코드가 있다. - 1XX (Informational): 요청이 수신되어 처리중 (거의 사용하지 않기 때문에 생략한다) - 2XX (Successful): 요청이 정상처리 되었음 - 3XX (Redirection): 요청을 완료하려면 추가적인 행동이 필요하다 - 4XX (Client Error): 클라이언트 오류. 잘못된 문법 등으로 서버가 요청을 수행할 수 없음 - 5XX (Server Error): 서버 오류. 서버가 정상 요청을 처리하지 못함 앞으로 시간이 흐르면서 새로운 상태코드가 나올..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/embE9s/btsCP456DGw/1fxTSEuVpJJ6Q5vXVO1IBk/tfile.avif)
이번에 처음으로 회고록을 써보려고 한다. 나 스스로 성장을 하는거에 집중을 해야겠다고 생각이 들어서? 쓰게 된 것 같다. 처음 써보는 회고록이니... 아직은 직접 글쓰는 솜씨가 부족하다고 많이 생각들어서 다른 블로그에 많이 보이는 연말정산 문답 형식을 조금 사용해보려고 한다. 여기서 그냥 내가 마음에 드는 질문들만 뽑아서 쓰고, 마지막에는 간단~하게 정리하는 회고글을 쓰려고 한다. https://blog.naver.com/hgmkjy/222964960826
프로젝트를 진행하면서 S3에 업로드 되어있던 이미지를 삭제하는 기능을 구현해야 했었다. 기능을 구현하고 테스트하는데 이유 불문의 이슈가 계속해서 발생하고 있었다. 참고로 AWS에 권한 설정은 전부 되어있던 상황이었고, 퍼블릭 엑세스도 허용되어 있는 상황이었다. 이슈는 간단하게 한마디로 정리하자면 이미지를 삭제하려고 하면 403 Access Denied 에러가 계속해서 발생하고 있었다. 진짜 어디가 잘못된지 이해가 안되어서 하루동안 계속 삽질을 했던 것 같다. 기분 좋은 크리스마스 이브에.....!!!!!!!! 어쨌든 지금부터 어떻게 이 이슈를 해결했는지 설명하려고 한다. ENV 파일 노출 최근에 DND 10기 지원 + 이력서 작성을 위해 지금까지 작업했던 프로젝트를 정리하고 있는데 GitHub Repo를..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cnS4Ha/btsCk5JPl0g/Bp7COBAEIi44ytrZo1ga9k/img.png)
보통 많이 사용하는 createQueryBuilder에서 getRawMany 메서드와 getMany 메서드가 있다는 것을 Nest 개발자 분들은 알고 계실 것이다. skip과 take는 pagination 작업을 처리할 때 주로 적용하는 option이다. 하지만 skip과 take는 getRawMany에서 적용되지 않는다고 한다. TypeORM의 createQueryBuilder에서 getRawMany 메서드는 Raw Data를 반환하는데 이 때 limit와 offset을 적용시켜주어야 한다고 한다. 필자는 skip과 take이 문제가 있을지 전혀 상상하지 못하고 코드 레벨에서 실수가 있었는지 계속 봐서 시간이 많이 소요되었는데 다른 분들은 이 포스팅을 보면서 삽질을 안하셨으면 좋겠다는 생각이 든다! 좋..