[작성자:] 수수께끼

  • [Vue] CLI 초기 세팅

    [Vue] CLI 초기 세팅

    Vue CLI

    Vue CLI는 Vue 프로젝트를 개발할 수 있게 해주는 아주 유용한 도구이며, 여기서 CLI란 Command Line Interface의 약자로서 타이핑으로 명령어를 입력하여 원하는 바를 실행시키는 도구를 말한다. 윈도우에서는 명령 프롬프트(CMD), 맥에서는 터미널을 이용한다고 볼 수 있다. Vue CLI은 내부적으로 Webpack을 활용한다. Vue CLI로 명령을 실행 시키면 CLI가 자동으로 최적화된 Webpack 형태의 결과물을 생성 시켜 준다.

    Vue CLI 2.x 와 Vue CLI 3.x 버전 비교

    프로젝트를 생성

    • CLI2 : eslint, unit test, night watch 등 낯선것들 선택 필요
    • CLI3 : default (babel, eslint) 를 선택하면 가장 기본적인 설정으로 프로젝트가 생성, 나중에 옵션을 추가 가능작성 필요

    프로젝트 구성

    • CLI2 : simple, webpack, webpack-simple, pwa 등 템플릿 리스트 중 하나를 선택해서 프로젝트 구성
    • CLI3 : 프로젝트에 플러그인 기반으로 원하는 설정 추가

    웹팩 설정 파일

    • CLI2 : webpack.config.js 파일이 최상단 디렉토리에 있다.
    • CLI3 : 없음, root 경로에 vue.config.js 파일을 설정하고 내용 추가

    ES6 이해도

    • CLI2 : 필요 X
    • CLI3 : 필요 O

    node modules

    • CLI2 : 자동설치 안됨. $ npm install 필요
    • CLI3 : 자동설치

    설치 환경

    • node.js
    • npm

    CLI 설치

    $ npm i -g @vue/cli // vue-cli 3.x
    $ npm i -g vue-cli // vue-cli 2.x
    

    버전 확인

    $ vue --version
    @vue/cli 4.0.5
    

    프로젝트 생성

    babel과 eslint 기반인 default 옵션을 선택한다.

    $ vue create 'ProjectName' // vue-cli 3.X
    $ vue init webpack 'ProjectName' // vue-cli 2.X
    

    로컬 서버 실행

    $ npm run serve // vue-cli 3.x
    $ npm run dev // vue-cli 2.x
    

    http://localhost:8080/ 로 들어가면 뷰 로고가 있는 로컬 페이지를 볼 수 있다. $ npm install 명령어를 통해 NPM패키지를 설치하지 않아도 서버가 작동되는 것을 확인할 수 있는데 vue cli가 이미 node_modules디렉터토리 안에 라이브러리들을 다운받았기 때문이다. vue cli의 기본 템플릿은 babel, eslint, unit-mocha 를 포함한다.

    • Babel: 자바스크립트 컴파일러다. 최신버전의 자바스크립트 문법은 브라우저가 이해하지 못하기 때문에 Babel은이 브라우저가 이해할 수 있는 문법으로 변환시켜준다. ES6, ES7 등의 최신 문법을 사용해서 코딩을 할 수 있기 때문에 생산성이 향상된다.
    • ESLint: 코딩 스타일 가이드를 따르지 않거나 문제가 있는 코드나 안티 패턴을 찾아 표시를 달아 놓는 도구이다.
    • unit-mocha: javascript 진영에서 테스트 러너를 지원하는 테스트 프레임워크이다.

    References

    Vue CLI 3.0 사용하기
    Vue CLI 3.X 사용하기
    Vue CLI 3 사용법
    [Vue.js] Vue Version 비교 (cli2 vs cli3)
    Vue-CLI 도구 활용방법

  • [JavaScript] 자바스크립트 소개

    [JavaScript] 자바스크립트 소개

    자바스크립트 소개

    자바스크립트는 프로토타입 기반의 스크립트 언어이며 넷스케이프사의 브렌던 아이크가 만들었다. (그는 10일 만에 언어를 만들었다.) 주로 웹 브라우저 내에서 주로 사용되며 node.js와 같은 런타입 환경에서 서버 사이드 프로그래밍으로도 사용되고 있다.

    언어의 타입이 너무 유연해서 인터넷에 위같은 밈이 돌아다닌다.

    초창기 자바스크립트는 웹 페이지 제작에 있어서 보조적인 기능을 수행하기 위한 용도로써 사용되었다. 클라이언트인 웹 브라우저에서 서버로부터 받은 HTML과 CSS, 데이터로 렌더링을 해주는 수준이였다. 이 시절에 자바스크립트는 그다지 중요한 역할을 담당하지 못했다. 하지만 소수의 프로그래머들에 의해 여러 가지 연구가 이루어졌고, 웹 아키텍쳐에도 크고 작은 변화가 일어났다. 특히 과거에 서버에서 담당했던 역할들이 상당 부분 웹 브라우저로 이동하였고, 자바스크립트는 이 변화의 중점에 서게 된다. 게다가 jQuery 의 등장으로 보다 쉽게 DOM을 핸들링하게 되면서 많은 발전을 이루었다.

    현재는 브라우저 기반의 자바스크립트 라이브러리 뿐만 아니라 Node.js와 같은 서버 기반의 자바스크립트 환경에서 동작할 수 있는 각종 라이브러리까지 쏟아져 나오고 있다. 이제는 자바스크립트만으로 웹 서버와 클라이언트인 웹 페이지 개발을 동시에 할 수 있는 수준까지 왔다고 볼 수 있다.

    자바스크립트는 클래스를 지원하지 않아 클래스 상속을 이용한 객체 지향 프로그래밍은 할 수 없지만, 프로토타입의 복제 과정을 이용하여 상속을 흉내내도록 구현이 가능하다.

    객체 지향 프로그래밍(OOP)

    줄여서 OOP라고 부르겠다. OOP는 컴퓨터 프로그래밍 패러다임중 하나이며, 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러개의 독립된 단위, 즉 “객체” 들의 모임으로 파악하고자 하는 것이다. 각각의 객체들은 메시지를 주고받고, 데이터를 처리할 수 있다.
    객체지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용되고, 보수를 간편하게 하며 보다 직관적인 코드 분석을 가능하게 하는 장점을 가지고 있다.
    객체지향의 반대로는 절차지향 프로그래밍(procedural Programming)이라는 패러다임이 있다. 절차지향 프로그래밍이란 순차적인 처리가 중요시되며, 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법이다. 대표적인 절차지향 언어에는 C언어가 있다. OOP의 특성으로는 추상화(Abstraction), 캡슐화(Encapsulation), 상속(Inheritance), 다형성(Polymorphism)이 있다.

  • [Node.js] 웹 크롤링(Web Crawling)

    [Node.js] 웹 크롤링(Web Crawling)

    특정 데이터가 필요한 경우 Node.js를 이용하여 웹 크롤링을 하면 쉽게 데이터를 추출할 수 있다.

    설치 환경

    • node.js
    • npm

    설치 모듈

    • request
      웹 페이지의 HTML문서를 그대로 가져오기 위한 모듈
    • cheerio
      HTML 문서를 파싱(parsing)하여 필요한 정보만을 가져올 수 있도록 도와주는 모듈, 제이쿼리 셀렉터를 사용할 수 있다.

    작업 순서

    1. 원하는 디렉토리에 폴더 생성 후 js 파일 생성(crawling.js로 만들었음)


    2. 터미널에서 프로젝트 폴더로 진입


    3. package 생성(이름만 설정한뒤 모두 예스)


      & npm init

    4. 필요 모듈 설치


      $ npm install cheerio   
      $ npm install request

    5. package.json 파일에 아래처럼 해당 모듈의 버전이 나타난다면 제대로 설치가 된 것이다.


      "dependencies": {
      "cheerio": "^1.0.0-rc.2",
      "request": "^2.83.0"
      }

    6. 생성한 crawling.js 파일에 설치한 모듈을 불러준다.


      var cheerio = require('cheerio');
      var request = require('request');

    7. url 변수에 파싱할 주소를 입력하고, request 모듈을 이용하여 웹페이지를 로드한다.


      var url = 'http://www.naver.com';
      request(url, function (error, response, html){
      var $ = cheerio.load(html);
      // 여기서 제이쿼리 셀렉터를 이용하여 원하는 정보를 가져올 수 있다.
      });

    8. 아래는 전체 코드이다.
      “`javascript
      var cheerio = require(‘cheerio’);
      var request = require(‘request’);


    var url = ‘http://www.naver.com’;

    request(url, function (error, response, html){ var $ = cheerio.load(html);

    // 여기서 제이쿼리 셀렉터를 이용하여 원하는 정보를 가져올 수 있다.
    
    console.log($('.naver_logo').text())
    

    });

    
    # References
    [Node.js로 멜론 순위 차트 데이터 파싱](http://leechoong.com/posts/2017/nodejs_cheerio)  
    [[Node.js] node.js환경에서 웹 크롤링 하기(cheerio-httpcli)](https://hanswsw.tistory.com/6)  
    [[Node.js] 크롤링 DOM parsing ( request, cheerio, iconv 모듈 )](https://victorydntmd.tistory.com/94)
    
  • [Git] 깃 명령어

    [Git] 깃 명령어

    초기화

    깃 초기화 : 기존 디렉토리를 git 저장소로 만든다.

    $ git init
    

    깃 상태 확인 : 현재 작업중인 브랜치와 파일 상태를 알려준다.

    $ git status
    

    설정

    전역 사용자 이름 생성

    $ git config --global user.name "your name"
    

    전역 사용자 이메일 생성

    $ git config --global user.email "your_email@youremail.com"
    

    저장소별 사용자 이름 생성

    $ git config user.name "your name"
    

    저장소별 사용자 이메일 생성

    $ git config user.email "your_email@youremail.com"
    

    사용자 설정이 되어 있지 않으면 깃허브의 저장소에 커밋 이력 및 작성자의 아이콘도 ? 로 표시된다. 웬만하면 사용자 설정을 해주도록 하자

    저장소 복제하기

    $ git clone "url"
    

    저장소 추가하기

    $ git remote add origin "url"
    

    로컬저장소가 바라보고 있는 저장소의 정보 확인

    $ git remote -v
    

    전역 설정 정보 조회

    $ git config --global --list
    

    저장소 정보 조회

    $ git config --list
    

    파일 추가 및 업로드

    스테이지에 수정된 파일 업로드

    $ git add 'file name'
    

    스테이지에 수정된 모든 파일 업로드

    $ git add .
    

    커밋하기

    $ git commit -m 'message'
    

    원격 저장소에 업로드

    $ git push origin master
    

    원격 저장소에서 다운로드

    $ git pull origin master
    

    되돌리기

    스테이지에 올라간 파일 전부 내리기

    $ git reset
    

    이력

    모든 이력 보기

    $ git log
    

    이력 나가기

    $ q
    

    이력과 변경사항을 함께 보기

    $ git log -p
    

    브랜치

    지역 브랜치 목록 보기

    $ git branch
    

    원격 저장소 브랜치 목록 보기

    $ git branch -r
    

    지역 브랜치 및 원격 저장소 모든 브랜치 목록 보기

    $ git branch -a
    

    브랜치 생성하기

    $ git branch "branch name"
    

    해당 브랜치로 체크아웃 하기

    $ git checkout "branch name"
    

    브랜치를 생성하고 생성된 체크아웃 하기

    $ git checkout -b "branch name"
    

    해당 브랜치 삭제하기

    $ git branch -d "branch name"
    

    해당 브랜치 강제 삭제하기

    $ git branch -D "branch name"
    
  • 인터넷에서 만난 식인 살인마 아르민 마이베스 사건

    인터넷에서 만난 식인 살인마 아르민 마이베스 사건

    인터넷에서 시작된 독일 최악의 엽기 사건

    아르민 마이베스 사건은 2001년 독일에서 벌어진 살인 사건이다. 이 사건은 단순한 살인 사건이 아니라, 가해자와 피해자가 인터넷을 통해 만났고 피해자가 스스로 죽음을 원했다는 점 때문에 전 세계를 충격에 빠뜨렸다. 가해자 아르민 마이베스는 독일 로텐부르크 인근에 살던 컴퓨터 기술자였고, 피해자는 베를린 출신의 엔지니어 베른트 위르겐 브란데스였다. 두 사람은 인터넷의 극단적 성향 커뮤니티를 통해 연결됐다. 이후 사건은 독일 사법부가 동의가 있는 살인을 어디까지 처벌할 수 있는가라는 어려운 질문과 마주하게 만들었다.

    평범해 보였던 가해자의 이중생활

    마이베스는 겉으로 보기에는 조용하고 평범한 남성이었다. 하지만 그는 오래전부터 사람을 먹는 환상에 집착한 것으로 알려졌다. 그의 삶은 고립감과 비정상적인 욕망이 뒤섞인 형태로 흘러갔다. 특히 인터넷은 그가 자신의 환상을 숨기지 않고 드러낼 수 있는 공간이 됐다. 그는 온라인 게시판에 극단적인 요구가 담긴 글을 올렸고, 그 글에 반응한 사람이 바로 브란데스였다.

    피해자는 왜 그곳으로 갔나

    이 사건이 더 충격적이었던 이유는 피해자가 강제로 끌려간 것이 아니었다는 점이다. 브란데스는 마이베스의 집으로 직접 찾아갔다. 수사와 재판 과정에서 피해자가 일정 부분 동의한 정황이 확인됐지만, 이것이 살인을 정당화할 수는 없었다. 사람의 생명은 당사자가 원한다고 해서 타인이 마음대로 빼앗을 수 있는 대상이 아니기 때문이다. 이 지점이 사건의 핵심 쟁점이었다.

    2001년 3월, 사건이 벌어지다

    2001년 3월 두 사람은 독일 로텐부르크 인근 마이베스의 집에서 만났다. 이후 브란데스는 사망했고, 마이베스는 시신을 훼손한 뒤 일부를 섭취한 것으로 조사됐다. 이 과정은 영상으로 남겨졌고, 훗날 재판에서 중요한 증거가 됐다. 사건의 세부 내용은 지나치게 잔혹하지만, 핵심은 명확하다. 피해자가 동의했다고 해도 실제 살인을 실행한 사람은 마이베스였고, 법은 이를 범죄로 판단했다.

    체포는 또 다른 제보에서 시작됐다

    사건은 곧바로 드러나지 않았다. 마이베스는 범행 이후에도 인터넷에서 비슷한 대상을 찾으려 했던 것으로 알려졌다. 결국 그와 접촉한 사람이 이상함을 느끼고 신고하면서 수사가 시작됐다. 2002년 12월 경찰은 마이베스를 체포했고, 그의 집에서 사건을 입증할 증거들이 발견됐다. 이때부터 사건은 독일을 넘어 전 세계 언론의 주목을 받았다.

    첫 재판과 논란

    2004년 첫 재판에서 마이베스는 살인이 아닌 과실치사에 가까운 판단을 받아 징역 8년 6개월을 선고받았다. 피해자의 동의가 있었다는 점이 양형에 영향을 준 것이다. 하지만 이 판결은 큰 논란을 불렀다. 검찰은 단순히 피해자의 부탁을 들어준 사건이 아니라, 마이베스의 욕망과 살인의 목적이 결합된 사건이라고 주장했다. 결국 상급심은 기존 판결이 지나치게 가볍다고 보고 재심을 명령했다.

    재심에서 종신형이 내려지다

    2006년 재판부는 마이베스를 살인죄로 판단하고 종신형을 선고했다. 법원은 피해자의 동의가 있었다고 해도, 가해자가 살인을 실행했고 그 과정에서 자신의 욕망을 충족했다는 점을 무겁게 봤다. 이 판결은 독일 사회에 중요한 메시지를 남겼다. 인간의 생명은 개인 간 합의만으로 처분할 수 있는 것이 아니며, 동의가 있었다는 이유만으로 살인의 책임이 사라지지는 않는다는 것이다.

    이 사건이 남긴 질문

    아르민 마이베스 사건은 엽기적인 범죄로만 소비되기 쉽다. 하지만 더 중요한 지점은 인터넷이 인간의 어두운 욕망을 얼마나 쉽게 연결할 수 있는가에 있다. 과거라면 현실에서 만나기 어려웠을 극단적 욕망이 온라인에서는 순식간에 연결될 수 있다. 또한 이 사건은 동의의 한계에 대해서도 질문을 던진다. 누군가가 원한다고 해서 타인이 그 사람을 해치는 행위가 허용될 수는 없다. 이 사건이 지금까지도 언급되는 이유는 단순히 잔혹해서가 아니라, 인간의 욕망과 법의 경계가 정면으로 충돌한 사례이기 때문이다.

    결론

    아르민 마이베스 사건은 독일 로텐부르크에서 벌어진 실제 살인 사건이다. 피해자의 동의라는 특이한 요소가 있었지만, 최종적으로 법원은 이를 살인으로 판단했다. 이 사건은 사람들에게 강한 충격을 줬고, 인터넷 범죄와 극단적 커뮤니티의 위험성, 그리고 생명권의 절대성에 대한 논쟁을 남겼다. 흥미 위주의 괴담으로만 볼 사건이 아니다. 인간의 고립, 왜곡된 욕망, 온라인 공간의 위험이 결합했을 때 어떤 비극이 발생할 수 있는지 보여준 사건이다.

  • [Vue] Cli 3.x를 이용한 Github페이지 만들기

    [Vue] Cli 3.x를 이용한 Github페이지 만들기

    정의 Vue Cli 2.x 버전을 이용하여 프로젝트를 생성하면 웹펙 설정파일이 자동으로 생성되지만 3.x 버전부터는 직접 만들어줘야 한다. 때문에 2.x 버전하고 방법이 약간 다르다.

    설치할 디렉토리로 가서 프로젝트를 생성해 준다.

    $ vue create 'ProjectName'
    

    프로젝트 폴더로 이동하여 원격 저장소에 연결시켜 준 뒤 푸쉬해준다.

    cd 'ProjectName'
    git remote add origin 'url'
    git push origin master
    

    코드를 빌드하면 dist 디렉토리에 출력되어도록 되어있기 때문에 vue.config.js 파일을 만들어서 설정을 변경해둔다. 우선 최상단 디렉토리에 vue.config.js파일을 생성해 준 뒤 아래 코드를 입력해준다. 원격 저장소의 프로젝트명과 동일하게 publicPath를 수정해준다.

    // vue.config.js 
    module.exports = {
        publicPath: '/ProjectName/',
        outputDir: 'docs'
    }
    

    빌드를 하면 /docs 디렉토리가 생성된다. 후에 최상단 디렉토리의 .gitignore 파일에 /dist 를 주석처리 해준다. 이제 깃에 푸쉬해준다.

    git add ./
    git commit -m "commit message"
    git push origin
    

    이제 깃허브로 들어가서 저장소 설정으로 간 뒤 GitHub Pages 항목에서 master branch /docs folder 를 셀렉해준다. 이제 https://[유저이름].github.io/[저장소이름] 으로 들어가면 뷰 페이지를 확인할 수 있다. (반영에 시간이 조금 걸린다. 당분간은 404가 표시되어있다.)

    References

    vue-cli で作ったサイトを GitHub Pages にデプロイする
    Deploy vue-cli 3 project to github pages