Node.js에서는 직접 별도의 모듈을 정의하여 사용하지 않더라도 

기본적으로 수많은 내장된 모듈을 지원한다. 하지만, 너무 많기떄문에 다 외워서 사용할 수는 없다.

6개월마다 노드 버전이 바뀌고 있기때문에 기능이 빠르게 추가되고 삭제되기 때문이다.

그러므로 기본적인 사용법만을 익히고 구체적인것은 노드js


os모듈 : 그냥 현재 실행중인 컴퓨터의 운영체제에 대한 다양한 정보를 읽어올 수 있는 기능이다.

그다지 중요하진 않다. 그냥 시스템 속성보면 다 나옴..ㅋ

하여튼 중요한 것은 노드js에서 모듈을 사용하기 위해서는 require()함수를 사용한다.


var os = require('os');


그 다음에 변수 os를 사용하여 여러가지 메소드들을 호출하면 os모듈로부터 정보를 얻을 수 있다.


url 모듈 : 이 모듈을 사용하고 싶은 때 불러오는 선언은 마찮가지다. var url = require('url');

이 모듈에서 가장 대표적인 함수는 parse()함수이다.

이 함수는 일반적인 문자열  그중 URL 주소 문자열을 URL 객체로 변환하여 리턴한다.


Posted by sungho88
,

뷰를 숨기거나, 보여주거나 해서 어떤 동적인 움직임을 더욱 표현할 수 있다.


버튼을 눌렀을 때, 토글이 이뤄진다거나...


1. VISIBLE

2. INVISIBLE

3. GONE


1번은 당연히 보여주는 것이므로 쓰든. 말든 숨김 동작을 하지 않을것이라면 안써도 된다.


2,3 번의 차이는 무엇인가?


테스트를 해봤다. 다음 이미지를 보면 한눈에 알 수 있다.

하단에 레이아웃을 잘 보도록 ...


1. VISIBLE

첫 번째 이미지는 텍스트뷰 HaHa가 출력되었다. 그냥 단지 보여주는 것이다.


2. INVISIBLE

두 번째 이미지는 1번 VISIBLE과 별 차이 없다. 하지만, 뷰는 안보이게 설정하여 보이지 않는다.

하지만, 1번과 마찮가지로 동일한 위치에 존재한다.


                                


3. GONE

세 번째 이미지는 2번 비슷하게 뷰가 사라져서 내용물을 보여주지 않는다.

또한, 자리를 차지하지 않고 아예 사라져버려 있는지 없는지 알 수 없다.

INVISIBLE과 차이점은 


INVISIBLE : 뷰는 감춰지지만, 해당 뷰의 위치는 차치하고 있는다.

GONE : 뷰도 감춰지고, 해당 뷰의 위치 역시 차지하지 않는다.



이상으로 VISIBLE과 INVISIBLE 그리고 GONE의 차이점을 알아봤다.


Bye~


Posted by sungho88
,

이클립스와 매우 다른 단축키때문에 조금 불편하다.

일단, 내가 알게 된 단축키를 여기에 정리해보려 한다.


Ctrl + Alt + L

코드 자동 정렬. 가장 많이 쓰는 것일듯...


Shift + F10

프로젝트 실행하는 단축키


Ctrl+Q

클래스/메소드 설명보기


Shift + / 

한 줄 주석


Ctrl + Shift + / 

블록 단위 주석 


Ctrl + Y

안드로이드 스튜디오에서는 한 줄 삭제


Ctrl + D 

한 줄 복사


Ctrl + F4

창 닫기(종료) Ctrl + W가 아니다.


Alt + 방향키 

메소드 단위로 커서 이동


Alt + Enter 

에러 또는 오류가 발생 시에 이 단축키를 누르면, 어떤 해결책을 할지를 제시해준다.


Ctrl + B 또는 Ctrl + 마우스 왼쪽 클릭

선언된 함수, 변수 등의 라인으로 커서를 이동해서 쉽게 파악할 수 있다.


