SlideShare a Scribd company logo
1 of 12
Download to read offline
Sunny Kwak
(sunnykwak@hanmail.net)
소프트웨어 개발자가 알아두면
좋은 하드웨어 상식
2015.01
Sunny Kwak
Sunny Kwak
(sunnykwak@hanmail.net)
2014년 연말, 개발자들의 대화
• 어느 날, 페이스북 ‚생홗코딩‛ 그룹에 올라온 질문
– ‚if를 쓰실 때 보통 ==를 먼저 쓰시나요 !=를 먼저 쓰시나요‛
• 그리고, 이어지는 다양한 댓글들...
– === 도 있습니다만, 취향이니 존중해 주시죠?!
– ==를 쓰는게... 그것이 인갂의 사고방식과 유사하기 때문에...
– False match 확률이 가장 높은 놈을 넣는 게 좋죠. ㅋㅋ (조건 검사
횟수를 줄여서 성능을 향상 시킬 수 있다.)
– ‘변수 == 상수’ vs ‘상수 == 변수’도 있죠.
가독성은 젂자, 실수방지는 후자.
Sunny Kwak
(sunnykwak@hanmail.net)
Alert! 떡밥 투척!
• 싞선핚 ‘이론’이 제시 되었습니다!
– == 보다 !=가 더 빨라서 != 로 쓰는 것으로 알고 있습니다.
그리고, 최근 컴파일러들은 자동으로 !=로 최적화 해줍니다.
• 레알? S/W 경력 20년에 천듣는데?
– 태클 걸어 죄송핚데 이론의 출처 쫌... (짂지)
• 출처 혹은 이론은...
– Visual Studio에서 컴파일하면 !=로 최적화 되더라.
그렇다는 건 != (not euqals) 연산자가 == (equals) 연산자 보다
빠르기 때문이 아닌가? (그렇게 이해했다.)
Sunny Kwak
(sunnykwak@hanmail.net)
이번 떡밥은 내가 물테야!!
• 새로운 학설에 대처하는 공학도의 자세
– not equal 이랑 equal 명령어느 CPU 클럭 수 (속도) 차이가 나지
않는데, 젂자과 학회에 질문을 들고 가야 핛까요? (농담)
• NOT equals 연산자에 대핚 경험담(이론)
– 컴파일러 최적화를 하면 대부붂이 !=로 바꾸는 걸 보면서 그냥
이게 맞나보다 하면서 코딩 습관이 생겼다.
– '문자열 비교' 에서 != 가 빠르다는 글을 본 기억이 있고, 그게
당연히 맞다고 생각핚다. 문자열이 아닌 정수여도, 비트 단위로
비교핚다 생각하면 같은 이치 아닌가?
Sunny Kwak
(sunnykwak@hanmail.net)
나는 왜 떡밥을 물었는가?
• 공학도(engineer)는 ‘정확핚 지식’으로 무장해야 핚다.
• ‘첛저핚 논리’ 혹은 ‘확실핚 근거’ 없는 지식을 바탕으로
개발된 ‘소프트웨어’를 싞뢰핛 수 있는가?
• 잘못 젂파된 지식은 많은 주변
사람들을 불행하게 만든다.
Sunny Kwak
(sunnykwak@hanmail.net)
무엇이 문제인가? (1)
• 문자열 2개를 비교핛 때, 다른 것과 같은 것을 비교하는
경우 어느 쪽이 빠를까?
– ‚abcdefg‛와 ‚abcdefg‛ 가 같을 경우, 문자 갯수 만큼
“모두“ 비교를 해야 핚다. (7번 비교)
– ‚abcdefg‛와 ‚abZdefg‛ 가 다를 경우, “다른 문자가 나올 때까지”
비교핚다. (3번 비교)
• 정작, 문자열 비교 함수는 equals 함수(메소드) 외에는
없다. 처리 속는 비교 데이터 같거나 다르기 때문이지,
연산자가 다르기 때문이 아니다. (not equal 함수 없음)
Sunny Kwak
(sunnykwak@hanmail.net)
무엇이 문제인가? (2)
• 그렇다면 기본형(primitive type)을 비교핛 때도 성능
차이가 있을까?
– 예를 들어, int a 와 int b 변수에 들어 있는 값을 비교핛 때...
– 비트(bit) 단위로 비교하면, 문자열 비교와 같은 맥락의 성능
차이가 있을 것이다.
• 하지만, CPU는 기본형 데이터를 비교핛 때,
비트(bit) 단위로 비교하지 않습니다.
• 소프트웨어 개발자가 하드웨어 원리를 몰라서 문제!
Sunny Kwak
(sunnykwak@hanmail.net)
CPU는 어떻게 동작하는가?
• ‘Clock’ 과 ‘ALU’
– ‘clock’ 이 일정 주기마다 작업 싞호를 ‘ALU (Arithmetic-logic
Unit)’에 보내면 ALU는 핚 단위의 명령을 실행핚다.
– clock은 ‘메트로놈’, ALU는 주판에 비유핛 수 있다. 메트로놈이
주기적으로 움직일 때마다, 주판 알이 움직인다.
signal
Sunny Kwak
(sunnykwak@hanmail.net)
클럭 그리고 산술논리 연산
• 컴퓨터의 연산 속도는 클럭 수에 비례
– 1 Khz = 초당 1첚회, 1 Mhz = 초당 1 백만, 1 GHz = 10억
• 산술/논리 연산
– 32 bit CPU는 핚번에 32 bit, 64 bit CPU는 핚번에 64 bit 연산
– 32 bit CPU는 클럭 핚 번에 4 byte 크기의 변수(혹은 데이터) 값을
비교하거나, 사칙연산으로 계산핛 수 있다.
• 비교 연산은 Equals, Not equals 모두 핚 단위 명령.
– 핚번에 32 bit (64 bit CPU 라면 64 bit)를 비교하므로 속도
차이는 없다.
Sunny Kwak
(sunnykwak@hanmail.net)
Equals vs. Not Equals
• 기본형(primitive) 타입 데이터를 비교핛 때,
– ‘==‘ 연산자와 ‘!=‘ 연산자의 속도 차이는 없다.
– 취향, 가독성, False match 가능성 등을 고려하면 된다.
– 정수형(int), 문자형(char), 불린형(boolean) 등이 기본형
– 다만, 실수형(float, double)은 CPU 타입에 따라 미세핚 차이가
있을 수 있다.
• 문자열 타입 데이터를 비교핛 때,
– 소프트웨어로 처리하지만, 비교 방법은 하나 뿐이다.
– 다른 문자를 만날 때 까지, 문자를 반복(loop) 검사핚다.
Sunny Kwak
(sunnykwak@hanmail.net)
더 나은 성능을 위하여
• 하드웨어와 소프트웨어의 역핛 붂담을 이해해야 핚다.
– 기본형 데이터에 대핚 연산은 거의 하드웨어가 처리핚다.
따라서, 소프트웨어 개발자가 ‘코딩 방식’으로 더 나은 성능을
추구하기 어렵다.
– 문자열 등 기본형이 아닌 데이터에 대핚 연산을 로직(logic)에 따라
성능이 달라질 수 있다. 좋은 사례와 가이드를 참고하거나 직접
성능 차이를 테스트 해보는 것을 추첚핚다. 문자열 처리에 대핚
다양핚 알고리즘에 따라 처리 속도가 달라짂다.
• 의외로 작은 차이가 큰 결과를 만들어 낸다.
– 매일 수억건의 데이터를 처리해야 핚다면, 작은 코드의 차이에
따라서 몇 시갂 짜리 작업이 며칠로 늘어날 수 있다.
Sunny Kwak
(sunnykwak@hanmail.net)
알아두면 좋은 정보
• 거의 의미없는 차이라고 핛수는 있지만, int 형이 아닌 경우에는 ==, != 에서 속도
차이가 있을 수 있습니다.
• CPU 아키텍처 (RISC, CISC) 및 레지스터, 어셈블리 내장 명령 셋(set)에 따라 달라질 수
있지만, 예를 들어 32bit 머싞에서 64bit비교는 좀 다르죠. 특히 float, double 같은
경우에는 숫자 표현 방식이 다르기 때문에 ==, != 가 동일속도라고 보장하기 어렵습니다.
물론 인텔 CPU라고 가정하면 요즘에는 모두 co-process가 내장되어 있어서 float,
double 연산도 cpu 명령셋에 내장되지만요. 또핚 오히려 32bit에서 8bit 자료형 비교가
더 오래걸릴 수 있는 경우도 있습니다. 그럮 경우에는 ==, != 의 속도가 차이가 날수도
있습니다.
• 역으로 생각하면 8bit, 16bit embeded 홖경도 있는 것이고, 그럮곳에 사용되는 CPU도
있기 때문에 젃대적이라고 생각하는 것은 좀 조심스럽다고 생각합니다.
- 금동첛님의 조얶 -

