본문 바로가기

IT

알고리즘(Algorithm) 설계와 활용

반응형

프로그램에 중심이 되는 데이터는 비교적 확실하게 보인다. 온라인 쇼핑 프로그램은 가격과 재고 수량 같은 판매 품목에 관한 데이터가 필요하다. 의료 보험 프로그램은 환자가 받은 의료 서비스와 서비스 비용에 대한 데이터가 필요하다. 비디오 스트리밍 앱은 수많은 압축 데이터를 해독해 픽셀의 색과 위치에 관한 정보로 변환시킨다. 이렇게 변환된 데이터는 화면에 표시된다. MIT의 교수인 Dina Katabi는 무선 신호 분석 및 처리를 위해 다양한 기술과 알고리즘(어떤 문제를 해결하기 위한 명확하게 정의된 계산 과정이나 절차를 의미하는 것으로, 주어진 입력(input)에 대해 원하는 출력(output)을 생성하기 위한 단계적 절차) 개발을 통해 무선 네트워크와 센서 네트워크에서의 데이터 통신의 효율을 높이고 보안성을 강화하는 연구를 하고 있다. 카타비 연구팀은 해마다 수백만 명씩 발생하는 노인 낙상 환자를 돕기 위한 시스템을 만들었는데, 노인들이 갑자기 넘어지는 것을 감지하면 간병인에게 문자를 보내거나 구급차를 부른다. 또한, 노인의 생활을 추적해 과거의 호흡, 동 수준, 심박수, 수면 패턴의 변화를 알아낸다. 이러한 데이터들로부터 알고리즘을 개발하여 심장병이나 폐 질환이 있는 사람의 이상 징후를 미리 발견하고 대처할 수 있도록 프로그램되어 있다.

 

프로그램은 여러 가지 데이터를 수집 또는 생성하는데, 예를 들면, 유통 플랫폼의 소프트웨어는 소비자가 검색하는 모든 품목, 소비자가 최근에 판매 프로모션 이메일을 보았는지에 대한 데이터를 수집할 수 있다. 건강 보험 소프트웨어는 환자 정보를 요청한 모든 곳을 기록하고, 의사나 병원과의 데이터 교환을 문서화한다. 흥미로운 앱이나 게임 소프트웨어 설계도 데이터 관리와 밀접한 관련이 있다. 리그 오브 레전드(LoL)나 월드 오브 워크래프트, 리니지 같은 멀티플레이어 게임은 여러 가지 데이터를 저장하는데 대표적으로 다음과 같다.

(1) 각 플레이어의 로그인 날짜 및 시간

(2) 시간에 따른 캐릭터 레벨, 능력치 및 HP 변화

(3) 현재 및 과거 동맹군의 세부 사항

(4) 모든 움직임의 시작점, 끝점, 경로 및 지속 시간

(5) 다른 캐릭터나 객체와 접촉한 장소 및 지속 시간

 

게임 이용(user)가 많을수록 저장해야 하는 데이터 역시 방대하다는 뜻이다. 스프레드시트 같은 기본 도구로는 속도나 용량에서 그 정도 데이터를 처리할 수 없다. 개발자가 데이터베이스를 정확하게 설정하지 않으면 프로그램 속도가 아주 느려지거나 너무 많은 저장 공간을 차지하게 된다. 

 

다른 예로 아마존 같은 회사는 정보 수집과 저장을 매우 중요하게 여긴다. 아마존은 고객이 무엇을 검색했는지, 어떤 물건들을 비교했는지, 어떤 걸 샀는지, 물건을 살 때마다 얼마나 걸렸는지, 결제 수단은 무엇인지, 어떤 배송 방법을 택했는지, 반품은 얼마나 자주 했는지, 고객 리뷰는 어땠는지 등 고객의 행동을 모두 가상으로 추적한다. 이러한 데이터를 하나의 거대한 스프레드시트에 배열해 고객이 조회하는 각 항목에 표를 만들고 새로운 줄을 추가한다면, 수천 개의 행에 나열하게 되고 많은 저장 공간을 낭비하게 된다. 정보를 계속 반복하면 업데이트와 수정도 어렵기 때문에 개발자는 데이터베이스를 설계한다. 반복 정보를 최소화하는 데이터베이스를 '정규화된 데이터베이스'라고 한다. 단일 스프레드시트보다 복잡하지만 저장 공간이 작게 들고 업데이트하기도 쉽다. 기업에서는 데이터베이스 쿼리(Query, 데이터에 저장된 정보를 필터링하기 위한 질문)를 사용해 각종 데이터 조합 보고서를 만들 수 있고, 다양한 분류를 통해 데이터를 관리할 수 있다. 

 

