반응형

JS : 배열 삭제(Array remove)

작성 계기

 일반적인 모듈에서 많이 사용하는 것에 비해서 자주 잊어 먹기때문에 정리를 해두려는 목적으로 작성하였다. 물론 w3s에서 제공하는 영문 문서에 가장 자세하게 기록이 되어 있다.


배열 삭제 메서드

JS는 어떠한 객체든지 기본적인 메서드를 갖고 있다. 그 중 배열타입(자료형: type)에서 제공 되는 삭제는 많이 갖고 있다. 이러한 메서드들은 객체에 귀속되어 있기 때문에 사용할 때에는 객체 뒤에 닷(dot: ".")을 찍어 줘야 한다.


pop()

 스택 자료형에서 들어 본적이 있다면, 익숙한 단어이다. 당연 배열의 가장 뒤에서 부터 삭제를 하는 메서드이다. 이때 삭제되는 원소가 반환된다.

var arr = [1, 2, 3, 4];
var one = arr.pop();   // one === 4


shift()

 큐 자료형에서 들어본적 있을 법한 단어이다. pop()과는 순서상 반대로 배열의 앞에 있는 원소를 반환하면서 삭제한다.

var arr = [1, 2, 3, 4];
var one = arr.pop();    // one === 1


delete

 엄밀하게는 메서드라 할 수 없다. 때문에 사용법도 다르다. 게다가 이 방법으로 삭제된 배열의 원소는 공백(undefined)이 생긴다. 가능하면 쓰지 말자. pop()과 shift()와의 차이점은 배열의 원하는 위를 바로 삭제할 수 있다.

var arr = [1, 2, 3, 4];
delete arr[2];    // arr === [1, 2, undefined, 4]


splice(index, number)

 앞의 pop()과 shift()는 맨앞이나 맨뒤의 요소만 삭제가 가능하다. 하지만 이 메서드는 배열의 중간에 삭제할 수 있다. index배열의 index 번호이고, 뒤의 number는 삭제할 개수이다. 해당 메서드는 삭제외에 삽입의 기능으로 사용도 가능하다. number이후에 추가되는 객체들은 배열에 삽입이 된다. 배열에서 원하는 위치에서 배열의 원소를 삭제하고 싶을 경우 사용이 가능하기 때문에 보통 일반적인 클래스를 만들때 사용하면 매우 유용하다.

var arr = [1, 2, 3, 4];
arr.splice(1, 2);    // arr === [1, 4]


참고자료

w3s : http://www.w3schools.com/js/js_array_methods.asp

반응형
반응형

싱글턴 패턴(Singleton pattern) 예제코드


사용하게 된 계기

 작성한 클래스로 객체를 생성해서 사용을 하는데, 굳이 여러개의 객체를 만들 필요가 없지만, 자주 호출되는 경우 사용하는 것이 싱글턴이고, 웹 프로그램에서도 주로 네트워크라던가 감시하는 종류의 역할을 하는 프로그램의 경우에는 여러객체를 생성하게 되면 상당히 낭비를 하게 된다는 것을 알게 된다.

 이러한 코딩 패턴을 싱글턴(필자는 싱글톤이라고 종종 읽기도 한다)이라고 하고 이러한 패턴은 대부분 프로그래밍 언어에서 디자인이 가능하다. 싱글턴의 자세한 패턴은 "디자인 패턴"에 대해서 공부를 하도록 하자. 타입스크립트(TypeScript)는 비교적 C#과 비슷한 문법을 유지하고 있기 때문에 경력자라면 쉽게 구현하여 사용할 수 있다.


싱글턴 조건

1. 객체가 하나만 존재해야 한다. 객체를 추가로 생성해도 객체는 하나가 되어야 한다.

2. 해당 객체의 메서드는 인스턴스를 통해서 사용할 수 있다.


타입스크립트의 싱글턴 예제들

예제1

 가장 기본적인 예제로 클래스가 생성되는 과정에서 인스턴스에 자기자신이 선언이 된다.

class Singleton
{
    private static _instance: Singleton = new Singleton;
    constructor()
    {
        if(Singleton._instance){
            throw new Error("Error: Instantiation failed: Use Singleton.getInstance()");
        }
        Singleton._instance = this;
    }
    public static getInstance(): Singleton
    {
        return Singleton._instance;
    }
    //...
}
// 싱글턴 사용을 위한 인스턴스
var singleton = Singleton.getInstance();