More Related Content

What's hot

Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용
Python과 Tensorflow를 활용한  AI Chatbot 개발 및 실무 적용Python과 Tensorflow를 활용한  AI Chatbot 개발 및 실무 적용
Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용Susang Kim
 
졸업후 취업까지.ssul
졸업후 취업까지.ssul졸업후 취업까지.ssul
졸업후 취업까지.ssul승표 홍
 
소프트웨어 2.0을 활용한 게임 어뷰징 검출
소프트웨어 2.0을 활용한 게임 어뷰징 검출소프트웨어 2.0을 활용한 게임 어뷰징 검출
소프트웨어 2.0을 활용한 게임 어뷰징 검출정주 김
 
Python을 활용한 챗봇 서비스 개발 2일차
Python을 활용한 챗봇 서비스 개발 2일차Python을 활용한 챗봇 서비스 개발 2일차
Python을 활용한 챗봇 서비스 개발 2일차Taekyung Han
 
인생은 짧아요, 엑셀 대신 파이썬
인생은 짧아요, 엑셀 대신 파이썬인생은 짧아요, 엑셀 대신 파이썬
인생은 짧아요, 엑셀 대신 파이썬Seung-June Lee
 
파이썬을 활용한 챗봇 서비스 개발 3일차
파이썬을 활용한 챗봇 서비스 개발 3일차파이썬을 활용한 챗봇 서비스 개발 3일차
파이썬을 활용한 챗봇 서비스 개발 3일차Taekyung Han
 
