본문 바로가기

기타

프로그래밍할 때 구글링하는 방법 #2. 구글링 팁

이전 포스팅과 겹치는 부분이 상당수 있을 것임.

 

주관적인 내용이므로, 좀 아니다 싶으면 뒤로가기를 눌러주기를 바랍니다.

 

 

2020/07/07 - [기타] - 프로그래밍할 때 구글링하는 방법 #1. 구글을 사용하는 이유

 

프로그래밍할 때 구글링하는 방법 #1. 구글을 사용하는 이유

시작하기 전에.. 이 포스팅에서 주장하는 모든 글은 내 개인적이고 주관적인 의견일 뿐이고, 사바사 케바케이므로 자신이 보기에 유용할 것 같다 싶으면 시도해보길 바람. Google. Just google. 본 글�

shyunku.tistory.com

 

1. 되도록이면 영어를 사용하자.

이전 포스팅에서 영어를 사용해야 하는 이유를 대충 설명했는데, 간단하게 재설명하겠다.

 

구글은 기본적으로 영어라는 언어에 기반한 엔진이다.

 

물론 한국어 검색 엔진도 잘 지원하지만, 영어에 특화되어 있는 데다 대다수의 페이지들이 영어로 쓰여진 것을 보면 이유를 알 수 있다.

 

하지만 한글이 포함되어야 더 좋은 경우도 있는데, 이는 하다보면 알게되니 패스하겠다.

 

적절히 잘 사용하면 됨.

 

 

2. 키워드 위주로 사용하자.

실제로도 그냥 찾고자 하는 내용의 전문을 검색하는 것보다 중요하다고 생각되는 키워드만 검색하는 것이 더 효율적이고, 더 나은 결과를 빨리 찾을 수 있다.

 

예를 들어, Node.js로 만든 웹 애플리케이션을 Windows 프로그램으로 배포하는 방법을 알고 싶다!

 

이 경우에는 어떻게 검색할 것인가?

 

How to export Node.js Web Application as Windows Application

 

우선, How to 라는 말 자체가 어떻게 합니까? 혹은 ~하는 방법 등을 나타내고 있는데, 애초에 구글에서 우리가 찾고자 하는 것이 How to 뒤의 내용을 설명하는 글이므로, 사용하지 않는 것이 좋다.

 

export Node.js Web Application as Windows Application

 

Node.js 라는 플랫폼 자체가 web application을 만드는 것이므로, web application이라는 말은 필요가 없다.

 

export Node.js as Windows Application

 

이제 이부분부터는 센스를 발휘해야 한다. 우선 '키워드만으로 검색하는 것'에 초점이 맞춰져 있으므로 의미가 변질되지 않게 export와 as를 빼준다.

 

그리고, Node.js는 .js 부분을 빼고 Node라고도 하므로 그냥 Node라고 하자.

 

Node Windows Application

 

이대로 검색해보면,

 

내가 찾고자 하는 것을 발견할 수 있다. (이 경우 Electron)

 

프로그래밍을 하다가 오류를 발견했는데, 어떻게 해결할지 모를 때? 똑같다.

 

자바에서 프로그래밍을 하다가 iterator를 사용하는 for문 근처에서 ConcurrentModificationException이 발생했다?

 

그러면 java concurrentModificationException 이라고 검색하면 된다.

 

일반적으로 거의 대부분의 IDE나 컴파일러들은 오류를 출력할 때 그 오류가 무슨 내용인지, 무엇 때문에 발생했는지 알려준다.

 

Java나 Node 같은 것들은 exception으로 뜨고, C/C++ 등은 오류 로그가 아예 IDE로 출력되며, 프로그램들은 에러 로그를 남긴다.

 

자신이 오류를 발견했을 때, 어떻게 해야할지 모르겠다 싶으면 그냥 그 로그를 통째로 복사해서 검색하면 웬만하면 다 나온다.

 

그렇다고 긴 로그를 전부 넣어버리면 구글이 그냥 때려쳐하고 포기해버리므로, 되도록이면 간략한 로그만 넣자.

 

예를 들면,

 

com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [map type; class java.util.LinkedHashMap, [simple type, class java.lang.String] -> [simple type, class com.github.dockerjava.api.model.AuthConfig]] from String value ('osxkeychain'); no single-String constructor/factory method
 at [Source: config.json; line: 4, column: 3] (through reference chain: java.util.LinkedHashMap["credsStore"])
	at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)
	at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:878)
	at com.fasterxml.jackson.databind.deser.ValueInstantiator._createFromStringFallbacks(ValueInstantiator.java:281)
	at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createFromString(StdValueInstantiator.java:284)
	at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:334)
	at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:26)
	at com.fasterxml.jackson.databind.deser.std.MapDeserializer._readAndBindStringMap(MapDeserializer.java:495)
	at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:341)
	at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:26)
	at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3736)
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2639)
	at com.github.dockerjava.core.AuthConfigFile.loadConfig(AuthConfigFile.java:117)
	at com.github.dockerjava.core.DefaultDockerClientConfig.effectiveAuthConfig(DefaultDockerClientConfig.java:266)
	at com.github.dockerjava.core.DockerClientImpl.pullImageCmd(DockerClientImpl.java:215)

