본문 바로가기

분류 전체보기

(37)
[자료구조] Heap이란? 오늘은 Heap 이라는 자료구조에 대해 알아보자 Heap이란? 힙이란 완전 이진트리의 일종으로 반정렬 상태에 있다! 우선순위가 높은 노드가 위쪽에 있는 형태이고 이를 통해 최대값과 최소값을 빠르게 찾아낼 수 있도록 설계된 구조이다 그러면 Heap은 어디에 쓰이는가? 바로 우선순위 큐를 구현할 때 쓰인다. 사실상 힙이라는 구조는 우선순위 큐를 위해 존재한다고 봐도 무방하다! 우선순위 큐 구현에도 여러가지 방법(Array,LinkedList,Heap)이 존재하는데 Heap으로 구현하는 것이 가장 효율적이기 때문에 보통 우선순위큐는 heap으로 구현되어있다. 힙은 어떤 종류가 있을까? 힙은 최대힙과 최소힙 두가지 종류가 있다. 그림으로 보면 왼쪽이 최대힙으로 큰 값이 우선순위가 높아 제일 위에 있다. 오른쪽은..
[자료구조] Stack과 Queue 오늘은 선형 자료구조인 Stack과 Queue에 대해 알아보자 Stack 이란? 입력과 출력이 한 곳으로만 이루어지는 자료구조의 형태이다. LIFO정책을 따르고 있다.(Last In First Out) 따라서 나중에 들어온 것이 먼저 나간다. 뷔페의 접시가 쌓여있는 것을 생각하면 쉽다!! 그렇다면 Stack은 언제 사용될까? 1. 함수의 콜스택에 사용된다. 2. 문자열을 역순 출력할때에도 하나하나씩 넣고 빼면 역순으로 출력된다. 3. 후위 표기법을 연산할때 ex) 234*+ = 14 5. 브라우저 방문기록 6. 실행 취소(undo) Stack은 배열과 달리 index로 접근할 수 없다. 또한 삽입과 삭제는 O(1)의 시간 복잡도 이다.(값을 넣고 빼기만 하면 되므로) 하지만 탐색시에는 O(n)이 걸린다...
[자료구조] Array와 List CS스터디를 시작하면서 한동안 못썼던 블로그를 자주 써볼려고 합니다!! 예전 개발자들이 개발을 시작하면서 데이터를 다룰때 하나의 데이터만 다루는 것은 아니겠죠? 여러가지 데이터가 모인 집합을 형성하게 되는데 먼저 Array라는 녀석부터 살펴봅시다. Array란? 순차적으로 데이터를 저장하는 형태로 물리적주소도 순차적으로 저장된다.(크기를 미리 지정해줘야 한다.) index라는 것이 존재해 빠르게 값을 찾아낼때 유용하다.(원하는 데이터 한번에 접근가능O(1)) 하지만 삽입과 삭제에는 취약하다. (해당 위치에 접근하고O(1), shift O(n)해주는 작업까지 걸려 O(n)이 걸린다.) 예를 들어 중간녀석을 삭제하려면 배열의 연속성이 깨져 이후 뒤에것들을 모두 앞으로 땡겨줘야 한다. 그렇다면 어떻게 저런 시..
[수료 회고] 네이버 부스트캠프 웹풀스택 6기 회고 지난 7월에 네이버 부스트캠프 챌린지에 붙은 소식이 엊그제 같은데 벌써 멤버십과정을 지나 수료를 하게 되었네요..! 저에게 있어서 2021년 하반기는 그야말로 순삭이었어요 4주간의 챌린지를 거쳐 멤버십에 오게된 것만 해도 신기한데 이렇게 프로젝트를 마치고 수료까지 할줄이야..! 지금부터 5개월간의 부스트캠프과정을 간단하게 회고해보려고 합니다. 먼저 지난 5개월동안 가장 많이 배웠던 건 뭐냐!! 바로 스스로 학습하는 방법과 새로운 것을 두려워하지 않는 마음가짐이 제일 크다고 생각해요 부스트캠프를 경험하기 이전에는 이렇게 어려운걸 어떻게 하지? 라는 마음으로 시도조차 안해봤다면 이제는 이거 인터넷 찾아보고 공부해보면 할수있어!! 라는 자신감이 생겼어요 부스트캠프 특성상 물고기를 주는 것이 아닌 물고기 잡는법..
[Docker] Docker란? 오늘은 Docker에 대해 알아보겠습니다. 보통 웹개발을 하게 되면 아래와 같이 OS 위에 웹 서버,데이터베이스 등을 올려놓는 방식으로 개발 환경을 설정한다. 다들 개발 환경 설정할 때 삽질 했던 경험이 많지 않나요? 왜 안 되는지 모르겠고, 또 왜 되는지 모르는!! 생각만 해도 머리가 지끈 거리네요! 또 개발 환경 설정을 성공했다고 해도 다음에 비슷한 개발 환경이 필요하게 되면? 보통은 삽질을 기억하지 못하고 다시 삽질을 반복하게 되죠.. 악순환의 연속..! 이럴때 다음과 같은 생각이 떠오른다. 전문가가 나 대신 해줬으면 좋겠다.. 하지만 우리집에 와서 키보드를 두드려 주지 않는 이상 불가능 하다.. 또 아래와 같이 나의 앱과 웹 서버, 데이테베이스를 각각 다른 OS에서 설치해 관리하고 싶다! 하지만 ..
[Express] pm2로 로컬에서 배포하기 express를 사용해 서버를 돌릴때 나는 nodemon을 자주 이용했었다. 하지만 pm2라는 것을 알고 난 뒤 이것만 쓰게 되었다!! 그렇다면 pm2는 뭘까? Process Manager의 약어로 Node.js의 프로세스를 관리해주는 역할을 하는 녀석이다. 쉽게 말해 프로세스들이 계속 실행될 수 있는 환경을 제공해준다!! 또한 예외가 발생해 스레드가 죽었을때 어플리케이션도 같이 죽는 것을 방지해준다. 프로세스 매니저라는 이름에 맞게 관리자의 역할을 톡톡히 한다. 지금부터 pm2를 이용해 로컬에서 ncloud로 배포하는 과정을 설명할 것이다. https://pm2.keymetrics.io/docs/usage/deployment/ PM2 - Deployment Advanced process manager ..
[Git] commit 쪼개기 commit은 잘게 쪼갤수록 좋다!! 라는 말을 알고계신가요? 하지만 실제로 구현을 할때 코드를 적고 commit을 하고 또 코드를 적고 이러기 쉽지 않습니다. 흐름이 끊기는 느낌이랄까?ㅜㅜ 그래서 저도 지금까지 한개의 커밋안에 여러가지 내용이 들어가 있었는데요. 최근에 이미 저장된 커밋을 여러개의 커밋으로 나누는 방법을 알게 되었습니다!! commit 통째로 하기 일단 커밋을 통쨰로 여러개 만들어 보겠습니다. $ echo first > first.txt $ git add . $ git commit -m"first commit" $ echo second > second.txt $ git add . $ git commit -m"second commit" $ echo third > third.txt $ ec..
[Express, nodejs] SPA에서 socket.io로 채팅 구현하기 프로젝트를 진행하면서 SPA로 웹페이지를 만들고 그 안에 채팅기능을 넣는 경험을 해보았다. 저번 Websocket vs socket.io의 비교에 이어서 오늘은 구현을 짧게 정리해보려고 한다. * 백엔드와 프론트 부분으로 나누어서 코드를 설명할 예정이다. 먼저 백엔드부분 express-generator를 사용하면 자동으로 폴더 구조가 만들어질 것이다. 그중에서 실행되는 파일인 bin/www파일에 socket.io를 연결해 줄 것이다. /bin/www let server = http.createServer(app); 이렇게 www파일 내부를 보면 서버를 만들어 주는 부분이 있을것이다. 만들어진 서버를 socket.io에 연결해 사용할 것이다. let io = require('socket.io')(serve..

반응형