전체 글 (47) 썸네일형 리스트형 블록체인 시간복잡도 뇌피셜 이 글은 뇌피셜 덩어리입니다. 혹시라도 스쳐 지나가게 되신다면 저의 뇌피셜에 무수한 반박을 주시길 ( 진짜 모름 ) 블록체인이 링크드리스트라면 ( 아직 이것도 모르겠음 커뮤니티에서 링크드리스트가 아니라 하고 일단 내가 보기엔 링크드리스트임 ) 마지막 블록을 조회를 하게 될때의 시간복잡도는 O(N)이다. 시간복잡도 0(N)인 블록체인이 어떻게 보면 무한으로 추가가 되는데 이걸 조회를 하게 되면 엄청 느려지게 되는것이 아닌가? 에 대한 첫번째 뇌피셜 물음에 어떤사람이 블록체인은 링크드리스트로 구현된게 아니라 머클트리로 구현이 되어 있다 카더라 통신 그래서 머클트리를 구글링 좀 하니까 거래에 대한 검증을 하는 바이너리 트리를 구현한 것 같아 보였다. ㅇㅋ 좋다 머클트리로 거래에 대한 검증을 하니까 시간복잡도는.. golang 빌더패턴(Builder Pattern) 빌더패턴은 복잡한 객체의 생성을 동일한 절차에서 서로 다른 결과를 만들어 낼수 있는 패턴이다. 자 예를들어 우리가 스타크래프트를 한다고 할때 우리는 종족을 저그,프로토스,테란 중 하나를 선택하는데 이 객체의 생성을 동일한 절차 즉 버튼하나만으로 그걸 구분해낸다. 그리고 그 종족을 고르면 우리는 전혀 다른 종족으로 플레이를 할수 있는것이다. 빌더패턴에서 중요한 Director 클래스가 있는데 이게 게임을 플레이하는 나(Player = Director) 라고 생각하면된다. 내(Director) 가 빌더패턴을 이용해서 종족이라는 빌더(Zerg,Protoss,Terran)를 정의한후 플레이(메서드구현)을 하면 그게 빌드패턴이 되는거다. 이번에도 스타크래프트를 예로 빌더패턴을 구현해보겠다. 위와 같이 빌더 인터페.. golang 상속 (상속아님) Go 언어에서는 상속이라는 개념이 없지만 그걸 유사하게 구현할수 있는 방법은 임베딩이 있다. 하지만 임베딩을 한다고 해서 그건 상속과는 다르다. 상속은 내 표현으로 얘기하자면 직접연결이지만 고 언어에서 임베딩은 직접연결이 아니다. 하지만 겉으로 보기엔 직접연결을 하고 있는것처럼 보인다. 위와 같이 상속된 객체는 인스턴스 하나를 생성하지만 고랭에서 임베딩을 한다고 하면 임베디드 된 객체 하나와 임베딩한 객체가 각각 생성된다. 그러니 상속과 임베딩은 엄연히 다른 의미이지만 위에서 얘기했듯이 Syntatic Sugar 로 인해 직접연결한 것처럼 보이고 그런식으로 사용된다. 한국 민속놀이중 하나인 스타크래프트로 예를 들어 보겠다. 저그의 유닛은 저글링과 히드라가 있다. (더 있는거 아는데 조용좀 해줄래?) 저글.. golang 추상팩토리 패턴(Abstract Factory with golang) 목적 추상 팩토리 패턴은 구상 클래스를 명시하지 않고도 서로 연관되거나 의존하는 객체들을 생성할 수 있도록 하는 패턴이다. 문제 여러 프로덕트군들간 공통적인 변수들을 가지고 있는 클래스들이 있다면 개별 객체들의 기존 코드들을 변경하지 않고 새로운 프로덕트를 관련된 프로덕트군에 추가하고자 한다. 해결책 프로덕트들의 개별 프로덕트에 대한 인터페이스를 명시한다. 그 이후 각 프로덕트들이 해당 인터페이스를 따르도록 한다. 모든 프로덕트에 대한 생성 메서드의 목록을 가지는 인터페이스를 선언한다. 구조 추상 프로덕트는 개별 프로덕트를 위한 인터페이스를 선언한다. 추상 팩토리 인터페이스는 각 추상 프로덕트를 생성하는 메서드의 집합을 선언한다. 구상 프로덕트는 변수들로 그룹화되는 추상 프로덕트를 다양하게 구현한다. 구.. golang 싱글톤 패턴(Singleton Pattern with golang) 목적 싱글톤 패턴은 클래스가 하나의 인스턴스만 갖도록 하는 동시에 이 인스턴스에 대한 전역 접근 지점을 제공한다 문제 싱글톤 패턴은 단일 책임 원칙을 위반하여 다음 2가지 문제를 해결한다 클래스에 인스턴스가 하나만 있는지 확인한다 클래스에 있는 인스턴스 수를 제어하려는 사람이 있는 일반적인 이유는 일부 공유 리소스(예: 데이타베이스 또는 파일)에 대한 엑세스를 제어하기 위한 것이다. 작동 방식은 객체를 생성한 이후 새로운 객체를 재생성했을 때, 새로운 객체를 반환받지 않고 이미 생성된 객체를 반환받는 것과 같다. 생성자 호출은 반드시 항상 새 객체를 의도적으로 반환해야 하므로 이 동작은 일반 생성자로 구현할 수 없다 해당 인스턴스에 대한 전역 접근 지점을 제공한다 일부 필수 객체를 저장할 때 사용했던 전.. AWS Cognito 소셜로그인 인증 구현 (golang) 지난번에 구글 Oauth2 인증을 고랭으로 구현하는 글을 적었는데 Facebook , Apple , Google 등 소셜로그인을 각 SDK 별로 별도로 구현하는 방법도 있겠지만 개발에 들어가는 시간과 노력이 너무 많이 들기에 찾아보다가 Cognito 라는 좋은 기능이 있어서 가져왔다. Amazon Cognito 는 웹 및 모바일 앱에 대한 인증,권한 부여 및 사용자 관리를 제공한다. 이 글에서는 구현 위주로 설명을 하기 때문에 제대로된 설명을 보고 싶다면 다른 블로그를 살펴보면 되겠다. 바로 시작해보자. 아마존 콘솔 로그인 -> Cognito 검색 -> 사용자 풀 생성으로 들어가면 로그인 환경 구성에서 Cognito 사용자 풀은 디폴트로 설정이 되어있다. 옆에 연동 자격 증명 공급자 라는 탭이 바로 우리.. 고에서 에러 제어 프로그래밍에서 에러란 운영하고 있는 서비스에서 의도되지 않은 상태가 발생하는 걸 말한다. 에러가 발생하면 우리는 문제를 해결하기 위한 디버깅이라는 개 ㅈ같은 작업을 하게된다. 고에서는 기본적으로 아래와 같이 error 인터페이스가 Error() 메서드를 담고있는 형태로 내장이 되어있다. type error interface { Error() string } error 는 보통 함수나 메서드에서 두번째 인자값에서 표현한다. str := "kkk" num , err := strconv.Atoi(str) if err != nil { panic(err) } 위에서는 kkk 를 int 타입으로 변경하는 strconv.Atoi() 를 사용하는데 kkk 는 숫자가 아니므로 에러를 뱉는다. 대부분의 패키지에서 저런형식.. golang 구글 Oauth 인증 구현 1. OAuth Applciation 등록 GCP Console (https://console.cloud.google.com/) 외부를 클릭하여 만들고 앱 이름 , 사용자 지원 이메일, 개발자 연락처 정보만 기입하고 나머지는 빈칸으로 둔다. 그 후 사용자 인증정보를 OAuth 클라이언트 ID 를 선택해서 생성한다. 테스트 해볼 용도이니 출처는 localhost:5000 으로 리디렉션도 마찬가지로 localhost:5000/auth/google/callback 으로 했다. 이때 생성되는 클라이언트 ID 와 비밀번호를 잘 보관하자 이 키를 기반으로 구글인증을 진행할수 있다. 2. golang handler 작성 이제는 위의 저장된 정보를 기반으로 고 핸들러를 작성해보자. 현재 쓰고있는 프레임워크는 긴이라 긴.. 이전 1 2 3 4 5 6 다음 목록 더보기