https://rustacean.net/ 러스트의 마스코트 Ferris (귀엽다) 1. 안전한 메모리 관리 Rust는 소유권(Ownership)과 수명(Lifetime)을 통해 안전하게 메모리를 관리한다. 소유권 (Ownership) Rust에는 메모리를 관리하는 소유권 시스템이 포함되어 있다. 소유권 시스템은 러스트의 핵심 기능이다. 모든 프로그램은 실행하는 동안 컴퓨터의 메모리를 사용하는 방법을 관리해야 한다. 몇몇 언어들은 프로그램이 실행될 때 더이상 사용하지 않는 메모리를 끊임없이 찾는 가비지 콜렉션을 갖고 있다. 다른 언어들에서는 프로그래머가 직접 명시적으로 메모리를 할당하고 해제해야 한다. 하지만 러스트에서 메모리는 컴파일 타임에 컴파일러가 체크할 규칙들로 구성된 소유권 시스템을 통해 관리된다..
분류 전체보기
2022년 3월 23에 출시된 따끈따끈한 Redis Stack에 대해서 알아보자 ♨️ Redis Stack은 완전한 개발자 경험을 제공하기 위해 최신 데이터 모델과 처리 엔진을 추가하는 Redis의 확장이다. Redis Stack은 개발자가 밀리초 이내에 안정적으로 요청을 처리할 수 있는 백엔드 데이터 플랫폼을 사용하여 실시간 애플리케이션을 구축할 수 있도록 만들어졌다. Redis Stack은 최신 데이터 모델 및 데이터 처리 도구(문서, 그래프, 검색 및 시계열)로 Redis를 확장하여 이를 수행한다. Redis Stack은 Redis를 RedisJSON, RedisSearch, RedisGraph, RedisTimeSeries 및 RedisBloom과 결합하였다. 또한 Redis 데이터를 이해하고 최..
Redis Cluster의 Cluster Client는 Cluster를 구성하는 모든 Redis와 Network로 직접 연결되어 있어야 한다는 특성을 갖고 있다. 즉 Redis Cluster의 각 Redis node들은 Cluster Client를 위한 End-point를 반드시 하나 이상 갖고 있어야 한다. 이러한 특징 때문에 Cluster를 구성하는 Redis node들의 개수 또는 Cluster Client의 개수가 늘어날수록 Network Connection은 기하급수적으로 늘어나게 된다. 이러한 문제점을 해결하기 위해서 Cluster Proxy를 사용해야 한다. Cluster Proxy란 Cluster Proxy는 Proxy Client에게 일정한 End-point를 제공한다. Cluster P..
📍읽기 쉬운 코드 작성하기 축약적이거나 함축적인 변수명은 피한다. # bad bal_s_d # good balance_sheet_decrease 짧게 씀으로써 몇 초 정도 타자 시간은 아낄 수 있을지 모르겠지만 결국 그런 것들은 몇 시간 또는 며칠을 허비하게 되는 기술적 부채로 여러분에게 다가올 것이다. 그런 기술적 부채를 미리 막을 수 있다면 타자치는 데 몇 초 정도 시간을 더 써서 변수명을 길게 풀어 쓰는 편이 충분히 가치 있는 일일 것이다. 함수 인자의 이름들은 꼭 써준다. 클래스와 메서드를 문서화한다. 코드에 주석은 꼭 달도록 한다. 재사용 가능한 함수 또는 메서드 안에서 반복되는 코드들은 리팩터링을 해둔다. 함수와 메서드는 가능한 한 작은 크기를 유지한다. 어림잡아 스크롤 없이 읽을 수 있는 길..
C 언어를 공부하다가 든 궁금증. int main 함수에서 return 0 값이 없어도 에러가 발생하지 않을까? #include int main() { int num1, num2, num3; num1 = 10; num2 = 20; num3 = 30; printf("%d %d %d\n", num1, num2, num3); return 0; } 나는 위와 같은 main 함수를 통해서 변수 num1, num2, num3 에 할당된 숫자들을 printf 함수를 통해 출력하고 싶었다. 나는 int로 main 함수 return 값의 데이터 유형을 지정했으니 0이 리턴되어야 하고 리턴 값이 없으면 에러가 나는 게 맞다고 생각했다. #include int main() { int num1, num2, num3; num1..
객체 지향 이란? 객체 지향이란 프로그램을 수많은 ‘객체(object)’라는 단위로 나누고 이들의 상호작용으로 서술하는 방식이다. 초기 프로그래밍 방식인 절차적 프로그래밍 방식을 벗어나 작은 단위의 객체들을 만든 뒤, 이 객체들을 조합하여 큰 문제를 해결하는 방식이다. Ruby에서의 객체 지향 루비에서 프로그래머가 다루는 모든 것은 객체이고 이러한 작업의 결과 또는 객체다. 객체 지향 코드를 작성할 때 일반적으로 실생활에서 있는 사물에서 모델 개념을 찾아 코드로 표현하려고 노력한다. 이러한 모델링 단계에서는 코드로 옮기고자 하는 것들을 성질이 비슷한 것으로 분류하는 작업이 필요하다. 주크박스를 예로 들자면 ‘노래’가 하나의 분류가 될 것이다. 루비에서는 이러한 독립적인 분류를 표현하기 위해서 클래스를 정..
**문제** 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. **입력** 첫째 줄에 A와 B가 주어진다. (0 < A,B < 10^10000) **출력** 첫째 줄에 A+B를 출력한다. **예제 입력 1** 9223372036854775807 9223372036854775808 **예제 출력 1** 18446744073709551615파이썬 같은 언어는 10,000자리 정도의 자연수도 자유롭게 다룰 수 있습니다. 하지만 C/C++이라면 이 문제를 어떻게 풀까요? C/C++ 사용자가 아니더라도 고민해 보면 좋을 것입니다. 파이썬을 사용하면 쉽게 풀 수 있는 문제이지만 C로 한번 풀어보겠다. #include int main(void) { int a, b; scanf("%d %d"..
한 해가 정말 쏜살같이 지나간 것 같다. 개발자로서 처음 입사했던 겨울을 지나 또 다른 겨울이 찾아왔다. 한 해 동안 회사도 열심히 다니고, 나름대로 많은 것을 도전했던 해였던 것 같다. 오픈소스 컨트리뷰션을 통해 RustPython이라는 오픈 소스에 기여해보고, 팀원들과 함께 사이드 프로젝트도 진행해보고, 방통대 컴퓨터과학과 3학년에 편입해서 공부해보는 경험을 했다. 하나 하나 찬찬히 돌아보자면, 오픈 소스에 기여해보면서 정말 정말 어려웠지만 멘토님의 도움으로 처음으로 오픈소스에 기여해보았다는 뿌듯함을 느낄 수 있있다. 그리고 멘토님에게 커리어 관련 조언을 구할 수 있었다. 그리고 팀원들 덕분에 운이 좋게도 상도 수여받았다. 사이드 프로젝트를 진행하며 좋은 동료들과 재미있는 것을 함께 구상하고 만드는 ..