참조: http://www.codebelt.com/typescript/typescript-singleton-pattern/


예제2

 타입스크립트 2.0 이후부터 권장이 되는 방식으로 앞의 예제1의 경우 클래스가 정의 된가 동시에 싱글턴의 객체가 생성이 된다. 하지만, 이 방식의 경우 코드를 보면 알겠지만, 인스턴스를 최초로 받을 때 객체가 생성이 되기 때문에 라이브러리로 만들어서 사용한다면, 불필요한 객체롤 아예 만들지 않을 수 있기 때문에 위의 방식보다 좀 더 나은 방식이다.

class Singleton
{
    private static _instance: Singleton;
    constructor()
    {
        //...
    }
    public static get Instance()
    {
        return this._instance || (this._instance = new this());
    }
    //...
}
// 싱글턴 사용을 위한 인스턴스
var singleton = Singleton.Instance;


참조: https://github.com/Microsoft/TypeScript/issues/2341


그밖의 예제

검색을 좀 해보면 상당히 많은 방식들을 찾을 수 있다. 아래의 스택오버플로워(stackoverflow)의 채택된 답변외에도 다양한 답들이 있는 것을 확인할 수 있다.

스택오버플로워 질문: http://stackoverflow.com/questions/30174078/how-to-define-singleton-in-typescript

반응형
반응형

성격유형 검사

아래의 웹페이지에서 검사를 할 수 있다. 12분내외로 답을 해야 하며, 약100여문항이 있다. 유형에 대해서 답변 기준으로 추론하는 것이지 반드시 정확하다 볼 수 없으니 참고수준으로만 하자!


https://www.16personalities.com/ko

반응형
반응형

아파치(apche)2 루트디렉토리(경로) 설정

알아야 했던 배경

라즈베리 파이에서 촬영된 이미지를 다른 PC로 가져와야 하는 네트워크 프로그램을 만들어야 하지만 당시 사전지식 부족과 간단한 확인을 하기 위해 아파치 웹 서버를 활용하기로함


아파치2 설치

sudo apt-get install apache2

한 줄입력으로 설치가 시작된다. 


php도 사용해야 할 경우 다음 한줄을 입력해주자

sudo apt-get install php


한번에 인스톨하기 위해서는 다음과 같이 이어서 입력도 가능하다.

sudo apt-get install apache2 -y && sudo apt-get install php -y


의외로 시간이 지났지만, 라비안의 기본 브라우저를 열고 "localhost"에 접속했을 때 아파치에서 제공하는 기본 웹 페이지가 나오면, 설치가 잘 된 것이다.


아파치의 루트 디렉토리 변경

라즈비안의 아파치는 설치시하면 /var/www/html 이하의 폴더를 루트 디렉토리로 설정되어 버린다. 이를 변경하기 위해서는 2개의 설정파일을 변경해야 한다.

sudo nano /etc/apache2/apache2.conf

파일에서는 <directory /var/www/html>이라 되어 있는 부분을 수정하도록 하자. 그리고 아파치2 서버의 기본 설정중에 파일이 없을 경우 탐색기와 같은 index 화면을 보여주는데, 이는 보안에 취약성을 유발하는 옵션이므로 해당 위치 하단의 옵션 항목에서 indexes ~ 로 시작하는 옵션을 주석처리 혹은 삭제를 해준다.(주석처리는 해당 문장 앞에 #을 추가하면 된다)

sudo nano /etc/apache2/site-available/000-default.conf

해당 파일에서는 "Document /var/www/html" 부분을 수정하면 된다.


이 두파일을 수정한다음에 service를 재시작하거나 재부팅을 한뒤에 확인을 하면된다. 서비스 재시작은 다음과 같고(혹은 뒤에 restart로 한줄 명령어도 가능하다)

sudo /etc/init.d/apache2 stop
sudo /etc/init.d/apache2 start

혹은 아래 명령어로 아예 다시 시작하는 방법이 있다.

sudo reboot


반응형
반응형

C : extern 키워드

작성계기

실제로 실수를 했었고, 찾아보니 의외로 다른사람도 잦은 실수를 하는 것 같아서 작성함.


키워드의 의미

다른 파일에 있는 변수를 현재 파일에서 사용하기 위해서 사용하는 키워드이다. 원리상 다른 파일 어딘가(메모리의 어딘가)에 해당변수가 있으니 그걸 참조하라는 의미가 된다.


예시)