Ctrl + Shift + Enter

private void star() 후 단축키 입력시, 자동으로 괄호 한 쌍이 생성됨.


Ctrl + p

메소드 작성 시, 괄호 안에서 입력하면, 그 메소드에서 받을 수 있는 매개변수들의 타입을 보여줌.

 

Ctrl + Shift + F 

프로젝트 단위로 문자열 검색하기


Logcat 띄우기

Alt + 6


아무이유 없이 안될때. : 무슨 에러인지 말 안 할때.

Build - Clean Project


Shift + F1 -> 안드로이드 공식 사이트 DOC 문서로 이동하여 해당 메소드,클래스 설명

'Android > Android Studio' 카테고리의 다른 글

안드로이드 스튜디오 새 프로젝트 만들기  (1) 2017.12.11
Posted by sungho88
,

전역 변수 & 전역 객체

- 프로그램 전체에서 사용할 수 있는 변수 또는 객체를 의미함.


전역 변수

1. __filename : 현재 실행 중인 파일의 이름을 보여주는 변수

2. __dirname : 현재 실행 중인 파일의 경로를 보여주는 변수


전역 객체

1. console : 콘솔 화면과 관련된 기능을 다루는 객체

2. exports : 모듈과 관련된 기능을 다루는 객체

3. process : 프로그램과 관련된 기능을 다루는 객체



1) console 객체

1. log() : 콘솔 화면에 출력

2. time() : 시간 측정을 시작

3. timeout() : 시간 측정을 종료


log()에서 사용할 수 있는 특수 문자 : %d(숫자) %s(문자) %j(JSON)


console.log(%d + %d = %d, 4, 5, 6); 과 같이 사용


특수 문자 개수 > 매개변수의 개수라면, Ex) console.log(%d + %d + %d = %d, 4, 5, 6);

결과적으로 남는 %d는 그냥 문자로 출력 (결과 : 4 + 5 + 6 = %d)


특수 문자 개수 < 매개변수의 개수라면, Ex) console.log(%d = %d, 4, 5, 6);

결과적으로 남는 매개변수는 그냥 출력(4 = 5 6)


time() 함수와  timeout()함수는 프로그램 실행 시간을 출력할 때 사용 매개변수로 타이머를 식별.

Ex) time('programTime')  .... timeout('programTime');

이렇게 하면 time()메소드를 호출 후 timeout() 메소드가 호출되기 전까지 ...과정의 시간을 계산.


2) process객체

- 프로그램과 관련된 정보를 나타냄(컴퓨터 환경, 노드의 설치 버전, OS, 플랫폼, 등등)

- 자바스크립트엔 존재하지 않는 Node.js만의 객체


3) exports객체

- 먼저 모듈이란 기능을 쉽게 사용하고자 메소드와 속성을 미리 정의하여 모아놓은 것이다.

- Node.js는 결국 모듈들을 활용해 기능을 확장하여 프로젝트를 만들어 나아가는 것이라 할 수 있다.

- 모듈은 보통 코딩 외부에서 별도의 js파일을 생성하여 사용한다.

- 이 모듈을 생성할 때 exports 객체를 사용한다.  exports 객체에 속성이나 메소드를 지정한다.

- 이 모듈을 사용할때는 require() 함수를 사용한다.


Posted by sungho88
,

안드로이드에서는 자바에서 제공하는 쓰레드 개념을 그대로 사용할 수 있다. 

다만, 안드로이드에서는 리소스가 컴퓨터에 비해 한정적이기 때문에 좀 더 철저하게 관리된다.


즉, 뷰에 관한 일처리는 메인쓰레드만이 담당하게 된다. UI 쓰레드라고도 부른다.

백그라운드 쓰레드(메인쓰레드 이외 쓰레드들을 총칭)에게 복잡하거나 비교적 시간이 걸리는 작업을 

