본문 바로가기

전체 글

(89)
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..
Development/Web API는 무엇인가? REST API는 또 무엇인가? 1분 요약 들어가며 REST를 설명하기 전에 API는 무엇인지에 대해서 간략하게 짚고 넘어가보자. API란? API(Applictaion Programming Interface)는 프로그램 간 통신 규약으로, 서버와 클라이언트가 소통하기 위해 정해놓은 규칙이라고 할 수 있다. # 요청 : GET /api/movies # 의미 : "서버야 나한테 영화목록 데이터를 좀 넘겨주련?" API의 역할은 다음과 같이 크게 3가지로 분류할 수 있다. 서버와 데이터베이스의 소통창구 : 서비스를 운영할 때 고객들이 데이터베이스에 직접적으로 접근하지 못하도록 해야한다. 클라이언트가 API를 통해 서버에게 데이터를 요청하면, 서버는 데이터베이스에 접근하여 클라이언트가 요청한 데이터를 가져오고, 이를 클라이언트에게 전송해준다. 애플리케..
Algorithm/LeetCode LeetCode #561 - Array Partition I(배열 파티션 1) 풀이 문제 문제에서는 길이가 2n인 정수 리스트를 입력받고, 정수를 n쌍으로 묶은 후 각각의 쌍의 최소값을 합한 결과가 최대가 되도록 하여 반환할 것을 요구하고 있다. 내용을 이해하는데 약 30분 정도 소요되었으며, 생각보다 간단하게 해결할 수 있었다. 길이가 6인 정수 리스트를 입력 받는 경우 n은 3이 되고, 리스트를 3조각으로 나누고, 나누어진 조각의 최소값들을 모두 더했을때 가장 큰 값이 되어야 하는 것이다. 풀이 입력받는 리스트를 오름차순으로 정렬하고, 합계를 0으로 초기화한다. nums.sort() sum = 0 입력받은 리스트를 반복하면서 짝수(0, 2, ..., 2n) 번째 인덱스에 해당하는 값을 1의 합계에 더하고, 반복이 종료되면 합계를 반환한다. for i in range(0, len(nu..
Algorithm/LeetCode LeetCode #015 - 3Sum(세 수의 합) 풀이 문제 문제에서는 정수 값을 리스트로 입력받아 세 개의 요소로 구성된 2차원 리스트(ex) [[i, j, k], [x, y, z]]로 반환할 것을 요구하고 있다(이때, 하나의 리스트([i, j, k])의 값은 서로 중첩되면 안 되며, 요소의 합이 0이 되어야 한다). 약 2시간 동안 다음과 같은 두 번의 시도를 하였는데 모두 실패하였고, 결국에는 교재의 풀이 과정을 들여다볼 수 밖에 없었다. 세 개의 요소를 가진 리스트를 만들기 위해 반복문으로 접근하였으나 시간 초과로 인해 실패하였다. 교재에서 언급한 투 포인터 방식과 유사하게 구현은 하였으나, 중복 제거 처리 및 이미 확인한 값을 건너뛰는 코드를 구현하지 않아 실패하였다. 실패 내용 중 첫 번째 방식과 같이 매우 단순 무식한 알고리즘을 브루트 포스라고 ..
Algorithm/LeetCode LeetCode #409 - Longest Palindrome(가장 긴 팰린드롬) 풀이 문제 문제에서 등장하는 팰린드롬은 문자열의 가운데를 기준으로 하여 2개로 나누었을 때, 첫 번째 문자열과 두 번째 문자열의 역순이 같은 문자열을 말하며 다음과 같이 규칙성을 정리해보았다. 문자열을 구성하는 문자의 개수가 모두 짝수인 경우 모든 문자를 팰린드롬으로 배치 가능 ex) 'aabbcc' -> 'aabbcc' 문자열을 구성하는 문자의 개수 중 홀수가 포함되어 있는 경우 개수가 홀수인 문자를 짝수로 활용하고, 가운데에 홀수인 문자로 하여 팰린드롬으로 배치 가능 ex) 'aaabbbccc' -> 'abcccba' 따라서. 문자열을 구성하는 문자의 개수가 홀수인 경우 이를 짝수로 만들고, 문자열의 가운데에 끼워줄 홀수 개의 문자 1개를 나중에 더..
Algorithm/LeetCode LeetCode #622 - Design Circular Queue(원형 큐 디자인) 풀이 문제 문제에서 나오는 원형 큐는 FIFO 정책에 따라 연산을 수행하고 마지막 위치를 첫 번째 위치에 연결하여 원을 만드는 선형 데이터 구조로, 링 버퍼라고도 한다. 원형 큐의 장점 중 하나는 공간을 활용할 수 있다는 것이다. 일반적인 큐에서는 데이터가 가득차면 큐에 공간이 있어도 다음 요소를 삽입할 수가 없다. 그러나, 원형 큐를 사용하면 공간을 사용하여 새로운 값을 저장할 수 있다. 문제에서 구현해야 할 MyCircularQueue 클래스의 메소드는 다음과 같다. __init__(k: int) -> None : 큐 개체의 크기를 k로 초기화 Front() -> int : 큐의 맨 앞의 데이터를 가져오되, 비어있는 상태인 경우 -1을 반환한다. Rear() -> int : 큐의 맨 뒤의 데이터를 가져오되..