a.c (변수가 정의 되어 있는 파일)

int a = 0;


b.c (a.c 파일에 있는 변수를 호출해서 사용하는 파일)

extern int a;
a = 20;


활용 및 응용

매번 새로운 파일에서 참조를 할 때마다 앞단에 extern 키워드로 사용가능하게 하는 것은 상당히 번거롭기 때문에 해당되는 헤더파일에 작성하여 여러번 작성을 하지 않게 할 수 있다.


예시)

a.c (변수가 정의 되어 있는 파일)

#include "a.h"
int a = 0;


a.h (변수가 정의 되어 있는 파일의 헤더파일)

#pragma once
extern int a;


b.c (a.c 파일에 있는 변수를 사용하는 파일)

#include "a.h"
a = 20;


당연한 말이지만, 해당 선언을 중복으로 선언하게 되면, 오류가 된다. 따라서 #pragma once 혹은 #ifndef를 활용하여 중복선언을 피하도록 하자.


실수하는 예

C의 전형적인 함정은 주로 배열에서 발생된다. 배열로 선언/정의 한것과 포인터로 선언/정의 된것은 다른 것으로 컴파일러가 구분한다. 의미상 배열선언의 키워드도 포인터로 같은 종류로 (사람은) 인식하지만, 컴파일러는 다른 것으로 인식을 한다.


예시)

a.c (정의된 원본 파일)

char a[] = "abc";


b1.c (오류/에러로 인식 "그런거 없다고 한다")

extern *a;
char b = a[0];


b2.c (정상 호출)

extern a[];
char b = a[0];



반응형
반응형

TypeScript : 개요

사용하게된 계기

3D 그래픽 디자인 툴중에 Blender라는 착한 오픈소스 프로그램을 접하게 되었고, 이러한 애드온(AddOn)중에 Blend4Web을 접하게 되었다. 이 Blend4Web은 웹 브라우저에서 3D 그래픽 렌더링을 좀더 간단하게 할 수 있는 프레임워크에 해당된다. 문제는 3D 그래픽 웹 앱이 복잡해질 수록 코드줄이 너무 많아지는데, JavaScript 언어적 특성상 규모가 커질 수록 코딩이 어려워지는 단점이 있다.


 이러한 배경에 협업하기로 한 당시 러시아 엔지니어 측에서 TypeScript를 사용했기 때문에 JavaScript보다도 먼저 TypeScript를 사용하게 되었다.


등장계기

TypeScript is superset of JavaScript

나름 힘좀 쓰는 개발자들은 JavaScript(JS)를 무시해왔었다. 이는 스크립트 개념의 프로그래밍 언어가 컴파일 계열 언어에 비해서 실행 속도가 느리기 때문이었는데, 어느날 Java의 가상머신의 발전과 하드웨어의 발전 여기에 구글이 영감을 얻어 JS실행속도를 획기적으로 올리는 등 엄청난 변화가 찾아오게 되었다. 그와 동시에 단일 페이지 웹 앱이라는 개념이 확산됨과 동시에 서버단의 스크립트 언어로써의 확장 등 단 시간내에 엄청난 발전을 이룩하게 되었다.


이로 인해서 과거에는 간단하게 작성하던 스크립트가 갑자기 거대한 스크립트를 작성해야 되었고, MS의 어느 용기있는 옹이 웹 개발자의 삽질을 관찰한 결과 설계하게 된 것이 바로 TypeScript(TS)이다. 하지만, 이러한 언어는 TS만 있는 것이 아니라 이미 CoffeeScript(CS)가 있었다. 하지만, MS에서 오픈소스로 개방하는 등 파격적인 행보를 하면서 빠르게 저변을 확산해 가고 있다.


문법의 특징

 기본적인 설계 방향은 JS위에 C#/Java를 얹힌 문법의 개념이라서 JS만 익힌 사람이라면 거부감이 들 수 있지만, 반대로 C/C++을 먼저 익힌 사람 입장에서는 친숙하다. JS가 C라면 TS는 C++ 개념으로 만들어진 것이라서 JS 문법을 TS에서도 사용이 가능하다. 다만 실행하기 위해서는 TS컴파일러로 컴파일을 해야 한다.


 기존의 라이브러리는 재정의를 해야 하는데, 유명한 라이브러리는 이미 재정의된 파일을 제공하고 있다. npm에서 tsd모듈을 받은 다음에 d.ts 파일을 받아서 사용하면 된다. 재정의 파일은 재정의만 해주는 파일이기 때문에 컴파일이 되지 않고, TS코드를 작성할때 인텔리전트와 타입검사만 지원을 해준다. 실제 실행하기 위해서는 JS 라이브러리 파일도 같이 있어야 한다.


