한국소프트웨어산업협회(KOSA)와 정보기술ISC가 주관/주최한 공모전의 심사위원으로 참석하고 왔습니다.
전국의 고등학생을 대상으로 하는 소프트웨어 개발 공모전입니다.

대한민국 고등학생 소프트웨어 개발 공모전
 - Software FUTURE&DREAM Challenge 2024

 

심사위원석

총 12개의 팀이 본선에 진출했습니다 - 한국소프트웨어산업협회 공지
제출된 소스코드와 발표 자료를 살펴보고 질문과 조언할 내용들을 정리해 두었는데, 잡학하게 알고 있던 지식들이 도움이 많이 되었습니다.
얼마 전 Google에서 진행했던 Machine Learning Bootcamp에서의 경험도 심사에 활욯할 수 있었다면 좋았을텐데, 그 정도의 작품은 없어서 조금 아쉽네요.
많은 지식과 조언을 전달하고 싶었는데, 질의응답 시간이 짧아서 충분히 전달을 못드린게 못내 아쉽습니다.
 
저의 고등학생 시절을 생각하면, 다들 수준이 높아서 굉장히 놀라웠습니다.

 - 그 때의 저는, 컴퓨터로는 게임밖에 할 줄 몰랐는데 말이죠..

SW 개발에 대한 접근성이 많이 좋아진 것에 학생들의 노력이 더해지면서, 발표만 듣는다면 학부생 이상의 프로젝트라고 생각이 들 정도의 작품들도 있었습니다.
 
작품 준비하느라 고생한 학생들에게 박수를 드립니다.
특별한 경험을 할 수 있게 해주신 한국소프트웨어산업협회에도 감사 인사를 드립니다.
 

 



지난 11월 3일, 'Software FUTURE&DREAM Challenge 2023'의 본선 심사를 하고 왔습니다.

React를 기반으로 한 web 개발이 많았고, PWA나 web-view를 이용해 나름대로(?) 앱으로 만든 팀도 있었습니다.
대회 준비 기간이 짧았을 것을 생각하면, 좋은 접근이었던 것 같습니다.

일부 ChatGPT를 연동한 서비스를 만든 팀들도 있었는데요,
정보의 가공/분석을 ChatGPT 등 생성형 AI에 맞길 수 있게 되면서, 확실히 어떤 서비스 개발은 용이해진 것도 같습니다.

심사하고 있자니, 저도 뭔가 만들고 싶어지는 좋은 시간이었습니다.

'일상 > IT-SW' 카테고리의 다른 글

openAI - Sora  (0) 2024.02.16
Meta Quest 2 - Virtual Desktop  (0) 2024.02.16
제 4회 한국코드페어 - SW 공모전 심사위원  (0) 2022.11.01
인증 실패시 http status code  (0) 2022.10.28
Samsung Software Developer Conference  (0) 2022.10.28

단편적이고 개인적인 경험에 기반해서 소프트웨어(Software, SW)와 펌웨어(Firmware, FW)의 차이점을 간단히 공유해봅니다.
SW나 FW나 답답할 땐 답답하고 재미있을 땐 재미있어요.

📍 너에게 DRAM이란?

  • SW에서는 DRAM이 빠른 메모리에요. 서버/스토리지에 있는 데이터를 가져오면 OS에 의존해 DRAM에 두고 사용하지요.
  • FW에서는 DRAM은 매우 느린 메모리에요. 메모리 사용도 자율적이므로, 데이터를 용도에 따라 SRAM/DRAM 중에 선택해서 위치시킵니다. 자주 사용하는 데이터는 되도록(반드시) SRAM에 둡니다.