임한 뒤, 결과값을 메인쓰레드로 다시 받아서 결국 마무리는 메인쓰레드가 하는 방식이라 할 수 있다.

 

이러한 작업을 쉽게 하기위해서 핸들러라는 개념도 있지만, AsyncTask라는 것을 사용해보고자 한다.


AsyncTask는 백그라운드 쓰레드와 UI 쓰레드(메인 스레드)를 같이 쓰게 쉽게 하기 위해 설계하였다. 

또한 메소드의 이름이 어떤 기능을 갖는 메소드인지를 명확하게 알 수 있어 핸들러보다 다루기 쉽다.


public class MommooAsyncTask extends AsyncTask<String,Void,String>


위와 같이 선언할 때, 제네릭 매개변수 3개를 정해야한다.


첫 번째 : doInBackground 메소드에서 선언하는 매개변수의 타입을 지정한다

두 번쨰 : onProgressUpdate 메소드에서 선언하는 매개변수의 타입을 지정한다

세 번째 : onPostExecute 메소드에서 선언하는 매개변수의 타입을 지정한다


ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

import android.os.AsyncTask;


public class AsyncTaskExam extends AsyncTask<String,Void,String>{


    public String result;


    @Override

    protected void onPreExecute() {

        super.onPreExecute();

    }


    @Override

    protected String doInBackground(String... params) {

        return result;

    }


    @Override

    protected void onProgressUpdate(Void... values) {

        super.onProgressUpdate(values);

    }


    @Override

    protected void onPostExecute(String s) {

        super.onPostExecute(s);

    }

}


mmmmmmmmmmmmmmmmmmmmmmmmmmmmm

@Override

    protected void onPreExecute() {

        super.onPreExecute();

    }

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ


가장 먼저 나오는 메소드인 onPreExecute() 메소드는 doInBackground() 메소드..

즉, background스레드를 실행하기 전 준비를 하는 메소드이다.

변수를 초기화하거나 프로그레스 바 생성, 네트워크 통신 전 환경 세팅등을 여기서 진행한다.


 @Override

    protected String doInBackground(String... params) {

        return result;

    }


두 번째 나오는 이 메소드가 핵심이다.

이 메소드 background 스레드로 작업을 수행하는 부분이다.

네트워크 접속이나 DB 접속 등 비교적 시간 소요가 큰 일처리를 이 메소드에 작성한다.

background 스레드이므로 메인쓰레드의 작업과는 상관없이 별개로 독립적으로 수행을 한다.

따라서 AsyncTask는 비동기적으로 작동한다고 할 수 있다.


만약, 메인쓰레드가 이 작업을 한다면?

버튼을 클릭했을 때, 서버에 접속해서 이미지를 갖고 오는 앱이 있다고 가정해보자.

 AsyncTask를 쓰면, 버튼을 눌렀다 떼면 이미지를 갖고 오는 동안 잠실 기다려달라는 텍스트를 보여준다거나, 다른 화면을 보여준다거나, 프로그래스바를 돌리는 작업을 할 수 있다.


하지만, 메인쓰레드에서 이 작업을 수행하면 버튼을 누른 그 상태 그대로 멈춰버리며

서버에서 이미지를 가져오는 작업이 완료될때까지 유저는 아무런 액션도 할 수 없다.

또한 최근 버전에서는 그러한 상태를 방지하기 위해 아예 에러를 출력하며 앱을 강제 종료시키므로 선택이 아닌 필수이다.


@Override

    protected void onProgressUpdate(Void... values) {

        super.onProgressUpdate(values);

    }


세 번째 메소드는 doInBackground 메소드 동작 시 중간중간 메인쓰레드에게 일을 맡겨야 할때 사용한다. 위 예제의 경우 매개변수가 Void이므로 호출한 쪽에서는 ()으로 그냥 호출한다.

즉, onProgressUpdate()메소드를 호출하면 백그라운드 쓰레드 중간에 메인쓰레드에게 일을 시킬 수 있다.


