1. 개요
optimization, 最適化한정된 자원과 상황[1] 속에서 최대한의 성능을 발휘할 수 있도록 끌어올리는 행위, 다시 말해 효율을 높이는 행위. 보통은 저 '성능'이 속도만을 의미하는 경우가 많지만 문맥에 따라 비용, 재료, 힘, 업무 생산성 등을 뜻하기도 한다.
2. 수학, 컴퓨터과학, 산업공학, 경제학에서의 최적화
- 조합 최적화(combinatorial optimization): 주어진 항목들의 조합으로 해가 표현되는 최적화 문제. 계산 복잡도에서 'NP-난해'가 나오는 비선형계획법 문제들은 최적해를 구하기 힘들다. 구할 수 있다 해도 비용이 많이 든다. 따라서 NP-난해임을 증명하는 방법, NP-난해일 경우 해의 품질을 포기하고 근사해를 구하는 기법들을 배우게 된다. 대표적으로 '외판원 순회 문제'가 있다.
- 메타 휴리스틱(meta heuristics) (대학원): 최적해(optimal solution)을 보장하지는 않지만 준최적해(suboptimal solution)을 빠르게 찾는 알고리즘. 유전 알고리즘, 모방 알고리즘, 입자 군집 최적화(particle swarm optimization, PSO), 개미 집단(ant colony) 알고리즘, 타부 탐색(Tabu search), 담금질 기법(simulated annealing), 하모니 탐색(Harmonic search) 등이 있다.
- 함수 최적화(function optimization): 어떤 목적 함수(objective function)가 있을 때, 이 함수를 최대로 하거나 최소로 하는 변수 값을 찾는 최적화 문제. 수리계획법 문제들은 상당수 이쪽 범주에 들어간다.
- 경제학: 수리경제학에서 최적화를 다룬다. 최적화는 의사결정을 내리는 경제 주체가 가장 바람직하다고 생각하는 상태를 만들기 위해 하는 것이다. 인간의 합리성 등을 가정하고 소비자의 효용극대화, 기업의 이윤극대화의 해를 구한다. 동적 계획법이나 최적제어론 역시 경제학에 응용되고 있다. 레닌그라드 공방전 당시 라도가 호수의 수송 문제에 이런 방법론들이 적용되어 수많은 사람들의 목숨을 구했다.
- 컴퓨터과학의 한 분야인 이론 컴퓨터 과학에서 많이 쓰인다. 세부적으로 들어가면 담금질 기법, 선형계획법, 비선형계획법 등 다양한 알고리즘을 활용한다.
자세한 내용은 최적화 이론 문서 참고하십시오.
3. 프로그램 최적화
프로그램을 최적화한다는 것은 보통 어떤 문제를 해결하는데 있어 가장 적절한 방법 즉, 좋은 알고리즘을 선택했다는 것을 의미한다. 1부터 n까지 정수를 더하는 코드를 작성한다고 할 때, 1부터 n까지 순차적으로 더하는 단순한 코드를 작성하면 최소 n번을 더하는 만큼의 시간이 걸리지만 n x (n +1) / 2 를 하면 순식간에 계산을 끝낼 수 있다. 요즘 같은 시대에는 수천수억개의 데이터를 다루는 것이 일상인 만큼 이런 최적화를 잘 해야 하는 것은 필수라고 할 수 있다.크로스 플랫폼 시대가 오면서 빠르게 개발 가능한 공통 프레임워크를 사용하는 것이 대세가 되다보니 기본적인 최적화조차 뒷전으로 하는 시대가 도래하고 말았다.
PC 최적화와 관련 소프트웨어에 대한 내용은 최적화 프로그램 문서 참조.
검색 엔진, 비디오 게임도 엄연히 프로그램이므로 아래 하위 문단도 프로그램 최적화로 볼 수 있다.
자세한 내용은 프로그램 최적화 문서 참고하십시오.
3.1. 검색 엔진 최적화
SEO(search engine optimization, 검색엔진 최적화)란 구글 크롤러가 웹사이트의 정보를 크롤링 하고, 순위를 매기는 방식에 맞도록 웹사이트를 수정, 조율을 하여 최적화 작업을 하고, 이를 통해 검색 결과(SERPs)의 상단에 타겟 웹사이트를 구글 상위 노출을 시켜 트래픽(방문자)을 높이는 디지털 마케팅 전략을 지칭한다. 간단하게 말하자면 수많은 웹 문서 중 이용자가 찾고있는 자료를 찾아주는 역할을 한다. 인터넷에서 원하는 자료를 찾는 것이 목적이지만 컴퓨터는 스스로 생각하지는 않기 때문에 사람이 컴퓨터의 기준에 맞춰서 웹 문서를 잘 작성 해야한다.웹사이트 출력 속도라던가, 웹 문서에 사용된 단어들 그리고 심지어 팔로우 유사 기능도 옛날 부터 있었고 검색 엔진은 이런 요소들을 전반적으로 측정한다. 웹에서 URL 팔로우 기능은 역링크 형태로 볼 수 있고 다른 웹사이트의 URL을 A(앵커)태그로 기재해주면 검색엔진은 팔로우 한 것으로 간주하여 해당 URL의 평가를 높혀주는 처리 방식이다. 네이버 블로그는 데스크탑과 모바일 환경에서 검색 여부가 엇갈리는데, 네이버 검색에서는 로봇 규칙을 반영하지 않기 때문에 검색에 나오게 된다. 네이버의 VIEW 검색은 검색엔진 표준과 다른 방식으로 작동한다. # 그래서 댓글에 URL을 넣는 방식으로 악용하는 사례가 많다.
오늘날 웹 문서는 대충 찾아봐도 알겠지만 유사한 문서가 많고 같은 주제의 문서도 아주 많은 편이다. 물론 대부분의 글들은 전문성이 부족하므로 10 페이지를 이상 둘러보기도 하지만 이러한 글 주제는 너무 많기 때문에 그냥 처음부터 다른 주제의 글을 쓰는 것이이 상책이다.
3.2. 비디오 게임 최적화
게임에서의 최적화란, 당대의 게임이 보편적인 사양의 기기에서 얼마나 좋은 그래픽을 보여주며 쾌적한 플레이 환경을 제공하는가에 따라 최적화가 잘 되었다 혹은 잘 되지 않았거나 발적화가 되었다고 표현되고 있다. 뛰어난 그래픽에 수많은 오브젝트가 쏟아져 나오는 게임임에도 불구하고 평범하거나 낮은 사양에서도 잘 돌아간다면 신적화가 되었다며 치켜세워지기도 한다.그래픽이 뛰어나지만 요구사양이 높은 게임이거나, 그래픽이 별로인 게임이 낮은 사양에서도 잘 돌아 가는 것은 당연한 일이기 때문에 이런 게임을 두고 최적화가 잘 되었다고는 하지 않는다.
또한 최적화라는 말 자체도 개발하는 입장에서 보면 다소 어폐가 있는데, 아무리 뛰어난 그래픽에 높은 해상도, 60프레임으로 돌아간다고 하더라도 결국 근본적인 사양의 한계를 뛰어넘을 수는 없기 때문에 그것을 두고 최적화를 잘했다고 단정지을 수는 없기 때문이다. 실제로는 등장하는 캐릭터를 줄인다거나 하는 식으로 교묘하면서도 영리하게 눈속임을 잘 하고 있는 것일 수도 있기 때문이다. 개발자의 입장에서는 최적화란 곧 트레이드 오프이다. 그래서 최적화가 잘 되었다는 말에는 이런 말을 하는 유저 개개인의 주관과 경험이 많이 반영되어 있다. 또한 주기적으로 평균 PC 사양이 높아지는 때에 출시되는 게임이라면 관대한 평가를 받을 수도 있다.
최적화 문제에 대해서는 개발자들도 당연히 신경을 쓴다. 최적화에 들이는 시간과 노력도 돈이기에 다소 최적화를 포기하더라도 게임을 일찍 출시하는 쪽이 여러모로 이득이기 때문이다. 사정이 이렇다보니 게임이 다소 덜 다듬어졌어도 일단 출시하고 패치로 고치는 일이 비일비재하다 못해 아예 미완성 수준의 버그 덩어리 게임을 출시하고 수년간에 걸쳐 완전히 새로운 게임으로 탈바꿈하는 경우도 종종 생기고 있다.
더 자세한 이야기는 발적화 참고
3.2.1. 레벨 디자인 최적화
레벨 디자이너 커뮤니티 등지에서 종종 논의되고 있는 이슈 중 하나로 맵상에서 프레임이 너무 심각하게 떨어져 게임 진행에 지장을 주지 않기 위해 원인이나 정도를 파악하고 조치를 취하는 일을 디자이너 사이에선 통상적으로 '최적화' 라 칭한다. 프레임 하락의 원인으론 대개 다음과 같다.- 유저 PC 사양이 평균보다 낮다.[2]
- 게임 엔진의 발적화 혹은 원인 모를 오류가 있다.
- 맵 지형이나 모델[3] 등에 고화질의 텍스처가 심각하게 남용된다.
- 각종 사물이나 NPC와 그것들의 시체, 그리고 여기에서 튄 파편들(Gibs)이 맵상에 너무 많이 존재한다.
그리고 문제 원인이 파악되면 다음과 같이 작업이 이루어진다.
- 고화질 텍스처가 원인이라면 24비트 텍스처를 256컬러로 낮추는 식으로 다운그레이드 혹은 해당 텍스처가 사용되는 빈도를 낮춘다.[4] 혹은 일반적으로 볼 수 없는 부분의 해상도를 낮춘다. 이것의 대표적인 사례가 하프라이프: 데이 원[5]과 스카이림의 화이트런[6]
- 과도한 사물들이 많아 생긴거면 게임 상에서 자주 보거나 쓸 일이 없는 것들부터 삭감하나, 엔진이 눈 앞의 사물 위주로 연산하고 나머지는 대충 처리하는 경우라면 한 공간에 너무 많은 사물들이 위치하게 않게 해줘도 좋다. 또한 게임이나 연출 특성상 부득이하게 시체와 파편들이 많이 발생되어야 한다면 발생(혹은 생성)된 지 몇 초 뒤 형태가 흐려져 사라지게끔 하는 것도 좋다.[7] 또 멀리 있는 오브젝트의 경우 해상도를 낮추거나 아니면 평면 텍스처로 떼울수도 있다.
- 레벨 또는 배경 오브젝트나 텍스처를 팔레트 스왑 혹은 여러 개로 분할시켜[8] 일부만 불러오거나 구조나 텍스처 일부를 바꿔 다른 모델로
재탕변형하는 방법도 존재한다. 비슷한 예로 사운드 파일도 여러개로 분할, Sentence(문장) 스크립트 파일에 짜여진 대로 소리가 순서대로 나게 만드는 경우도 있다. 이것처럼.
물론 유저의 사양이나 엔진상 문제면 레벨 디자이너가 할 수 있는 일은
여담이지만, 엔진에 따라 눈에 보이지 않는 불필요한 사물을 디자이너가 임의적으로 조절 혹은 생략시키는 기능도[9] 존재하기도 한다.
애초에 거의 모든 게임은 기본적으로, 벽만 있고 뒤쪽 내용물은 없는 텅 빈 연극용 무대 배경 같은것 들의 집합체라고 보면 된다. 그 상태에서 플레이어 눈에 보이는 부분에만 필요한 것들을 배치하고 그렇지 않은 부분은 텅 비게 놔두는 것은 레벨디자인의 기본이며, 그런식으로 만들어 나가면서도 완성하게 되면 또 필요없는 부분이 생겨나고, 그걸 또 치워나가는 작업을 반복한 끝에, 내용물도 텅텅 비우고 바깥쪽도 깎을 수 있는 한 최대한 깎아서 아주 얇은 껍질 한장만 남기고도 모자라서 그 껍질 뒷편마저 떼어내 버리는게 최적화라고 보면 된다
당연히 정성들어 하면 할수록 필요 시간과 비용이 매우 증가하게 된다.
4. 게임에서의 최적화
4.1. 실시간 전략 게임
실시간 전략 게임 Real-Time Strategy | |||||
{{{#!wiki style="margin: 0 -10px -5px; min-height: 26px" {{{#!folding [ 펼치기 · 접기 ] {{{#!wiki style="margin: -6px -1.5px -13px" | 기본 시스템 | 자원(인구 수 · 인구수 확장) | 건설(기지 확장 · 앞마당) | 생산 | |
연구 | 유닛 명령 | ||||
기타 시스템 | 테크 트리 | 전장의 안개 | 일꾼 | 영웅 유닛 | |
공통 전략 | 전략 | 빌드 오더(운영 · 날빌) | 정찰 | ||
소모전(터틀링) | 타워 러시 | 빈집털이 | |||
카이팅 | 심시티 | 엘리전 | 회전력 | ||
견제 | #s-4 |
실시간 전략 게임에서 쓰는 용어로, 특히 스타크래프트나 스타크래프트 2에서, 구현을 목표로 하는 빌드가 있다면 게임 시작 후 그 빌드에 도달하기까지의 군더더기를 제거하는 것을 일컫거나, 일꾼의 숫자를 자원의 양에 맞게 배치하는 것을 말한다.
이는 스타크래프트 2에서 두드러지게 나타나는데, 스타크래프트 2는 게임 시 주요 건물(연결체, 부화장, 사령부)과 가스 채취 건물(융화소, 추출장, 정제소) 주변의 자원에 몇 마리의 일꾼이 캐고 있는지 위 사진[10]처럼 UI 상으로 알 수 있으므로, 자원의 양에 따른 일꾼 수 조절이 쉽다. 일반적인 공허의 유산 래더맵에서는 광물 한 덩이당 2기×8, 가스 채취 건물 하나당 3기×2로 확장 기지 하나에 22기의 일꾼이 붙는 걸 최적화가 됐다고 한다.
4.2. 카트라이더에서의 최적화 드리프트
카트라이더에서도 최적화라는 기술이 있다. 직각형 코너에서 드리프트를 할때 라인 및 감속을 안정적으로 잡기 위해서 사용하는 기술이다. 가장 적은 감속으로 바퀴의 스키드가 겹치지 않는 수준으로 얇게 드리프트를 하면 순간 부스터가 나간다. 드리프트를 얇게 하지만 감속이 적기 때문에 부스터 게이지가 잘 차며 후속 코너 라인을 잡기에도 좋다.감속이 적은 드리프트라는 특성 상 카트라이더의 스피드전 실력을 늘리기 위해서라면 필수적으로 익혀야 하는 기본 중의 기본이며 대부분의 카트라이더 드리프트 기술들이 최적화 드리프트에서 파생된 기술들이다.
대표적으로 커팅 드리프트가 이 최적화 드리프트에 방향 잡는 드리프트를 추가하여 일반적인 드리프트 각이 안 나오는 코너에서 드리프트를 사용할 수 있는 기술이며 연타 드리프트는 최적화 드리프트가 끝나면서 순간 부스터와 동시에 후속 최적화 드리프트를 하는 기술이다. 톡톡이도 최적화 드리프트를 질질 끌어주는데서 시작되었다.
5. 소울컴퍼니 출신의 2인조 힙합 듀오
화나와 칼날이 소울컴퍼니의 첫 번째 레이블 앨범인 The Bangerz에서 첫 선을 보인 힙합 듀오다. 화나의 말에 따르면 프로젝트 그룹에 가까웠다는 듯. 라임 몬스터 화나와 그에 못지 않았던 칼날의 날카로운 랩핑이 리스너들에게 깊은 인상을 심어줬지만, 칼날이 얼마 있지 않아 음악활동을 줄이면서 자연스럽게 화나 솔로로 나오는 일이 많아졌다. 현재는 주로 화나 혼자 활동을 하고 있으며, 칼날은 2009년 프로듀서 콤마의 앨범에 수록한 주변인이라는 곡을 마지막으로 음악 활동을 접었다.6. 기타
여담으로 사람의 뇌도 최적화 진행 중이라는 연구결과가 있다. 뇌 크기는 점점 줄어들고 있는데, 지능은 오히려 높아지는 기현상이 발생하고 있기 때문.#7. 관련 문서
[1] 자원과 환경이 넉넉하다면 최적화는 의미가 없어진다.[2] 이럴때 저사양 옵션 등을 따로 해주지 않으면 플레이 자체가 불가능하다.[3] 맵상의 NPC나 배경 오브젝트.[4] 하프라이프 텍스처 에디터중 하나인 Wally는 해당 게임의 텍스처 묶음에 24비트 텍스처를 넣으면 자동으로 256색으로 변환해 준다. 만약 그런게 없으면 포토샵에서 텍스처마다 일일이 index color를 해줘야 한다.[5] '적을 발견했다' 쳅터 지상 부분 지붕 위.[6] 도시 밖에서 tcl 등을 치고 성벽 안을 들여다 보면 근거리임에도 지면 텍스쳐들이 마구 뭉개진 걸 볼 수 있다.[7] 밸브 역시 하프라이프 시리즈 제작시의 프레임 저하 노하우를 Portal 2에서도 발휘했는데, 테스트 쳄버(구획)별로 나눠서 맵 로딩이 잦다. 또한 여기저기 비산한 파편들을 몇 초 뒤에 소멸되게 만든 게 대표적.[8] 예컨대 집 모델이 굴뚝과 지붕, 문 등으로 분할된 것. 방사선 작업실에선 분할화 등으로 칭한다.[9] 해머(에디터)의 경우엔 맵상에서 힌트나 스킵 브러쉬, 애리어 포털 등을 배치해 건너편 사물을 임의적으로 안 보이게 만들 수 있다.[10] 위 사진의 건물은 협동전 임무에서 데하카가 쓰는 전용 추출장이다.