Rain.i Blog

기억하자! Go 로 파일쓰는 방법 5 가지(Write with Go)

go 를 이용하여 buffer(byte slice)에 있는 데이터를 파일로 쓰는 방법에 대해 알아본다.파일에 데이터를 쓴다는 목적만 만족시키려면 아래의 5 가지 방법 어느 것을 사용해도 되겠다.하지만, 성능과 안정성을 고려한 쓰기는 또 다른 문제다.자신이 개발하려는 프로그램이 어떤 성격의...

Linked List 에서 중간 노드 최대한 빨리 찾기

문제 설명 간단하고 재밌는 문제다.”단일 LinkedList 에서 중간 노드를 가장 효율적으로 찾아라.”아주 간단한 아이디어만 떠올리면 되는데 처음에는 잘 떠오르지 않았던 문제다. 아래 구현된 코드의 방법보다 빠른 알고리즘이 있나? (없을 듯…) 조건- tail 노드를 직접 접근하는...

TDD 이야기(TDD에 대한 오해와 진실)

TDD 를 현업에서 오랫동안 사용해온 경험많은 필자들이 TDD 적용을 어려워하거나 불필요하다고 생각하는 독자들을 위해 만든 ebook 이다.비록 작은 책이지만 TDD 가 왜 필요하고 어떻게 적용해 볼 수 있는지에 대한 충분한 설득과 가이드를 담고 있는 책이라고...

객체 지향의 사실과 오해

객체지향이라는 것이 무엇일까?객체지향 프로그래밍을 수행하고 있는 개발자들조차 이 물음에 명확한 답을 바로 내놓지 못한다.객체지향이 말 그대로 객체를 지향한다는 것을 이미 알고 있으면서도, 나를 포함하여 대부분의 사람들은 이를 클래스나 상속 등 구현 관점에서만 바라보는건 아닌가 싶다.이런...

MySQL 성능분석도구 이야기(PERFORMANCE_SCHEMA)

개요 성능스키마란? 성능 스키마 수집 구조 성능스키마 사용방법 개요 데이터베이스에 있어서 성능은 포기할 수 없는 부분이다. 아무리 사용하기 편리하고 기능이 많더라도 성능이 나오지 않는 데이터베이스는 현업에서 절대 쓰여질 수 없다. 만족스런 성능의 기준은 DBMS 가...

Embedded SQL 개발 시 Database 별 Error Handling

Embedded SQL 을 이용하여 Database Application 개발 시 항상 Error Code 가 DB 별로 달라서 혼동되는 경우가 있다. 시스템의 Database 가 교체되었을 때 Application 의 소스 코드에서 가장 먼저 점검해야하는 부분이 Error Handling 부분이다.오늘은 Oracle,...

Docker Engine Binary 직접 빌드하기

docker CE(Community Edition) 제품을 통해 Docker 를 직접 빌드하는 방법을 알아본다.(Dockerfile 을 이용한 image build 가 아니다. docker 제품 자체를 빌드하려는 것이다.)먼저 도커의 소스 관리 체계에 관한 이전 글을 읽어보고 오는 것이 좋겠다. docker-ce repository...

비순차 프로세서 파이프라인 (Out-of-order Processor Pipeline)의 핵심기술 (2)

지난 포스팅에서 비순차 프로세싱의 핵심기술인 register renaming, reoder buffer, reservation station 에 대해서 알아보았는데요. 여기에 또 하나 빠지지말아야할 기술이 있습니다.바로 메모리 연산을 위한 로드-스토어 큐(Load-Store Queue)입니다. 이번 시간에는 이 로드스토어큐에 대해 알아보겠습니다.Load-Store Queue 는 다음과...

비순차 프로세서 파이프라인 (Out-of-order Processor Pipeline)의 핵심기술 (1)

비순차 실행은 명령어 수준에서 병렬성(Instruction Level Parallelism)을 찾아서 이를 순차적이 아닌 비순차적, 즉 병렬적으로 처리할 수 있도록 한 기술을 말합니다.그러면, 큰 그림에서 이러한 비순차적 명령어 처리를 하려면 어떤 기술들이 필요한지 살펴봅시다.이를 위해 비순차 실행에서 필요한...

명령어수준 병렬성(ILP, Instruction-level Parallelism)

ILP 는 비순차 실행에서 사용되는 기술입니다.말그대로 명령어 수준에서 프로그램에 기록된 순서대로 순차적으로 처리하는게 아니라, 명령어간의 상관관계를 잘 따져서 병렬처리가 가능하도록 하는 기술입니다.예를 들어, 다음과 같은 코드가 있다고 가정하면… int main() { int x, y, a,...