@Override

    protected void onPostExecute(String s) {

        super.onPostExecute(s);

    }


마지막 메소드는 Bckground 쓰레드(doInBackground())가 일을 끝마치고 리턴값으로 result를 넘겨준것을 매개변수로 받는다. 그 값을 갖고 메인 쓰레드에게 일처리를 시킬때 사용하는 메소드이다. 


정리하면, 

doInBackground()메소드는 메인 쓰레드가 아닌 백그라운드 쓰레드이며,

나머지 메소드들은 백그라운드 쓰레드가 아니라 메인 쓰레드에서 동작한다.


(추후에 상시 업데이트 예정)


Posted by sungho88
,

뷰를 숨기거나, 보여주거나 해서 어떤 동적인 움직임을 더욱 표현할 수 있다.


버튼을 눌렀을 때, 토글이 이뤄진다거나...


1. VISIBLE

2. INVISIBLE

3. GONE


1번은 당연히 보여주는 것이므로 쓰든. 말든 숨김 동작을 하지 않을것이라면 안써도 된다.


2,3 번의 차이는 무엇인가?


테스트를 해봤다. 다음 이미지를 보면 한눈에 알 수 있다.

하단에 레이아웃을 잘 보도록 ...


1. VISIBLE

첫 번째 이미지는 텍스트뷰 HaHa가 출력되었다. 그냥 단지 보여주는 것이다.


2. INVISIBLE

두 번째 이미지는 1번 VISIBLE과 별 차이 없다. 하지만, 뷰는 안보이게 설정하여 보이지 않는다.

하지만, 1번과 마찮가지로 동일한 위치에 존재한다.


                                


3. GONE

세 번째 이미지는 2번 비슷하게 뷰가 사라져서 내용물을 보여주지 않는다.

또한, 자리를 차지하지 않고 아예 사라져버려 있는지 없는지 알 수 없다.

INVISIBLE과 차이점은 


INVISIBLE : 뷰는 감춰지지만, 해당 뷰의 위치는 차치하고 있는다.

GONE : 뷰도 감춰지고, 해당 뷰의 위치 역시 차지하지 않는다.



이상으로 VISIBLE과 INVISIBLE 그리고 GONE의 차이점을 알아봤다.


Bye~


Posted by sungho88
,

안드로이드는 폰의 보안 설정을 다양하게 해주어야한다.

그 스마트폰에 접근권한을 준다고 해야할까?

카메라 기능을 앱dp서 사용해야 한다면 CAMERA 퍼미션을 추가해주어야한다.

인터넷 권한의 획득없이, 인터넷을 사용할 수 없으며, 

연락처를 읽는 권한없이, 디바이스의 연락처를 읽어올 수 없다. 

전화걸기 권한없이 전화를 걸 수 없고, SMS권한없이 SMS를 다룰수 없습니다.



try catch를 잘 쓰면, 이렇게 에러가 정확히 출력할 수 있다.

뭐가 문제인지 알려줄뿐만 아니라 심지어 제안까지 해준다. 굿.

그럼 안드로이드 매니페스트에 들어가서 유저-퍼미션을 추가해주면 된다.

여태까지 2개,3개의 블로그&메모장에 저장해놨던 것을 이 블로그로 모두 강제이주시키려고 한다.



<카메라 퍼미션>


<uses-permission />

카메라를 사용하기 위해서는 물리적인 하드웨어를 사용하는 것이므로 반드시, 

카메라를 사용하겠다고 안드로이드 메니페스트에 퍼미션 등록을 해주어야 사용이 가능하다.


<uses-feature />

또한 등록한 퍼미션 외에도 <uses-feature> 엘리먼트는 카메라 하드웨어와 오토 포커스 기능을 

사용한다는 것을 미리 퍼미션에 알려 해당 기능이 없는 장비에 앱이 설치되는 것을 방지하기 위해 

사용된다. 


 

