전체보기

    [바미] Typescript-restful-starter - 이메일을 json데이터에 입력하여 생성하기

    코드 수정 Create 될 때 정적으로 이메일 데이터를 받는 것을 동적으로 이메일을 json데이터에 입력하여 생성할 수 있도록 수정함. 코드 수정 전 Sample.schemas.ts import { number, object, string } from "joi"; /* 구조 정의 */ export const createSample = object().keys({ text: string().required(), }); export const updateSample = object().keys({ id: number().required(), text: string().required(), }); export const deleteSample = object().keys({ id: number().requir..

    [바미] Typescript-restful-starter 코드 분석해보기 !

    본 글은 github.com/camesine/Typescript-restful-starter camesine/Typescript-restful-starter Node.js + ExpressJS + Joi + Typeorm + Typescript + JWT + ES2015 + Clustering + Tslint + Mocha + Chai - camesine/Typescript-restful-starter github.com 의 코드를 가지고 TypeScript를 처음 공부 하였을 때 정리 해놓은 것을 써놓은 글입니다. 혹여나 코드의 해석이 틀릴 수 있으므로, 유의 하시기 바랍니다. app/controllers 코드 분석 ContController.ts req, res 설정 부분 import * as exp..

    [바미] 한 눈에 보는 타입스크립트

    변경사항 2020년 2월 다음 파트들을 추가했습니다. keyof 타입 별칭(Type Aliases) 일부 내용과 오타 등을 수정했습니다. 2020년 3월 다음의 파트들을 추가했습니다. 알 수 없는 타입(Unknown) 인터섹션(Intersection) 함수 타입 클래스 타입 인터페이스 확장 함수 this 명시적 this 오버로드(Overloads) 목차 흐름을 위해 ‘인덱스 시그니처(Index signature)’ 파트 제목을 삭제했습니다.(내용은 삭제하지 않았습니다) 일부 내용과 오타 등을 수정했습니다. 2020년 4월 다음의 파트들을 추가했습니다. TS Node 모듈 내보내기(export)와 가져오기(import) 모듈의 타입 선언(Ambient module declaration) Definitely..

    [바미] Go - Garbage Collector에 대해 알아보자!

    Garbage Collector? 말 그대로 쓰레기 청소부 라는 의미인데, Momory에 있는 쓰레기를 청소하는 것입니다. 메모리에 어떤 쓰레기가 쌓이는지 알아보죠! 변수는 여러 속성을 갖지만 가장 중요한 속성은 변수는 메모리다.라는 것입니다. 변수는 값을 담는 그릇인데 var a int 이런식으로 변수를 선언하게 되면 메모리에 이 그릇을 만들었다는 소리이고, 이 그릇이 있는 곳이 메모리 주소인데 그 메모리 주소를 변수 a가 나타내고 있는 것인데 이렇게 변수를 선언해서 메모리를 확보만 해놓고 쓰지 않게되고, 이러한 변수들이 많아지면 메모리만 차지하게 될 것이고, 결국에는 메모리가 부족해서 프로그램이 종료되는 상황에 이를 수 있습니다. 이런걸 메모리에 쌓이는 쓰레기라 해서 Momory Garbage라고 한..

    [바미] Go - 숫자야구를 만들어보자!(2)

    지난번에 이어서 숫자야구를 마저 만들어 보도록 해봅시다! 그 다음은 키보드로 부터 입력값을 받는것인데 여기에 들어가면 알 수 있습니다. func InputNumbers() [3]int { // 두 개의 숫자 3개를 비교해서 결과를 반환한다. var rst [3]int for { var no int _, err := fmt.Scanf("%d", &no) if err != nil { fmt.Println("잘못 입력 했습니다.") continue } for no > 0 { // 1 n := no%10 no = no/10 rst[idx] = n idx++ } break } return rst } 이 Scanf가 어떻게 동작하는지 볼려면 여기에 들어가면 되는데 return값으로 몇 개를 입력받았는지와 실패 시 ..

    [바미] Go - 숫자야구를 만들어보자! (1)

    종이와 게임으로 했었던 게임인데 룰은 간단합니다. 먼저 두 사람이 0 ~ 9까지의 겹치지 않는 숫자 3개를 생각해 둡니다. 첫 번째 A 사람이 2 6 3을 생각해두었고, 두 번째 B 사람이 5 4 1을 생각했다고 가정했을 때, 각자 자기 차례가 되면 숫자 3개를 말합니다. A 사람이 1 2 3이라고 했을 때 B는 상대방이 말한 숫자와 자신이 생각한 숫자와 비교를 합니다. 그래서 자리도 같고 숫자도 같으면 '스트라이크', 숫자는 같지만 자리가 다르면 '볼'이 됩니다. 그러면 B는 5 4 1을 생각했었고, A는 1 2 3을 외쳤으니 1 볼이 되죠. 그렇게 해서 B차례가 되었고, A에게 마찬가지로 1 2 3을 외쳤을 때 2 6 3과 1 2 3을 비교해보면 2는 숫자가 있지만 자리가 다르고, 3은 자리와 숫자가..

    [바미] Go - 포인터에 대해 알아보자!

    C#, Java는 포인터가 없지만 명시적으로 없을 뿐이지 묵시적으로 내부에선 포인터를 사용하고 있습니다. Golang은 포인터가 있습니다. 대부분 현대 언어는 포인터가 없죠. 이해하기 어려운 부분도 있고, 포인터 연산자체가 메모리를 직접 접근하기 때문에 위험하기 때문에 다른 언어들은 포인터를 감추어 내부에서만 사용하고 있습니다. 포인터를 감추다보니 다른 언어에서는 또 다른 문제들이 생겨나게 되었는데요. 내부 기능을 이해하기 어려운 부분도 있고, 이 타입이 Pointer타입인지, Value타입인지를 명시적으로 나와 있지 않다 보니까 프로그래머가 알고 있어야 되는데 그것을 잘 모르고 사용하면 문제가 되는 케이스가 발생하게 됩니다. 그 반면에 C, C++은 포인터를 가지고 있습니다. 그런데 포인터의 연산이나 ..

    [바미] Go - 구조체에 대해 알아보자!

    구조체? 영어로는 Struct라고 쓰이는데 말 그대로 어떤 구조를 가진 것이라고 보면 됩니다. 예를 들면 이런 것이죠. type Person struct { name string age int } 이런식으로 여러가지 변수들을 하나로 묶어서 하나의 이름으로 말하는게 구조체라고 보면 됩니다. 이것이 나온 이유는 프로그래밍이 발전된 과정을 보면 응집성(Cohesive)이 올라가고, 종속성(Dependency)이 낮아지는 방향으로 프로그래밍이 발전해 왔다고 보면 됩니다. 이렇게 만들어야 좋은 프로그래밍을 할 수 있기 때문에 이런 방향으로 계속 발전해 왔습니다. 그래서 이 Struct는 응집성을 높이는 방법입니다. 어떤 결합된 개념들이 있는데 예를 들면 성적 처리 프로그램을 만든다 했을 때 중요한 객체는 학생이 ..

    [바미] TDD의 장단점에 대해 알아보자!

    들어가기 앞서서 한 가지 소개할 것이 있는데 소프트웨어 공학쪽에 유명한 책이 있습니다. 맨먼스 미신이라는 책인데요. 여기서 나오는 유명한 말이 있습니다. There is no silver bullet. 은총알은 없다. 은총알은 늑대인간을 죽일 때 사용되는 총알 입니다. 여기서의 은총알은 모든 문제를 한방에 해결하는 솔루션을 의미하는데 한 방에 모든 문제를 해결하는 솔루션은 존재하지 않는다. 라는 의미 입니다. 즉, 어떤 기술을 가져오더라도 그것이 한 방에 해결하는 솔루션이 아니며, 항상 장 단점이 생기기 때문에 무조건 다 좋은 것이거나 장점만 가지고 있는 것은 없다는 것이죠. 그렇기 때문에 TDD도 마찬가지 입니다. 우선 장점부터 살펴보죠! 첫 번째 장점으로 Test Case가 많아집니다. Test를 먼..