일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- queue
- GraphQL
- MySQL
- OOP
- node.js
- 변수
- 인접행렬
- Spring
- TIL
- Deep Dive
- logger
- 코딩테스트
- LifeCycle
- dfs
- 탐욕법
- 인접리스트
- REST API
- nestjs
- bean
- java
- typescript
- 자료구조
- html
- 알고리즘
- winston
- JWT
- 프로그래머스
- Interceptor
- css
- javascript
- Today
- Total
목록전체 글 (227)
처음부터 차근차근
오늘 한 일 Node.js란 무엇인지 알아보는 내용 정리 동기/비동기 & Blocking/Non-Blocking Node.js란? Node.js가 베이스인 프레임워크를 사용하였지만, 정작 Node.js가 무엇인지 정리하지 않았습니다. 실제로 사용해보고 다시 공부하니, 내용이 머리속에 잘 박히는 느낌?! Node.js는 V8 Javascript engine에서 동작하는 Javascript 런타임 환경입니다. 항상 NestJS, Express를 사용하면서, Node.js의 장점을 모르고 백엔드 설계를 진행한 것 같았습니다. 이번 Node.js 정리를 통해 여러가지 장점을 알게 되었으며, Node.js에 어울리지 않는 웹서비스도 파악하였습니다. 또한, 이를 통해 다른 언어의 프레임워크 (Java의 Spri..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/tAHat/btsBFpJ4VmC/K5Uyv8nkgh5abhvtGUmot1/img.png)
Node.js를 공부하다보면, Node.js는 Non-Blocking이라는 장점을 가지고 있다고 나와있습니다. 또한 Blocking에 항상 같이 나오는 동기/비동기를 정확히 알아야 그 둘의 차이점을 알 수 있습니다. 사실 백엔드 공부를 하면서 비동기가 Non-Blocking인거 아니야?? 이렇게 생각할 수 있지만, 이것은 틀린 생각입니다. 동기/비동기 와 Blocking/Non-blocking 은 다른 것인가?? 사실 이 주제는 구글링을 좀만 해 보면 알 수 있습니다. 이 도표는 2006년 8월 말 IBM DeveloperWorks Library에 article로 게재된 글 Boost application performance using asynchronous I/O 에서 사용된 도표입니다. 이 도표는 ..
오늘 한 일 Node.js에 대한 개념 다시 정리 블로그 정리 기술 면접에 대한 회고 Node.js에 대한 개념 다시 정리 Node.js에 대한 개념을 다시 정리하였습니다. Node.js가 왜 기본적으로 Event-Driven 인지 확실하게 알고 갈 수 있었습니다. Javascript와 Node.js의 이벤트 루프가 조금 다르므로 이 부분은 다음에 정리할 예정입니다. 이번 정리를 통해서 모를때 공부하는 것과, 사용해보고 느낀점을 공부하는 것이 다르다는 것을 깨달았습니다. Node.js를 옛날에 공부했을 때는 Event-Driven이 뭔지.. 이벤트 루프가 뭔지도 모르고 사용했는데, 이제는 Node.js를 어떤 서비스에서 사용해야 하는지, 특징은 뭔지 확실하게 알고 갈 수 있었습니다. 블로그 이관 관련 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bwZbuM/btsBFJ9bL7Y/KplZYfBKo0zbYWYFj9EZ51/img.png)
Node.js를 통해 서버를 많이 구축하고 다양한 프레임워크를 사용했지만, 정작 Node.js의 특징의 장점, 단점에 대해 정확히 모르는 것 같아 한번 정리해야겠다는 생각이 들었습니다. Express, Nest.js는 Node.js를 기반으로 사용하고 있으니, 이를 한번 간단하게 정리해보겠습니다. Node.js란? 노드 공식 사이트에는 노드를 다음과 같이 설명하고 있습니다. Node.js® is an open-source, cross-platform JavaScript runtime environment. Node.js runs the V8 JavaScript engine, the core of Google Chrome, outside of the browser. Node.js는 오픈 소스이며, Cros..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/tXIII/btsBF0WGtpQ/AtjdcvQdHgVjPaTW28O2K0/img.png)
JWT에도 한계점은 있다? 쿠키와 서버의 단점을 보완해주는 JWT에서도 크나큰 단점이 존재합니다. 바로 토큰이 탈취당하면 만료될 때까지 대처가 불가능하다. 세션은 탈취당한다고 판단이 되었을 때 세션 저장소를 끊어서 탈취당한 세션 ID가 있더라도 세션 저장소에 그 값을 지워 탈취된 후의 상황을 보완할 수 있었습니다. 그러나 이건 서버에서 클라이언트의 상태를 저장하는 Stateful한 상황이고, 토큰은 Stateless 상태입니다. 즉, 토큰을 발급하면 관리는 클라이언트에서 하기 때문에, 탈취를 당했다고 서버에서 판단할 수가 없습니다.(탈취 당하면 답이 없는 상태) 만료시간을 짧게 가져가자 JWT는 발급한 후 서버에서 삭제가 불가능하기 때문에, 접근에 관여하는 토큰에 유효시간을 부여하는 식으로 탈취 문제에 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Gu5mp/btsBFFZmdfC/BuxDZ9xGKpAgdOCUiWrlF1/img.png)
JWT란? JWT(JSON Web Token)이란 인증에 필요한 정보들을 암호화시킨 JSON 토큰을 의미합니다. 그리고 JWT 기반 인증은 JWT 토큰을 HTTP 헤더에 실어 서버가 클라이언트 식별하는 방식을 의미합니다. JWT는 JSON 데이터를 Base64 URL-safe Encode를 통해 인코딩하여 직렬화한 것을 의미합니다. 사실 기본적으로 인증하는 방식은 일반 Token 방식과 크게 다르지 않습니다. 다만 이 토큰 내부에는 위변조 방지를 위해 개인키를 통한 전자서명도 들어가 있습니다. 따라서 사용자가 JWT를 서버로 전송하면 서버는 성명을 검증하는 과정을 거치게 되며, 완료되면 요청한 응답을 돌려줍니다. Base64 URL-safe Encode 는 일반적인 Base64 Encode 에서 URL ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/zM9I8/btsBB9T6qpc/EuKQQKtzVMTKoXLFAYX3Zk/img.png)
서버가 클라이언트 인증을 확인하는 방식으로는 대표적으로 쿠키, 세션 토큰 3가지 방식이 존재합니다. 이번 포스팅은 쿠키 세션, 토큰이을 만든 이유, 인증 방식에 대해서 알아보겠습니다. HTTP의 특징과 쿠키, 세션을 사용하는 이유 쿠키, 세션, 토큰 등을 사용해 클라이언트 인증을 확인하는 이유는, HTTP 프로토콜의 특성이자 약점인 Connectionless, stateless한 특성을 보완하는 이유입니다. 기본적으로 HTTP는 Connectionless와 stateless한 특성을 가지고 있습니다. Connectionless : 클라이언트가 요청을 한 후 응답을 받으면 그 연결을 끊어버리는 특징 헤더에 keep-alive라는 값을 줘서 Connection을 재활용하는데, HTTP 1.1에서는 이것이 D..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cJMsnJ/btsBC03maSm/Xa0weCN6P4avtiNWfVXyO0/img.png)
Database(DB) 데이터베이스는 전자적으로 저장되고 체계적인 데이터 모음입니다. 여기에는 단어, 숫자, 이미지, 비디오 및 파일을 포함한 모든 유형의 데이터가 포함될 수 있습니다. AWS 데이터베이스를 한 마디로 정의하자면 '데이터의 집합'이라고 할 수 있습니다. 간단한 예시로, 우리가 오늘 보내거나 받은 카톡 메세지, 버스/지하철에서 찍은 교통카드, 카페에서 구매한 아이스 아메리카노의 정보가 모두 데이터이며, 이는 데이터베이스에 기록됩니다. Database는 왜 필요한가?? 데이터를 저장하고 조회한다는 관점에서 보면, 간단히 우리가 파일들을 폴더에 저장하여 정리하고 파일을 검색해서 조회하는 데이터 저장소와 비슷해 보일 수 있습니다. (잘 정리되어 있는 외장하드 직박구리 폴더..?) 그러나, 데이터..
오늘 한 일 회사 기술면접 진행 Survey-test Refactoring 기업 면접 진행 기술 면접을 진행하였다. NestJS에 대한 질문뿐만 아니라 DB설계와 API 설계 시 확장성에 대한 질문을 많이 받았다. 또한 현재 내가 설계한 비즈니스 로직에 대해 어떤 문제점이 있는지도 한번 고민하게 되었다. 내가 설계한 DB에 대해서 확장성, 기능적인 문제에 대해 고려하여 설계하였는가?? Entity 설계 시 TypeORM의 강점 중 하나인 Array 타입을 적용 그러나 확장성, 기능적인 문제에 대한 고려 부분에서는 미숙한 점이 있었다. 1. 설문지 답안이 제출된 상태에서 어떠한 설문지 문항의 점수가 수정되었을 경우, 제출된 답안의 점수는 어떻게 수정할 수 있을까? 2. 현재 도메인은 Survey 하나인데..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bCxP1X/btsBlakYQwq/S948V1tEVuCRZxQu9MJZJK/img.png)
NestJS에서는 Custom Exception을 구현할 수 있습니다. Custom Exception을 구현하여 Production 환경에서는 물론 개발 환경에서도 더 쉽고 빠른 디버깅이 가능하도록 구현할 수 있습니다. 저는 Custom Exception을 구현하여 다음과 같은 기능을 구현했습니다. message가 아닌 errorCode를 구현하여 클라이언트에서 예외를 명확하게 구분할 수 있도록 수정 일반 예외처리(설문지 조사 실패, ID 로그인 실패 등)과 서버에서 발생한 치명적인 에러(ORM Error, Server 자체 에러)를 구분하고, 치명적인 에러의 경우 StatusCode를 500으로 일괄 처리하며, 서버 문제를 외부에 노출시키지 않도록 처리 Exception을 직접 구현하여 코드 레벨에서 ..