<uses-permission android:name="android.permission.CAMERA" />

<uses-feature android:name="android.hardware.camera" />

<uses-feature android:name="android.hardware.camera.autofocus" />


이렇게 쓰면  카메라를 사용하겠다고 퍼미션 등록을 하였으며, 





안드로이드 스튜디오에서 매니페스트 위치




Android 메뉴로 들어가서 - app - manifests - AndroidManifest.xml로 접속하면된다.



<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

이 두 개는 그냥 세트로 써주면된다.

인터넷을 연결하라는 퍼미션이고, 네트워크 상태를 체크하는 퍼미션이기 때문이다.

이렇게 하면 인터넷에 연결되는 퍼미션은 완료되었다.


Posted by sungho88
,

처음 에뮬레이터를 돌리면, 영어만 되고 한글 입력이 되질 않는다.

Language에서 바꿀 수 있을것이라 생각을 했지만, 환경은 바꿀 수 있으나 키보드는 못 바꾼다.


한글 키보드를 따로 설치를 해주어야한다.


hangulkeyboard.apk


이것을 다운받아서 자신이 설치한 sdk 폴더 내에 platform-tools에 집어넣는다.


어딨는지 못찾겠으면 C드라이브에서 Ctrl + F를 눌러서 검색하는 방법이 있다.

(환경에 따라 다른데 설치했을수도..)


그 다음에 cmd를 실행한다.

그 다음에 platform-tools폴더로 이동한다(cd ..)

그 다음에 adb install hangulkeyboard.apk를 입력해서 설치한다.


success 어쩌고가 나오면 성공!


그 다음에 다시 AVD로 돌아와서...

설정에서 키보드를 누르면 한글.이 추가된 것을 볼 수 있다.

한글을 설정하면 완료!

한글을 사용할 수 있게 됨

Posted by sungho88
,

Node Package Manager


일단 모듈이라는 개념이 있다.

모듈은 쉽게 말하면 어떤 작업을 하기 위해 필요한 부분? 부품? 이라고 할 수 있다.

노드js에서는 이 모듈을 사용하기 위해 require라는 것을 사용한다.

예를들어 노드js의 가장 대표적인 예제로 나와있는 서버를 생성하는 코드를 보게 되면,


const http = require('http');


const hostname = '127.0.0.1';

const port = 3000;


const server = http.createServer((req, res) => {

  res.statusCode = 200;

  res.setHeader('Content-Type', 'text/plain');

  res.end('Hello World\n');

});


server.listen(port, hostname, () => {

  console.log(`Server running at http://${hostname}:${port}/`);

});


이렇게 되어있다. 이 코드에서  맨 윗 줄...


const http = require('http');


이 부분이 모듈을 사용하겠다고 호출하는 부분이다.
즉, http 라는 이름의 모듈을 상수 http에 집어넣고, 이 상수를 통해 모듈을 사용하겠다는 의미이다.
이렇게 별도의 설치없이 require만으로 호출하는 것은 노드js 안에 내장되어 있는 모듈만 가능하다.

http os Date String Array Math 등등 이런것들은 JavaScript가 제공하는 모듈이다.

따라서, 노드js 뿐만 아니라 자바스크립트가 동작하는 모든 곳에서 사용할 수 있다.

하여튼, 하지만, 내장된 모듈만으로는 수많은 기능을 모두 표현할 수 없을 것이다.


기본적인(내장된) 모듈을 기반으로 해서 타인의 모듈을 사용하여 편리하고 발전된 기능이 가능하다.

그래서 나온것이 NPM이다.


NPM은 노드js에서 앱 스토어와 같다.

또한 매우 간단한 설치/삭제/업그레이드/의존성 관리가 가능하다.

NPM은 노드뿐만 아니라 노드js를 기반으로 한 수많은 언어에서 NPM을 그대로 사용할 수 있다.


npm Main Page


NPM를 독립적으로 설치하는 방법


 $ npm install -g uglify
