728x90

분류 전체보기 161

JavaScript의 비동기와 이벤트 루프

📌브라우저의 멀티 스레드로 작업을 동시에JavaScript는 싱글 스레드 언어로, 한 번에 하나의 작업만 수행이 가능하다. 반면 Java나 Python은 멀티 스레드를 지원하여 원하는 코드 로직을 동시에 수행시키는 멀티 작업이 가능하다.웹 어플리케이션에서는 네트워크 요청이나 이벤트 처리, 타이머와 같은 작업을 멀티로 처리해야 하는 경우가 많다. 만일 싱글 스레드로 브라우저 동작이 한번에 하나씩 수행하게 되면, 우리가 파일을 다운로드 받을 동안 브라우저는 파일을 다 받을 때까지 웹서핑도 못하고 멈춰 대기해야 한다. 따라서 파일 다운, 네트워크 요청, 타이머, 애니메이션 이러한 오래 걸리고 반복적인 작업들은 자바스크립트 엔진이 아닌 브라우저 내부의 멀티 스레드인 Web APIs에서 비동기+논블로킹으로 처리..

📕CS 2024.11.21

개발 언어

📌컴파일 언어와 인터프리터 언어컴파일 언어전체 소스 코드를 컴파일 언어를 통해 기계어로 변환한 후 실행하는 언어이다.- C, C++ 등- 플랫폼 종속적: 컴파일 언어는 소스 코드를 특정 플랫폼(운영체제와 하드웨어)의 기계어로 변환하여 실행한다.  인터프리터 언어소스 코드를 한 줄씩 읽어가며 실행하는 방식의 언어이다. (이로 인해 컴파일 과정이 따로 필요 없다.)- Python, JavaScript 등  혼합형 언어, 바이트코드 기반 언어컴파일 언어와 인터프리터 언어의 특징을 결합한 방식으로 동작하는 언어이다.- Java 등: Java는 컴파일러가 바이트코드라는 중간 코드 언어로 변환하고, 이 바이트코드를 실행할 때는 가상머신(VM)이 바이트 코드를 기계어로 해석하거나 컴파일해서 실행한다.  컴파일 언어..

📕CS 2024.11.20

객체지향 프로그래밍(OOP, Object-Oriented Programming)

📌객체지향 프로그래밍실세계의 사물을 객체로 모델링하는 소프트웨어 개발 방법론으로, 속성과 메서드를 하나의 객체로 묶는다. 📌객체지향 프로그래밍 장점1. 코드의 재사용성 증가객체를 재사용하여 코드의 재사용성을 높일 수 있다. 기존의 클래스를 확장하거나 수정하는데 용이하다.2. 유지보수성 향상캡슐화를 통해 내부 구현을 감추고, 인터페이스만 공개하여 코드 변경 시 영향을 최소화할 수 있다.3. 가독성과 이해도 증가현실 세계의 사물을 객체로 모델링하여 직관적인 설계가 가능하다. 📌객체지향 프로그래밍 특징: 추상화, 캡슐화, 상속, 다형성1. 추상화복잡한 개념은 감추고 핵심만 드러내는 것2. 캡슐화객체의 속성과 메서드를 하나로 묶고 일부를 외부에 감추어 은닉하는 것3. 상속상위 클래스의 특성을 하위 클래스에..

📕CS 2024.11.20

소프트웨어 V&V(Verification & Validation)

📌V&V(Verification & Validation)Verification은 충분히 납득할만한 전문적인 개발 과정을 거쳤는지를 확인하는 과정이고, Validation은 고객의 요구사항에 기반한 결과물을 도출하였는지를 확인하는 과정이다. Verification = 확인 = 제품을 올바르게 만들고 있는가?1. 요구사항 명세서와 설계 명세서에 따라 소프트웨어를 구현하였는지 혹은 결함이 있는지를 평가하는 프로세스이다.2. 사용자에게 소프트웨어를 보여주기 전에 확인(Verification)은 반드시 수행되어야 한다. 오류나 요구 누락이 존재하는 소프트웨어는 고객에게 신뢰를 줄 수 없기 때문이다.3. 고객의 니즈에 따라 제품이 설계에 맞게 만들어지고 있는가 혹은 제품이 명세서를 충족하는가를 검사하는 절차이다...

📕CS 2024.11.20

[OS]메모리

📌메인 메모리메인 메모리는 CPU가 직접 접근할 수 있는 기억 장치로, 프로세스가 실행되려면 프로그램이 메모리에 올라와야 한다. CPU는 레지스터가 지시하는대로 메모리에 접근하여 다음에 수행할 명령어를 가져온다.(PC는 현재 실행 중인 명령어의 메모리 주소를 기억하는 레지스터이다.) 📌메모리 계층 구조메모리는 속도와 용량의 균형을 맞추기 위해 메모리 계층 구조로 관리된다.  -레지스터: CPU 안에 있는 작은 메모리도 속도가 가장 빠르며 기억 용량이 가장 작다.-캐시: 메인 메모리의 직접 접근은 비효율적이르모 CPU와 메인 메모리의 속도를 맞추기 위해 캐시가 존재한다.-주기억장치: RAM을 가리킴-보조기억장치: HDD, SSD를 가리킴 *캐시: 캐시는 데이터를 미리 복사해 놓는 임시 저장소로, 빠른 ..