활용범위

JS가 사용되는 곳에서는 TS도 사용이 가능하다. 그리고 TS에 JS코드를 작성해도 실행이 된다. VS20xx 뿐만아니라 Node.js의 npm을 통해서 컴파일러를 다운로드 받을 수 있기 때문에 다른 통합개발툴에서도 컴파일러 설정을 잡아 주기만 해도 컴파일이 가능하다.


Google의 Angular 2.0에서도 TS를 적극 사용하게 되면서 더욱더 주목을 받게 되는 언어가 되었다.


참고 자료

 아쉽지만 아직은 한글로 된 자료가 별로 없다. 영문으로 된 문서를 직접 참조를 해야 한다. 개인적으로 핸드북 번역을 시도는 하고는 있지만.. 언제 마무리 될지는 장담 못 하겠다.


공식 홈페이지 [참조링크]

공식 홈페이지의 핸드북(영문) [참조링크]

Git Book 튜토리얼(영문) [참조링크]

ECMAScript6 명세(TS설계 기준) [참조링크]

TSD공식 홈페이지(타입재정의:영문) [참조링크]

반응형
반응형

리눅스/윈도우 C : 헤더파일 중복 참조 방지

알게된 배경

 참여하는 프로젝트에서 소켓 네트워크 프로그램을 만들어야 하는데, 가장 먼저 잡은 책이 하필 C로 실습하는 책이었다. 문제는 C는 운영체제를 많이 타는 편이라서 리눅스와 윈도우를 같이 번갈아가면서 사용해야 했다.


들어가기에 앞서

 현재 C도 C++처럼 표준이 존재하며, 리눅스는 C90 ~ C99를 지원하고, 윈도우는 C80만 지원한다. 따라서 지속적으로 계속 차이가 날 수 밖에 없다. 그리고 대부분의 C 학습 서적은 대부분 윈도우 환경의 Microsoft Visual(MV) C++ 컴파일러를 기준으로 되어 있다.


매크로변수로 구분하는 방법(#ifndef)

예시)

#ifndef _HEADER_H_
#define _HEADER_H_

int func1(void);

#endif //_HEADER_H_

초기 C에서 사용되는 방법으로 매크로 변수 선언여부에 따라서 컴파일러는 정해진 구간의 코드를 컴파일하지 않는다. 매크로는 컴파일 하기전에 실행되는 것이기 때문에 이를 통해서 매번 다른 C파일에서 중복으로 헤더파일을 인클루드 해도 컴파일러는 여러번 참조하지 않는다. 헤더파일 중복 참조를 막기 위한 변수명은 위의 코드처럼 _(언더바)로 시작하고 대문자로 작성하며, 마지막에 _H_로 표기하도록 권장한다.


 다만, 기기 입장에서 컴파일을 할때 매크로에 의해서 컴파일전에 헤더파일의 내용을 건너뛰기는 하지만, 파일 전체가 아닌 구간을 넘기는 거라서 원리상 파일을 중복 참조하기는 한다. 그렇지만, 이게 워낙 빨라서 사람이 체감하기는 어렵다.


