목록Language (14)
개발자공부일기
회사측에서 한달인턴을 시작하기 전에 알아보면 좋다고하신 크롤링 도구들을 살펴볼 예정이다.모두 Python에서 동작한다(Python에서만 동작하는 도구도 있지만 아닌 도구들도 있다.)1. Requests개요HTTP 요청을 통해 웹 페이지의 HTML 코드를 가져오는 가장 기본적인 크롤링 도구입니다.자바스크립트 렌더링이 필요 없는 정적 페이지 크롤링에 매우 적합합니다.동작 방식서버에 GET, POST 등 HTTP 요청을 보냅니다.서버로부터 받은 응답(response)의 본문을 파싱하거나 저장합니다.보통 BeautifulSoup, lxml 등의 HTML 파서와 함께 사용합니다.주요 메서드 및 매개변수requests.get(url, params=None, headers=None, cookies=None, time..
C++란 무엇인가C++은 고성능, 고수준, 저수준 프로그래밍을 모두 포괄할 수 있도록 설계된 범용 프로그래밍 언어이다.1980년대 초반, Bjarne Stroustrup에 의해 AT&T 벨 연구소(Bell Labs)에서 개발되었다.그 목적은 기존 C 언어의 효율성과 제어 능력을 유지하면서, 객체지향 프로그래밍(Object-Oriented Programming, OOP)의 구조적 설계 개념을 통합하는 데 있었다.1. 역사적 배경C++은 초기에 "C with Classes"라는 이름으로 불렸다.이는 기존의 C 언어에 클래스(class)라는 개념을 추가한 것에서 출발했기 때문이다.이후 점진적인 확장을 거쳐 템플릿, 예외 처리, 표준 라이브러리(STL), 멀티스레딩 지원 등의 기능을 추가하면서 현재에 이르고 있..
C#에서 인터페이스 (Interface)를 사용하는 이유1. 다형성 (Polymorphism) 제공인터페이스를 사용하면, 여러 클래스가 동일한 메서드를 구현하더라도 그 메서드의 실행 방식은 다르게 할 수 있습니다. 즉, 인터페이스를 통해 여러 다른 타입의 객체들이 동일한 메서드를 호출할 수 있도록 하여 다형성을 구현합니다.예를 들어:public interface IShape{ void Draw();}public class Circle : IShape{ public void Draw() { Console.WriteLine("Drawing a circle"); }}public class Square : IShape{ public void Draw() { ..
행렬의 크기를 입력받고 두 행렬의 값들을 입력받아 두 행렬을 더하는 백준문제를 다음과 같은 코드로 풀었다.#include using namespace std;int main(void){ int n=0,m=0; cin>>n; cin>>m; int A[n][m],B[n][m],C[n][m]; for(int i=0;i>A[i][j]; } } for(int i=0;i>B[i][j]; } } for(int i=0;i근데 뭔가 찜찜해서 GPT한테 피드백을 받아보니 코드를 보면 동적으로 크기가 정해지는 2차원 배열을 선언하고 있습니다. 하지만 C++에서는 가변 길이 배열(VLA, Variable Length Array)을 공식적으로 지원하지 ..

LibuvLibuv 는 이벤트 루프를 기반으로 비동기 I/O를 지원하는 다중 플랫폼 C 라이브러리입니다 . libuv는 원래 Node.js를 위해 작성된 크로스 플랫폼 지원 라이브러리입니다 . 이벤트 기반 비동기 I/O 모델을 중심으로 설계되었습니다.라이브러리는 다양한 I/O 폴링 메커니즘에 대한 간단한 추상화보다 훨씬 더 많은 것을 제공합니다. '핸들'과 '스트림'은 소켓과 다른 엔터티에 대한 고수준의 추상화를 제공합니다. 또한, 특히 크로스 플랫폼 파일 I/O 및 스레딩 기능도 제공됩니다. 다음은 libuv를 구성하는 다양한 부분과 각 부분이 관련된 하위 시스템을 보여주는 다이어그램입니다.비동기 작업에 중요한 libuv 라이브러리입니다. libuv는 C++로 작성된, Node.js가 사용하는 비동기 ..

Node.js Event Loop흔히 Node.js를 싱글 스레드 논 블로킹이라고 한다. Node.js는 하나의 스레드로 동작하지만 I/O 작업이 발생한 경우 이를 비동기적으로 처리할 수 있다. 분명 하나의 스레드는 하나의 실행 흐름만을 가지고 있고 파일 읽기와 같이 기다려야 하는 작업을 실행하면 그 작업이 끝나기 전에는 아무것도 할 수 없어야만 한다. 그러나 Node.js는 하나의 스레드만으로 여러 비동기 작업들을 블로킹 없이 수행할 수 있고 그 기반에는 이벤트 루프가 존재한다. Nods.js 속 이벤트 루프이벤트 루프는 Node.js가 여러 비동기 작업을 관리하기 위한 구현체다. console.log("Hello World")와 같은 동기 작업이 아니라 file.readFile('test.txt', ..

1. HTTP 특성HTTP는 인터넷 상에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜입니다. 클라이언트가 서버에게 요청을 보내면 서버는 응답을 보냄으로써, 데이터를 교환합니다. HTTP는 비연결성 및 무상태성 이라는 특징을 가지고 있습니다. HTTP는 요청에 대한 응답을 처리하게 되면 연결을 끊어 버립니다. 따라서 클라이언트에 대한 이전의 상태 정보 및 현재 통신의 상태가 남아있지 않습니다. 서버가 다수의 클라이언트와 연결을 계속 유지한다면, 이에 따른 자원 낭비가 심해집니다. 비연결성 및 무상태성의 특징을 가진다면 불필요한 자원 낭비를 줄일 수 있다는 장점이 있습니다. 그러나 서버는 클라이언트를 식별할 수 없다는 단점 또한 존재합니다. 로그인을 하더라도 다음 요청에서는 해당 클라이..
얕은 복사는 객체의 참조값(주소 값)을 복사하고, 깊은 복사는 객체의 실제 값을 복사합니다. 우리는 먼저 원시값과 참조값을 알아야 한다.원시값(Primitive Type): String, Number, Boolean, Null, Undefined, Symbol참조값(Reference Type): Array, Object, Function원시 값(Primitive Type)원시 값은 단순한 데이터이며, 모든 원시 값은 변경이 불가능하다. 원시 값을 변수에 할당하면 변수에 실제 값이 저장된다. 우리가let a=10;이라고 a에 할당을 하면 메모리주소 1000에 10을 할당하고 주소를 저장한다.그리고a= 20;이라고 재할당을 하면 1000주소에 10이 20으로 바뀌는게 아닌 1100주소에 20을 새로 할당하..