카테고리 없음 2024.11.19

[OS]프로세스와 스레드(2)

📌프로세스와 스레드프로세스프로세스란 컴퓨터에서 실행 중인 프로그램이다. 각각의 프로세스는 각각 별도의 주소 공간을 할당 받는다. 스레드스레드는 프로세스 내 작업의 흐름으로 프로세스의 실행 가능한 가장 작은 단위이다. 각 프로세는 여러 스레드를 가질 수 있다. 또한 코드, 데이터, 스택, 힙을 각각 생성하는 프로세스와 달리 스레드는 코드, 데이터, 힙은 스레드끼리 공유하고, 그 외의 영역은 각각 생성된다.  *동적 영역-스택: 지역 변수, 매개변수, 리턴 값-힙: 동적 할당 시에 사용*정적 영역-데이터: 전역 변수, 정적 변수, 배열 등-코드: 코드 자체를 구성하는 메모리 영역 스레드가 Stack 영역만 따로 할당 받는 이유?- 스레드는 독립적인 동작을 수행하기 위해 존재한다.- 즉, 독립적으로 함수를 ..

📕CS 2024.11.19

[알고리즘]백준 1806: 부분합

풀이: 누적합&투포인터특정 조건을 만족하는 연속된 부분 배열의 문제에서 누적합&투포인터의 개념이 많이 사용된다.1) right 포인터는 0~N-1까지 증가면서 오른쪽으로 이동한다.2) left 포인터는 s값이 주어진 조건보다 크다면 포인터를 오른쪽으로 계속 옮겨준다. 이는 주어진 조건이 자연수로 이루어진 길이 N의 수열이기 때문에 가능하다. 코드import java.io.*;import java.util.*;public class Main1806 { public static int N,S; public static int[] arr; public static void main(String[] args) throws Exception { // 1. 입력 및 초기화 ..

알고리즘/백준 2024.11.14

[OS]프로세스와 스레드(1)

📌 프로세스와 스레드프로세스(process)는 컴퓨터에서 실행되고 있는 프로그램을 말하며 CPU 스케줄링의 대상이 되는 작업(task)와 거의 같은 의미로 쓰인다. 스레드는 프로세스 내 작업의 흐름을 지칭한다.프로그램이 메모리에 올라가면 프로세스가 되는 인스턴스화가 일어나고, 이후 운영체제의 CPU 스케줄러에 따라 CPU가 프로세스를 실행합니다.프로그램이 메모리에 올라가면 CPU는 프로그램의 시작 주소를 PC로 설정합니다.이후 PC가 가리키는 주소에 있는 명령어를 실행하고, 실행이 끝나면 PC를 다음 명령어로 업데이트합니다.컨텍스트 스위칭 시, 각 프로세스의 PC와 관련 레지스터 상태를 저장하고, 다른 프로세스의 상태를 복구합니다.*Program Counter(PC)란?Program Counter는 C..

📕CS 2024.11.13

테스트 커버리지, 정적 코드 분석/동적 코드 분석

1. 테스트 커버리지테스트 커버리지란 작성된 코드 중에서 테스트가 수행된 비율을 측정하는 방법이다. 코드의 품질을 유지하고 잠재적인 결합을 줄이기 위해 코드의 어느 부분이 테스트되었고, 어느 부분이 테스트되지 않았는지 파악하는데 도움을 준다. 테스트 커버리지는 일반적으로 다음과 같은 기준으로 측정된다.1. 라인 커버리지: 코드의 각 줄이 테스트되었는지 확인하는 방법. 전체 코드 중 70%의 라인이 테스트되었다면 라인 커버리지가 70%이다.2. 함수 커버리지: 작성된 함수 중 몇 개가 테스트되었는지 확인한다.3. 분기 커버리지: 조건문의 각 분기가 테스트되었는지 확인한다.4. 조건 커버리지: 조건문의 각 개별 조건이 참과 거짓으로 테스트되었는지 확인한다. *분기 커버리지와 조건 커버리지아래 코드에서 분기 ..

📕CS 2024.11.11

NextJS: page router와 app router(1)

Page Router와 App Router의 가장 큰 차이점은 서버 컴포넌트이다. 서버 컴포넌트란?서버 컴포넌트는 서버에서만 실행되며, 클라이언트에 JavaScript를 전달하지 않는다. JavaScript 번들 크기를 줄이고 초기 로딩 속도를 개선하는데 도움이 된다. 단, 클라이언트에서 직접 상호작용하는 이벤트 핸들러는 사용할 수 없고, 서버에서 렌더링된 HTML만 클라이언트로 전달한다. page router에서는 페이지 전체를 SSR로 처리할지, SSG로 처리할지, 혹은 CSR으로 처리할지 결정할 수 있었지만 app router에서는 컴포넌트 단위로 서버 컴포넌트와 클라이언트 컴포넌트로 구분한다. 만약 서버 컴포넌트가 클라이언트 컴포넌트의 자식으로 있다면 클라이언트에서 서버 컴포넌트가 렌더링되는 것이..

💻웹(Web)/NextJS 2024.11.10
728x90