[Heap 힙] - JavaScript로 heap 구현하기
·
CS/자료구조, 알고리즘
프로그래머스에서 힙 문제를 JS로 푸는데 JS는 힙을 직접 구현해야 된다는 것을 알게 되었다. 그래서 개념과 함께 JS로 힙을 구현해 볼 것이다. Heap 힙이란?힙은 완전 이진 트리 기반의 자료구조이다.주로 "최댓값"이나 "최솟값"을 빠르게 찾아내기 위해 사용된다. 여기서 이진 트리란 자식 노드가 2개 이하인 트리를 말한다. 힙의 조건1. 완전 이진 트리 노드의 수가 2^k-1 ( 포화 이진 트리) 이 되지 않아 맨 아래 레벨을 모두 채울 수 없을 때 왼쪽부터 차례로 채운 것.2. 힙 특성 최대 힙 : 모든 노드는 값을 갖고, 자식 노드(들) 값보다 크거나 같다. 우선순위가 가장 큰 원소가 루트에 자리하게 된다. 최소 힙 : 반대로 부모 노드가 자식 노드보다 작거나 같은 힙 자바스크..
[정보처리기사 실기] 프로세스 스케줄링 알고리즘 계산
·
카테고리 없음
정보처리기사 실기를 준비하면서 프로세스 스케줄링 알로리즘 계산하는 것이 유형이 많고 헷갈려 블로그에 정리하여 이해하려 한다.📌 프로세스 스케줄링이란?프로세스 스케줄링은 CPU를 사용하려고 하는 프로세스들 사이의 우선순위를 관리하는 작업이다. 스케줄링은 처리율과 CPU 이용률을 증가시키고 오버헤드, 응답시간, 반환 시간, 대기시간을 최소화시키기 위한 기법이다.특정 프로세스가 적합하게 실행되도록 프로세스 스케줄링에 의해 프로세스 사이에서 CPU 교체가 일어난다. 📌 프로세스 스케줄링 유형프로세스 스케줄링 유형에는 선점형 스케줄링과 비선점형 스케줄링이 있다.✔️선점형 스케줄링선점형 스케줄링이란 하나의 프로세스가 CPU를 차지하고 있을 때, 우선순위가 높은 다른 프로세스가 현재 프로세스를 중단시키고 CPU를..
현대이지웰 풀스택 5회차 최종 프로젝트 회고 - MTYPE
·
project
📌프로젝트 개요이번 프로젝트는 메신저를 연동한 선물하기 서비스 MTYPE을 개발하는 것이 목표였다.팀은 총 3명으로 구성되었고, 프로젝트 기간은 7월 28일부터 10월 16일까지 약 2~3개월 정도 진행되었다.기획 단계는 한 달 정도 소요되었고, 구현은 9월 1일부터 한달 반 정도 진행되었다. 나는 팀장으로 참여하였고 팀원 모두 프론트와 백엔드를 모두 구현했으며, 기능별로 개발을 진행했다. 📌맡은 기능카테고리 띄우기, 상품 목록, 상세 페이지네이버 쇼핑 API로 상품 데이터 수집메인 페이지, 랭킹, 결제선물 리스트, 선물함, 선물 만료 시 보안 문제 처리친구의 위시리스트 조회📌 카테고리기획 초기에는 카테고리를 자기 참조 방식의 계층형 구조로 설계했다.카테고리를 클릭했을 때 UI 업데이트와 글씨 색 ..
[Spring boot & JPA] 계층형 카테고리 구현하기
·
project
쇼핑몰 서비스를 개발하다 보면 카테고리 시스템은 필수적인 기능이다.실제 이용하는 쇼핑몰들(예: 29CM, 네이버 쇼핑, 오늘의 집)을 살펴보면 대부분 계층형 카테고리로 구현되어있다는 것을 쉽게 볼 수 있다.이번 부트캠프 최종 프로젝트에서 나는 카테고리 기능 구현을 맡아, 일반 카테고리 + MBTI 기반 카테고리를 구현했다. 📌 기능 개요1. 일반 카테고리 3단계 계층 구조(최상위 → 중위 → 하위)마우스 오버 시 하위 카테고리 동적 표시계층별 상품 필터링2. MBTI 카테고리MBTI 유형별 상품 분류(E, I, N, S, T, F, J, P)각 MBTI별 세부 카테고리 제공📌 데이터베이스 설계카테고리 테이블은 자기 참조 구조로 설계했다.즉, 각 카테고리가 자신의 상위 카테고리를 참조하도록 구성하여 계..
JSON과 메서드 - 자바스크립트(JS)
·
backend/Java
네트워크를 통해 객체를 어딘가에 보내거나 로깅 목적으로 객체를 출력해야 한다면 객체를 문자렬로 전환해야 할 것이다.이때 전환된 문자열엔 원하는 정보가 있는 객체 프로퍼티 모두가 포함되어야만 한다.let user = { name: "John", age: 30, toString() { return `{name: "${this.name}", age: ${this.age}}`; },};alert(user);JSON.stringifyJSON은 값이나 객체를 나타내주는 범용 포맷이다. JSON은 원래 자바스크립트에서 사용할 목적으로 만들어진 포맷이다. 하지만 라이브러리를 사용하면 자바스크립트가 아닌 언어에서도 JSON을 충분히 다룰 수 있어서, JSON을 데이터 교환 목적으로 사용하는 경우가 많다. J..
소프트웨어 개발 방법론
·
CS
소프트웨어 프로젝트는 규모가 커질수록 일정 지연, 비용 초과, 품질 저하 같은 문제를 겪기 쉽다. 이러한 문제를 줄이기 위해 개발 과정을 체계적으로 관리하는 소프트웨어 개발 방법론이 등장한다. 개발 방법론은 “어떤 순서로, 어떤 방식으로 소프트웨어를 만들어야 하는가?”에 대한 가이드라인 역할을 한다. 이번 글에서는 대표적인 네 가지 방법론(폭포수, 프로토타입, 나선형, 애자일)을 정리하고, 각각의 특징과 장단점, 적용 사례를 살펴본다.📌소프트웨어 생명주기 모델✔️소프트웨어 생명주기 모델 개념소프트웨어 생명주기는 시스템의 요구분석부터 유지보수까지 전 공정을 체계화한 절차시스템이 개발될 때부터 운용과 유지보수를 거쳐 생애를 마칠 때까지 어떠한 순서를 밟는지에 대한 작업 프로세스를 모델화한 것✔️소프트웨어 ..
Intersection Observer API로 무한 스크롤 구현하기
·
project
쇼핑몰 프로젝트에서 상품 목록 무한 스크롤 기능을 구현했다.단순히 스크롤만 구현하는 것이 아니라, 여러 카테고리와 신상품순, 낮은 가격순과 같은 정렬 옵션까지 처리해야 했기에 어떻게 하면 효율적으로 만들 수 있을지 고민하였고 그 과정을 정리하려 한다. 📌왜 무한 스크롤을 선택했나?처음에는 페이징 버튼을 두고 1,2,3 페이지 이동하는 방식으로 구현할까 생각했다.하지만 상품 목록은 사용자가 여러 상품을 빠르게 접하기 때문에 매번 다음 페이지 버튼을 클릭하는 것보다, 스크롤을 내리는 것만으로 새로운 상품이 자연스럽게 나타나는 방식이 훨씬 더 편한 UX라고 판단했다. 그래서 무한 스크롤을 도입하기로 결정했다.📌JPA에서 Slice를 사용한 이유Spring Data JPA는 페이징을 위해 Page와 Slic..
[Github] PR(Pull Request) 하고 Merge 하기
·
카테고리 없음
부트캠프에서 최종 프로젝트를 진행하면서 팀원들과 협업을 위해 GitHub에서 merge 하는 방법을 공부하였다. 우선 먼저 서로 다른 branch에서 작업한 결과를 올린 후, main 브랜치로 통합해야 한다.특히 가장 중요한 원칙은 반드시 main 브랜치에서 직접 작업하지 않는 것!모든 작업은 별도의 브랜치를 만들어 진행하고, 검토 후 최종적인 경우에만 main에 병합한다.이번 글은 SourceTree를 기준으로 브랜치 생성부터 merge까지 과정을 정리해 본다.📌브랜치 생성하기1. 작업을 시작하기 전, main에서 커밋하지 않고 새로운 브랜치를 만든다.2. 생성된 브랜치로 체크아웃을 해준다. (더블클릭을 하거나 마우스 오른쪽 버튼을 클릭하여 체크아웃)그럼 생성한 브랜치로 전환된다. 3. 이제 해당 브..
Oracle Cloud(오라클 클라우드) DB 생성
·
CS/데이터베이스
부트캠프 최종 프로젝트에서 공용 DB를 사용하기 위해 오라클 클라우드를 이용하기로 했다.오라클 클라우드 가입부터 생성하는 방법까지 정리해보았다. 1. Oracle Cloud 가입하기먼저 오라클 클라우드 사이트에 접속하여 회원가입을 진행한다.가입할 때 되도록 영어를 사용하는 것이 좋다.국가, 이름, 성, 이메일을 입력하면 이메일로 인증 메일이 전송된다. 대체 이름은 홈페이지에서 쓰일 ID 같은 개념이다. 이제 홈 영역을 입력해주면 된다.서울과 춘천이 있는데 서울은 수요가 높기 때문에 인스턴스 가용성이 제한적이므로 춘천을 선택하는 것이 좋다. 이제 다음은 주소 정보 입력이다.마지막 입력란이 도로 되어있기 때문에 헷갈리기 쉽지만 도가 아니어도 되기 때문에 영어 주소로 변환했을 때, Republic of Ko..
스레드 이해하기 - 자바 (JAVA)
·
backend/Java
최종 프로젝트를 기획하면서 결제 시스템의 동시성 문제를 조사하다 보니 수업 시간에 배웠던 스레드가 떠올랐다. 그래서 찾아보니 멀티 스레드 개념과 결제 시스템의 동시성 문제(트랜잭션 처리)와 연관 있다고 해서 수업 때 배웠던 스레드를 복습했다.📌프로세스란?실행 중인 프로그램을 의미한다.프로세스는 프로그램이 실행될 때마다 개별적으로 생성되며, 독립적인 메모리 공간과 자원을 할당받는다.하나의 프로세스는 프로그램을 수행하기 위해 필요한 코드, 데이터, 메모리 등 자원을 가지고 있으며, 그 안에 하나 이상의 스레드를 포함한다.📌스레드란?프로세스 내에서 할당된 자원을 이용해 실제 작업을 수행하는 작업 단위이다.모든 프로세스는 하나 이상의 스레드를 가지며 각각 독립적인 작업 단위를 가진다.예를 들어, 게임을 실행..