전체 글132 [CS] 프로세스와 스레드 프로세스 프로세스는 컴퓨터에서 실행되고 있는 프로그램을 말하며 CPU 스케줄링의 대상이 되는 작업 프로세스의 메모리 구조 운영체제는 프로세스에 적절한 메모리를 할당합니다. 스택, 힙, 데이터 영역, 코드 영역으로 나눠집니다. 스택과 힙 스택과 힙은 동적 할당이 되며, 동적 할당은 런타임 단계에서 메모리를 할당받는 것을 의미합니다. 스택은 지역 변수, 매개변수, 실행되는 함수에 따라 늘어나거나 줄어드는 메모리 영역입니다. 함수가 호출될 때 환경 등 특정 정보가 스택에 계속해서 쌓이게 됩니다. 힙은 동적으로 할당되는 변수들을 저장합니다. 동적으로 관리되는 자료 구조의 경우 힙 영역을 사용합니다. 데이터 영역과 코드 영역 정적 할당이 되는 영역이며 정적 할당은 컴파일 단계에서 메모리를 할당하는 것을 의미합니다.. CS 2023. 4. 13. [JS] 이벤트 루프와 콜백 함수 이벤트 루프 https://www.youtube.com/watch?v=8aGhZQkoFbQ 꼭 보세요! 자바스크립트는 단일 스레드(Single-threaded) 기반 언어 로, 자바스크립트 엔진이 단일 콜 스택을 갖는다. 이 말은 요청이 동기적으로 처리된다는 것을 의미한다. 그렇다면 비동기 요청은 어떻게 처리될 수 있을까? 그것은 바로 자바스크립트를 실행하는 환경인 브라우저나 Node.js가 담당한다. 여기서 자바스크립트 엔진과 그 실행 환경을 상호 연동시켜주는 장치가 바로 이벤트 루프이다. 따라서, 이벤트 루프는 자바스크립트 엔진에 있지 않고 그 환경에 속한다. 태스크 큐(Task queue)와 마이크로태스크 큐(Microtask queue) 자바스크립트의 실행 환경은 2가지 큐를 가지고 있으며 각각 .. JavaScript&TypeScript 2023. 4. 8. [CS] 데이터베이스의 기본 데이터베이스 일정한 규칙, 규약을 통해 구조화되어 저장되는 데이터의 모음 데이터베이스를 제어, 관리하는 통합 시스템을 DBMS라고 하며 데이터들은 특정 쿼리를 통해 삽입, 삭제, 수정, 조회 등을 수행할 수 있습니다. 엔터티 사람, 장소, 물건, 사건 등 여러 개의 속성을 가진 명사를 의미합니다. 회원이라는 엔터티는 이름, 아이디, 전화번호 등의 속성을 가집니다. 서비스의 요구 사항에 맞춰 속성이 정해지며 서비스의 요구 사항과 무관하다면 속성은 사라지게 됩니다. 릴레이션 데이터베이스에서 정보를 구분하여 저장하는 기본 단위이며 엔터티에 관한 데이터를 데이터베이스는 릴레이션에 담아서 관리합니다. 릴레이션은 관계형 데이터베이스에서는 테이블이라고 하며, NoSQL 데이터베이스에서는 컬렉션이라고 합니다. 테이블과.. CS 2023. 4. 7. [JS] async와 await async와 await async/await는 자바스크립트에서 비동기 처리를 보다 간편하게 해주는 문법입니다. async 함수는 항상 Promise를 반환하며, await 키워드를 사용하면 Promise가 처리될 때까지 기다리게 됩니다. 이렇게 기다리는 동안 다른 작업을 처리할 수 있기 때문에, 비동기 처리를 할 때 코드의 가독성과 유지보수성이 좋아집니다. async function fetchUserData(userId) { try { const response = await fetch(`https://api.example.com/users/${userId}`); const userData = await response.json(); return userData; } catch(error) { conso.. JavaScript&TypeScript 2023. 4. 7. [JS] Arrow Function(화살표 함수) Arrow Function(화살표 함수) Arrow Function은 ES6(ECMAScript 2015)에서 추가된 함수 표현식입니다. 기존의 함수 표현식보다 간결하고 가독성이 높아 코드 작성 시 유용하게 사용됩니다. Arrow Function은 function 키워드 대신에 화살표(=>)를 이용하여 함수를 정의합니다. 함수의 매개변수가 하나인 경우 괄호(())를 생략할 수 있습니다. 또한 함수 내부의 코드가 한 줄인 경우 중괄호({})를 생략하고 바로 반환값을 지정할 수 있습니다. 아래는 Arrow Function을 사용한 예시입니다. // 기존의 함수 표현식 function double(x) { return x * 2; } // Arrow Function 사용 const double = (x) =>.. JavaScript&TypeScript 2023. 4. 6. 2023/04/03 최종 프로젝트 마무리 그리고 수료 내일배움캠프 4기 수료! 10월 15일 사전캠프를 시작으로 11월 14일 본격 캠프 시작 바로 시작된 팀 소개 미니 프로젝트! https://github.com/5kiran/TeamFiveColor GitHub - 5kiran/TeamFiveColor Contribute to 5kiran/TeamFiveColor development by creating an account on GitHub. github.com 12월 5일 화면 구현 미니 프로젝트 개띠구조대 https://github.com/5kiran/94DOG GitHub - 5kiran/94DOG Contribute to 5kiran/94DOG development by creating an account on GitHub. github.com .. 프로젝트 2023. 4. 4. 캘린더 조회 Redis를 활용해 성능 개선하기 캘린더 조회 Redis를 활용해 성능 개선하기 1. 증상 LounGe 서비스는 캘린더에서 본인의 일정도 추가할 수 있으면서 가입되어 있는 그룹의 일정도 캘린더에서 함께 보여준다. 이는 많은 그룹에 가입되어 있으면 많은 일정을 한 번에 불러와 서비스에서 가장 부하가 쉽게 걸릴 곳으로 예상을 했다. 많은 데이터를 조회하기 때문에 성능 저하가 가장 빈번하게 일어남 2. 해결방법 사과 그룹과 망고 그룹이 있다. 사과 그룹에는 100명의 인원이 가입되어 있고 망고에는 10명의 인원이 가입되어 있다. 만약 두 개의 그룹 일정이 같다면 사과는 한 사람이 한 번씩 일정을 확인하더라도 망고보다 90번의 그룹 일정을 추가적으로 더 불러오는 것이다. 그렇다면 사과라는 그룹의 일정은 캐시에 저장하여 데이터 베이스와의 통신 횟.. 트러블 슈팅 2023. 3. 27. Overfetching 성능 개선 최종 프로젝트 성능 개선 1. 증상 DB에서 불필요한 데이터를 받아오는 Overfetching 문제가 있었다. 이 사소한 문제 하나로도 성능에 차이가 생기지 않을까라는 의문이 들었다. 필요한 칼럼만 select로 가져오면 유의미한 성능에 변화가 있을까?? Overfetching으로 인한 성능 저하 2. 해결방안 쿼리를 수정하여 불필요한 데이터를 최소화 시키면 성능 면에서 좋은 결과를 얻을 수 있을 거라고 판단하여 쿼리 수정 작업 진행 조회 시 필요한 칼럼만을 select하여 불필요한 데이터를 최소화 위와 같은 코드를 QueryBulider를 사용하는 로직으로 바꾸고자 했다. Repository에서 find를 QueryBulider로 바꿔보았다. 정상적으로 기능이 작동되는 걸 확인했다. 이제 각각 쿼리를 .. 트러블 슈팅 2023. 3. 24. 2023/03/21 최종 프로젝트 그 이름은 LounGe!! 서비스 소개 LounGe 소모임 커뮤니티 with 캘린더 같은 취미를 가진 사람을 찾고 싶으신가요? 저희는 새로운 사람을 만나는 것을 즐기고 일정을 공유하며 건강한 만남을 가지는 커뮤니티를 지향합니다. 팀원 및 역할 분담 김정민 로그인, 회원가입, 소셜 로그인, 이메일 인증, 이미지 업로드 오길환 그룹 CRUD, 태그 검색 기능, 이미지 업로드 김택환 캘린더 CRUD, 그룹 이벤트, 유저 이벤트 한주호 뉴스피드 CRUD, 태그 검색 기능, 이미지 업로드 유진우 마이페이지 수정, 비밀번호 수정, 패스워드 찾기 사용 스택 프로젝트 2023. 3. 22. 검색을 기능 개선을 위한 Elastic Search사용 검색을 기능 개선을 위한 Elastic Search사용 1. 증상 기존의 검색 기능은 LIKE 연산자를 이용해 구현하였었다. 하지만 데이터 베이스에 데이터가 많아지자 성능이 심각하게 저하되었다. LIKE 연산자 사용 시 데이터가 많으면 심각한 성능 저하 발생 2. 해결방법 검색 기능의 LIKE를 다른 방법으로 대체 Elasticsearch 도입 처음에 LIKE로 TAG의 ID를 찾아오는 방식을 ES로 변경해서 ID를 리턴해주고 해당 ID로 DB에서 데이터를 받아오는 로직을 구현했었다. 곰곰히 생각해 보니 처음부터 ES에 색인이 되어있으면 해당 과정이 필요 없을 것 같다는 의문이 생겨 다시 리팩토링을 시작했다. 우선 프론트에서 바로 받아서 사용할 수 있도록 인덱싱 할 때 데이터를 바로 데이터를 가공해서 넣.. 트러블 슈팅 2023. 3. 21. 최종프로젝트 성능 개선을 위한 고민 반복되는 쿼리를 한 번의 쿼리로 해결할 수 있을까? 우선 코드를 보자 async tagCheck(tags: string[], groupId: number) { if (!tags.length) { return; } tags.forEach(async (tag) => { const findTag = await this.tagRepository.findOneBy({ tagName: tag }); if (!findTag) { const createTag = await this.tagRepository.create({ tagName: tag }); await this.tagRepository.save(createTag); await this.tagGroupRepository.insert({ tagId: create.. 트러블 슈팅 2023. 3. 3. [CS] 디자인 패턴 디자인 패턴 디자인 패턴이란 프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 '규약' 형태로 만들어 놓은 것 싱글톤 패턴(singleton pattern) 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴 데이터 베이스 연결 모듈에 주로 사용 하나의 인스턴스를 생성하여 해당 인스턴스를 다른 모듈들이 공유하며 사용하기 때문에 인스턴스 생성 비용이 줄어드는 장점이 있으나 의존성이 높아지는 단점 또한 존재한다 //main 모듈 const mysql = require('mysql'); const sql = mysql.createPool({ connectionLimit: 10, host: 'example', user: 'root', password: 'sec.. CS 2023. 2. 20. 이전 1 2 3 4 5 6 ··· 11 다음 반응형