[번역글] How I write HTTP services after eight years.

원문 : How I write HTTP services after eight years. ( https://pace.dev/blog/2018/05/09/how-I-write-http-services-after-eight-years.html ) 관련 동영상 : GopherCon 2019: Mat Ryer - How I Write HTTP Web Services after Eight Years 전체 내용은 원문에서 확인하실 수 있으며, 또 내용 중 일부 오역이 포함되어 있을 수 있으니, 가능하면 원문을 참조하시는 걸 추천드립니다. 서비스를 만드는 방법은 시간이 지남에 따라 바뀌어왔습니다. 그래서 지금은 서비스를 어떻게 만들고 있는지 각각의 경우에 따라 유용한 패턴을 예로 들어 공유하고 싶습니다. 서버 구조체..

GitHub OAuth 구현하기 (1)

앞으로 몇개 글을 통해서 Go로 OAuth 인증을 구현하는 것을 해보려고 합니다. 오늘 글은 그 첫번째로 OAuth인증 방식과 GitHub에서 OAuth앱을 등록하는 방법을 간략히 설명합니다. 아마도 "Login with Google" 또는 "Sign in with GitHub" 이라는 버튼은 이제 익숙하게 봐왔을 것입니다. 사용자에게는 편리한 기능이지만, 기능을 개발하는 개발자는 개발하기가 좀 까다로운 기능입니다. ( 물론 이미 훌륭하게 구현해 놓은 소스코드들이 있기 때문에 반드시 까다롭다고 말할 수는 없습니다. ) 바로 OAuth 라는 규약의 인증과정을 이해해야 하고, 그 규약에 맞추어 메시지를 주고 받을 수 있어야 하기 때문이기도 하고, 테스트를 하려면, 직접 해당하는 서비스와 연결해야 할 필요가 ..

goroutine example.

go에서 가장 많이 들리는 특징이 동시성 처리인 goroutine입니다. 실제로 어떻게 하는 건지 간단하게 구현해보고, 실행 시간 비교를 했습니다. 1. 동시에 처리할 기능. 원칙대로라면 실행시간이 오래 걸리는 기능을 사용해야 하지만, 구현상의 복잡함을 생략하기 위해, 간단한 산술 연산으로 대체하고 실행시간은 sleep을 줘서 처리시간이 오래 걸림을 가정했습니다. func add100(arg int) (result int){ result = arg + 100 time.Sleep(time.Duration(1000)*time.Microsecond) return } func add1(arg int) (result int) { result = arg + 1 time.Sleep(time.Duration(10)*t..

오라클 클라우드 VM 포트 열기.

저번에 받았던 평생무료 클라우드( https://bitlog.tistory.com/90 )에서 뭘 하나 띄워서 개인적으로 써보려고 했는데, 외부에서 접속이 되지 않는 것을 알았습니다. 네트워크 보안설정때문인데요. 별다른 설정을 하지 않았다면, 외부로 나가는 통신은 모두 열려있지만, 외부에서 들어오는 통신은 22 ssh 포트를 제외하곤 차단되어 있습니다. 그래서 외부에서 접근하도록 하려면 두군데 설정을 조정해야 합니다. 하나는 VM의 방화벽과 다른 하나는 공용서브넷에서 포트 접속을 허가해야 합니다. 공용서브넷의 보안 규칙 설정. 메뉴 -> 네트워킹 -> 가상클라우드네트워크에 접근합니다. 그러면 (별도로 생성하지 않았다면) 하나의 가상클라우드 네트워크(VCN)이 보이게 되는데요. vcn 이름을 클릭하고, 공..

자바 Input 구현방식에 따른 속도비교.

Java를 이용해서 알고리즘 문제를 풀 때, 알고리즘을 어떻게 구현하느냐에 따라서 동작 속도의 차이가 발생합니다. 그리고 거기에 속도 차이를 발생시키는 요소가 한가지 더 있습니다. 바로 입력입니다. 일반적으로 Java의 입력 속도는 C에 비해 느리다고 알려져있습니다. 입력 값이 작은 경우, 문제 풀이에 영향을 주는 경우는 드물지만, 대용량의 입력을 받아야 하는 경우, 입력 처리가 늦게 되면 실제 문제를 위한 연산 시간이 줄어들어 손해를 볼 수 밖에 없습니다. Java에서 입력을 어떻게 구현하느냐에 따라서 실제 얼마나 차이가 나는지, 비교해봤습니다. 1. Scanner를 그대로 사용하는 경우. 2. BufferedReader를 사용하고, 문자열을 Strring.split로 분리하는 경우. 3. Buffer..