📍 메모리, 얼마나 줄 수 있는데요?

  • SW에서 메모리 사용량이라는 것은 데이터의 개수이지 한 데이터의 크기는 아니었어요. 메모리를 너무 많이 사용한다면, 한 데이터의 크기를 줄이기보다는 캐싱하는 데이터의 개수를 줄이는 작업을 수행하곤 했습니다.
  • FW는 조금 다릅니다. 메모리가 굉장히 제한적이고, 관리하는 데이터가 많지 않기 때문에, 데이터의 개수 보다는 한 데이터의 크기를 줄이는 작업을 수행하곤 했어요. 클래스/구조체를 정의할 때는 메모리가 낭비되지 않도록 변수를 배치합니다.
    • 📖 C/C++에서는 변수 배치에 따라 구조체의 크기가 달라질 수 있습니다.

📍 성능 개선, 가능하죠?
SW와 FW는 성능 최적화의 방향이 조금 달라요, 성능이 떨어지는 원인이 다르기 때문인데요.

  • SW는 처리할 데이터가 많아서 성능이 떨어지곤 했습니다. 이 때는 보통 시간 복잡도를 줄이기 위한 알고리즘이나 자료구조를 사용해서 해결하는데요. 가령, 어떤 아이템을 찾을 때 리스트를 선형 탐색하지 않고 이진 탐색을 하도록 개선합니다.
  • FW는 반복해서 동작하는 함수/연산이 비효율적이어서 성능이 떨어집니다. 한 순간에 가지는 데이터의 개수는 소수이고, 서로 다른 데이터에 대해 같은 동작을 반복해서 처리하는데요. 아이템이 충분히 많아야 이득을 보는 대부분의 알고리즘보다는, 한 데이터에 대한 연산을 줄여서 최적화 합니다.
    • 데이터가 4개 뿐이라면 이진 탐색에 소요되는 연산량이 선형 탐색에 비해서 오히려 더 많아질테지만,
    • 해상도가 1920x1080인 디스플레이에 한 pixel을 표시할 때의 연산이 5개 줄어든다면, 전체에 대해 천만번의 연산을 줄일 수 있습니다. 1GHz CPU로 0.1초의 시간이 단축되죠.
    • (주사율이 60Hz인 경우, 한 번 그려지는데 0.017초 이내로 소요되어야 한다는 것을 생각해보면 적지 않은 시간입니다.)

📍 버그/문제가 발생했는데 시나리오를 모르겠어요, 그래도 고칠 수 있죠?
SW와 FW 모두 충분한 분석과 후보 시나리오를 파악하는 것을 선행합니다. 다만 이렇게 했음에도 후보가 좁혀지지 않을 때가 있는데요.

  • SW에서는 로그를 추가해서 시나리오를 파악하곤 합니다. 로깅에 메모리나 성능 제약을 크게 받지 않기 때문인데요. 물론, 항상 로그를 확보할 수 있는 것은 아니지만, 많은 경우에 큰 도움을 받을 수 있었습니다. 로그를 확보할 수 없을 때는, 다양한 부분에 방어코드를 추가합니다. 후에 로그가 수집되거나 원인이 파악되면 패치를 합니다.
  • FW에서는 메모리와 성능 제약을 크게 받기 때문에 로그를 심어서 시나리오를 파악하기 쉽지 않았어요. 심지어 타이밍 이슈였다면, 로그를 심는 순간 재현조차 되지 않기도 합니다. 그 상황이 올 수 있는 많은 경우에 대해, assert를 추가하여 근본 원인에 조금씩 다가가며 접근하기도 했습니다. FW는 방어코드로 해결하지 않았어요, 제품이 팔리고 나면 고치기가 어렵기 때문에 엄밀하게 분석하고 고쳐야 했습니다.


전반적으로 FW가 더 열악한 환경에서 더 깊은 고민을 했었다는 기억인데요, 그게 또 어려운 퀴즈 문제를 푸는 것 같은 재미가 있기도 해서 저는 즐겁게 일했습니다.
또 SW는 런타임 환경에 영향을 많이 받기 때문에 OS 업데이트 등의 외부 요인에 의해서 문제가 발생하면 쉽게 해결되지 않기도 해서, SW나 FW나 답답할 땐 답답하고 재미있을 땐 재미있는 것 같아요.

+ Recent posts