전체 글(254)
-
[Network] 네트워크 부하로 발생하는 현상
◆ 네트워크 부하로 발생하는 현상 1. 라우터의 과부하로 인해 패킷 유실이 발생 2. TCP 재전송 타임아웃으로 TCP 연결 해제가 발생 3. TCP 소켓에서 ECONNABORTED 오류가 발생
2022.12.13 -
[Server/Database] 서버/데이터베이스 부하 발생 과정
◆ 서버에 부하가 발생하는 과정 1. 서버의 물리적인 메모리보다 더 많은 양의 메모리를 할당 2. 많은 양의 메모리 스와핑 발생 3. 프로그램 실행 속도의 저하 4. 메모리의 할당량이 증가 5. 메모리 할당 함수가 null을 반환 6. 메모리 할당 함수가 반환하는 null에 적절한 처리가 없을경우 비정상적인 종료가 발생 ◆ 데이터베이스에 부하가 발생하는 과정 1. 디스크의 최대 처리가능한 속도를 넘는 디스크 I/O 명령(DB 질의)가 쌓임 2. 메모리 사용량이 증가 3. 메모리 할당 함수가 null을 반환 4. 메모리 할당 함수가 반환하는 null에 적절한 처리가 없을경우 비정상적인 종료가 발생
2022.12.13 -
[러스트/Rust] 스마트 포인터(Smart Pointer), 박스(Box<T>) 개념 정리
■ 스마트 포인터 스마트 포인터는 메모리의 주소 값을 갖는 변수로 알고 있는 포인터처럼 동작합니다. 또한 빌리기만 하는 참조자와 달리 가리키고 있는 데이터를 소유하며, 추가적인 메타데이터와 기능들을 가지고 있는 데이터 구조입니다. 스마트 포인터는 기본적으로 구조체(Struct) 형으로 정의하며, Deref(std::ops::Deref) 와 Drop(std::ops::Drop) 트레잇을 구현해야 합니다. Deref 트레잇은 스마트 포인터의 인스턴스가 참조자처럼 동작하도록하고, Drop 트레잇은 스마트 포인터의 인스턴스가 스코프 밖으로 벗어났을 때 스마트 포인터의 메모리와 소유권을 정리하고 원하는 로직을 커스터마이징 할 수 있도록 합니다. 자세한 사용 예시는 Box 와 동일한 스마트 포인터를 만들어보면서 설..
2022.05.30 -
[Rust/러스트] anyhow 라이브러리 정리
■ anyhow anyhow는 std::error::error 트레잇의 바운드 작업을 통해 에러를 처리하기 때문에 Rust 응용 프로그램에서 발생할 수 있는 관용적인 오류를 쉽게 처리할 수 있으며, 다양한 기능을 제공합니다. ◆ anyhow! anyhow 메크로는 인자로 &str, String, std::error::error 트레잇에서 취급하는 모든 에러 타입을 사용할 수 있습니다. 반환값은 anyhow::Error 타입입니다. use anyhow::{anyhow, Error}; // &str 사용 예시 fn anyhow_test() -> Result{ return Err(anyhow!("test error")); } // String 사용 예시 fn anyhow_test() -> Result{ ret..
2022.04.15 -
[Rust/러스트] 트레잇(trait) 정리
■ 트레잇 트레잇은 타입들이 공통적으로 갖는 동작에 대해 추상화하도록 해줍니다. 이는 Java의 Interface에서 추상화 함수를 정의함으로써 강제력을 제공하는것과 유사합니다. 트레잇을 제네릭 파라미터의 타입으로 사용하는 상황에서 트레잇 바운드를 통해 서로 다른 구조체에 연관성을 제공할 수 있습니다. ◆ 트레잇 구현 Animal 트레잇 타입으로 구현한 Dog는 추상화된 custom_bark 메소드와 구현된 common_bark 메소드 두가지 메소드를 갖습니다. custom_bark 메소드는 Dog 구현부(impl)에서 강제적으로 정의가 되어야 하지만, common_bark 메소드는 정의하지 않고 Animal 트레잇 타입으로 구현한 모든 구조체에서 사용할 수 있습니다. trait Animal{ // 선언..
2022.02.25 -
[Rust/러스트] 제네릭(Generic) 정리
■ 제네릭 제네릭은 컨셉의 복제를 효율적으로 다루기 위한 도구로서, 구체화된 타입이나 다른 속성들에 대하여 추상화된 대리인의 역할을 수행합니다. 제네릭은 함수, 구조체, 열거형, 메소드를 정의할 때 사용할 수 있습니다. ◆ 제네릭 함수 활용 제네릭을 함수에 활용함으로써 다양한 타입의 파라미터를 받아 작업을 수행할 수 있습니다. 예시) T는 [i32], [f32], [&str] 타입의 파라미터를 받고 있으며, 파라미터를 그대로 반환하는 show 함수를 통해 함수에서의 제네릭 활용법을 확인할 수 있습니다. fn show(data : T) -> T { data } fn main(){ println!("i32 data : {}", show(29)); println!("f32 data : {}", show(0.2..
2022.02.23