목록전체 글 (114)
Hello, Android!

crypto 모듈에는 여러가지 암호화 메서드가 있으며 몇몇은 실제 서비스에도 사용이 가능하다 실제 서비스를 하는 경우 고객의 개인정보는 반드시 암호화를 하여 관리해야만 한다 현대에 많이 사용하는 암호화 시스템으로는 크게 단방향 암호화 시스템, 양방향 암호화 시스템이 있다 단방향 암호화 시스템은 암호화 하고자 하는 데이터 평문을 암호문으로 만드는것은 얼마든지 가능하지만 그 반대인 암호문을 다시 평문으로 만드는 복호화 하는것은 매우 어렵다 일반적으로는 사용자들의 비밀번호를 암호화 하여 저장하는 용도로 많이 사용한다 예를들어 사용자가 abcd1234 라는 비밀번호를 사용한다면 평문을 암호화 하여 저장을 하여도, 이후에 사용자가 abcd1234를 입력할때 DB에 저장된 암호문과 동일한 값이 나와 로그인이 가능하..

exports 모듈을 만들때 module.export를 사용했지만 exports 객체를 사용하여 모듈을 만들수도 있다 module.exports와의 차이점은 기존의 module.exports에서는 한번에 여러 값들을 넣었지만 그냥 exports를 사용하는 경우에는 각각의 변수를 exports객체에 하나씩 넣는다 그리고 exports는 exports.ryan = "Ryan"과 같이 항상 속성명과 속성값을 넣어줘야 한다 하지만 module.exports와 exports는 서로 같은 객체를 참조하기 때문에 한 모듈에서 module.exports와 exports를 동시에 사용하는건 좋지 않다 만약 한 모듈에서 module.exports와 exports를 동시에 사용하면 어떻게 되는지 테스트를 해보았다 우선 처음..

노드에는 기본적인 내장 객체와 모듈이 있어서 별도의 설치 없이 바로 사용이 가능하다 1. global global객체는 전역 객체이며 모든 파일에서 접근이 가능하며 키워드 global을 생략하는것도 가능하다 다른 모듈을 호출할때 사용하는 reqire또한 global.require에서 global이 생략된 것이며 다양한 속성들이 있다 global은 전역 객체이기때문에 파일 사이에 데이터 공유가 가능하다 같은 폴더 내에 ryan.js와 friends.js 두개의 파일이 있으며 ryan.js 에서는 익명함수로 global.Ryan을 반환한다 friends.js 에서는 ryan.js를 호출하여 global.Ryan에 값을 넣은 뒤 호출하였을때 "Hello, Ryan" 이 출력되었다 다른 파일에서도 global...

노드와 자바스크립트의 차이점은 노드는 코드를 모듈로 만들수 있다 노드에서 모듈은 특정 기능을 수행하는 함수, 변수들의 집합이다 각종 기능들을 모듈로 만들어면 해당 모듈의 재사용이 가능하며 파일별로 코드를 모듈화 할수 있어 관리하기에 좋다 우선 friends 라는 폴더 내에 friends.js intro.js name.js 세개의 파일이 있는 상황이다 name.js 에서는 이름들을 정의하고 module.exports에 이름 변수들을 담은 객체를 넣었다 이후 다른 파일에서 name.js를 호출하면 module.exports에 정의된 값들을 사용할수 있다 intro.js에서는 name.js를 호출하여 각각의 변수들을 받아 함수 내에서 활용을 하고 함수들을 다시 module.exports 에 넣었다 그리고 다시..

트위치에서 제공하는 다양한 API를 살펴보던중 제공되는 API를 활용한 서비스를 만들어보고싶어서 트위치 API사용법을 한참 헤매다가 방법을 정리한다 dev.twitch.tv/docs/api/ Twitch API Get Started with the Twitch API dev.twitch.tv 트위치 개발자 페이지에서 설명이 나와있다 우선 트위치 개발자 콘솔에 로그인을 하고 앱을 등록해야한다 콘솔 페이지에 확장 프로그램, 응용 프로그램이 있는데 확장 프로그램은 방송에서 활용되는 프로그램 twip같은것을 만들때 활용되며 그 외에 이번에 필요한 단순 API를 활용하는 경우에는 응용프로그램에 앱을 등록해야한다 앱 정보를 등록하고 관리 페이지에 들어가면 설정한 앱의 정보들과 클라이언트ID, 클라이언트 시크릿을 볼..

채널은 자료를 서로 주고받기 위해 약속된 통로 역할을 한다 코루틴의 채널은 넌블로킹 전송 개념으로 사용된다 채널 구현시에는 SendChannel과 ReceiveChannel 인터페이스를 사용하여 값들의 스트립을 전송하며, 지연함수 send(), receive()를 사용한다 send()함수에서 값을 보내면 receive()함수를 통해 값을 받을수 있다 코루틴에서 채널에 send함수를 이용하여 10개의 값을 보내고 10개의 값을 채널에서 수신하여 출력한다 채널은 더이상 전달하는 데이터가 없으면 close()를 사용하여 채널을 닫을수 있다 - produce produce는 채널이 있는 코루틴으로 생산자(데이터를 만드는쪽)의 코드를 쉽게 구현할수 있다 생산자 produce()로 데이터를 만들고 데이터를 사용하는..

- 반복 반복하는 코드를 작성하기 위해서 repeat() 함수를 사용할수 있다 repeat()을 사용하게 되면 데몬 스레드로 실행하게 된다 - 데몬 스레드 데몬 스레드는 주 스레드와는 별개로 만들어지는 보조 스레드이다 주 스레드가 종료되면 데몬 스레드는 강제적으로 종료된다 repeat의 매개변수로 반복 횟수가 들어간다 하지만 repeat이 launch 내에서 반복을 하지만 launch는 GlobalScope로 생명 주기가 한정되어 있기 때문에 메인 스레드가 종료되면 같이 종료된다 - 작업 취소 cancel 함수를 사용하게 되면 원하는 타이밍에 코루틴 작업을 취소하는것이 가능하다 launch를 통하여 코루틴 작업을 실행하지만 main 함수의 끝에서 job.cancel() 이 있기때문에 코루틴 작업 실행 후..

코루틴은 항상 특정 문맥에서 실행되며, 문맥은 CoroutineContext에 의해 정의되며 어떤 컨텍스트에서 실행이 되는지는 디스패처(Dispatcher)가 결정한다 코루틴은 CoroutineContext로 구현된 형식의 문맥을 가진다 CoroutineDispatcher는 추상 클래스로써 몇가지 디스패처 객체를 정의하고 있다 1. 기본 문맥 Dispatcher.Default(GlobalScope)는 기본 문맥인 CommonPool에서 실행이 되며 GlobalScope로 표현한다 즉 launch(Dispatcher.Default){} 와 GlobalScope.launch{} 는 같은 표현이다 기본 문맥은 CommonPool에서 코루틴을 실행하도록 한다 즉 새로운 스레드를 생성하지 않고 기존에 있는 스레드..