데이터를 관리하는 것은 중요한 일이긴 하지만 한계가 있다. 프로그램이 문제를 해결하거나 어떤 작업을 수행하려면 데이터를 활용해야 한다. 이를 위해 개발자들은 프로그램에 지시하는 단계별로 정돈된 지침, 즉 알고리즘(algorithm)이 필요하다. 알고리즘은 컴퓨터에 새롭거나 특이한 개념은 아니며, 모든 지침이 순서에 따라 수행되는 점이 중요하다. 대부분의 프로그램은 각각의 알고리즘 여러 개를 함께 엮는다. 예를 들면, 아마존은 다양한 분야에서 다양한 종류의 알고리즘을 사용하는데, 이 중에서도 가장 잘 알려진 알고리즘 중 하나는 추천 시스템을 위한 '아마존 추천 알고리즘(Amazon Recommender Algorithm)'이 있다. 이 알고리즘은 아마존 웹사이트를 방문한 사용자들의 이전 구매 이력, 검색 기록, 평가 및 리뷰 등을 기반으로 제품을 추천한다. 이 알고리즘은 협업 필터링(collaborative filtering) 방식과 내용 기반 필터링(content-based filtering) 방식을 결합하여 사용된다. 내용 기반 필터링은 사용자의 이전 검색 기록과 구매 이력을 분석하여 사용자가 관심 있는 제품의 특징을 파악하고, 이를 기반으로 유사한 제품을 추천하는 방식이다. 반면에 협업 필터링은 다수의 사용자 구매 이력과 검색 기록을 분석하여 사용자들 간의 유사성을 파악하고, 이를 기반으로 다른 사용자가 구매한 제품을 추천하는 방식이다. 또한 아마존은 자체적으로 개발한 머신러닝 알고리즘을 사용하여 주문 처리, 물류 및 배송, 고객 지운 및 서비스, 마케팅 등 다양한 분야에서 자동화 및 개선을 진행하고 있다. 이러한 알고리즘들은 고객 경험을 개선하고 비즈니스 프로세스의 효율성을 향상시키는 데 큰 역할을 한다.

 

알고리즘은 웹 검색의 결과도 결정한다. 검색 알고리즘은 복잡한 공식으로, 다음과 같이 수백 가지 요인을 토대로 웹페이지에 순위를 매긴다. 

(1) 검색어가 얼마나 자주 보이는 웹페이지인가?

(2) 평판 좋은 웹사이트가 얼마나 많은 링크된 웹페이지인가?

(3) 웹페이지를 게시한 날짜

(4) 보안 프로토콜 준수 여부

(5) 웹페이지에 다른 사용자가 얼마나 자주 방문했는가?

 

또한, 검색 알고리즘은 사람들이 방문한 웹사이트, 현재 위치, 사람들이 스마트폰으로도 검색하기 때문에 모바일 전용 사이트가 필요한지 같은 개인별 요인도 고려한다. 사람들은 대부분 검색할 때 단어 몇 개만 입력하기 때문에, 검색 엔진은 제한된 정보를 가지고 사람들이 원하는 것을 예측해야 한다. 구글이나 빙 검색창에 키워드를 입력한다고 해서 이것이 실제로 전 세계 18억 개 이상의 웹사이트를 검색하는 것은 아니다. 구글만 해도 초당 4만 건의 검색 요청을 받는다. 검색 요청이 들어올 때마다 어느 웹페이지와 관련 있는지를 알아보기 위해 인터넷 데이터 전체를 검색해야 한다면 그 검색 엔진은 느릴 수밖에 없다. 따라서, 검색 엔진은 미리 사이트를 색인화해서, 인터넷에서 쓸모 있는 데이터만 관리한다. 구글의 색인은 검색 엔진이 유용한 결과를 쉽게 불러오도록 돕는다. 구글의 색인에는 '모든 웹페이지에서 보이는 모든 단어에 대한 입력(an entry for eery word seen on every webpage)' 항목이 있기 때문이다. 또한 검색 엔진은 대부분의 검색에 대한 답을 미리 준비해 놓음으로써 검색 속도를 높인다.

 

프로그램 개발에서 알고리즘의 중요성은 다음과 같이 요약할 수 있다.

(1) 문제 해결에 필요한 단계를 정의하는 데 도움을 주기 때문에 프로그램이 문제를 해결하는데 필요한 단계를 명확하게 정의할 수 있다. 

(2) 실행 시간과 메모리 사용량을 최적화한다. 좋은 알고리즘은 실행 시간과 메모리 사용량을 최적화할 수 있고 이를 통해 프로그램의 성능을 향상시킨다.

(3) 유지보수가 용이하다. 읽고 수정하기가 쉽기 때문에 프로그램을 유지보수하는 데 큰 도움을 준다.

(4) 다양한 문제에 적용할 수 있. 프로그램 개발에서는 다양한 문제에 대한 해결책을 고민하는 것이 중요하고 알고리즘은 이러한 고민을 돕는 데 큰 역할을 한다.

 

프로그램 개발자들은 실제로 데이터 관리와 알고리즘 설계와 같은 더 높은 수준의 개념을 생각하는 데 시간을 많이 쓴다. 결국 코딩은 기술적인 부분뿐만 아니라 창조적인 사고와 노력이 동반되어야 한다. 

 

 

반응형

'IT' 카테고리의 다른 글

인공지능이 현재 사회에 미치는 영향  (0) 2023.03.13
심리학과 소프트웨어  (0) 2023.03.01
프로그래밍 언어  (0) 2023.02.14
코딩(Coding)과 버그(Bug)  (0) 2023.02.10
프로그래머(Programmer)  (0) 2023.02.09