일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- html
- dfs
- 프로그래머스
- OOP
- Deep Dive
- 알고리즘
- css
- JWT
- javascript
- java
- Linux
- GraphQL
- 코딩테스트
- LifeCycle
- bean
- REST API
- 인접행렬
- typescript
- 인접리스트
- nestjs
- winston
- TIL
- Kubernetes
- Interceptor
- 탐욕법
- Spring
- node.js
- puppeteer
- MySQL
- 자료구조
- Today
- Total
목록전체 글 (241)
처음부터 차근차근
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/drM5JV/btsBSaGsD7z/f25sjF4DhTCwIT4OIuNLsK/img.png)
Java란? 자바는 썬 마이크로시스템즈의 제임스 고슬링과 다른 연구원들이 개발한 객체 지향적 프로그래밍 언어이다. 1991년 Green Project라는 이름으로 시작해 1995년에 발표되었습니다. 처음에는 가전제품 내에 탑재해 동작하는 프로그램을 개발하기 위해 C++을 확장해서 사용하려 했지만, 그들의 목적을 이루기에는 부족했습니다. 그래서 C++의 장점을 도입하고 단점을 보완한 새로운 언어를 개발했습니다. 이 프로젝트 초기에는 가전제품이나 PDA와 같은 소형기기에 사용될 목적이였으나, 여러 종류의 운영체제를 사용하는 컴퓨터들이 통신하는 인터넷이 등장하자 운영체제에 독립적인 자바가 적합해졌으며, 현재는 웹 애플리케이션 분야에 가장 많이 사용되는 언어 중 하나입니다. Java의 특징 1. 운영체제에 독립..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cbtaJy/btsBUccLfoc/ZLN4wJueRMs7zPQbjzCUhk/img.png)
CSS 선택자의 종류 1. HTML 요소 선택자 (타입 선택자) CSS를 적용할 대상으로 HTML 요소의 이름을 직접 사용하여 선택할 수 있습니다. 특정 태그에만 적용하고 싶을 때 사용되며, 특정 태그 전체에 적용됩니다. /* p 태그에 style 적용시키기 */ p { color: blueviolet; margin: 0; } 2. id 선택자 id 선택자는 CSS에 적용할 대상으로 특정 요소를 선택할 때 사용합니다. #을 사용해서 구분합니다. id 선택자는 고유하게 적용하기 때문에, 한번만 적용하는 것이 원칙입니다. (여러 요소에 같은 아이디 이름을 사용해도 문제없이 동작하나, 중복된 아이디를 가지고 자바스크립트 작업을 하게 되면 오류가 발생하기 때문에 id는 한번만 적용하는 것이 좋습니다.) #con..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/beZ9mz/btsBRRNDibo/oYyCO2xcaYNd6Pv2YXZpuK/img.png)
CSS(Cascading Style Sheet)란? CSS는 사용자에게 문서를 표시하는 방법을 지정하는 언어입니다. 기본적으로 HTML은 마크업 언어로서, 구조화 된 문서 파일입니다. 콘텐츠의 구조를 정의하는 뼈대만 만들고, 그 안에 있는 내용을 보여주고 있지만, HTML만 사용한다면 굉장히 밋밋합니다. CSS를 통해 HTML 문서를 이쁘게 만들 수 있습니다. CSS는 HTML이나 XML같은 구조화 된 문서(Document)를 화면, 종이 등에 어떻게 렌더링할 것인지를 정의하기 위한 언어입니다. 즉, HTML의 각 요소(Element)의 style(design, layout 등)을 정의하여 화면(Screen) 등에 어떻게 렌더링하면 되는지 브라우저에 설명하는 언어입니다. 아래와 같이 글자 색을 바꾸고 싶..
오늘 한 일 코딩 과제 진행 중 Map을 활용한 성능 개선 Cache를 활용하여 Rate Limit 구현 Map을 활용한 성능 개선 Javascript Data Type 중 하나인 Map을 이용한 성능 개선 진행 Map은 Key-Value 형태로 이루어진 자료구조이다. Map의 특징 중 하나는, 해시 테이블 알고리즘을 통해 구현한다는 점이다. Javascript의 데이터 타입 중 하나인 Map을 활용하여 성능 개선을 진행했습니다. 코딩 과제의 목표는 크롤링한 데이터의 상품 카테고리 매칭 혹은 단어 치환입니다. 카테고리 혹은 단어 치환 List를 Map을 통해 성능 개선하였는데, 이때 Map은 해시 테이블 알고리즘으로 구현되어 있어서 어떤 데이터를 참조할 경우 시간복잡도가 O(1)이라는 것입니다. //..
오늘 한 일 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.fwebp.q85/?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.fwebp.q85/?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.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/tXIII/btsBF0WGtpQ/AtjdcvQdHgVjPaTW28O2K0/img.png)
JWT에도 한계점은 있다? 쿠키와 서버의 단점을 보완해주는 JWT에서도 크나큰 단점이 존재합니다. 바로 토큰이 탈취당하면 만료될 때까지 대처가 불가능하다. 세션은 탈취당한다고 판단이 되었을 때 세션 저장소를 끊어서 탈취당한 세션 ID가 있더라도 세션 저장소에 그 값을 지워 탈취된 후의 상황을 보완할 수 있었습니다. 그러나 이건 서버에서 클라이언트의 상태를 저장하는 Stateful한 상황이고, 토큰은 Stateless 상태입니다. 즉, 토큰을 발급하면 관리는 클라이언트에서 하기 때문에, 탈취를 당했다고 서버에서 판단할 수가 없습니다.(탈취 당하면 답이 없는 상태) 만료시간을 짧게 가져가자 JWT는 발급한 후 서버에서 삭제가 불가능하기 때문에, 접근에 관여하는 토큰에 유효시간을 부여하는 식으로 탈취 문제에 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?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 ..