목록분류 전체보기 (91)
개발자공부일기
관리자권한과 일반 권한으로 각각 실행하면 같은게 ㅔ2개 실행된다. pm2로 내가 만든 간단한 페이지를 서버에서 실행하는 실습을 하던 중 프로세스를 종료했음에도 웹페이지에 계속 접속이 가능했다. 분명히 pm2 list 에는 실행중인 프로세스가 없었고 pm2 delete 0 으로 종료를 했었다.그래서 ps -ef | grep app 명령어로 실행되고 있는 프로새스중 app가 포함된이름의 프로세스가 있는지 조회하니떡하니 있는게 아닌가. 분명 종료했었는데 있었다. 그래서 kill PID 명령어로 종료시켜봤으나 계속 새로운 PID로 실행되고 있었다. 근데 알고보니 내가 실습중 관리자 권한으로 하나 실행해둔게 있었는데 그게 문제였다. 일반권한으로 실행된 app(1)과 관리자 권한으로 실행된 app(2)가 있었던 것..
컴퓨터 세계에서 서버와 클라이언트는 무엇인가? 컴퓨터 세계에서 서버는 서비스 제공자, 클라이언트는 서비스요청자라고 말한다.클라이언트(컴퓨터등 인터넷에 연결된 기기를 쓰는 우리)가 서버(네이버나 쇼핑몰)에 서비스(검색, 내정보 조회)를 요청하면 서버는 우리에게 요청에 맞는 정보를 제공합니다.클라이언트와 서버는 네트워크를 통해 서로 데이터를 주고받는 역할을 맡는 두 시스템 또는 프로그램을 뜻합니다. 이제 각각 서버는 뭐고 클라이언트라는건 정확히 뭘까? 서버 (Server)정의:-데이터를 저장하거나, 처리하거나, 클라이언트 요청을 처리하기 위해 서비스를 제공하는 컴퓨터, 프로그램, 또는 시스템입니다.특징:-항상 작동하며(보통은), 클라이언트 요청에 응답합니다.-여러 클라이언트와 동시에 통신할 수 있습니다.-강..
// /app.jsimport express from 'express';import connect from './schemas/index.js';import TodosRouter from './routes/todos.router.js';const app = express();const PORT = 3000;connect();// Express에서 req.body에 접근하여 body 데이터를 사용할 수 있도록 설정합니다.app.use(express.json()); //미들웨어1app.use(express.urlencoded({ extended: true }));//미들웨어2// static Middleware, express.static()을 사용하여 정적 파일을 제공합니다.app.use(express.s..
MongoDB를 연결해서 Insomnia로 API들을 테스트 하던 중 req.body의 특정 요소가 undefined라 구조분해할당을 할 수 없다는 오류가 나왔다. 근데 코드는 다 강의를 잘 따라했고 Insomnia에서도 스키마에 맞게 데이터를 잘 집어넣고 있었고그 오류난 특정 요소도 다 들어있었다. 코드도 req.body도 문제가 없었는데 뭐가 문제였을지 알아봤다. 결론부터 말하자면 파싱하는 미들웨어가 필요했다. bodyParser.urlencoded({ extended: true })와 bodyParser.json()을 동시에 사용하면, 클라이언트가 보낸 Content-Type 헤더에 따라 적절한 미들웨어가 요청 본문을 처리합니다. 각각의 처리 과정을 설명드리겠습니다.1. bodyParser.urle..
Node.js Node.js는 서버 사이드에서 JavaScript를 실행하기 위한 오픈소스 런타임 환경입니다. Chrome의 V8 JavaScript 엔진 위에서 작동하며, 비동기 I/O와 이벤트 기반 모델을 통해 높은 성능과 확장성을 제공합니다. 아래에 Node.js에 대한 자세한 설명을 제공합니다.1. Node.js의 특징(1) 비동기 및 이벤트 기반Node.js는 논 블로킹(non-blocking) I/O를 지원하여, 파일 읽기/쓰기, 데이터베이스 요청, 네트워크 요청 등을 동시에 처리합니다.이를 위해 이벤트 루프(Event Loop)를 사용하며, 이를 통해 단일 스레드에서 여러 작업을 처리할 수 있습니다.(2) 단일 스레드 구조Node.js는 단일 스레드에서 실행되지만, libuv라는 C++ 라..
드디어 개인과제를 마무리 했다. 갖가지 트러블슈팅을 하면서 내가 꼼꼼하지 못한 부분이 어딘지 알게 되었다. 특히 함수를 작성하거나 변경할때 변수를 같이 안바꾸는 점을 주의해야겠다.정렬 알고리즘들을 다시 배우기 시작했다. 예전에 정처기랑 전공하면서 배웠던건데 코드 직접 작성하는게 생각보다 어려웠다. 자료 다시 훑어보면서 더 익숙해져야겠다.
정렬 알고리즘은 주어진 데이터를 특정한 순서대로 정렬하는 방법입니다. 여러 가지 정렬 알고리즘 중에서 버블 정렬(Bubble Sort), 삽입 정렬(Insertion Sort), 선택 정렬(Selection Sort)은 기본적인 비교 기반 정렬 알고리즘으로 자주 사용됩니다. 이들은 모두 시간 복잡도가 O(n²)로 비효율적이지만, 간단하게 구현할 수 있습니다.1. 버블 정렬 (Bubble Sort)버블 정렬은 인접한 두 요소를 비교하여 교환하는 방식으로 정렬을 수행하는 알고리즘입니다. 가장 큰 값이 매번 마지막으로 "버블처럼" 올라가므로 버블 정렬이라는 이름이 붙었습니다.작동 원리배열의 처음부터 끝까지 인접한 두 값을 비교하고, 그 순서가 잘못되었으면 값을 교환합니다.첫 번째 반복이 끝나면 가장 큰 값이 ..
게임속 어느 수치가 일정부분 이상 넘으면 업적을 달성하는 시스템을 만들었다. 저장은 잘 되는거 같은데 1번째 플레이어의 업적이 다음 플레이어들에게 상속된다. 업적을 저장하고 업적수치를 저장하는 변수들을 초기화하지 않았다. 변수를 다시 0으로 초기화 시켜주니 정상작동 =============================================아 갑자기 잘 되던 기록저장이 말썽이다. 분명 undefined가 아닌걸 디버깅으로 확인했는데 localeCompare함수가 undefined라며 오류가 난다. 또 변수명이 문제였다. localeCompare을 할때 a.name.localeCompare(b.name)으로 하고 있었다. 기록에 저장될때 이름부분의 key는 playerName이었다. 어디서 많이 보던..