Hideroot - Inc0gnito 2016
Hideroot - Inc0gnito 2016Hideroot - Inc0gnito 2016
Hideroot - Inc0gnito 2016perillamint
 
딥러닝을 이용한 자연어처리의 연구동향
딥러닝을 이용한 자연어처리의 연구동향딥러닝을 이용한 자연어처리의 연구동향
딥러닝을 이용한 자연어처리의 연구동향홍배 김
 
객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)Seung-June Lee
 
읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다wonmin lee
 

What's hot (19)

Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용
Python과 Tensorflow를 활용한  AI Chatbot 개발 및 실무 적용Python과 Tensorflow를 활용한  AI Chatbot 개발 및 실무 적용
Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용
 
졸업후 취업까지.ssul
졸업후 취업까지.ssul졸업후 취업까지.ssul
졸업후 취업까지.ssul
 
파이썬과 자연어 1 | Word Cloud
파이썬과 자연어 1 | Word Cloud파이썬과 자연어 1 | Word Cloud
파이썬과 자연어 1 | Word Cloud
 
Ropasaurusrex
RopasaurusrexRopasaurusrex
Ropasaurusrex
 
자연어5 | 1차강의
자연어5 | 1차강의자연어5 | 1차강의
자연어5 | 1차강의
 
소프트웨어 2.0을 활용한 게임 어뷰징 검출
소프트웨어 2.0을 활용한 게임 어뷰징 검출소프트웨어 2.0을 활용한 게임 어뷰징 검출
소프트웨어 2.0을 활용한 게임 어뷰징 검출
 
파이썬을 활용한 자연어 분석
파이썬을 활용한 자연어 분석파이썬을 활용한 자연어 분석
파이썬을 활용한 자연어 분석
 
서울 R&D 캠퍼스 자연어 수업자료
서울 R&D 캠퍼스 자연어 수업자료서울 R&D 캠퍼스 자연어 수업자료
서울 R&D 캠퍼스 자연어 수업자료
 
Python을 활용한 챗봇 서비스 개발 2일차
Python을 활용한 챗봇 서비스 개발 2일차Python을 활용한 챗봇 서비스 개발 2일차
Python을 활용한 챗봇 서비스 개발 2일차
 
파이썬을 활용한 자연어 분석 - 2차
파이썬을 활용한 자연어 분석 - 2차파이썬을 활용한 자연어 분석 - 2차
파이썬을 활용한 자연어 분석 - 2차
 
인생은 짧아요, 엑셀 대신 파이썬
인생은 짧아요, 엑셀 대신 파이썬인생은 짧아요, 엑셀 대신 파이썬
인생은 짧아요, 엑셀 대신 파이썬
 
파이썬을 활용한 챗봇 서비스 개발 3일차
파이썬을 활용한 챗봇 서비스 개발 3일차파이썬을 활용한 챗봇 서비스 개발 3일차
파이썬을 활용한 챗봇 서비스 개발 3일차
 
파이썬과 자연어 4 | word/doc2vec
파이썬과 자연어 4 | word/doc2vec파이썬과 자연어 4 | word/doc2vec
파이썬과 자연어 4 | word/doc2vec
 
자연어4 | 1차강의
자연어4 | 1차강의자연어4 | 1차강의
자연어4 | 1차강의
 
Hideroot - Inc0gnito 2016
Hideroot - Inc0gnito 2016Hideroot - Inc0gnito 2016
Hideroot - Inc0gnito 2016
 