한번만 읽는 매크로를 실행하는 방법(#pragma once)

#pragma once

int func1(void);

MV C++ 에서 사용하기 시작한 방법이다. 매크로는 컴파일러가 컴파일전에 작업한다는 것을 다시 한번 상기하자. 매크로 명령어로 컴파일러에게 컴파일전에 이 파일은 한번만 읽으라고 하는 의미이다. 결국 앞의 매크로변수 유무에 따라서 컴파일하는 것과 같은 결과를 갖게 되는데, 원리상 차이가 있다.


 파일을 한번만 읽으라고 했기 때문에 아무래도 매크로 변수 존재 유무를 확인하고 구간을 건너뛰는 것보다는 매크로실행과정이 짧아진다. 물론 속도 차이는 체감이 거의 안된다.


중복참조 선택방법

 이러한 매크로(#pragma once)는 처음에 MV C++에서만 지원이 되었고 비표준이었다. 하지만, 요즘에는 표준화가 되었다. 그러나 아직 표준화 된지 오래 안되어서 인지 지원이 안되는 컴파일러가 있을 수 있기에 아직도 매크로 변수를 이용한 중복 참조를 피하는 방법을 리눅스 프로그래밍(OS X 에서도) 쪽에서는 아직도 많이 사용하고 있다.


 자신의 개발환경이 오래된 혹은 가벼운 컴파일러를 사용해야 할 경우에는 어쩔 수 없이 매크로변수를 이용해야 하고 그게 아니라면 #pragma once를 사용하자.


위키피디아에서 #pragma once 매크로가 지원되는 컴파일러 목록이 정리되어 있다

[참조링크]


반응형
반응형

라즈베리 파이3 : 카메라 모듈 v2

알아야 했던 배경

참여한 프로젝트에서 다수의 라즈베리 파이기기에서 사진을 찍어서 가져와야 되므로 반드시 알아야 했던 기능이다.


하드웨어 설치

하드웨어는 방향을 잘 살피고 꼿으면 된다(참 쉽죠?). 


카메라 제어하기(소프트웨어)

공식 라즈베리 파이 카메라 모듈 v2를 사용한다면, 라즈비안에 기본적으로 카메라를 컨트롤 할 수 있는 프로그램을 이미 갖고 있다. 소프트웨어를 개발할 경우 파이썬에는 라이브러리를 제공하고 있다. bash 쉘에서 프로그램 실행이 가능하다면, 다른 JAVA, C/C++ 기타 가벼운 프로그래밍 언어로도 카메라를 컨트롤을 할 수 있다.


기존 프로그램 사용방법은 라즈베리 파이 공식 문서에 있다. 크게 raspistill, raspivid, raspistillyuv라는 프로그램이 존재하는데, 이중 raspistill, raspistillyuv는 이름처럼 거의 비슷한 사진 촬영(영문으로는 image capture로 되어 있지만 기능상 사진 촬영이적절하다)기능이고 raspivid는 비디오 촬영 기능이다.


카메라 설치 테스트

 공식문서에서 소개하는 방식으로 카메라가 정상적으로 설치되었는지 확인하기 위해서는 터미널 창에 다음 명령어를 실행한다.

raspistill -v -o test.jpg

 정상적으로 하드웨어가 설치되어 있다면, 약 5초간 실시간 동영상이 화면이 보이고 난다음에 카메라 모듈에 대한 정보를 출력된다. 여기서 '-'붙은  명령어는 옵션을 의미하므로 해당 문서를 참고를 해야 한다.

공식 프로그램 옵션 문서[참조링크]

(귀찮아서 그렇지 나중에는 어딘가에 따로 적어 놔야 할 것이다)

카메라 모듈 정보에서 주목해야 할 것은 기본적인 화질이 75~85로 출력되도록 설정이 되어 있다는 것을 알 수 있다. 이처럼 디폴트 설정값이 무엇인지 알아야 자신의 프로젝트에 적절히 사용할 수 있다.


필자 기준으로 가장 기본적으로 알아야 하는 옵션은 다음과 같다. 공식문서와 순서가 다르다.

 -rot

화면 회전각도 단위는 도(dgree)이다(각도가 나오면 단위가 매우 민감함)

 -t

옵션뒤에 입력된 수치만큼 마이크로초(ms)후의 카메라에서 캡쳐한다 0을 입력하면, 무한대가 된다. 기본적으로는 5000으로 되어 있어서 5초후에 사진이 찍힌다.

 -k

사진을 x키나 enter키의 입력을 감지해서 이미지를 찍는다. -t 옵션을 0으로 하고 연동하면 자연스러운 디지털 사진기처럼 구현할 수 있다.

 -o

경로를 포함한 파일저장 이름을 적되 확장자까지 적어야 한다. 

 -q

앞서 언급한 화질로 0~100까지 정할 수 있다. 

 -n

미리보기 화면을 끈다. 미리보기 설정은 기본적으로 되어 있다. 

 

 -w

이미지의 가로길이 단위는 픽셀이다 

 -h

이미지의 세로길이 단위는 픽셀이다. 

 -md

모드로 기본적으로 정해져 있는 화면비와 화면 길이로 잡아준다 0~7까지 있다(이름을 잘못 지은것 같다). 


다음은 이미지나 사진에 대해서 조금 알때 먼저 살펴보게 되는 옵션이다.

 -e

인코딩을 변경할 수 있다. 변경가능한 인코딩은 jpg, bmp, gif, png인데 기본적으로는 jpg로 되어 있다. 

 -ss

셔터 스피드를 설정할 수 있다 최대 6000마이크로 초로 할 수 있다. 


이 밖에 문서에서 제공하는 기능은 다양하다. 화면 밝기 조절에서 나이트 모드 등 다양한 기능들이 있지만, 일반적으로 많이 사용하지 않는 기능들이기 때문에 여기에는 정리 하지 않았다.


카메라 접근 설정

 말이 접근 설정이지만 실제로는 퍼미션(permission)설정이다. 리눅스 시스템에서는 기본적으로 폴더와 파일에서 접근 권한을 3단위로 나누어진다. 읽기/쓰기/실행 단계로 나누어지며, 이 접근관한을 각각 수퍼계정(root)/소유계정(user)/아무나(anyones) 기본적으로 프로그램을 네트워크 통신을 통해서 실행하게 되는 경우 아무나(?)에 해당된다. 때문에 라즈베리파이에 키보드와 마우스를 꼿고 실행하거나 ssh로 원격상태로 실행할 경우에는 대부분 소유계정에서 실행을 하기 때문에 문제없이 작동이 된다.


 하지만, 자신이 만든 웹 앱이나 프로그램으로 실행할 경우에는 계정이 아무나(혹은 게스트)가 되는데 이때 디바이스는 기본적으로 아무나 접근할 수 없게 설정되어 있다. 때문에 이러한 설정을 변경해줘야 한다. 카메라 모듈 v2의 디바이스 파일은 /dev/vchiq이다. 익숙한 리눅스 유저들은 다음 명령어를 실행할 것이다.

sudo chmod 766 /dev/vchiq

하지만, 이렇게 변경을 해도 디바이스 쪽은 다시 재부팅을 하면 초기상태로 되돌아가 버린다. 이를 위해서는 초기 퍼미션을 바꿔야 하는데 열심히 포럼글을 찾다가 알게 되었다. 물론 포럼에 올라와있는 글대로 하면 안되고 의미를 생각하고 설정을 하니 된것이다(우연한 실수로 성공함).

다음경로에 파일을 생성한다.

sudo nano /etc/udev/rules.d/10-vchiq-permissions.rules

다음 한줄을 입력한 다음에 저장한다.

SYSTEM=="vchiq",GROUP="video",MODE="766"


그리고 재부팅을 한뒤에 다음 명령어로 지속적으로 적용이 되는지 확인하면된다.

ls -al /dev/vchiq


반응형
반응형

라즈베리 파이3 고정 IP 설정

알아야 했던 배경

 진행하는 프로젝트 특성상 폐쇄적인 네트워크 환경에서 진행을 한다. 네트워크 관련 지식이 부족한 관계로 무선 공유기를 이용하되 각 기기별로 정해진 IP를 할당해서 사용해야 했다. 따라서 고정 IP 설정이 필수였다.


 문제는 웹 검색시 많은 정보가 있었음에도 쉽게 되지 않았었다. 공식 포럼에 올라온 방법은 2가지의 파일을 수정하는데, 실제로 해본결과 한개의 파일만 수정해도 적용이 되었었다.


네트워크 정보 입력

 고정 IP를 할당을 한다는건 기기가 네트워크 정보에 대해서 알고 있다는 의미이다. 이러한 정보를 기기에 입력해 줘야 한다. 다행히 무선네트워크는 GUI 환경에서 한번 접속을 하면 SSID와 PW는 아래의 경로에 저장이 된다.

/etc/wpa_supplicant/wpa_supplicant.conf


네트워크 환경 입력

 터미널 창(Ctrl + Alt + T)을 열고 다음 경로의 설정파일을 수정한다.


sudo nano /etc/network/interfaces
nano외에 자신이 편한 편집기를 사용해도 된다. 파일을 열람하다보면 다음과 같은 내용을 볼 수 있다.

#(중략)
iface wlan0 inet manual
    wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

iface eth0 inet manual
#(중략)

위의 부분을 아래와 같이 수정을 한다.

#(중략)
#iface wlan0 inet manual
iface wlan0 inet static    #고정IP로 설정
    wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
address 192.168.0.xxx    #할당받을 주소
netmask 255.255.255.0    #공유기에서 확인한다
network 192.168.0.0       #공유기IP주소에서 마지막 실주소가 0
gateway 192.168.0.1      #공유기IP주소

iface eth0 inet manual
#(중략)

 여기서 #은 주석처리를 의미하므로 해당 줄은 실행은 안한다는 의미이다. Wlan0은 WiFi랜이고, eth0는 유선랜을 의미한다.


 address는 해당 기기가 요청한 IP 주소, netmask는 주소 할당방식인데, 기본적인 설정은 위와 같지만, 자신의 공유기설정에서 넷마스크가 어떻게 되어 있는지 확인을 하면 된다. network는 공유기가 갖는 실 주소체계에서 0이 되어야 하며, gateway는 공유기의 ip주소를 입력하면된다.


nano로 편집했을 경우 Ctrl + x를 눌러서 변경내용을 저장하고 종료하면 된다. GUI환경에서는 공유기접속을 시키면 된다.


IP할당 확인

 만약 이미 IP를 할당받은 상태라면, 방금 수정한 내용이 적용이 안되어 있다. 그럴경우 다음 명령어로 와이파이 랜 디바이스를 껐다가 켜본다.


sudo ifdown wlan0
sudo ifup wlan0
디파이스가 켜진다음에 $ifconfig 를 실행하여 확인하면 IP충돌이 나지 않은 이상 wlan0 부분에 정상적인 IP를 할당 받는다.


반응형
반응형

라즈비안(라즈베리 파이3) 초기 설정

라즈베리 파이3는 운영체제를 갖은 상태에서 동작하는 기기이기 때문에 작은 기기치고는 상당히 높은 스펙을 갖고 있다. 때문에 공식 홈페이지에서 운영체제 다운로드에서 공식적 운영체제인 라즈비안(Raspbian)외에도 우분투 마테(나는 매이트로 읽었었다), 윈도우10 IoT 코어 등을 설치할 수 있다.


하지만, 가능하면 공식 제공되는 라즈비안을 사용하도록 하고 나중에 기회가 되면 다른 운영체제도 건들여 보거나 다른 사람이 건들인걸 구경해봐야 겠다.


 운영체제를 설치한 이후에는 제일 먼저 해야 할 일은 메모리 확장인데, ISO 이미지로 설치를 했다면, 최근 버전에서는 부팅시 자동으로 확장이 되니 메모리 확장에 대해서는 신경을 안써도 된다.


초기 환경설정


 상단 우측의 라즈베리 아이콘을 클릭하여 [Preferences->Raspberry Pi Configuration]을 클릭하여 셋팅 창을 열고 해당되는 항목을 수정하면 된다.


Interface

자신이 사용하고자 하는 디바이스를 사용할 수 있도로 해준다. 현재 카메라를 사용할 것이므로 카메라부분을 사용가능하게 하면 된다.


Localisation

Locale : English / Us

Timezone : Aisa / Seoul

Keyboard : Korean of Republic / Korean

WiFi Country : US


 Wifi를 미국(US)로 해야 되는 이유는 운영체제상의 버그로 인해서 한국(KR)로 하면 와이파이 기기를 인식 못 한다. 이때문에 라즈베리파이3가 처음 출시 되었을때 곳곳에서 멘붕 소리가 커뮤니티에서 들려 왔었다. 언젠가는 패치를 하겠지만, 글을 적는 시점까지는 버그가 여전히 유효하다. 설정을 마치고 OK를 클릭하면, 설정 적용을 위해서 재부팅 할 것을 권고한다.


터미널 update, upgrade

 재부팅 후 터미널 창(Ctrl + Alt + T)을 열고 다음과 같이 업데이트를 한다.


sudo apt-get update && sudo apt-get upgrade -y


 리눅스를 좀 다뤄본 사람은 알겠지만, && 명령어는 리눅스 쉘 매크로중 하나로 여러개의 명령을 실행할 수 있도록 해준다.

 update가 끝나면, 바로 upgrade를 시작한다. 이전에는 자동으로 마쳤는데, 요즘(2016년 11월 이후)에는 확인 문서가 확인할때까지 중단된다. 시간이 좀 걸리니 잠시 티타임을 갖고 오면 된다.

 중간에 확인해서 선택해야 하는 상황이 발생한다면, 가능하면, default가 무엇이지 확인을 하고 선택하는 것이 좋다.

반응형

+ Recent posts