csrf 는 웹서비스에서 cross-site-request-forgery를 막기위해
백엔드에서 토큰을 발행하고 프론트엔드에서 이를 사용하여 최종적으로는 유효한 요청인지를 확인하는 방식.
JWT토큰은 인증에 사용되는 방식으로서 REF
OAuth와 연동해서 사용할 수도 있고 독립적으로 사용할 수도 있다.
OAuth1과 OAuth2의 가장 큰 차이는 OAuth2의 경우 refresh 토큰이 가능.
csrf 는 웹서비스에서 cross-site-request-forgery를 막기위해
백엔드에서 토큰을 발행하고 프론트엔드에서 이를 사용하여 최종적으로는 유효한 요청인지를 확인하는 방식.
JWT토큰은 인증에 사용되는 방식으로서 REF
OAuth와 연동해서 사용할 수도 있고 독립적으로 사용할 수도 있다.
OAuth1과 OAuth2의 가장 큰 차이는 OAuth2의 경우 refresh 토큰이 가능.
랜섬웨어에 감염되어 파일들이 확장자가 변경되면서 실행이 안된다면..
1. windows/system32/tasks 밑에 가서, 날짜를 보고 최근 것들을 지운다.
=> 랜섬웨어 동작을 멈추게 한다.
(그 후 고클린 등으로 각종 clear작업을 해주면 더 좋다)
2. 이미 감염된 파일들은 복구가 불가능 한데,
https://www.nomoreransom.org/ko/index.html 여기에 가면 일부 복구가 되는 랜섬들이 나열되어 있으므로
따라서 복구를 한다.
요즘은 REST가 대세이긴 하지만,
SOAP도 나름대로의 장점이 있다. 이 기종간 명확한 spec기반의 통신이 가능하다.
SOAP을 위해서, WSDL을 먼저 생성하는 게 좋은데
eclipse나 IDEA에서도 생성이 가능하지만
oXygen XML 에디터가 좋아보인다.
생성된 WSDL기반으로 테스트 하기에는 SOAP UI라는 툴이 좋아 보인다. REF
다운로드는 https://www.soapui.org/ 에서 Download로 들어가면 SoapUI OpenSource가 있다.
MaxMind의 Geolocation DB를 이용하면 된다.
GeoIP2-Country DB를 이용하는 게 좋고, DB의 path를 "GeoIP2-Country.mmdb" 로 잡는다. REF
android를 대신하기 위해, 정확하게는 android안의 java를 대신하기 위해 만들어졌다는 kotlin..
주요 특징은 다음과 같다.
- 변수선언시 var, val (immutable) - 많은 부분이 scala에서 왔다.
- null safe : 심지어는 컴파일 에러가 난다.
- javascript를 섞어쓸수 있다 : 이때 장점은 잘 모르겠는데 WEB개발에 유리하지 않을까 예상되네요.
(당연히 node.js와도 섞어서 서버에도 사용가능함)
- kotlin + springBoot로 웹앱이 개발 가능하다.
물론 Mockito를 결합해 unit테스트 가능.
(단, 일반 class는 final개념이라 open class를 써야 함, when은 키워드라 `when`써야함)
- android폰 개발시에는 Glide등 편리한 Extension이 많다.
- Anko를 함께 사용하면 xml을 사용하지 않아도 된다. (AnkoComponent의 subclass를 사용),
AnKo=Android+Kotlin의 의미로 android용 DSL (Domain-Specific Language)임.
- 기타문법 : is , ? (instanceof, ?는 null대비)
let은 다소 어려움.
Docker는 이미지 파일과 linux프로세서 형태로 실행하는 container로 이루어져있다.
immutable 이미지를 이용하기 때문에, 가상화머신보다 설정과 배포가 용이하다.
이미지와 이미지의 차이만 diff로 관리하기 때문에, github처럼 dockerhub에서 이미지 관리가 가능하다.
그리고
boot2docker는 가상머신안에 docker를 실행하는 것이라서, host ip로 nginx등의 웹서버에 바로 접속할 수 없다.
이 때, ip를 알 고 싶으면 boot2docker ip를 이용하면 된다.
참고로 boot2docker up 으로 실행을 한다.
LAMP stack: Linux, Apache, MySql, PHP (Perl/Python)
MEAN stack: MongoDB, ExpressJS, AngularJS, NodeJS
- ExpressJS: Node.js Web application framework.
- NodeJS: event-driven I/O server-side JavaScript Environment.
Play-framework : Scala & java 용 프레임워크. REF
- 이게 spring처럼 널리 이용된다면 scala도 그만큼 역량을 키워가겠네요.
- JSON과 xml을 First-class 고객으로 모시는 프레임워크인만큼 계속 영향력이 커지지 않을까요..
구굴이 SLAM(Simultaneous Localization and Mapping)용
오픈소스 지도기술 Cartographer를 공개하였다.
SLAM: 로봇이 위치를 인식해서 즉석해서 지도를 작성.
- 무인자동차, 로봇청소기, 드론등에서 활용
이제 일반인도 드론이나 로봇청소기 제작시 본 API를 활용해
야외나 실내의 맵을 실시간으로 만들어
로봇의 탐색경로를 쉽게 최적화할 수 있을 것으로 보인다.
참고사이트: http://www.bloter.net/archives/265140
시연영상: https://youtu.be/DM0dpHLhtX0
Cartographer GitHub: https://github.com/googlecartographer
소개: https://opensource.googleblog.com/2016/10/introducing-cartographer.html
Message Digest는 간단히 말하면 Message Hashing이다.
- 단방향으로만 동작하고 역방향 유추는 불가.
- 암호 저장, file이 동일한 파일인지 비교하는데 쓰인다.
Java Ref - java.security.MessageDigest 존재.
좀 더 복잡하게 하기 위해서 Ref
Salting- 메시지 앞에 특수값을 삽입. (사용자별로 다르게 할 수도 있음)
Key Stretching- Digest하고 그 값을 또 Digest하는 multi-chain형태의 Digest.
=> 위 둘을 잘 섞어서 Adaptive Key Derivation Functions 이라고 부른다.
대표적인 게 PBKDF2랑 bcrypt, scrypt가 있다.
이 존재한다.
HTTP1.1이 현재까진 대세인데
HTTP2.0은 2015년 5월에 spec이 발표되었고, 대부분의 브라우저에서 2015년 말부터 지원한다.
- web site들은 10%미만이 이를 지원.
주요 특징.
- HTTP2.0 서버 Push
: 기존에는 index.html을 파싱하고 나사 style.css, javascript.js를 받지만, HTTP 2.0에서는 서버가 index.html 을 내려주면서 같이 css와 js도 내려줄 수 있다.
- HTTPS over TLS
:원래 https는 SSL기반인데, 2.0에서는 https가 TLS기반(SSL의 브랜치)으로 동작한다.
(SSL vs TLS: REF1, )
-같은 말이다. 네스케이프에 의해서 SSL이 발명되었고, 이것이 점차 폭넓게 사용되다가 표준화 기구인 IETF의 관리로 변경되면서 TLS라는 이름으로 바뀌었다. TLS 1.0은 SSL 3.0을 계승한다. 하지만 TLS라는 이름보다 SSL이라는 이름이 훨씬 많이 사용되고 있다.
( REF2-의심감)
SSL - 7.Application Layer 와 4.Transport Layer 간에서의 보안.
TLS - 서버인증은 선택사항, 반드시 공개키만 사용.
- SPDY (pronounced like "speedy") : TCP pipe는 쓰면서도 TCP와 다른프로토콜을 사용하는데 HTTP2.0 초기에는 SPDY방식으로 HTTP가 바뀔 것으로 제안 되다가 몇가지 문제가 있어 빠진 것으로 보임.
OSI 7계층을 아주 간단히 정리하면 다음과 같다.
7: Application Layer (응용 계층)
- 텔넷 등
6: Presentation Layer
- Encoding/Decoding 압축/암호화 등이 이루어지는 Layer이다.
5: Session Layer
- 운용 체제에서 다루어주는 TCP/IP 세션 생성 및 해제.
4: Transport Layer(트랜스포트 계층)
- 쉽게 TCP를 이용하는 계층이라고 보면 된다.
- End-to-End간 통신을 다루는 최하위 계층이다.
- 오류검출, 흐름제어, 중복검사 등이 이루어진다.
3: Network Layer
- IP와 라우팅 기반으로 데이타 통신이 이루어진다.
- 패킷 생성이 이루어지며, QoS관리 등이 이루어진다.
2: Data Link Layer (데이터 링크 계층)
- MAC Address 기반으로 통신을 하는 계층.
- CRC 체크등 에러체크 가 이루어 진다. (+재전송/흐름제어)
1: Physical Layer(물리계층)
- H/W Layer로서 가장 복잡한 계층이다.
참고사이트: http://www.scitech.co.kr/upload/book_image/s_017/Xml04.pdf
<DTD>
<!DOCTYPE Memo [
<!ELEMENT Memo (PInfo, MInfo)>
<!ELEMENT PInfo (from, to)>
<!ELEMENT MInfo (date, main)>
<!ELEMENT form (#PCDATA)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT date (#PCDATA)>
<!ELEMENT main (#PCDATA)>
]>
DTD를 이용한 XML: REF사이트
<XML XSD> : XML Schema Definition.
<?xml version="1.0" encoding="EUC-KR"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.lisia.net"
xmlns="http://www.lisia.net"
elementFormDefault="qualified">
<xsd:element name="Memo">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="PInfo">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="from type="xsd:string"/>
<xsd:element name="to" type="xsd:string"/>
</xsd:sequence>
==> XSD 를 이용한 XML
<?xml version="1.0" encoding="EUC-KR"?>
<Memo xmlns="http://www.lisia.net"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.lisia.net ex4_3.xsd">
<PInfo>
<from>김광수</from>
<to>박수란</to>
</PInfo>
GPL (General Public License) source를 사용하거나 binary를 사용하더라도 본인의 프로그램을 오픈해야함
LGPL (Lesser GPL) : source를 사용하면 오픈, Library형태의 binary를 사용하면 오픈안해도됨 REF-SITE
BSD: 무제한 사용.
SVN의 단점을 극복한 Git, 리누스 토발즈가 만들어서 더욱 유명하다.
특히 github.com 서버에서 git을 이용한 무료소스관리를 해주므로 무수한 사용자들이 사용하고 있다.
개인적으로 느낀 git의 가장 큰 장점은
local 커밋이 가능하다는 점이다. 즉 비행기를 타고 가는 중에도 커밋이 가능하다.
개발자로서 자주 커밋하는 것이 안전하다는 것을 항상 느끼는데,
수십명이 사용하는 서버에 한줄 고치고 커밋하는 걸 여러번 하면 형상관리가 지저분해지는 단점이 있었는데
git을 이용하면 로컬 커밋을 자주하다가, 서버에는 push로 올리면 된다.
http://git-scm.com/book/ko : 공식매뉴얼
Git 기본 사용법 :
git config --list
git config --global use.name "myName"
git config --global user.email my@Email
git config --global core.editor vim
git config --global merge.tool vimdiff
git init
git add <a.c>
git commit -m 'test'
git remote add origin gitURL(like github)
git push -u origin master
Windows용 git도 있다. http://www.git-scm.com/downloads 에서 다운로드 가능.
설치해서 icon만 고르면, minGW의 bash쉘에서 git이 실행이 된다.
(컴퓨터 이름이 한글일때 prompt가 깨지는 현상이 있음: Administrator@ㅁㅁㅁ ~$ 이렇게 되네요)
tip: 한글설정: git config --global core.quotepath false
이쁘게: .bashrc에 alias ls='ls -al --color=auto --show-conftrol-chars'
REST가 대세이긴 하지만, 이전 시스템들을 위해 SOAP을 알아둘 필요가 있다.
SOAP(Simple Object Access Protocol)은 HTTP/SMTP 상에서 XML기반 메시지를 교환하는 프로토콜 이다.
SOAP에서는 SOAP Envelope과 SOAP BODY 를 주로 이용한다.
-> SOAP BODY에 <Price>$4.0</Price> 와 같이 전달.
SOAP외에, WSDL 로 웹서비스가 정의 되기 때문에 WSDL 을 이해하여야 한다.
WSDL(Web Services Description Language)
<portType>의 <operation> 메서드 선언 </operation> : What 정의
<service>의 <port> 웹서비스 URL </port> : How&Where 즉 서비스의 EndPoint 정의.
그리고 실제 구현하면서 JAXB 와 같이 JAVA <-> XML 마샬링 툴등을 이용하게 된다.
JSON이 대세인데, SOAP을 보고 있으니 답답하다는 생각이 들긴한다.
mongoDB + Angular.js 를 이용해 JSON 을 이용해서 REST방식으로 구현하길 권장한다.
Index
- Primary키는 자동으로 인덱스로 생성된다.
- 나머지 index는 생성해야 하는데,
index는 Unique해도 되고 Unique하지 않아도 된다.
오라클 메모리 :
PGA - 정령공간, 세션정보, 커서정보, 변수저장
SGA - 공유풀, 데이터버퍼케쉬, ReDo Log버퍼
-SGA조절 파라미터 : 10g부터는 자동조절 기능 제공.
shared_pool_size
db_cache_size
log_buffer
Join ==========================Join===============
RDBMS에 일반적으로 많이 사용하는 NL(Nested Loop)조인 외에,
오라클에는 Hash Join이 존재한다.
((조인의 종류))
1. Sort Merge 조인 (양쪽을 sort해서 join한다..)
- 잘 안쓰는 것 같은데.. 잘 못봤음
(주로 Ordered 테이블에서 유리하지 않을까 예상 됨)
2. NL(Nested Loop)조인
- 일반적인 조인.
이너조인이 일반적이며, 아우터조인도 있음
3. 오라클 Hash Join
- (다른 RDMBS에도 있는지 좀 찾아봐야 하지만..)
A. 작은 테이블(Build Input)을 읽어 Hash Area에 해시 테이블 생성한다.
(해시 함수에서 리턴 받은 버킷 주소로 찾아가 해시 체인에 엔트리를 연결)
B. 큰테이블 집합(Probe Input)을 읽어 해시 테이블을 탐색하면서 조인하는 방식이다.
(해시 함수에서 리턴 받은 버킷 주소로 찾아가 해시 체인을 스캔하면서 데이터를 찾는다)
기준테이블(작은 테이블:build Input)이 충분히 작은 경우에 Hash Join이 적합하다.
In chrome - F12 is Debug mode
On left-top corner, find and click
: toggle Device mode
then you can resize your screen . (default is small phone)
SQL Injection
XSS (Cross Site Scripting) - javascirpt를 입력.
==> 해결책: escapeHtml, escapeScirpt 등을 사용하거나, MVC framework을 사용. angular.js도 어느정도 막을 수 있을 듯.
그외,
Command Injection
XXE(XML External Entity)
등의 해킹법도 있음.
<UML> Reference Site:
Inheritance: ㅡㅡㅡㅡㅡD
Interface: - - - - - - D
association(has): A ㅡㅡㅡㅡㅡ> B class A { member B}
Leg <.>-----> 필수.
Flea <>------>
dependency: A - - - - - > B class A uses B temporary.
<Gof Pattern> Reference SIte
Creational Pattern: Singleton, (Abstract)Factory, Builder, Prototype
Structral Pattern: Adapter, Decorator, Bridge, Proxy
Behavior Pattern: Command, Iterator, Visitor, Observer, Chain of Responsibility
위키kr : Scrum(애자일 개발 프로세스)
- 매일15분씩 회의. (어제한일, 오늘한일, 장애상황)
- 스프린트 (한 주기) 관리 ( 30일 +- 1~4주)
- Sprint backlog
다음 Sprint의 backlog도 미리 준비한다.
==========링크내용===================================
스크럼 마스터는, 일반적인 관리를 수행하는 프로젝트 관리자들과는 달리 팀원을 코칭하고 프로젝트의 문제 상황을 해결하는 역할을 하며, 제품 책임자는 스프린트 목표와 백로그등의 결정에 있어 중심이 되는 상위 관리자로, 제품 책임자가 독단적으로 목표를 결정하지 않고, 고객과 관리자 및 팀원들이 모여서 목표를 정한다.
이런 과정을 거친 뒤, 개발 팀원들이 주도적으로 스프린트 목표를 달성하기 위한 작업을 정해 나가게 된다. 보통, 각 작업들은 4시간에서 16시간 정도 걸리도록 정한다. 물론, 작업을 정하고 할당하는데는 고객이나 제품 책임자와는 상관 없이 팀원 자율로 진행된다. 이와 같은 자율적인 행위를 통해서 팀원들은 의사를 활발하게 주고 받게 되고, 끈끈한 협업체계를 가지게 된다.
TDD : Test Driven Development
=> 웹 자동화 테스트툴- Sellinium.
BDD: Behavior Driven Development
=> Cucumber.
소프트웨어 공학의 최근 흐름으로는 관점 지향(Aspect), 애자일(Agile), 모델 주도(Model-Driven) 등이 있다.
Agile 방법론의 기본 개념: "반복적으로 프로토 타입을 고객에 전달함으로써 고객의 요구사항 변화에 민첩하게 대응한다"
Agile 방법론의 대표주자: XP(익스트림 프로그래밍)
XP(익스트림 프로그래밍) 개발 프로세스 :
XP의 목적은 '고객이 원하는 양질의 소프트웨어를 빠른 시간안에 전달하는 것'이다.
수시로 발생하는 고객의 요구사항에 대처하고, 고객이 원하는 SW를 고객이 원하는 시간에 인도하기 위해서는 고객과 팀원간의 대화를 통해 해결한다.
XP에는 7가지 항목이 정의되어 있는데, 7가지 항목 중 특히 공감이 가는 항목은 아래와 같이 4항목이다.
1.Simple-Design
2.Test-Driven
Test_driven은 다른 애자일 방법론과 구분되는 XP만의 특징이기도 하다.
프로그래머들이 코딩을 할 때에, 테스트 코드를 작성하도록 함과 동시에 테스트를 기반으로 프로젝트를 완성시켜 나간다.
3. Pair-Prograimming
두명 혹은 그 이상의 프로그래머가 함께 코딩을 하는 것을 말한다. 두명의 프로그래머가 함께 코딩을 하고 테스트를 통해서 개발을 할 수도 있고, 한명은 코딩을 하고 한명은 Quality Assurance 역할 통해서 테스트에만 집중을 할 수도 있다.
4. Whole-Team
기획자, 설계자 심지어는 Tester, User까지도 하나의 팀이 되어 개발을 진행하는 방법이다.
나머지 3항목은
Planning Game, Small Release, Customer Test이다.
사설 IP 대역은 아래와 같이 3가지 이다.
1. 192.168.0.0/16
2. 10.0.0.0/8
3. 172.16.0.0/12,
슬래쉬(/) 뒷부분은 masking이므로
1. 192.168.0.0 의 경우 앞에서 부터 16비트 즉 2byte는 고정된다는 말이므로 192.168로 시작하는 모든 IP가 사설IP이다.
2. 10.0.0.0/8 의 경우는 8bite=1byte 즉 10만 고정되므로 10.x.x.x 모든 대역이 사설 IP이다.
3. 172.16.0.0/12의 경우는 좀 어려운데 172.16 에서 두번째 16의 앞부분 4bit만 고정되므로 16을 2진수로 표현해 보면 00010000 , 즉 앞 부분 0001을 고정시키면 뒷부분의 경우 0000~1111까지 변화가 가능하다.
즉 00010000~00011111까지가 가능하므로 172.16.x.x~172.31.x.x 까지가 사설 IP이다.
내가 느낀 MCE의 좋은 점을 나열하자면..
TV녹화와 리모컨이 매우 뛰어나다.
특히 나같이 소파에 누워서 모든 작업을 하려는 사람들에게는
이러한 MCE와 리모컨은 새로운 세상과도 같이 보인다..
1. MCE가 있기 전에는 미국드라마(Lost,위기의 주부, 24 등등)을 노트북에 받아서
TV랑 연결해서 받는데.. 이 작업이 매번 너무너무 귀찮았다.
MCE를 거실에 두면, 리모컨으로 이런 미국드라마 보기를 모두 할 수 있다.
단, 인터넷에 접속해서 다운로드 까지 하려면 MCE용 무선 키보드가 있는 게 좋다.
삼성PC의 경우는 리모컨으로 마우스나 키보드도 어느정도 되기 때문에..
MCE용 무선 키보드 없이도, 미국드라마 다운로드도 어느정도 리모컨으로 가능하다.
(다운로드를 하려면, MCE를 끄고, 인터넷 익스플로러를 뛰워서 해야 하므로
TV가 커야 소파에서 가능하다. )
일단 MCE는 지역방송국 (강남케이블, 안양방송, 관악방송 등등) 과 연결되어 TV프로 목록을 다 받아온다. (EPG라는 회사에서 EPG솔루션을 MS와 계약하에 제공한다고 함)
사용자는 TV프로 목록을 브라우징 하다가 리모컨 버튼만 누르면 나중에 자동으로 녹화가 된다... 저는 새벽에 벌어질 독일 월드컵 축구를 이렇게 녹화해서 볼 수 있을 것 같다.
물론 PVR기능도 되지만.. 나는 일단 MCE를 녹화용도로만 사용할 계획이다.
3. CD 리핑기능도 편하고 좋다..
내가 가지고 있는 대부분의 CD들을 하드에 mp3로 만들어 놓고,
마우스로 원하는걸 언제든지 들을 수 있을 것 같다..
하드디스크가 160G인데, 이런걸 다하려니 벌써 압박이 들어오는 것 같긴 하다..^^
(2006.05)
삼성 DMZ45-Dual PC를 사서 MCE를 써 보았다.
이전부터 MCE용 PC를 조립 내지는 사고 싶었으나, 조립은 부품을 사다가 잘못될 경우,
교환을 하러 가는 경우가 종종 생기는데.. 도저히 그럴 시간이 없을 것 같고.. MCE에 적합한
이쁜 케이스도 잘 없고, MCE용 리시버와 리모컨 구입도 만만하지 않을 것 같고 등등
여러가지 문제로 그냥 완제품을 샀다..
잘 산 것 같다..
삼성 MCE리모컨은 다른 MCE와는 달리 리모컨으로 어느정도의 키입력과 마우스 기능을 지원한다.
MCE를 며칠 써 보면서 느낀 것은..
이전에 도스시절에서 Win3.1로 넘어가던 시절이 생각난다.
도스에서 프로그램 뛰우고, 모든 기능들은 단축키로 기억해서 아주 빨리 작업을 할 수 있었다. 그러던 중 Win3.1이 나와서 마우스를 사용해야 했는데, 그게 그렇게 불편하고 속도도 늦었었다.
왜 마우스로 작업을 하나? 누가 Window를 쓰려나?, 키보드가 훨씬 기능도 많고, 단축키만 외우면 훨씬 빠른데.. 이런 생각을 했지만...
시대는 마우스를 쓰는 윈도우로 바뀌어 버리고, 나도 이제 마우스 없이는 컴퓨터를 쓰고 싶지 않다.
MCE는 마우스 에서 리모컨으로 넘어가는 새로운 시대를 선도할 수 있을 것 같다.
며칠 MCE를 리모컨으로 써보니, 마우스 쓰기가 싫어지고 리모컨이 그렇게 편할 수가 없다.
사실 속도는 마우스 보다 좀 늦지만..
하지만 리모컨을 위한 깔끔한 UI와 편리함은 마치 DOS에서 Window로 넘어가던 시절을 연상케 하고, 다시는 마우스를 쓰기 싫어지도록 만들고 있다.
난 아마도 리모컨과 MCE 예찬론자가 될 것 같다.