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

중선 곽
중선 곽이노트리 부장 at 이노트리
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도
있기 때문에 젃대적이라고 생각하는 것은 좀 조심스럽다고 생각합니다.
- 금동첛님의 조얶 -
1 of 12

Recommended

소프트웨어의 동작 방식 이해 by
소프트웨어의 동작 방식 이해소프트웨어의 동작 방식 이해
소프트웨어의 동작 방식 이해중선 곽
16.8K views30 slides
자바 직렬화 (Java serialization) by
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)중선 곽
12.2K views25 slides
프로그래밍 방식의 변천 과정 by
프로그래밍 방식의 변천 과정프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정중선 곽
2.6K views22 slides
컴퓨터 네트워크와 인터넷 by
컴퓨터 네트워크와 인터넷컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷중선 곽
8.6K views40 slides
자바로 배우는 자료구조 by
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조중선 곽
9.5K views20 slides
파이썬과 자연어 5 | 딥러닝 by
파이썬과 자연어 5 | 딥러닝파이썬과 자연어 5 | 딥러닝
파이썬과 자연어 5 | 딥러닝김용범 | 무영인터내쇼날
472 views46 slides

More Related Content

What's hot

Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용 by
Python과 Tensorflow를 활용한  AI Chatbot 개발 및 실무 적용Python과 Tensorflow를 활용한  AI Chatbot 개발 및 실무 적용
Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용Susang Kim
39.4K views59 slides
졸업후 취업까지.ssul by
졸업후 취업까지.ssul졸업후 취업까지.ssul
졸업후 취업까지.ssul승표 홍
112 views33 slides
파이썬과 자연어 1 | Word Cloud by
파이썬과 자연어 1 | Word Cloud파이썬과 자연어 1 | Word Cloud
파이썬과 자연어 1 | Word Cloud김용범 | 무영인터내쇼날
756 views51 slides
Ropasaurusrex by
RopasaurusrexRopasaurusrex
Ropasaurusrex승표 홍
327 views34 slides
자연어5 | 1차강의 by
자연어5 | 1차강의자연어5 | 1차강의
자연어5 | 1차강의김용범 | 무영인터내쇼날
322 views55 slides
소프트웨어 2.0을 활용한 게임 어뷰징 검출 by
소프트웨어 2.0을 활용한 게임 어뷰징 검출소프트웨어 2.0을 활용한 게임 어뷰징 검출
소프트웨어 2.0을 활용한 게임 어뷰징 검출정주 김
5.4K views146 slides

What's hot(20)

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

Viewers also liked

프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리 by
프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리
프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리중선 곽
39.4K views40 slides
Java 개발자가 하드웨어를 만나게 된다면?? by
Java 개발자가 하드웨어를 만나게 된다면??Java 개발자가 하드웨어를 만나게 된다면??
Java 개발자가 하드웨어를 만나게 된다면??유명환 FunFun Yoo
4.5K views48 slides
프로그래머가 알아야 하는 메모리 관리 기법 by
프로그래머가 알아야 하는 메모리 관리 기법프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법중선 곽
39.8K views27 slides
컴퓨터 하드웨어 구조 by
컴퓨터 하드웨어 구조컴퓨터 하드웨어 구조
컴퓨터 하드웨어 구조dddddanbi
4.7K views13 slides
메이븐 기본 이해 by
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해중선 곽
36.3K views28 slides
사칙연산 프로그램 by
사칙연산 프로그램사칙연산 프로그램
사칙연산 프로그램중선 곽
13K views30 slides

Viewers also liked(20)

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

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

200819 NAVER TECH CONCERT 08_성능을 고민하는 슬기로운 개발자 생활 by
200819 NAVER TECH CONCERT 08_성능을 고민하는 슬기로운 개발자 생활200819 NAVER TECH CONCERT 08_성능을 고민하는 슬기로운 개발자 생활
200819 NAVER TECH CONCERT 08_성능을 고민하는 슬기로운 개발자 생활NAVER Engineering
751 views16 slides
[PYCON Korea 2018] Python Application Server for Recommender System by
[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
2K views57 slides
[PYCON Korea 2018] Python Application Server for Recommender System by
[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
758 views57 slides
NDC17 장창완(최종) by
NDC17 장창완(최종)NDC17 장창완(최종)
NDC17 장창완(최종)창완 장
1.4K views64 slides
임태현, 서버점검 제로에의 도전, NDC2011 by
임태현, 서버점검 제로에의 도전, NDC2011임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011devCAT Studio, NEXON
2.1K views68 slides
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019 by
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
6K views75 slides

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

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

More from 중선 곽

Test driven development short lesson by
Test driven development   short lessonTest driven development   short lesson
Test driven development short lesson중선 곽
1.3K views35 slides
Tomcat monitoring using_javamelody by
Tomcat monitoring using_javamelodyTomcat monitoring using_javamelody
Tomcat monitoring using_javamelody중선 곽
980 views10 slides
Web service performance_test_using_jmeter_ver1.2 by
Web service performance_test_using_jmeter_ver1.2Web service performance_test_using_jmeter_ver1.2
Web service performance_test_using_jmeter_ver1.2중선 곽
1.2K views44 slides
Online service 계층별 성능 모니터링 방안 by
Online service 계층별 성능 모니터링 방안Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안중선 곽
1.8K views13 slides
Intranet query tuning (example) by
Intranet query tuning (example)Intranet query tuning (example)
Intranet query tuning (example)중선 곽
651 views18 slides
Db 진단 및 튜닝 보고 (example) by
Db 진단 및 튜닝 보고 (example)Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)중선 곽
4K views12 slides

More from 중선 곽(15)

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

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

  • 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도 있기 때문에 젃대적이라고 생각하는 것은 좀 조심스럽다고 생각합니다. - 금동첛님의 조얶 -