개발할 때 마주치는 resolve 단어의 뜻은 무엇일까?
수능 영어를 공부할 때 이 녀석의 뜻은 분명 '해결하 다'였다. 그런데 개발 분야를 공부하면서 관련 영어 문서에 꽤나 자주 마주치는 이 녀석을 '해결하다'로 해석하려고 하면 잘 해석되지 않는다.
이번에 GraphQL에서 argument를 공부하면서 또 마주쳤다.
These are passed into the server-side execution of this field, and affect how it's resolved
resolve의 뜻을 "해결하다"라고 생각하고 위 문장을 해석해보면 "argument들은 해당 필드의 서버 실행시 전달되며, 이것이 어떻게 해결될지에 영향을 끼칩니다." 정도인데, 해석이 깔끔하지 않다. 대체 뭘 해결한다는거지? 🤯
이에 대한 궁금증을 What does 'Resolving' mean in programming를 통해서 어느정도 해소할 수 있었다. resolve는 의존성 주입(resolve an implementation to an interface), 패키지 관리자(resolve packages dependencies), 웹(resolve a hostname)등 다양한 곳에서 사용되고 있다. 그렇다면 왜 resolve의 의미와 통하면서 더 쉬운 단어인 Convert나 Transform, Get을 두고 resolve를 쓰는 것일까? 라는 질문의 글이다. (그러니까 일단 resolve를 보통 Convert나 Transform, Get으로 해석할 수 있다는 것은 알겠다.)
답변은 다음 과 같다.
(오의역 매우 주의 🙇🏻♂️) resolve a hostname은 hostname과 정보를 연결해주는 repository에 대한 질의가 포함되어 있다. repository 없이는 이 정보를 알수가 없다. google.com의 경우 특정한 IP로 resolve되지만, 이 IP는 할당될 당시에 우연히 할당된 숫자일 뿐이다. 이 IP는 현재와는 전혀 다른 숫자를 가지고 있었을 수도 있고, 쿼리나 IP 등록과 관련된 모든 정보를 저장하고 있지 않는 이상 이러한 google.com에서 IP로의 변환이 불가능하다. 유사하게 resolve pacakge dependencies는 설치되지 않은 패키지를 설치하는 것을 요구한다. 하지만 설치되지 않은 부분의 이름을 알기에는 충분하지 않고, 실제로는 설치되지 않은 패키지가 갖고 있는 내용물을 얻어야 하는데, 내용물의 이름으로부터 어떤 컨텐츠인지 예측할수가 없다. 예를들면, QMail은 메일 프로그램처럼 들리지만, 설치 없이는 이 프로그램의 특성을 이름으로부터 예측할 수 없다는 것이다. 왜냐하면 이름은 컴파일된 프로그램에 비해서 너무나도 적은 정보를 전달하기 때문이다. 그러므로 문맥이 필요없는 단순 변형 상황에서 resolve라는 단어를 쓸 수가 없다. resolve는 추가적인 정보가 필요한 상황에서 사용하려고 예약된 언어이다.
정리해보면 resolve는 변환과 획득의 의미가 맞지만, 단순 변환이 아닌 hostname에서 ip로의 변환, 단순 획득이 아닌 package를 설치하는 상황처럼, 문맥이 필요한 상황에서만 resolve를 써야한다.