프로그래밍(Basic)

    [바미] Go - Slice가 왜 Slice인지 알아보자

    Slice가 왜 Slice인지 알아 보도록 해봅시다. Slice는 어떤 일부를 잘라내서 덜어내는걸 말하는데 Golang의 Slice는 일부를 잘라낼 수가 있습니다. 그럼 어떻게 하는지 살펴보죠. a [10]int 10개짜리 배열이 있다 가정하고 []를 이용해서 배열의 요소를 접근하는데 a [10]int a[3] 이렇게 하면 a의 4번째 배열요소를 가져올 것이다. 그래서 a가 1~10까지 10개의 요소를 가지고 있다고 하면 a[3] == 4 가 될 것 입니다. Slice도 마찬가지 입니다. a []int a[4:7] Slice는 []안에 ':'을 붙여서 숫자 2개를 적습니다. 이 뜻은 첫번째 부분은 시작 index이고 두번째 부분은 마지막Index 부분인데 5~6번째까지 가져옵니다. a[StartIndex..

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

    대부분의 현대 언어들은 동적 배열들을 하나씩 가지고 있는데 C++에서는 Vector, Java에서는 ArrayList, C#에서는 List, Python은 Golang과 똑같은 Slice, Golang도 마찬가지 입니다. 그렇다면 동적배열이 무엇일까요? 동적배열의 반대가 정적배열인데 정적배열(Fixed size array)은 길이가 바뀌지 않는 배열입니다. [10]int이렇게 사용합니다. 반대로 동적배열은 [] int 이렇게 표시하는데 길이가 변하는 배열이라 생각하면 됩니다. 그래서 처음에 하나가 되었다가 두개가 되었다가 세개가 되는 배열입니다. 그럼 이걸 어떻게 만들었는지 생각해보죠. 메모리가 늘어날 수는 없습니다. 메모리는 처음 할당받은 사이즈가 있으면 그 사이즈를 그대로 써야지 그 사이즈를 넘어서 ..

    [바미] Date.now()에 대해 알아보자!

    Date.now() 메소드는 UTC 기준으로 1970년 1월 1일 0시 0분 0초부터 현재까지 경과된 밀리 초를 반환합니다. 문법 var timeInMs = Date.now(); 설명 now() 메소드는 1970년 1월 1일 0시 0분 0초부터 현재까지 경과된 밀리 초를 Number 형으로 반환합니다. now()는 Date의 정적 메소드이기 때문에, 항상 Date.now()처럼 사용하셔야 합니다. Polyfill 이 메소든는 ECMA-262 5판에서 표준화되었습니다. 아직 이 메소드를 지원하도록 갱신되지 않은 엔진들은 이 메소드의 미지원에 대한 차선책으로 다음 코드를 활용하실 수 있습니다. if (!Date.now) { Date.now = function now() { return new Date().g..

    [바미] Node 내장 암호화 모듈 Crypto에 대해 알아보자!

    비밀번호를 단순히 평문으로 데이터베이스에 저장하는 것은 범죄와 다름 없습니다. 데이터베이스가 해킹 당하는 순간 고객들의 비밀번호가 그대로 해커의 손에 넘어가게 되는 것이죠. (데이터베이스가 해킹 당하지 않는 것이 최선..) 그렇기 때문에 비밀번호 암호화로 안전장치를 만들어 놓는 것입니다. 암호화의 방법은 단방향 암호화와 양방향 암호화 두가지가 있습니다. 먼저 단방향 암호화에 대해서 알아보겠습니다. 단방향 암호화 비밀번호는 보통 단방향 암호화를 사용합니다. 단방향 암호화는 복호화 할 수 없는 암호화 방식입니다. 복호화는 암호화된 문자열을 암호화 되기전의 평문으로 되돌려 놓는 것을 의미합니다. 그러므로 단방향 암호화를 사용하게 되면 원래 문자열이 무엇인지 알 수 없습니다. Q: 왜 비밀번호 저장을 단방향 암..

    [바미] Web Socket에 대해 알아보자!

    WebSocket이란 WebSocket은 컴퓨터 네트워크용 통신 규약의 하나이다. ( ws:// ) 인터넷의 표준화 단체인 W3C(World Wide Web Consortium) 와 IETF(Internet Engineering Task Force) 가 Web server 와 Web browser 간의 통신을 위한 규정을 정의한 쌍방향통신(Duplex)용 기술 규약이다. API는 W3C가 책정을 맡고 있고, WebSocket 프로토콜은 IETF가 책정을 맡고 있다. WebSocket의 등장 배경 초기 웹의 탄생 목적은 문서 전달과 하이퍼링크를 통한 문서 연결이었다. 웹을 위한 HTTP 프로토콜은 이러한 목적에 매우 부 합하는 모델이다. 그러나 시대가 변하고 환경이 발전할 수록 웹이 더 이상 문서공유에만 ..

    [바미] JMT이 아닌 JWT에 대해 알아보자!

    세션 기반 인증 방식 옛날에 토큰 기반 인증이 없었을 때 서버 세션을 사용해 인증을 했습니다. 클라이언트가 로그인 성공하면 서버가 유저 세션을 만들고 메모리나 데이터베이스에 저장한다. 서버가 클라이언트에게 세션 ID를 보낸다. 클라이언트의 브라우저에 세션의 ID만 쿠키에 저장하게 한다. 세션 데이터가 서버의 메모리에 저장되므로, 확장 시 모든 서버가 접근할 수 있도록 별도의 중앙 세션 관리 시스템이 필요합니다. 세션 기반 인증 방식 단점 중앙 세션 관리 시스템이 없으면, 시스템 확장에 어려움이 생깁니다. 중앙 세션 관리 시스템이 장애가 일어나면, 시스템 전체가 문제가 생깁니다. 만약 메모리에 세션 정보가 들어있다면, 메모리가 많이 사용될 수 있습니다. 규모 확장이 필요없는 소규모 프로그램 작성에서는 세션..

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

    변경사항 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값으로 몇 개를 입력받았는지와 실패 시 ..