최근 들어 무언가를 결정하기가 어려운 경우들이 부쩍 많아지고 있는 것 같다.
가장 크게 느끼고 있는 부분은 아무래도 업무적인 부분인 것 같다. 예전에는 모르는 것도 많았고, 해보지 않은 것들도 많았기 때문에 일단 시작하고, 문제를 맞닥뜨릴 때마다 상황에 맞는 해결책을 찾아 적용하곤 했다. 그래서 뭔가를 시도하고 결정하는 데 있어서 크게 어려움을 느끼지는 못했던 것 같다. 그런데 많은 것들을 해보고 알게 되면서 오히려 뭔가를 시도하고 결정하는 데 있어서 어려움을 겪게 되는 것 같다.
과거와 현재를 예를 들어 비교해보겠다.
요구 사항: 장비를 강화할 때 일정 확률로 파괴되는 기능을 추가해주세요.
[과거]
1. 일단 강화하는 부분을 살펴봐야겠네.
2. 여기 실패했을 때 어떻게 동작할 건지에 대한 부분이 있네. 여기서 아이템을 삭제시키면 되겠다.
3. 삭제시키고 나서 보니까 UI에서 아이템을 없애줘야 할 것 같네. 어떻게 표현을 해야 하려나? 기획팀에 문의해봐야겠다.
4. (답변을 확인하고) 그럼 이렇게 표현하도록 수정하면 되겠다.
5. 앗. 해놓고 보니까 하나씩 강화하는 단일 강화 쪽 말고 한 번에 여러 개를 강화하는 다중 강화 기능도 있었구나. 이쪽도 처리해야겠네.
6. 으음... 기존 작업이 단일 강화 쪽만 염두에 두고 코드를 짜서 조금 이상해졌네. 기존 작업을 날리자니 작업 시간이 길어질 것 같으니 코드가 다소 지저분해질 수 있겠지만 약간의 수정만 하면서 끼워넣어야겠다.
7. 다중 강화 쪽 기능 처리는 끝났는데 다중 강화는 인벤토리가 보이는 채로 강화하기 때문에 실시간으로 아이템이 사라질 때 인벤토리 쪽도 갱신을 해줘야 하겠구나.
8. 인벤토리 쪽에 갱신 관련 성능 문제가 있어서 이런 방식으로 갱신하니까 프레임이 많이 튀네. 인벤토리 쪽에서 갱신할 때 성능 개선도 이 김에 같이 해놓자.
8. 좋아. 잘 마무리 된 것 같다.
9. (시간이 지나서) 특정 시간대에 서버가 약간 느려진다는 제보가 들어왔네? 이유를 확인해보자.
10. 아, 이 시간대에 강화 재료를 지급받아서 다중 강화를 시도하는 사람들이 많아서 한꺼번에 DB 요청이 몰려서 서버가 느려졌었구나. DB 요청이 몰리면 서버에서는 지우되 DB 요청은 조금씩 나눠서 하도록 수정해야겠다.
11. 수정 완료
[현재]
1. 강화할 때 파괴... 파괴되면 UI에서는 어떻게 표시해야 하려나? 이건 물어봐야 할 것 같고... 다중 강화도 있으니까 이 부분도 같이 물어봐야겠네. 다중 강화할 때 한꺼번에 아이템이 터지니까 DB 요청이 한꺼번에 몰릴 수도 있을 것 같은데... 좀 나눠서 처리하는 방식도 고려를 해봐야겠네. 건마다 일정 시간 딜레이를 줘서 처리하는 게 나으려나? 아니면 요청들을 몰아놓고 몰릴 때만 좀 분산해서 처리하는 게 나으려나? 생각해보니까 비단 여기만의 문제가 아닐 거라서 DB쪽 쿼리 날리는 부분에다가 장치를 해놓으면 좀 더 좋을 수 있을 것 같은데... 아 근데 그렇게까지 하자니 고려할 것도 좀 많고 작업이 너무 복잡해질 것 같은데... 암튼 일단 그 부분도 고려는 해야 할 것 같고... 그러고보니 인벤토리 쪽에서 아이템이 사라지는 갱신을 할 때 성능이 썩 좋진 않던데. 기존에는 발생할 일이 많지 않아서 넘어갔는데 이번에 수정하면서 그쪽도 같이 고쳐야 겠구만.
2. 인벤토리 쪽 성능 개선을 따로 작업 분리해서 하는 게 좋을 것 같고... DB 처리 관련 부분도 공통으로 적용하는 게 아무래도 좋을 것 같아서 이것도 따로 분리해놓자.
3. 나누고 보니까 다행히 당장 별로 할 게 많진 않네.
4. 수정 완료
실제 있었던 일은 아니고 있었을 법한 예를 한 번 상상해서 작성해본 것이다. 위는 그래도 과거나 현재나 스무스하게 진행된 것 같다. 위 예시처럼 딱 이걸 해야 한다는 게 명확한 경우에는 그나마 나은데, 이걸 하자니 너무 과한 것 같고, 안 하자니 찝찝하고... 의 고민을 하는 경우가 꽤나 많은 것 같다. 위 예시도 요구사항이나 구조가 크게 어렵지 않은 경우인데 그렇지 않은 경우는 어디까지 고려해서 만들어야 하는가가 시작하기도 전에 발목을 잡는 경우가 종종 있는 것 같다. 또, 시작하기 전부터 할 일들을 미리 생각해보는 건 좋은 것 같긴 하지만 해야 할 일들의 범위가 너무 커져서 건드릴 엄두가 안 나는 경우가 있기도 하다.
물론 예전에 비해서 좋아진 점들도 많이 있는 것 같다. 추후에 발생할 수 있는 문제들을 미연에 방지할 수 있다든가, 작업 중간에 눈치채면 골치 아파질 문제들을 미리 고려하고 작업할 수 있으니 낭비되는 시간이 줄어드는 경우도 있다. 또, 예전에는 기획 요구 사항을 그대로 구현하는 데 초점을 맞췄었는데, 이렇게 하나 저렇게 하나 큰 상관 없는 경우가 많다보니 "이렇게 만들면 작업이 다소 복잡해질 것 같은데, 이렇게 만드는 건 어떨까요?" 라고 제의하여 작업 시간을 단축시키는 경우도 종종 생겼다.
그렇게 생각하면 일종의 성장통이라고 볼 수도 있을 것 같다. 전에 팀장님하고 이야기할 때 잠깐 얘기해보기도 했었는데, 팀장님도 예전에 이걸 한 번 겪었고 굉장히 큰 벽으로 느껴지셨었다고. 금방 다른 얘기로 넘어가서 더 들은 얘기는 없지만, "나만 그런 게 아니구나"를 안 것만으로도 위안이 되었던 것 같다.
그러다가 어제는 우산과 보조배터리를 사려고 생각하다가 고민에 빠졌다. 평소 들고 다니는 짐의 무게를 줄이고자 작은 가방을 샀는데, 기존에 갖고 다니던 우산 크기가 커서 15,000원에 무게 150g짜리 우산과 23,000원에 무게 100g짜리 우산 중에 어떤 것을 살까 고민을 했다. 50g이면 별 차이 없는 것 같은데, 싼 것을 사는 게 좋을까? 아니면 50g처럼 작은 게 모여서 더 무거워지곤 할 텐데 8천원을 더 주고 50g을 줄이는 게 좋을까? 50g이 은근히 적지 않고, 8천원이 그리 큰 금액은 아니기 때문에 23,000원에 무게 100g짜리 우산을 구입하는 것을 결정하는 게 어렵지는 않았다. 보조배터리의 경우는 약간 더 결정하기 어려웠다. 비상용으로 5000mAh짜리 제품을 구입하려고 했는데, 저렴한 도커형 제품은 이전에 구매했다가 몇 번 사용하지도 않았는데 작동이 안 되곤 해서 제외했다. 크기와 무게가 적당하면서 신뢰성이 있는 제품을 추려보니 삼성전자의 제품과 앤커라는 회사에서 만든 제품 2개가 남았다. 앤커에서 만든 제품이 130g으로 삼성전자의 제품인 150g보다 약간 더 가벼웠는데, 가격은 둘이 비슷했다. 가벼운 쪽에 더 눈길이 가긴 했는데, 앤커가 중국 회사라서 아무래도 삼성전자 제품이 더 나으려나? 하는 고민에 빠졌다. 이 내용으로 꽤나 오래 고민을 하긴 했는데, 결국에는 앤커의 제품을 구매하기로 했다. 국내 지사도 있고, 보조배터리에 대한 평가도 좋은 데다가 18개월 무상보증도 해주기 때문에 신뢰성 측면에서 삼성전자의 제품보다 뒤지지 않을 것 같다는 생각이었다. 무엇보다 "평소 들고 다니는 짐의 무게를 줄이는 것"이라는 기존의 목적에 더 부합한다는 점을 가장 중요하게 생각했던 것 같다.
별로 중요하지는 않은 선택이었지만, 선택을 어떤 기준으로 할 것인가에 대해서 생각해볼 수 있었던 것 같다.
1. 선택하려는 것 중 어떤 것이 목표에 더 부합하는가?
2. 선택하려는 것을 골랐을 때 어떤 손해와 이득이 있으며, 이 이득을 위해 손해를 감수할 수 있는가?
우산으로 생각해보면, 100g짜리 우산이 더 목표에 부합하고, 50g 더 가벼운 우산을 위해 8천원을 더 지불하는 것을 감수할 수 있으니 100g짜리 우산을 고른 것이다. 마찬가지로 보조배터리로 생각해보면, 130g짜리가 더 목표에 부합하고, 삼성전자에 비해서 A/S에 대한 번거로움이 존재할 수 있지만, 18개월 무상 보증을 해주기 때문에 정상적으로 작동하지 않았을 때에 대한 손해를 감수할 수 있겠다는 판단을 한 것이다.
여기서 끝이 아니다. 내가 생각했을 때 가장 중요한 점은, "목표 자체에 대해 생각을 해봐야 한다"는 것이다. 23,000원에 무게 100g짜리 우산에 대해 생각해보겠다.
"평소 들고 다니는 짐의 무게를 줄이는 것"이라는 목표에 대해서는, 사실 "우산을 들고 다니지 않는 것"이 가장 부합할 것이다. 그러나 평소에 우산을 들고 다니지 않았을 경우, 일기 예보가 있을 때 우산을 깜빡했다든가, 내지는 비 예보가 없었으나 갑작스럽게 비가 내렸을 때 발생할 수 있는 손해를 감수하는 것보다 평소에 우산을 들고다니는 게 더 좋다는 것이 내 생각이다. 마지막으로 이미 접이식 우산은 있지만 "평소 들고 다니는 짐의 무게를 줄이는 것"을 위해 23,000원을 지불하는 것을 감수할 수 있기 때문에 최종적으로 우산을 구매하게 되는 것이다. 무게를 줄이면서 갑작스런 비에 대비하는 것은 우비가 더 적합할 수도 있겠다는 생각도 있었지만, 우비의 불편함을 감수하기는 어려울 것 같아 우산을 선택한 것도 있다.
업무를 할 때도 같은 생각을 할 수 있겠다. 예를 들어서 버튼에 소리를 넣는 작업을 한다고 치자. 작업 도중 화면을 클릭할 때마다 초당 프레임이 10프레임으로 매우 낮아지는 버그를 발견했을 때, 목표에 부합하지는 않은 일이지만 이것을 수정하지 않을 경우에 발생할 손해를 생각한다면 수정을 하는 것이 바람직할 것이다. 그런데 예를 들어서, 버튼을 1초에 10번 연타를 했을 때 초당 프레임이 10프레임으로 매우 낮아지는 버그를 발견했다고 치자. 이 버그를 과연 수정해야 할 것인가? 당연히 수정할 수 있다면 수정하는 것이 좋겠지만, 우선적으로 처리해야 할 다른 일들이 있을 때 이 버그를 수정하는 것은 바람직하지 못 할 것이다. 이 버그를 수정해서 얻을 수 있는 이익은 "초당 10번 연타했을 때 느려지는 현상을 완화할 수 있을 것"이고, 이로 인해 감수해야 할 손해는 원인을 파악하고 수정하는 데 시간이 소요되어 "우선적으로 처리해야 할 다른 일들의 처리가 늦어진다"는 것이다. 반대로 생각해보면 수정하지 않았을 때 감수해야 할 손해가 "초당 10번 연타했을 때 느려지는 현상"인데, 발생할 빈도도 높지 않고 심각성도 그렇게 높지 않은 문제이기 때문에 우선순위를 낮춰 나중에 처리할 문제로 기록을 해놓는 것이 현명할 것이다. (그래서 많은 게임들이 자연스럽게 최적화는 후순위에 두게 되는 게 아닐까...)
예시는 결정하기 간단하지만, 실제로는 고려해야 할 부분들도 많고 애매한 상황들도 많아서 결정하기가 어려울 때가 많은 것 같다. 아마 내 생각에 이 문제는 경험이 해결해주는 부분도 많지 않을까, 라고 생각된다. 일을 하다보면 비슷한 상황들이 많이 발생하고 반복되는 것 같은데, 다양한 상황에 대해 고민하고 결정한 후, 이 결과에 대한 데이터들이 누적되면 나중에 결정하는 데 있어서 도움이 될 것 같다.
그리고 추가로, 이렇게 따져보고도 이게 좋은지 저게 좋은지 애매한 경우도 더러 있다. 이런 경우는 어떤 걸 골라도 상관없는 경우이니 너무 고민하지 않고 마음 가는대로 하는 것이 좋을 수도 있을 것 같다. 다만 당장 결정해야만 하는 게 아니라면, 목표나 조건이 달라질 수 있으니 선택들에 대한 가능성을 열어두고 시간이 지난 후에 검토해보는 것도 좋을 것 같다.
'잡담' 카테고리의 다른 글
리니지는 왜 인기있는가 1 - 일반 유저가 느끼는 재미 (0) | 2025.04.05 |
---|---|
사무실 책상 자랑 (0) | 2025.03.02 |
2024년 한 해를 되돌아보며 (2) | 2025.01.01 |
2024 매지컬 미라이(Magical Mirai) 후기 (1) | 2024.12.31 |
아이폰 결제 주기적으로 안 될 때 (유니콘 HTTPS 문제) (0) | 2024.11.09 |