// -g : global을 의미. 설치된 컴퓨터 전역에서 사용할 수 있는 독릭적 설치
// -g 생략 : 패키지 안에서



이렇게 되면 설치완료.

-g를 붙여서 설치했으므로 어떤 디렉토리에서든 uglify를 실행할 수 있다.

못 생기게 한다??


uglifyjs --help를 입력해서 사용법을 알아보도록 하자.


테스트를 하기위해 js파일을 하나 만든다. (Fun.js)



function hello(name){

  console.log('Hi, '+name)

}

hello("Sungho");



파일에 아무렇게나(난 위처럼 작성...) 작성 한 뒤, cmd명령어로 돌아와서 


uglifyjs Fun.js 을 입력해보자.

그럼 코드가 괴상망측하게 바뀐것을 볼 수 있다.


uglify... 말그대로 코드를 못 생기게 만들었다. 도대체 왜 그런걸까.


파일에는 줄바꿈, 띄어쓰기, 들여쓰기등이 완벽하여 가독성이 뛰어나다.

하지만, 가독성을 높이기 위해 사용된 이러한 것들이 데이터의 일종이기 때문에 

네트워크를 사용해서 자바스크립트 파일을 전송한다고 하면, 이러한 쓸데없는 것들이 데이터 양을 증가시켜 비용이 많이 발생하고 시간 역시 지연을 시킨다.


따라서 uglify는 이러한 불필요한 데이터들을 싹 없애주는 기능을 하는 NPM이다.

데이터를 더욱더 줄이고 싶다면


uglifyjs Fun.js -m


-m : mangle 수축? 지역변수와 같은 것들이 한 글자로 출력되어 더욱 데이터가 절약될 수 있다.

name이라는 변수가 o가 되어 출력되었다.


Posted by sungho88
,

1. String 

 

- String은 일반적인 Text문자열이며, key와 value가 각각 하나씩인 일대일 관계(유일)

- Text형태만 저장할 수 있는것이 아니라, binary safe string이다.

- 이것이 의미하는 것은 JPEG 이미지나 숫자 알파벳 등을 사용할 수도 있다는 것이다.

- key와 value 모두 넣을 수 있는 최대 길이는 512MB이다.

- key는 너무 길면 찾기 어렵고, 불필요한 메모리 소모가 일어난다.

- key는 너무 짧으면 뭔지 해독하기 쉽지 않으므로 알맞게 하도록 하자.

- key를 구성할때 단어 사이에 구분자를 사용하는 것이 좋습니다. 
  예를 들어 ':', '-' 등을 사용해서 key를 구성하면 쉽게 알아볼 수 있습니다.

 

String 명령어는 수없이 많으므로 몇 개만 보고 나머지는 아래 사이트에서 시간날때 해라..

 

 데이터형 String의 명령어 리스트 모음

 

 

SET KEY VALUE   :  key-value 형식으로 데이터를 저장.

GET KEY :  저장된 KEY를 불러옴.

 

SET hi Hello : hi라는 키에 Hello라는 값이 저장.

GET hi : Hello

 

value값이 한 단어가 아니라면, 쌍따옴표를 사용한다. 

 

SET hello "HELLO WORLD!" --> hello란 키에 HELLO WORLD! 문자열 저장

GET hello --> HELLO WORLD!

DEL hello --> key값 삭제. 제거됨. (nil)뜸.

 

SET hello hoho 

SET hello haha

쓴데 또 쓰면 당연히 나중에 쓴 값(value)이 저장됨.

그 외에도 EX 나 NX 등 많음. 이런 명령어는 시간 많을때 보도록..

 

2. Lists

 

- 일반적인 배열로 생각하면 된다.

- List는 key 1개에 n개의 value를 갖는다. (단, 중복된 값 저장 가능함)

- 입력된 데이터값은 입력된 순서대로 순차적으로 저장 및 처리된다.

- 주로 큐(Queue)와 스택(Stack)으로 사용된다.