위와 같은 오류가 발생했을 때, 전부 복붙해서 검색하지 말고

com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type

이정도로 main error만 검색하는 것이다.

 

이러한 오류 로그 형태는 error trace 형식으로 오류가 발생한 부분을 실행한 부모의 부모의 부모의 ... 부모까지 출력하기 때문에 사람마다 발생하는 오류 발생 줄이 조금씩 다르거나 할 수 있다.

 

그리고 가장 중요한 오류 로그 정보는 맨 위에 출력된다.

 

기본적으로 이 Exception 때문에 발생했는데, 이건 여기에서 이러이러한 이유로 발생했습니다. 이런 식의 내용이기 때문에 exception의 이름만 검색하거나, 이유까지만 대충 검색하면 웬만하면 잘 나온다.

 

보통은 한글로 설명이 잘 되어있는 글이 검색되거나, 스택오버플로우에서 가독성있게 잘 쓴 글이 나오지만, 좀 생소한 분야로 들어갈 수록 그런 글보다 전문 영어로 되어있는 github issue 페이지가 자주 나온다.

 

위의 예시 경우도 여기에서 가져온건데, 저런 형식의 페이지가 은근히 많다.

 

그 밑에 달린 답변으로 해결보거나, 시원찮으면 다른 페이지를 찾아보거나 인데, 나같은 경우에는 후자의 경우가 많았고 해결하는게 쉽지 않기 때문에 질문글을 올릴만한 곳에 올리거나 친구 또는 지인한테 물어보는 것도 좋은 방법이다.

 

 

3. 믿음을 갖고 검색하자.

웬만하면 구글은 거의 모든 정보를 가지고 있다.

 

그리고 내가 찾고자 하는 내용도 99% 구글에 존재한다. 다만 그것을 못찾는 것 뿐.

 

구글은 어떻게 검색하느냐에 따라 멍청한 검색엔진이 될 수도 있고, 최고의 선생님이 될 수도 있다.

 

내가 검색하려는 것이 구글에 안 나올 것이라는 생각을 버려라.

 

그리고 검색했는데 나오지 않는다고 포기하지 마라.

 

필자가 구글링을 처음 익히기 시작할 때에는 과장없이 8시간에 걸쳐 끝끝내 찾은 경우도 있었다.

 

이를 연습하고 익히다 보면 자연스럽게 습관처럼 몸에 배고, 나중에는 물 흐르듯 찾고 싶은 것은 바로바로 찾아낼 수 있게 된다.

 

 

4. 주의할 점

구글은 내가 찾는 대부분의 것들을 알고 있고, 검색함에 따라 정보들을 제공해주지만 그것을 자신의 것으로 만드는 방법은 알려주지 않는다.

 

예를 들어 내가 C++를 공부하고 있다고 하면, C++ split regexC++ String Concatenation 과 같은 기초적이고 이론적인 것들을 검색하고 그때 그때 필요한 답(코드)만 복붙하고 넘어가버리면 내 머리 속에 남지 않는다.

 

적어도 복붙 없이 코드를 따라 써보거나 원리를 이해하고 넘어가는 것이 좋다.

 

구글링은 공부하는 입장에 있어서 답지 같은 느낌이라고 보면 편하다.

 

그리고 이 글은 답지에서 답을 빨리 찾는 글이다.

 

공부는 오로지 자신의 몫이고, 그 누구도 도와주지 못한다.

 

구글링만 하면서 공부하다보면 언젠가 구글에만 의존하려는 경향이 스스로도 느껴질 때가 있게 될 것이다.

 

구글을 잘 사용할 수 있게 익숙해지되, 너무 의존하지는 말자.

 

 

5. 그 이상의 레벨

나도 딱 이 수준까지만 알고 있고, 그 이상은 시도해보지 않았다.

 

구글 검색 엔진은 상당히 많은 검색 문법을 지원한다.

 

자세한 것은 아래 링크를 참고해보면 된다.

 

https://makemoneyskills.com/googling-31-tips/

 

구글링 하는법 & 구글 검색 방법 31가지 팁 (2018년)

구글링 하는법을 찾고 있나요? 여기 실생활에 정말 유용한 구글 검색 팁 31가지만 모아서 알려드립니다! 확인하고 바로 따라하세요!

makemoneyskills.com

나도 저 정도까지 활용하지는 않는데, 익히면 좋을 것 같긴 하다.

 

포스팅은 여기까지.