전체 글

https://github.com/cothi - 깃허브 jiungdev@gmail.com - 이메일
2024 - 07 - 07 일에 포스팅한 자료 요즘은 저는 GUI IDE인 VSCODE 사용하여 개발을 진행하지만, 작은 프로젝트나 설정 파일을 건드려야 할 때 주로 Neovim을 사용하고는 하는데요 NEOVIM 처음 입문할 때, 폴더 구조나 플러그인을 사용할 때, 감이 안잡히는 경우가 있어 공유하고자 합니다.1. 소개[1.1] Neovim 이란?Neovim은 Vim을 새롭게 개발한 것이 아닌 Vim에 확장 형태로 개발되어 NVIM 내부에서 설정이나 플러그인을 다루는 등, vimscript로 작성하여 사용 가능하고, 추가적으로 lua도 사용이 가능합니다. neovim의 비전에 따르면 VIM의 좋은 부분은 그대로 가져오고 그 이상을 원하는 사용자를 위해서 만들어졌다고 합니다.추가된 기능 중에는 하나는 기본..
NESTJS에서  동시성 테스트를 하던 도중, read econnreset 이 발생했다.  해결하려 많은 시간을 소비하여 이런 케이스를 가진 분들이 빠르게 해결했으면 좋겠어서, 해당 오류에 대한 해결법과 앞으로 이런 오류가 발생하고 해결한 뒤, 한 번쯤 생각해봐야 할 공부 리스트를 공유하려고 합니다.0. 코드DB: Postgresql, Typeormbackend: nestjs   1. 문제점코드를 작성하고 동시성 테스트를 진행하였다. 간단하게 설명하자면특강 API로 선착순으로 100명을 받는다따라서, 각기 다른 유저, 이메일로 총 100개의 Request로 만들고 들어온 순서에 맞게 처리해야 한다. 뒤에 들어온 5개의 요청은 100개로 한정해서 선착순으로 받기 때문에 5개는 실패 반환 처리를 해야 합니다..
[1] 스택이란? 스택은 쌓는다라는 의미로 먼저 들어온 데이터가 마지막에 제일 나중에 들어온 데이터가 처음으로 꺼낼 수 있는 구조를 말합니다. 이를 LIFO(Last In First Out) 구조라고 합니다.✏️ Note 스택을 삽입하는 연산을 PUSH, 스택에 있는 데이터를 꺼내는 행위를 POP이라고 부릅니다.[2] 스택의 ADT(Abstract Data Type)ADT는 구현하는 구조(Stack)에 대해서 구현 방법을 명시하지 않고 어떠한 데이터의 구조와 연산들을 하는지에 대한 설명(명세)을 말합니다. 스택의 연산에는 push, pop, isFull, isEmpty, top과 같은 연산들이 존재합니다. 아래의 설명을 보도록 하겠습니다.push()push는 스택에 데이터를 넣는 연산을 수행합니다.pop..
[1] 배열 개념배열은 순서대로 원소들이 연속적인 형태로 구성되어 있는 구조이며, 여러 타입으로 지정되어 효율적으로 관리를 할 수 있습니다.[1-1] 배열 선언배열의 경우, 정수형 변수를 여러 개 선언해서 관리하기보다는 정수형 배열을 선언해서 관리하는 게 더욱 효율적입니다. 비교하는 예시를 아래와 같은 예시로 보도록 하겠습니다.// ...int main() { // 인트형 변수 5개 선언 int a1 = 1; int a2 = 2; int a3 = 3; int a4 = 4; int a5 = 5; cout [1-2] 배열과 차원배열은 2차원 배열과 그 이상의 다차원 배열을 이용하기도 하지만 컴퓨터 메모리 구조는 1차원으로 이루어져 있기에 다차원 배열은 컴퓨터 메모리의 1..
[1] 시간 복잡도란?시간 복잡도란, 알고리즘의 성능을 나타내는 지표로써 입력 크기에 따른 연산 횟수를 의미합니다. 시간 복잡도가 낮으면 입력 크기가 주어졌을 때 해결하는 속도가 빠르고, 높으면 해결하는 속도가 느려집니다. 따라서 시간 복잡도는 낮을수록 좋습니다.[1-1] 알고리즘 수행 시간을 측정하는 방법알고리즘 수행 시간을 측정하는 방법은 절대 시간 측정 방법과 시간 복잡도를 측정하는 방법이 존재합니다.(1) 절대시간 측정 방법절대 시간을 측정하는 방법은 입력 값에 따른 시간을 측정하면 됩니다. 아래 예시와 같이 linearSearch에서 입력값에 따른 시간을 측정하여 절대 시간을 측정합니다. 하지만, 코드를 실행하는 환경에 따라서 달라질 수 있으므로 잘 사용하지 않는 편입니다.int main() {..
[1]. 그룹 단어 체커(1316)- C++ 똑같은 스팰링이 연속해서 나타나면 그룹으로 만들고, 같은 스팰링이 떨어져 있다면, 그룹 단어가 아니기에 그룹 단어의 개수에 포함하지 않는다. [1.1]  구현aabbbccb 는 bbb, b의 같은 b의 그룹 단어가 2개 있으니 개수에 포함하지 않게 구현하면 된다.map을 이용했다. 알파벳이 소문자로 되어 있으니 크기가 26인 배열을 만들어서 arr[word[i] - 'a'] 형태로 구현하여도 된다.반복문(for) 안에서 첫 i 가 0 일 경우에는 i-1을 하지 못하지 처음 m[word[0]] = true로 초기값을 설정하여 i가 1을 시작하게 만들게 했다.#include using namespace std;int t, cnt = 0;string word;int..
·서버/Linux
[1] 개발 환경 FTP (vsftpd) openssl로 인증서, 개인키 발급 - self signed certificate 방법 테스트 서버 - linux (ubuntu) 클라이언트 - window [2] vsftpd 설정 [2.1] 개발환경 설치 # /bin/bash # openssl 설치 sudo apt install openssl # vsftpd 설치 sudo apt install vsftpd # vsftpd 에 ssl 적용이 가능한지 확인 ldd $(which vsftpd) | grep ssl openssl, vsftpd 가 설치되지 않았다면 설치를 진행합니다. 그리고 설치된 vsftpd에 ssl 이 적용할 수 있는지 확인합니다 lld 명령어는 지정한 프로그램의 의존성을 확인할 떄 사용하는 명령..
[1]. 차이를 최대로 (C++) [1.1] 문제 N개의 정수로 이루어진 배열 A가 주어진다, 적절히 정수의 순서를 바꿔 최댓값을 찾는 문제 [1.2] 해설 DFS 알고리즘을 적용해서 풀어보았다. 배열의 크기가 3이고, 배열의 값이 [1, 2, 3 ] 일 경우를 생각하면 아래와 같이 총 3가지의 경우를 생각하면 구현하기 편하다. 방문한 경우, 방문하지 않은 경우, 탐색이 트리의 끝에 방문한 경우의 DFS Tree 를 생각하며 코드를 구현하면 편하다. (1). 방문한 경우 빨간색은 이미 배열에 있는 경우이기 때문에 방문할 필요가 없다, 따라서 해당 빨간색 트리는 탐색하지 않는다. (2). 방문하지 않는 경우 파란색은 방문하지 않았기에 방문하여 경우에 수를 계속해서 계산한다. (3). 탐색이 트리의 끝에 방..
ATM 1. 문제 줄을 서 있는 사람의 수 N과 각 사람이 돈을 인출하는 데 걸리는 시간 P가 주어졌을 때, 각 사람이 돈을 인출하는데, 필요한 시간의 합의 최소값을 구하는 프로그램을 만들어야 한다. 2. 해설 정렬이 안된 경우와 오름차순으로 정렬된 경우를 비교하면 해답을 찾을 수 있다. (1). 정렬이 안된 경우 5명의 사람일 때, 핵심은 정렬이 안된 배열일 경우인 [5, 1, 2, 3, 4]를 생각해 보면 1번 사람 -> 5 = 5분 2번 사람 -> 5 + 1 = 6분 3번 사람 -> 5 + 1 + 2 = 8분 4번 사람 -> 5 +1 + 2 + 3 = 11분 5번 사람 -> 5 + 1 + 2 + 3 + 4 = 15분 5 + 6 +8 + 11 + 15을 더하면 45분을 기다려야 한다. (2). 오름차..
·etc/회고, 계획
2023년 회고와 앞으로의 계획 2023년 회고 1. 생각보다 연간에 할 수 있는 것들은 적다. 작년에 적은 회고에 적힌 것에 따르면 2023년에는 많은 도전이 필요하다고 생각해 많은 도전이 있었다. 대학원, 자격증, 지원하고 싶은 회사에서 면접 등, 많은 도전을 했지만 도전마다 생각보다 많은 자원(시간과 돈)이 들어간다는 것을 깨달을 수 있었던 2023년도였던 것 같다. 많은 도전을 하면 각각의 도전마다 기간이 겹쳐 퀄리티가 떨어지는 것을 확인할 수 있었다. 따라서, 앞으로는 도전의 수를 줄이고 하나의 도전에 집중을 해보려고 한다. 2. 정보보안기사 취득 정보보안기사를 취득을 위해 정말 많은 시간을 쏟아부었다. 이번년도 2회 차에 합격하려 했으나 예상과는 다르게 3회 차에 합격하여서 계획이 꼬여버렸다...
cothi
개발 흔적