큐 : 들어오는 데이터들 순서대로 처리할 때 사용한다.

스택 : 웹브라우저의 Back 버튼과 같이 주로 되돌아갈때 사용한다.

 

- 한 key에 담을 수 있는 최대 갯수는 4,294,967,295개(2^32 - 1개)

- 대표적인 명령어 : LPUSH RPOP

 

명령어 LPUSH : 

리스트에서 데이터를 저장하는데 사용한다.

처음 저장한 데이터가 리스트의 맨 오른쪽에, 가장 마지막에 저장한 데이터가 리스트의 맨 왼쪽에 위치한다.

 

lpush KEY VALUE (한 개의 VALUE 저장)    또는

lpush KEY VALUE VALUE VALUE   (한 줄에 여러개 데이터 저장 가능) 

 

 

명령어 RPOP : 

리스트의 오른쪽에서 데이터를 하나씩 꺼낸다. 즉, 먼저 저장된 값을 꺼내온다.

 

데이터형 Lists의 명령어 리스트 모음

 

 

3. Sets

 

 - Group 형태로 key 1개에 n개의 값을 갖는다. (단, 중복된 값 허용하지 않음)

 - 입력된 순서와 상관없이 저장되는 정렬되지 않은 집합형이다.

 - '집합'이기 때문에 한 key에 중복된 데이터는 존재할 수 없다.

 - 즉, 동일한 key에 같은 값 value A가 두 번 추가된다면 값은 하나만 존재하게 된다.

 - 한 key에 담을 수 있는 최대 갯수는 4,294,967,295개(2^32 - 1개)

 - Set의 경우 집합 연산을 제공한다. 합집합, 교집합, 차집합을 할 수 있다.

-  Sets에서는 집합이라는 의미에서 value를 member라 부른다.

   명령어 SADD : 데이터를 저장하기 위한 명령어.

 

데이터형 Sets의 명령어 리스트 모음

 

 

4. Sorted Sets

 

- key 하나에 여러개의 score와 value로 구성된다.

- Sets과 마찮가지로 중복된 데이터는 허용하지 않는다.

  동일한 키에 값을 여러번 추가해도 하나만 존재하게 된다.

- Set에 'score'라는 필드가 추가된 데이터형이다.

- score로 데이터 값(value)의 순서를 정렬(sort)한다.

- score가 같다면 데이터 값(value)으로 정렬(sort)한다.

- 정렬된 데이터가 필요한 경우 Sorted Set 데이터형을 사용한다.

 

5. Hashes

 

- Hashes의 경우 key 하나에 여러개의 field와 value 쌍으로 구성된다.

- 하다.

 
 
Hashes VS Table 공통점
1. Hashes가 필드(field)와 값(value)로 구성된다는 점은 RDB의 table과 비슷하다.
2. Hash key는 table의 PK, field는 column, value는 value로 생각하면 비슷하다.
3. Key가 PK와 같은 역할을 하기떄문에 Key 하나는 table의 하나의 row와 같다.
 
Hashes VS Table차이점
1. Table의 column 수는 일반적으로 제한이 있다.
   하지만, Hashes의 field의 수는 40억개로 거의 무제한에 가깝다.
 

2. Table에서 column을 추가하려면 alter문으로 미리 table을 변경해야 하지만, 

   Hash에서는 그러한 사전 작업이 필요없다. 따라서, field의 추가/삭제가 자유롭다.

   field의 추가/삭제는 해당 key에서만 영향을 미친다.

 

 

https://www.10000duck.com/ducks/44

 

10000duck - 아프가니스탄 위기상황 대응 긴급구호

온라인 모금함을 통해 기부하세요.

www.10000duck.com

 

 

 

 

 

 

 

 

 

 

 

 

 

http://www.redisgate.com/redis/command/common.php

http://kerocat.tistory.com/1

http://bcho.tistory.com/654 

Posted by sungho88
,