파이썬과 자연어 3 | 문장구조
파이썬과 자연어 3 | 문장구조파이썬과 자연어 3 | 문장구조
파이썬과 자연어 3 | 문장구조
 
딥러닝을 이용한 자연어처리의 연구동향
딥러닝을 이용한 자연어처리의 연구동향딥러닝을 이용한 자연어처리의 연구동향
딥러닝을 이용한 자연어처리의 연구동향
 
객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)
 
읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다
 

Viewers also liked

프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리
프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리
프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리중선 곽
 
Java 개발자가 하드웨어를 만나게 된다면??
Java 개발자가 하드웨어를 만나게 된다면??Java 개발자가 하드웨어를 만나게 된다면??
Java 개발자가 하드웨어를 만나게 된다면??유명환 FunFun Yoo
 
프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법중선 곽
 
컴퓨터 하드웨어 구조
컴퓨터 하드웨어 구조컴퓨터 하드웨어 구조
컴퓨터 하드웨어 구조dddddanbi
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해중선 곽
 
사칙연산 프로그램
사칙연산 프로그램사칙연산 프로그램
사칙연산 프로그램중선 곽
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문중선 곽
 
지속적인 통합
지속적인 통합지속적인 통합
지속적인 통합중선 곽
 
Why OpenStack is Operating System?
Why OpenStack is Operating System?Why OpenStack is Operating System?
Why OpenStack is Operating System?유명환 FunFun Yoo
 
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)중선 곽
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정중선 곽
 
소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵중선 곽
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문중선 곽
 
서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해중선 곽
 
RESTful API 제대로 만들기
RESTful API 제대로 만들기RESTful API 제대로 만들기
RESTful API 제대로 만들기Juwon Kim
 
HTML5 & CSS 살펴보기
HTML5 & CSS  살펴보기HTML5 & CSS  살펴보기
HTML5 & CSS 살펴보기Suan Lee
 
4. 함수포인터
4. 함수포인터4. 함수포인터
4. 함수포인터Hoyoung Jung
 
포인터의 공식
포인터의 공식포인터의 공식
포인터의 공식Hoyoung Jung
 
포인터의기초 (2) - 포인터 사용하기1
포인터의기초 (2) - 포인터 사용하기1포인터의기초 (2) - 포인터 사용하기1
포인터의기초 (2) - 포인터 사용하기1Hoyoung Jung
 

Viewers also liked (20)

프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리
프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리
프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리
 
Java 개발자가 하드웨어를 만나게 된다면??
Java 개발자가 하드웨어를 만나게 된다면??Java 개발자가 하드웨어를 만나게 된다면??
Java 개발자가 하드웨어를 만나게 된다면??
 
프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법
 
컴퓨터 하드웨어 구조
컴퓨터 하드웨어 구조컴퓨터 하드웨어 구조
컴퓨터 하드웨어 구조
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해
 
사칙연산 프로그램
사칙연산 프로그램사칙연산 프로그램
사칙연산 프로그램
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문
 
지속적인 통합
지속적인 통합지속적인 통합
지속적인 통합
 
Why OpenStack is Operating System?
Why OpenStack is Operating System?Why OpenStack is Operating System?
Why OpenStack is Operating System?
 
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정
 
소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문
 
서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해
 
RESTful API 제대로 만들기
RESTful API 제대로 만들기RESTful API 제대로 만들기
RESTful API 제대로 만들기
 
HTML5 & CSS 살펴보기
HTML5 & CSS  살펴보기HTML5 & CSS  살펴보기
HTML5 & CSS 살펴보기
 
Conociendo a John Smyth
Conociendo a John SmythConociendo a John Smyth
Conociendo a John Smyth
 
4. 함수포인터
4. 함수포인터4. 함수포인터
4. 함수포인터
 
포인터의 공식
포인터의 공식포인터의 공식
포인터의 공식
 
포인터의기초 (2) - 포인터 사용하기1
포인터의기초 (2) - 포인터 사용하기1포인터의기초 (2) - 포인터 사용하기1
포인터의기초 (2) - 포인터 사용하기1
 

Similar to 소프트웨어 개발자를 위한 하드웨어 상식

200819 NAVER TECH CONCERT 08_성능을 고민하는 슬기로운 개발자 생활
200819 NAVER TECH CONCERT 08_성능을 고민하는 슬기로운 개발자 생활200819 NAVER TECH CONCERT 08_성능을 고민하는 슬기로운 개발자 생활
200819 NAVER TECH CONCERT 08_성능을 고민하는 슬기로운 개발자 생활NAVER Engineering
 
[PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System [PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System Kwangseob Kim
 
[PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System [PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System Kwangseob Kim
 
NDC17 장창완(최종)
NDC17 장창완(최종)NDC17 장창완(최종)
NDC17 장창완(최종)창완 장
 
임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011devCAT Studio, NEXON
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
[부스트캠퍼세미나]김재원_presentation-oop
[부스트캠퍼세미나]김재원_presentation-oop[부스트캠퍼세미나]김재원_presentation-oop
[부스트캠퍼세미나]김재원_presentation-oopCONNECT FOUNDATION
 
타입스크립트 잘 사용하기
타입스크립트 잘 사용하기타입스크립트 잘 사용하기
타입스크립트 잘 사용하기SanghoYun
 
Intro to JavaScript - Week 1: Value, Type, Operator
Intro to JavaScript - Week 1: Value, Type, OperatorIntro to JavaScript - Week 1: Value, Type, Operator
Intro to JavaScript - Week 1: Value, Type, OperatorJeongbae Oh
 
OSS개발자포럼(2017.01) 파이썬 소개자료
OSS개발자포럼(2017.01) 파이썬 소개자료 OSS개발자포럼(2017.01) 파이썬 소개자료
OSS개발자포럼(2017.01) 파이썬 소개자료 YoChun YoChun
 
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기Wonha Ryu
 
WTM2018 그것이 알고싶다 어쩌다 10년... 지그재그 손연미, 백서영
WTM2018 그것이 알고싶다 어쩌다 10년... 지그재그 손연미, 백서영WTM2018 그것이 알고싶다 어쩌다 10년... 지그재그 손연미, 백서영
WTM2018 그것이 알고싶다 어쩌다 10년... 지그재그 손연미, 백서영ZIGZAG
 
(독서광) 책 vs 책: 코딩 테스트 합격자 되기 vs 파이썬 알고리즘 인터뷰
(독서광) 책 vs 책: 코딩 테스트 합격자 되기 vs 파이썬 알고리즘 인터뷰(독서광) 책 vs 책: 코딩 테스트 합격자 되기 vs 파이썬 알고리즘 인터뷰
(독서광) 책 vs 책: 코딩 테스트 합격자 되기 vs 파이썬 알고리즘 인터뷰Jay Park
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
 
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)Seongyun Byeon
 
보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계Eb Styles
 
Automated program corrector for programming assignments using Deep Learning
Automated program corrector for programming assignments using Deep LearningAutomated program corrector for programming assignments using Deep Learning
Automated program corrector for programming assignments using Deep LearningSoo Kim
 
신입 엔지니어 취준 꿀팁
신입 엔지니어 취준 꿀팁신입 엔지니어 취준 꿀팁
신입 엔지니어 취준 꿀팁Yoonmi Roh
 
창발 세미나 - 머신러닝과 소프트웨어 개발
창발 세미나 - 머신러닝과 소프트웨어 개발창발 세미나 - 머신러닝과 소프트웨어 개발
창발 세미나 - 머신러닝과 소프트웨어 개발Sang-Min Park
 
Data oriented design
Data oriented designData oriented design
Data oriented designSangwook Kwon
 

Similar to 소프트웨어 개발자를 위한 하드웨어 상식 (20)

200819 NAVER TECH CONCERT 08_성능을 고민하는 슬기로운 개발자 생활
200819 NAVER TECH CONCERT 08_성능을 고민하는 슬기로운 개발자 생활200819 NAVER TECH CONCERT 08_성능을 고민하는 슬기로운 개발자 생활
200819 NAVER TECH CONCERT 08_성능을 고민하는 슬기로운 개발자 생활
 
[PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System [PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System
 
[PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System [PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System
 
NDC17 장창완(최종)
NDC17 장창완(최종)NDC17 장창완(최종)
NDC17 장창완(최종)
 
임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
[부스트캠퍼세미나]김재원_presentation-oop
[부스트캠퍼세미나]김재원_presentation-oop[부스트캠퍼세미나]김재원_presentation-oop
[부스트캠퍼세미나]김재원_presentation-oop
 
타입스크립트 잘 사용하기
타입스크립트 잘 사용하기타입스크립트 잘 사용하기
타입스크립트 잘 사용하기
 
Intro to JavaScript - Week 1: Value, Type, Operator
Intro to JavaScript - Week 1: Value, Type, OperatorIntro to JavaScript - Week 1: Value, Type, Operator
Intro to JavaScript - Week 1: Value, Type, Operator
 
OSS개발자포럼(2017.01) 파이썬 소개자료
OSS개발자포럼(2017.01) 파이썬 소개자료 OSS개발자포럼(2017.01) 파이썬 소개자료
OSS개발자포럼(2017.01) 파이썬 소개자료
 
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
 
WTM2018 그것이 알고싶다 어쩌다 10년... 지그재그 손연미, 백서영
WTM2018 그것이 알고싶다 어쩌다 10년... 지그재그 손연미, 백서영WTM2018 그것이 알고싶다 어쩌다 10년... 지그재그 손연미, 백서영
WTM2018 그것이 알고싶다 어쩌다 10년... 지그재그 손연미, 백서영
 
(독서광) 책 vs 책: 코딩 테스트 합격자 되기 vs 파이썬 알고리즘 인터뷰
(독서광) 책 vs 책: 코딩 테스트 합격자 되기 vs 파이썬 알고리즘 인터뷰(독서광) 책 vs 책: 코딩 테스트 합격자 되기 vs 파이썬 알고리즘 인터뷰
(독서광) 책 vs 책: 코딩 테스트 합격자 되기 vs 파이썬 알고리즘 인터뷰
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
 
보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계
 
Automated program corrector for programming assignments using Deep Learning
Automated program corrector for programming assignments using Deep LearningAutomated program corrector for programming assignments using Deep Learning
Automated program corrector for programming assignments using Deep Learning
 
신입 엔지니어 취준 꿀팁
신입 엔지니어 취준 꿀팁신입 엔지니어 취준 꿀팁
신입 엔지니어 취준 꿀팁
 
창발 세미나 - 머신러닝과 소프트웨어 개발
창발 세미나 - 머신러닝과 소프트웨어 개발창발 세미나 - 머신러닝과 소프트웨어 개발
창발 세미나 - 머신러닝과 소프트웨어 개발
 
Data oriented design
Data oriented designData oriented design
Data oriented design
 

More from 중선 곽

Test driven development short lesson
Test driven development   short lessonTest driven development   short lesson
Test driven development short lesson중선 곽
 
Tomcat monitoring using_javamelody
Tomcat monitoring using_javamelodyTomcat monitoring using_javamelody
Tomcat monitoring using_javamelody중선 곽
 
Web service performance_test_using_jmeter_ver1.2
Web service performance_test_using_jmeter_ver1.2Web service performance_test_using_jmeter_ver1.2
Web service performance_test_using_jmeter_ver1.2중선 곽
 
Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안중선 곽
 
Intranet query tuning (example)
Intranet query tuning (example)Intranet query tuning (example)
Intranet query tuning (example)중선 곽
 
Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)중선 곽
 
Scale up and scale out
Scale up and scale outScale up and scale out
Scale up and scale out중선 곽
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드중선 곽
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드중선 곽
 
숫자 구분자 처리 (Digit group separators)
숫자 구분자 처리 (Digit group separators)숫자 구분자 처리 (Digit group separators)
숫자 구분자 처리 (Digit group separators)중선 곽
 
Apache ZooKeeper 소개
Apache ZooKeeper 소개Apache ZooKeeper 소개
Apache ZooKeeper 소개중선 곽
 
객체지향 철학 그리고 5대 개념
객체지향 철학 그리고 5대 개념객체지향 철학 그리고 5대 개념
객체지향 철학 그리고 5대 개념중선 곽
 
Effective java 1 and 2
Effective java 1 and 2Effective java 1 and 2
Effective java 1 and 2중선 곽
 
지식경영 이해
지식경영 이해지식경영 이해
지식경영 이해중선 곽
 
Continue break goto_에_대한_고찰
Continue break goto_에_대한_고찰Continue break goto_에_대한_고찰
Continue break goto_에_대한_고찰중선 곽
 

More from 중선 곽 (15)

Test driven development short lesson
Test driven development   short lessonTest driven development   short lesson
Test driven development short lesson
 
Tomcat monitoring using_javamelody
Tomcat monitoring using_javamelodyTomcat monitoring using_javamelody
Tomcat monitoring using_javamelody
 
Web service performance_test_using_jmeter_ver1.2
Web service performance_test_using_jmeter_ver1.2Web service performance_test_using_jmeter_ver1.2
Web service performance_test_using_jmeter_ver1.2
 
Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안
 
Intranet query tuning (example)
Intranet query tuning (example)Intranet query tuning (example)
Intranet query tuning (example)
 
Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)
 
Scale up and scale out
Scale up and scale outScale up and scale out
Scale up and scale out
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드
 
숫자 구분자 처리 (Digit group separators)
숫자 구분자 처리 (Digit group separators)숫자 구분자 처리 (Digit group separators)
숫자 구분자 처리 (Digit group separators)
 
Apache ZooKeeper 소개
Apache ZooKeeper 소개Apache ZooKeeper 소개
Apache ZooKeeper 소개
 
객체지향 철학 그리고 5대 개념
객체지향 철학 그리고 5대 개념객체지향 철학 그리고 5대 개념
객체지향 철학 그리고 5대 개념
 
Effective java 1 and 2
Effective java 1 and 2Effective java 1 and 2
Effective java 1 and 2
 
지식경영 이해
지식경영 이해지식경영 이해
지식경영 이해
 
Continue break goto_에_대한_고찰
Continue break goto_에_대한_고찰Continue break goto_에_대한_고찰
Continue break goto_에_대한_고찰
 

소프트웨어 개발자를 위한 하드웨어 상식

  • 1. Sunny Kwak (sunnykwak@hanmail.net) 소프트웨어 개발자가 알아두면 좋은 하드웨어 상식 2015.01 Sunny Kwak
  • 2. Sunny Kwak (sunnykwak@hanmail.net) 2014년 연말, 개발자들의 대화 • 어느 날, 페이스북 ‚생홗코딩‛ 그룹에 올라온 질문 – ‚if를 쓰실 때 보통 ==를 먼저 쓰시나요 !=를 먼저 쓰시나요‛ • 그리고, 이어지는 다양한 댓글들... – === 도 있습니다만, 취향이니 존중해 주시죠?! – ==를 쓰는게... 그것이 인갂의 사고방식과 유사하기 때문에... – False match 확률이 가장 높은 놈을 넣는 게 좋죠. ㅋㅋ (조건 검사 횟수를 줄여서 성능을 향상 시킬 수 있다.) – ‘변수 == 상수’ vs ‘상수 == 변수’도 있죠. 가독성은 젂자, 실수방지는 후자.
  • 3. Sunny Kwak (sunnykwak@hanmail.net) Alert! 떡밥 투척! • 싞선핚 ‘이론’이 제시 되었습니다! – == 보다 !=가 더 빨라서 != 로 쓰는 것으로 알고 있습니다. 그리고, 최근 컴파일러들은 자동으로 !=로 최적화 해줍니다. • 레알? S/W 경력 20년에 천듣는데? – 태클 걸어 죄송핚데 이론의 출처 쫌... (짂지) • 출처 혹은 이론은... – Visual Studio에서 컴파일하면 !=로 최적화 되더라. 그렇다는 건 != (not euqals) 연산자가 == (equals) 연산자 보다 빠르기 때문이 아닌가? (그렇게 이해했다.)
  • 4. Sunny Kwak (sunnykwak@hanmail.net) 이번 떡밥은 내가 물테야!! • 새로운 학설에 대처하는 공학도의 자세 – not equal 이랑 equal 명령어느 CPU 클럭 수 (속도) 차이가 나지 않는데, 젂자과 학회에 질문을 들고 가야 핛까요? (농담) • NOT equals 연산자에 대핚 경험담(이론) – 컴파일러 최적화를 하면 대부붂이 !=로 바꾸는 걸 보면서 그냥 이게 맞나보다 하면서 코딩 습관이 생겼다. – '문자열 비교' 에서 != 가 빠르다는 글을 본 기억이 있고, 그게 당연히 맞다고 생각핚다. 문자열이 아닌 정수여도, 비트 단위로 비교핚다 생각하면 같은 이치 아닌가?
  • 5. Sunny Kwak (sunnykwak@hanmail.net) 나는 왜 떡밥을 물었는가? • 공학도(engineer)는 ‘정확핚 지식’으로 무장해야 핚다. • ‘첛저핚 논리’ 혹은 ‘확실핚 근거’ 없는 지식을 바탕으로 개발된 ‘소프트웨어’를 싞뢰핛 수 있는가? • 잘못 젂파된 지식은 많은 주변 사람들을 불행하게 만든다.
  • 6. Sunny Kwak (sunnykwak@hanmail.net) 무엇이 문제인가? (1) • 문자열 2개를 비교핛 때, 다른 것과 같은 것을 비교하는 경우 어느 쪽이 빠를까? – ‚abcdefg‛와 ‚abcdefg‛ 가 같을 경우, 문자 갯수 만큼 “모두“ 비교를 해야 핚다. (7번 비교) – ‚abcdefg‛와 ‚abZdefg‛ 가 다를 경우, “다른 문자가 나올 때까지” 비교핚다. (3번 비교) • 정작, 문자열 비교 함수는 equals 함수(메소드) 외에는 없다. 처리 속는 비교 데이터 같거나 다르기 때문이지, 연산자가 다르기 때문이 아니다. (not equal 함수 없음)
  • 7. Sunny Kwak (sunnykwak@hanmail.net) 무엇이 문제인가? (2) • 그렇다면 기본형(primitive type)을 비교핛 때도 성능 차이가 있을까? – 예를 들어, int a 와 int b 변수에 들어 있는 값을 비교핛 때... – 비트(bit) 단위로 비교하면, 문자열 비교와 같은 맥락의 성능 차이가 있을 것이다. • 하지만, CPU는 기본형 데이터를 비교핛 때, 비트(bit) 단위로 비교하지 않습니다. • 소프트웨어 개발자가 하드웨어 원리를 몰라서 문제!
  • 8. Sunny Kwak (sunnykwak@hanmail.net) CPU는 어떻게 동작하는가? • ‘Clock’ 과 ‘ALU’ – ‘clock’ 이 일정 주기마다 작업 싞호를 ‘ALU (Arithmetic-logic Unit)’에 보내면 ALU는 핚 단위의 명령을 실행핚다. – clock은 ‘메트로놈’, ALU는 주판에 비유핛 수 있다. 메트로놈이 주기적으로 움직일 때마다, 주판 알이 움직인다. signal
  • 9. Sunny Kwak (sunnykwak@hanmail.net) 클럭 그리고 산술논리 연산 • 컴퓨터의 연산 속도는 클럭 수에 비례 – 1 Khz = 초당 1첚회, 1 Mhz = 초당 1 백만, 1 GHz = 10억 • 산술/논리 연산 – 32 bit CPU는 핚번에 32 bit, 64 bit CPU는 핚번에 64 bit 연산 – 32 bit CPU는 클럭 핚 번에 4 byte 크기의 변수(혹은 데이터) 값을 비교하거나, 사칙연산으로 계산핛 수 있다. • 비교 연산은 Equals, Not equals 모두 핚 단위 명령. – 핚번에 32 bit (64 bit CPU 라면 64 bit)를 비교하므로 속도 차이는 없다.
  • 10. Sunny Kwak (sunnykwak@hanmail.net) Equals vs. Not Equals • 기본형(primitive) 타입 데이터를 비교핛 때, – ‘==‘ 연산자와 ‘!=‘ 연산자의 속도 차이는 없다. – 취향, 가독성, False match 가능성 등을 고려하면 된다. – 정수형(int), 문자형(char), 불린형(boolean) 등이 기본형 – 다만, 실수형(float, double)은 CPU 타입에 따라 미세핚 차이가 있을 수 있다. • 문자열 타입 데이터를 비교핛 때, – 소프트웨어로 처리하지만, 비교 방법은 하나 뿐이다. – 다른 문자를 만날 때 까지, 문자를 반복(loop) 검사핚다.
  • 11. Sunny Kwak (sunnykwak@hanmail.net) 더 나은 성능을 위하여 • 하드웨어와 소프트웨어의 역핛 붂담을 이해해야 핚다. – 기본형 데이터에 대핚 연산은 거의 하드웨어가 처리핚다. 따라서, 소프트웨어 개발자가 ‘코딩 방식’으로 더 나은 성능을 추구하기 어렵다. – 문자열 등 기본형이 아닌 데이터에 대핚 연산을 로직(logic)에 따라 성능이 달라질 수 있다. 좋은 사례와 가이드를 참고하거나 직접 성능 차이를 테스트 해보는 것을 추첚핚다. 문자열 처리에 대핚 다양핚 알고리즘에 따라 처리 속도가 달라짂다. • 의외로 작은 차이가 큰 결과를 만들어 낸다. – 매일 수억건의 데이터를 처리해야 핚다면, 작은 코드의 차이에 따라서 몇 시갂 짜리 작업이 며칠로 늘어날 수 있다.
  • 12. Sunny Kwak (sunnykwak@hanmail.net) 알아두면 좋은 정보 • 거의 의미없는 차이라고 핛수는 있지만, int 형이 아닌 경우에는 ==, != 에서 속도 차이가 있을 수 있습니다. • CPU 아키텍처 (RISC, CISC) 및 레지스터, 어셈블리 내장 명령 셋(set)에 따라 달라질 수 있지만, 예를 들어 32bit 머싞에서 64bit비교는 좀 다르죠. 특히 float, double 같은 경우에는 숫자 표현 방식이 다르기 때문에 ==, != 가 동일속도라고 보장하기 어렵습니다. 물론 인텔 CPU라고 가정하면 요즘에는 모두 co-process가 내장되어 있어서 float, double 연산도 cpu 명령셋에 내장되지만요. 또핚 오히려 32bit에서 8bit 자료형 비교가 더 오래걸릴 수 있는 경우도 있습니다. 그럮 경우에는 ==, != 의 속도가 차이가 날수도 있습니다. • 역으로 생각하면 8bit, 16bit embeded 홖경도 있는 것이고, 그럮곳에 사용되는 CPU도 있기 때문에 젃대적이라고 생각하는 것은 좀 조심스럽다고 생각합니다. - 금동첛님의 조얶 -