본문 바로가기

전체

(94)
Development/JavaScript JavaScript를 공부하기 전에 알고 있으면 좋은 내용 정리 '역사는 미래를 비추는 거울'이라는 말이 있지 않은가? 따라서, JavaScript를 제대로 공부하기 전에 JavaScript의 탄생 배경, 역사와 일화 등을 간략히 정리해보았다. 이를 통해 앞으로 어떠한 방향으로 웹 개발을 공부해야 하는지 파악하기 위한 정보가 되었으면 한다. 최초의 UI 기반 웹 브라우저 Mosaic의 등장 1993년, 최초로 UI요소가 더해진 Mosaic Web Browser가 등장하였다. Mosaic Web Browser의 개발팀을 이끌던 Marc Andreessen은 대학교 졸업과 동시에 Netscape를 설립하였고, Mosaic Web Browser 보다 다양한 UI 요소가 더해진 NetScape Navigator라는 웹 브라우저를 시장에 내놓았다. 이 당시 모든..
Algorithm/개념정리 탐색 알고리즘(Search Algorithm)의 이진 탐색(Binary Search) 개념 정리 이진 탐색 탐색 알고리즘에는 크게 순차(Linear) 탐색과 이진 탐색(Binary Search)으로 구분된다. 순차 탐색은 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 확인하는 방법이고, 이진 탐색은 정렬되어 있는 리스트에서 시작점, 끝점, 중간점으로 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법이다. 예시 이미 정렬된 10개의 데이터 중에서 이진 탐색을 통해 값이 4인 원소를 찾는 과정을 살펴보자. [ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18 ]탐색 과정 Step 1 시작점: arr[0], 끝점: arr[9], 중간점: arr[4] (소수점 이하 제거) * * * [ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18 ]찾고자 하는 값(4)이 중간점의 값(8..
Algorithm/개념정리 정렬 알고리즘(Sort Algorithm)의 퀵 정렬(Quick Sort) 개념 정리 들어가며 파이썬을 사용하는 경우 정렬해야 하는 상황에서 sort()를 사용하여 내부적인 정렬을 해주거나, sorted()를 사용하여 정렬된 새로운 값을 받도록 하는 경우가 많다. def use_sort(arr: List) -> List: arr.sort() return arr def use_sorted(arr: List) -> List: return sorted(arr) 이러한 정렬 함수가 내부적으로 어떻게 동작하는지 알기 위해서는 적어도 퀵 정렬 또는 병합 정렬 정도는 알고 있어야 한다고 한다. 따라서, 이번에는 퀵 정렬에 대해서 공부한 내용을 정리해보겠다. 퀵 정렬 퀵 정렬(Quick Sort)에서는 중심점(pivot)과 파티션(partition)이라는 개념이 존재하며, 이는 퀵 정렬의 동작 원리이기..
Development/회고록 항해99 Chapter #2 - 3주차(자료구조 - 그래프, DFS, BFS 그래프 탐색) 정리 들어가며 벌써 알고리즘 2주차가 지났다. 그래프, 특히 DFS를 다루면서 러닝커브가 급격히 상승한 느낌 탓에 좌절을 맞보기도 했지만 LeetCode 기준 Easy ~ Medium 난이도의 문제는 풀 수 있는 수준으로 개념이 잡힌듯 하다. 이번 회고록에서는 그래프와 그래프 탐색 기법인 DFS, BFS에 대해서 간략하게 정리하고, 추후 더 보완해야 할 부분에 대해서 정리하도록 하겠다. 저번주까지만 하더라도 내가 푼 문제를 바로 정리해서 블로그에 업로드 하곤 했는데, 이번주는 문서화하는 과정이 정말 어렵게 느껴졌다. 그 이유 중 하나로는 재귀함수의 추상적인 특징 때문인 것 같다. 문제 하나를 설명하기 위해서는 여러 장의 그림이 필요한데, 짧은 시간에 여러 개념을 접한 탓에 쫒기듯이 문제를 풀다보니 스스로 정리..
Development/Web Nest JS #3 - PostgresSQL에서의 TypeORM(Entity, Repository) 생성 들어가며 이전까지는 Nest JS의 기능을 알아보는데 더 중점을 두기 위해 로컬 메모리 방식의 데이터베이스를 사용하였다. 지금부터는 애플리케이션에 실제 데이터베이스를 연결하고, TypeORM, Entity, Repository에 대해서 정리해보겠다. PostgresSQL 설치 PostgresSQL은 객체-관계형 데이터베이스 시스템으로 전 세계 사용자가 4번째(OracleDB, MySQL, MsSQL, PostgresSQL)로 많은 RDBMS이다. 이는 MySQL에 비해 SQL 표준을 더 많이 지워하며, 쿼리가 복잡할수록 성능면적으로 더 우수하다는 특징이 있다. 영상에서는 로컬에 PostgresSQL을 설치했지만, 나는 Docker Container 환경에서 PostgresSQL을 실행해주었고, DBeav..
Development/Web Nest JS #2 - 로컬 메모리를 사용한 DB 로직 구현(Model, DTO, Pipe) 들어가며 이전 과정에 이어서 이번에는 데이터베이스 로직을 구현하는 내용을 정리하였다. 데이터베이스 로직 구현 데이터베이스와 관련한 로직을 처리하는 부분은 Service에서 담당한다. 지금부터 BoardsService를 구현해볼텐데, 바로 데이터베이스와 연결하면 헷갈릴 수 있으니, 로컬 메모리를 사용하여 처리하는 방식으로 구현해보겠다. 먼저, 데이터를 저장할 boards 변수를 배열로 초기화한다. @Injectable() export class BoardsService { private boards = []; } 이때, private 접근 제한자를 사용한 이유는 BoardsController에서 private 접근 제한자를 사용한 이유와 동일하다. 즉, 다른 컴포넌트에서 BoardsService에 접근하였..
Development/Web Nest JS #1 - 기본 구조 및 기초 개념(Model, Controller, Providers, Service, DI) 들어가며 현재 항해99에 참여중이며 약 2주 동안 알고리즘 공부만 하고 있으니, 흥미도 떨어지고, 텐션도 낮아지는 듯한 느낌이 들었다. 다시 흥미를 끌어올릴겸 잠시 주위를 환기시켜보겠다는 의미로 주특기 공부를 하다가 Nest JS가 눈에 들어오기 시작했다. Nest JS라는 프레임워크를 들어본 적은 있기 때문에 관심이 있는 상태였긴 했는데, 결국 호기심을 참지 못하고 공부한 내용을 글로 남겨본다. Nest에 관심을 보이게 된 계기 누군가 내게 Node.js로 당장 뭘 할 줄 아냐라고 물어본다면, 간단한 API 서버, 실시간 통신 서버를 흉내내는 정도라고 할 수 있을 정도로 express 프레임워크를 자유자재로 다루지는 못하지만, 혼자 공부하면서 항상 고민하던 것이 있었다. 그건 바로 효율적인 개발을 위해..
Development/회고록 항해99 Chapter #2 - 2주차(자료구조 - 연결 리스트, 스택과 큐, 해시 테이블) 회고록 들어가며 매주 금요일마다 새롭게 배정된 팀에서 일정을 진행하느라, 이번주를 항해 3주차로 착각하였다. 알고리즘 주차는 총 4주 동안 진행되는데, 이번주는 기본 자료구조인 문자열 및 배열 조작, 연결 리스트, 스택, 큐, 해시 테이블에 대해서 공부하였다. 학사 과정 동안 얕게 공부한(직장생활과 병행하느라 제대로 된 공부는 하지 못했다) 내용이지만, 직접 구현해보면서, 관련된 알고리즘 문제를 푸는 시간이 굉장히 유익하게 느껴졌다. 따라서, 알고리즘 주차의 회고록에는 개념을 정리하기 보다는(조금만 검색해보면 관련 영상과 글이 넘쳐난다) 알고리즘 문제를 풀면서 또는 개념을 공부하면서 느낀점이나 내가 이해한 내용 정도를 기록하려고 한다. 공부한 내용 정리 알고리즘 문제를 제대로 해결하려면 반드시 자료구조에 대해서..
Algorithm/Baekjoon Baekjoon #2606 - 바이러스 풀이(단방향과 양방향 그래프) 문제 문제의 내용을 요약하자면, 서로 연결된 여러 대의 컴퓨터 중 첫 번째 컴퓨터가 바이러스에 걸렸을 때 바이러스에 감염되는 컴퓨터의 수를 구하는 것이다. 예를 들어, 아래 그림과 같이 컴퓨터가 연결되어 있고, 이 중 1번 컴퓨터가 바이러스에 감염되었다면 1번 컴퓨터와 연결된 모든 컴퓨터(2, 3, 5, 6)의 수량을 출력해야 한다. 입력으로 주어지는 값은 다음과 같다. 이때, 컴퓨터의 수가 7이면, 1번부터 차례대로 번호가 매겨진다. 줄 기호 내용 예시 첫 번째 줄 N 컴퓨터의 수 7 두 번째 줄 M 직접 연결된 컴퓨터 번호 쌍의 수 6 세 번째 줄 + M 직접 연결된 컴퓨터 번호 쌍 1 2 2 3 1 5 5 2 5 6 4 7 풀이 총 두 번의 시도 끝에 성공하였다(소스코드). 정말 놓치기 쉬운 부분을..
Algorithm/LeetCode LeetCode #017 - Letter Combinations of a Phone Number(전화번호 문자 조합) 풀이(2가지 방식) 문제 문제의 내용을 간단히 요약하자면, 입력받은 번호에 해당하는 알파벳을 순서대로 조합한 문자열을 반환하는 것이다. 예를 들어, 아래와 같이 '234'를 입력받았을 때, 조합한 문자열의 길이는 입력받은 문자열의 길이와 동일하게 3이어야 하며, 각각 ['abc'] + ['def'] + ['ghi'] 순서대로 조합된 모든 문자열을 찾아야 한다. input : ['234'] output: ['adg', 'adh', 'adi', 'aeg', 'aeh', 'aei', 'afg', 'afh', 'afi', 'b..