'전체 글'에 해당되는 글 239건

  1. 2020.11.12 Grunt, lint
  2. 2020.10.30 var, let, const의 차이점은?
  3. 2020.10.29 About 코딩 학습 방식
  4. 2020.10.29 성능 향상을 위한 자바스크립트 코딩 패턴
  5. 2020.10.29 2020년 어떤 프로그래밍 언어를 배워야 할까?
  6. 2020.10.29 난독화
  7. 2020.10.28 M/M (Man Month) 이란?
  8. 2020.10.28 끄적3
  9. 2020.10.23 인터넷
  10. 2020.10.21 Why is ORDER BY in a FROM Subquery Ignored?

Grunt, lint

|
package.json
jshintignore
jshintrc
Gruntfile.js
4개 파일을 설치하고자 하는 directory에 위치시킨다. (ex: D:\work\softin-board )

package.json
 - dependencies
 - devDependencies 에 -save -dev 일 경우 install 시 여기 명시된 version 기준으로 설치가 됨.

jshintrc
 - lint에서 사용하는 option들 설정
 - global은 전역. 명시하면 skip 처리

jshintignore
 - 추후 설명

Gruntfile.js
 - 그런트(자동화스크립트 시스템 like gulf, webpack)
 - 번들링 처리, dist 폴더에 생성해줌(업체갈때)
 - concat: 파일 array 안에 있는놈들 merge해서 생성
 - 경로안에 ! 를 넣으면 그것만 제외하고 를 뜻한다.
 - cssmin: css파일 minify
 - cwd: 현재 (리눅스?유닉스? 용 단어?)
 - dest: 목적지(destination)

명령어
 grunt jshint : 맞춤법 명령어
 grunt copy:plain 복사기능
 grunt clean:temp clean기능(비우기)

'SOFTIN' 카테고리의 다른 글

Grunt, lint  (0) 2020.11.12
0108 - Slack, Trello, Sourcetree 사용법  (0) 2020.01.08
Trackback 0 And Comment 0

var, let, const의 차이점은?

|

var 는 function-scoped(함수 내에서 선언된 변수는 함수 내에서만 유효하며 함수 외부에서는 참조할 수 없다. 즉, 함수 내부에서 선언한 변수는 지역 변수이며 함수 외부에서 선언한 변수는 모두 전역 변수이다.) 이고, 

// var는 function-scope이기 때문에 for문이 끝난다음에 i를 호출하면 값이 출력이 잘 된다.
// 이건 var가 hoisting이 되었기 때문이다.
for(var j=0; j<10; j++) {
  console.log('j', j)
}
console.log('after loop j is ', j) // after loop j is 10


// 아래의 경우에는 에러가 발생한다.
function counter () {
  for(var i=0; i<10; i++) {
    console.log('i', i)
  }
}
counter()
console.log('after loop i is', i) // ReferenceError: i is not defined

그럼 항상 function을 만들어서 호출해야 할까? 그건 아니다.

javascript에서는 IIFE(즉시실행함수표현; immediately-invoked function expression, pronounced "iffy")라는것이 있다.

IIFE로 function-scope인거 처럼 만들 수가 있다.

// 이 코드를 실행하면 에러없이 after loop i is 10이 호출된다.
(function() {
  for(i=0; i<10; i++) {
    console.log('i', i)
  }
})()
console.log('after loop i is', i) // after loop i is 10

// i가 호이스팅되어서 global variable이 되었기 때문이다.

// IIFE는 쓰는데 호이스팅을 막기 위해서는 use strict를 사용
// 아까랑 다르게 실행하면 i is not defined라는 에러가 발생한다.
(function() {
  'use strict'
  for(i=0; i<10; i++) {
    console.log('i', i)
  }
})()
console.log('after loop i is', i) // ReferenceError: i is not defined

 

let, const는 block-scoped(모든 코드 블록(함수, if 문, for 문, while 문, try/catch 문 등) 내에서 선언된 변수는 코드 블록 내에서만 유효하며 코드 블록 외부에서는 참조할 수 없다. 즉, 코드 블록 내부에서 선언한 변수는 지역 변수이다.) 이다.

javascipt에는 그동안 var만 존재했기 때문에 아래와 같은 문제가 있었다.

// 이미 만들어진 변수이름으로 재선언했는데 아무런 문제가 발생하지 않는다.
var a = 'test'
var a = 'test2'

// hoisting으로 인해 ReferenceError에러가 안난다.
c = 'test'
var c

위와 같은 문제점으로 인해 javascript를 욕 하는 사람이 참 많았다.

하지만 let, const를 사용하면 var를 사용할때보다 상당히 이점이 많다.

두개의 공통점은 var와 다르게 변수 재선언 불가능이다.

 

let은 변수에 재할당이 가능하지만,

const는 변수 재선언, 재할당 모두 불가능하다.

// let은 선언하고 나중에 값을 할당이 가능하지만
let dd
dd = 'test'

// const 선언과 동시에 값을 할당 해야한다.
const aa // Missing initializer in const declaration

 

결론

변수 선언에는 기본적으로 const를 사용하고 let은 재할당이 필요한 경우에 한정해 사용하는 것이 좋다. 원시 값의 경우, 가급적 상수를 사용하는 편이 좋다. 그리고 객체를 재할당하는 경우는 생각보다 흔하지 않다. const 키워드를 사용하면 의도치 않은 재할당을 방지해 주기 때문에 보다 안전하다.

var와 let, 그리고 const는 다음처럼 사용하는 것을 추천한다.

  • ES6를 사용한다면 var 키워드는 사용하지 않는다.
  • 재할당이 필요한 경우에 한정해 let 키워드를 사용한다. 이때 변수의 스코프는 최대한 좁게 만든다.
  • 변경이 발생하지 않는(재할당이 필요 없는 상수) 원시 값과 객체에는 const 키워드를 사용한다. const 키워드는 재할당을 금지하므로 var, let 보다 안전하다.

변수를 선언하는 시점에는 재할당이 필요할지 잘 모르는 경우가 많다. 그리고 객체는 의외로 재할당을 하는 경우가 드물다. 따라서 변수를 선언할 때에는 일단 const 키워드를 사용하도록 하자. 반드시 재할당이 필요하다면(반드시 재할당이 필요한지 한번 생각해 볼 일이다.) 그때 const를 let 키워드로 변경해도 결코 늦지 않는다.

'JavaScript' 카테고리의 다른 글

var, let, const의 차이점은?  (0) 2020.10.30
성능 향상을 위한 자바스크립트 코딩 패턴  (0) 2020.10.29
난독화  (0) 2020.10.29
favicon.ico 404 Not found 에러  (0) 2020.08.25
Map vs. Array  (0) 2020.07.31
formData, XMLHttpRequset, HTTP Content-Disposition  (0) 2020.06.01
Trackback 0 And Comment 0

About 코딩 학습 방식

|

개발자들은 이걸 다 알고 있을까요?

절. 대. 아닙니다.

당신이 처음 프로그래밍을 시작할 때, 주변에 10 개의 언어로 코드를 짜는 학생들이나 Linux 최고 전문가들에게 상대적 박탈감을 느끼고, 선생님이 가르쳐주는 여러 가지의 컴퓨터 공학 개념을 소화하는 것은 쉽지 않았을 거에요. 대다수의 많은 사람들처럼 아마 프로그래밍 관련한 지식은 모두 알아야 한다고 생각했겠죠.

그건 옳지 않은 방향입니다. 아무도 그런 기대를 하지 않아요.

 

“개발자로서 늘 새로 나오는 신 기술을 배우고 지배하려고 한다면, 이건 지는 싸움을 하는 거에요. 정말 너무나 많은 신 기술이 있고, 그 신 기술들은 매우 빠르게 변합니다.” 최상의 시나리오는 그 중 몇 개를 골라 늘 최신 스펙을 꿰차는 정도죠.

따라서, 모든 프로그래밍 언어와 기술을 배우는 대신에, 개발자에게 필요한 학습 능력을 길러야 합니다.

 

기술문서 읽는 법 배우기

여기 Input & Output 과 관련된 Python 기술문서의 샘플이 있습니다. 그리고 이와 비슷한 Golang 의 예제가 여깄네요.

혹시 위 두 링크에서 유사한 부분을 발견하셨나요? 코드 예제, 간단한 설명, 그리고 interface 까지 이 내용을 참고하면 아래의 질문들에 쉽게 대답할 수 있을 겁니다.

  • “이 라이브러리로 내가 원하는 것을 구현할 수 있을까?”
  • “어떻게 내가 원하는 것을 구현할 수 있지?”
  • “내가 생각하는 목표를 이룰 더 나은 방법이 있나?”

 

소스코드 읽는 법 배우기

이 링크 는 Python 에서 JSON 인코더를 구현하는 코드입니다. 만약 이 코드가 예상대로 동작하지 않거나 기술문서의 설명이 부족하다면, 덜 선호되는 방법이지만 구현 코드에서 원하는 답을 찾을 수 있습니다.

코드 읽는 법과 관련해서 몇가지 팁은

  • Github 의 코드 검색 기능
  • Ruby 의 Pry 같이 구현 코드를 볼 수 있게 해주는 유틸리티
  • 오픈소스 받아서 중간에 디버깅 문구 넣어 어떻게 동작하는지 확인

 

디버깅 하는 방법 배우기

코드에 문제가 생겼을 때 디버거, 브레이킹 포인트, 출력문 을 활용하여 코드를 디버깅 하는 방법을 배워보세요. 왜냐면 프로그래밍을 할 떄 대부분 시간은 이렇게 디버깅 작업을 하면서 보내게 됩니다. 디버깅 관련해서 염두에 두어야 할 부분은

  • 버그를 마주쳤을 때, 최대한 고정 관념(기존 관점)에서 벗어나 생각합니다. “만약 코드가 아니라 서버 문제일수도 있지 않을까?”, “아니면 데이터 형식이 잘못되었나?” 만약 버그를 바로 잡지 못한다면, 아마 엉뚱한 곳에서 디버깅 하는 것일수도 있습니다.
  • 잠시 휴식을 취하세요. 디버깅 할 때, 당신이 버그가 있을 거라고 생각하는 곳으로 계속 파고들게 됩니다. 그리고 나서, 다른 부분은 전혀 생각하지 못하게 되죠. 이렇게 버그가 안잡힐 때, 잠시 휴식을 취합니다. 우리 뇌는 여러개의 선으로 얽혀 있고, 만약 한쪽으로 너무 깊게 들어가면 버그가 있을 수 있는 다른 한쪽으로 나오기가 힘듭니다. 그러니, 일단 일어나서 휴식을 취하며 다른 생각을 하면, 다시 제자리로 돌아올 수 있습니다. 그리고 나서 다시 책상으로 돌아와 디버깅을 하면, “버그가 당신 얼굴을 아마 쳐다보고 있을 거에요.” 제가 보장합니다.
  • 코드는 거짓말을 하지 않습니다. 코드는 작성한대로 정확하게 동작합니다. 만약 에러가 있다면, 그 에러를 유발하는 부분만 찾으면 되겠죠!

 

도움을 요청하는 방법 배우기

이게 조금 허접한 소리로 들릴 수 있지만 그건 아닙니다. 코딩을 하다 막혔을 때 도움 받을 수 있는 곳이 많아요! 제가 일반적으로 사용하는 순서는

  1. Google
  2. StackOverFlow
  3. Github 해당 라이브러리의 Issues

다른 사람에게 도움을 요청할 때 염두에 둬야 할 몇 가지는

  • 당신을 돕는 사람들은 대개 당신의 문제가 정확히 무엇인지 잘 모릅니다. 도움을 요청할 때 에는 문제가 발생한 정확한 맥락을 제공하는게 좋습니다. 맥락에는 일반적으로 일부 코드, 애플리케이션 로그, 프로그램 설정 등이 포함됩니다.
  • 코드를 정리하세요. 오탈자가 많거나, 끝없이 나열된 이슈 설명서나, 형식화가 되어 있지 않은 버그 리포트는 읽기가 어렵습니다.
  • 민감한 정보는 올리지 마세요. 올리실 때는 반드시 암호, 토큰, 사용자 정보를 다시 점검하시기 바랍니다. 만약 이로 인해 문제가 발생한다면 책임감을 가지고 빠르게 해결하세요.

 

결론

개발자에게는 숙달할 것이 너무나 많습니다. 이 모든 것들을 마스터 하려고 하지 말고, 개발자로서의 학습 능력을 기르는데 집중하세요. 정답을 빠르게 찾는 능력을 기르는 것이 중요합니다.

'etc' 카테고리의 다른 글

About 코딩 학습 방식  (0) 2020.10.29
2020년 어떤 프로그래밍 언어를 배워야 할까?  (0) 2020.10.29
M/M (Man Month) 이란?  (0) 2020.10.28
끄적3  (0) 2020.10.28
끄적2  (0) 2020.10.15
고쳐야할것, 실수 끄적여놓은 것들  (0) 2020.06.23
Trackback 0 And Comment 0

성능 향상을 위한 자바스크립트 코딩 패턴

|
1. Ternary Conditional (삼항 연산자)
// 기본 형태
var weapon = isArthur ? "Excalibur" : "Longsword";

// 두개 이상의 변수를 이용하여 값을 받는 경우
isArthur && isKing ? (weapon = "Ex", helmet = "Goose")
                     :
                     (weapon = "ln", helmet = "Iron")

// 즉시 실행함수로 값을 받는 경우
isArthur && isKing ? function () {
                        // ...
                     }();
                     :
                     function () {
                        // ...
                     }();
                     
2. String Concatenation
문자열의 길이에 따라 += 연산자와 join() 메서드의 성능차이가 발생한다.
문자열이 짧을 떄 : += 연산자가 성능이 더 빠르다.
문자열이 길고, 문자열이 배열안에 리스트 형태로 저장되어 있을 때 : join("\n") 메서드가 성능이 우월하다.
var page = "";
for (var i = 0, x =  newPageBuild.length ; i < x ; i++) {
  page += newPageBuild[i];
}

// join() 메서드 활용
page = newPageBuild.join("\n");

3. Switch Blocks
반복되는 if else 문과 switch 문의 차이점은, 순차적으로 모든 if 문을 도느냐.
아니면 해당하는 case 로 바로 가서 불필요한 연산을 줄이느냐의 차이이다.
var regimnet = 3;

if (regiment == 1) {
  ...
} else if (regiment == 2) {
  ...
} else if (regiment == 3) { // 앞 1,2 를 거쳐 3으로 온다.
  ...
}

switch (regiment) {
  case 1:
    ...
  case 2:
    ...
  case 3: // 3으로 바로 온다.
    ...
}

4. Logical Assignment 1 (OR)
OR 연산자 : “falsy” 하지 않은 가장 첫번째 마주친 값을 갖는다.
// 잘못된 OR 연산자 사용 예
var result1 = 42 || undefined; // undefined 를 절대로 마주치지 않는다.
var result2 = ["Sweet", "array"] || 0; // 0을 절대로 마주치지 않는다.
var result3 = {type: "ring", stone: "diamond"} || ""; // "" 를 절대로 맞추지지 않는다.

// 위를 고쳐보면,
var result1 = undefined || 42;
var result2 = 0 || ["Sweet", "array"]; // 0을 절대로 마주치지 않는다.
var result3 = "" || {type: "ring", stone: "diamond"}; // "" 를 절대로 맞추지지 않는다.

5. Logical Assignment 1 (AND)
OR 연산자와는 다르게 두개의 “truthy” 값이 있으면, 마지막으로 확인한 truthy 값이 리턴된다.
“falsy” 값의 경우에는 OR 연산자와 동일하게 동작한다.
var result1 = "King" && "Arthur";
console.log(result1); //Arthur
var result2 = "Arthur" && "King";
console.log(result2); // King

'JavaScript' 카테고리의 다른 글

var, let, const의 차이점은?  (0) 2020.10.30
성능 향상을 위한 자바스크립트 코딩 패턴  (0) 2020.10.29
난독화  (0) 2020.10.29
favicon.ico 404 Not found 에러  (0) 2020.08.25
Map vs. Array  (0) 2020.07.31
formData, XMLHttpRequset, HTTP Content-Disposition  (0) 2020.06.01
Trackback 0 And Comment 0

2020년 어떤 프로그래밍 언어를 배워야 할까?

|

2020년 이후의 프로그래밍 기술 트렌드 예측

2020 and Beyond Programming Trend Predictions❞ 기사를 요약하자면

1. Rust(러스트)가 주류가 될 것이기 때문에 새로운 프로그래밍 언어를 배우려고 한다면 Rust를 강력히 추천합니다.
2. GraphQL(그래프QL, 페이스북에서 만든 쿼리 언어)은 종래의 REST API와 비교해서, 데이터를 취득함에 있어 월등히 우수한 솔루션이기 때문에 GraphQL의 이용은 계속 확대될 것입니다.
3. 웹과 네이티브 앱의 기능 모두의 이점을 가진 Progressive Web Apps(프로그레시브 웹 앱, PWA)을 검토해야 합니다.
4. 실행속도가 매우 중요하고 데이터의 양이 많다면 WebAssembly(웹어셈블리, Wasm)를 활용하게 될 것입니다.
5. 앞으로도 React는 압도적으로 인기가 있을 것입니다.
6. 앞으로도 JavaScript로 먹고 살 수 있습니다.

 

Stack Overflow, TIOBE에 의한 프로그래밍 언어 인기 순위

Stack Overflow(스택 오버플로)에 의하면

1위. JavaScript

2위. HTML/CSS

3위. SQL

4위. Python

5위. Java

6위. Bash/Shell/PowerShell

7위. C#

8위. PHP

9위. TypeScript

10위. C++



TIOBE(티오베)에 의하면

1위. Java

2위. C

3위. Python

4위. C++

5위. C#

6위. Visual Basic .NET

7위. JavaScript

8위. PHP

9위. SQL

10위. Swift




 

 

'etc' 카테고리의 다른 글

About 코딩 학습 방식  (0) 2020.10.29
2020년 어떤 프로그래밍 언어를 배워야 할까?  (0) 2020.10.29
M/M (Man Month) 이란?  (0) 2020.10.28
끄적3  (0) 2020.10.28
끄적2  (0) 2020.10.15
고쳐야할것, 실수 끄적여놓은 것들  (0) 2020.06.23
Trackback 0 And Comment 0

난독화

|

1. Split 기법

 

문자열을 다수의 string 변수에 잘게 나눈 후 마지막에 재조합하는 방식

var a = "<h";
var b = "</h";
var c = "M";
var d = "1>";
var e = "AT";
var f = "1>";
var g = "AD";
var h = "H";

document.write(a + f + c + g + h + e + b + d); 

2. escape()/ unescape()

 

escape 함수는 ASCII 형태의 문자열을 ISO Latin-1 형태로 변환해 주는 함수

unescape 함수는 그와 반대로 반환

알파벳과 숫자, *, @, -, _, +, / 를 제외한 특수문자만 해당

document.write(escape("MADHAT!@#$%^&*"));
document.write(" ");
document.write(unescape("MADHAT%21@%23%24%25%5E%26*"));

3. eval

 

문자열을 코드로 인식하게 해주는 함수

var a = "document.write('\x4d\x41\x44\x48\x41\x54')";

eval(a);

// \ddd : 2개의 8진수(ddd)로 지정된 Latin-1 문자

 

4. Hexademical / Decimal

Hexademical 은 16진수를 Decimal은 10진수를 의미.

어떤 문자열이 있을때, 이를 알아보기 어렵게 16진수 혹은 10진수 값으로 바꾸어 입력.

이때, String.fromCharCode 혹은 String.charCodeAt 함수를 사용

String.fromCharCode은 숫자 -> 문자로 변환하는 함수.

String.charCodeAt은 특정 위치의 문자를 아스키코드의 숫자로 변환하는 함수.

Mazilla나 JSDEtox와 같은 툴로 바로 풀리는 난독화임.

Hexademical의 경우 주로 나오는 난독화의 형시은 %(숫자)나 \x(숫자)

\x(숫자)는 %로 치환 후 분석.

document.write('\x4d\x41\x44\x48\x41\x54\x20');
document.write(String.fromCharCode(0x4d,0x41,0x44,0x48,0x41,0x54,0x20));
document.write(String.fromCharCode(77,65,68,72,65,84,32));

document.write(String.fromCharCode("LADHAT".charCodeAt(0) + 1));

5. XOR 기법

XOR 암/복호화 방식 : 평문 ^ KEY = 암호문 // 암호문 ^ KEY = 평문

XOR 연산의 성질

 교환법칙 : A ^ B = B ^ A

 결합법칙 : (A ^ B) ^ C = A ^ (B ^ C)

 항등원 : A ^ 0 = A

 역원 : A ^ A = 0

document.write(String.fromCharCode(92 ^ 17, 80 ^ 17, 85 ^ 17, 89 ^ 17, 80 ^ 17, 69 ^ 17));

 

 

'JavaScript' 카테고리의 다른 글

var, let, const의 차이점은?  (0) 2020.10.30
성능 향상을 위한 자바스크립트 코딩 패턴  (0) 2020.10.29
난독화  (0) 2020.10.29
favicon.ico 404 Not found 에러  (0) 2020.08.25
Map vs. Array  (0) 2020.07.31
formData, XMLHttpRequset, HTTP Content-Disposition  (0) 2020.06.01
Trackback 0 And Comment 0

M/M (Man Month) 이란?

|

소프트웨어개발 사업의 대가를 계산하는 방식의 하나로 한 사람이 한 달 동안 할 수 있는 양을 계산해 사업비를 책정한다. 즉 사업에 투입한 인력 수를 기준으로 사업비를 책정하는 방식인 셈이다.
인력을 기준으로 사업비를 책정하기 때문에 발주자나 관리자 입장에서는 편리하다. 하지만 투입 인력의 수준에 관계없이 인력의 수에만 초점을 맞추다 보니 소프트웨어의 질을 확보하기가 쉽지 않다는 단점이 있다.

 

출처 : [네이버 지식백과] 맨먼스 [man/month] (한경 경제용어사전)

 

프로젝트 제안서를 작성할 때 투입 인원의 개념으로 '맨먼쓰'라는 표현을 많이 씁니다.
맨먼쓰를 이해하기 전에 [작업 시간]과 [단위]에 대해 알 필요가 있습니다.

[작업 시간]은 자원이 작업에 투입되는 예정 시간을 뜻합니다. 1일 4시간 일할 예정이면 작업 시간이 4시간이라는 뜻입니다.
달력에서 하루의 [사용 가능한 작업 시간] 대비 [작업 시간]을 [단위]라고 합니다.
예를 들면 하루의 단위가 50%라면 달력 상에서 하루에 8시간 근무하기로 되어 있는데 4시간 업무가 배정되었다는 뜻입니다.

맨먼쓰(M/M, Man Month)는 엄밀히 men per month의 뜻입니다.
프로젝트에 투입되는 월 인원을 나타내는 숫자입니다. 프로젝트의 크기를 표현할때 주로 쓰입니다.

1 M/M 이면,
1명이 한달간 하면 끝낼수 있다,
2명이면 보름이면 끝낸다는 뜻입니다.

5 M/M 이면,
1명을 투입하면 5달 걸린다,
5명을 투입하면 한달걸린다는 뜻입니다.

각 사람의 능력은 동일하다는 전제하에 나오는 숫자입니다.

M/M는 투입되는 작업 시간의 양(How big)과 관련된 사항이며 [기간](How long)과는 다른 의미인 점을 이해할 필요가 있습니다.


출처: https://oracle.tistory.com/373 [안나푸르나]

'etc' 카테고리의 다른 글

About 코딩 학습 방식  (0) 2020.10.29
2020년 어떤 프로그래밍 언어를 배워야 할까?  (0) 2020.10.29
M/M (Man Month) 이란?  (0) 2020.10.28
끄적3  (0) 2020.10.28
끄적2  (0) 2020.10.15
고쳐야할것, 실수 끄적여놓은 것들  (0) 2020.06.23
Trackback 0 And Comment 0

끄적3

|

3년 ~ 5년 후의 model을 생각해보고,

 

그에 맞는 스케줄링을 해보자...

'etc' 카테고리의 다른 글

2020년 어떤 프로그래밍 언어를 배워야 할까?  (0) 2020.10.29
M/M (Man Month) 이란?  (0) 2020.10.28
끄적3  (0) 2020.10.28
끄적2  (0) 2020.10.15
고쳐야할것, 실수 끄적여놓은 것들  (0) 2020.06.23
경로 표기법  (0) 2020.04.17
Trackback 0 And Comment 0

인터넷

|

<IP와 도메인>
- 우리가 알고있는 홈페이지 주소들은 결국 IP주소로 변환이 되어야 함. 이를 가능케 해주는 것이 DNS임

<IPv6>
- 기존 IP(IPv4)는 0.0.0.0.~255.255.255.255. 총 42억개만 사용가능. 이미 수요 초과임.
- 이를 해결하기 위해 등장한 방법들(1/2/3)
1. IPv6 : 훨씬 복잡함. 2^128까지 IP주소 생성 가능. 단 기존 IPv4가 적용된 것들은 적용이 어려움... 현재 동시 사용 중

<포트>
2. 사설IP/공인IP : 공인IP의 가격문제로, 공유기를 통해 여러대의 기기 연결이 가능함. 이 때 개별 기기는 사설IP를 가지게 되는데, 이는 공인IP 내에서만 유효함. 이 사설IP를 가진 기기에 외부연결을 위한 기능이 포트포워딩임.
- 포트는 서버의 문이라고 이해하면 됨. 각 포트안에 웹서버가 설치되어 있음. 'IP주소:nn' 입력 시, 'nn'포트에 접속하는 것임

<포트포워딩>
- 공유기는 공인IP를 받음(WAN 꽂는 자리). 나머지 LANx는 사설IP를 가지고 있음.
- 사설IP를 외부로 연결시키기 위해 포트포워딩을 통해 공인IP 접속하면 특정 사설IP로 연결하도록 설정할 수 있음.

<절대경로, 상대경로>
- 절대경로: '/'만 쓰면 최상위 경로를 의미함(절대경로지만, IP가 바뀐다면 상대경로?!)
- 상대경로: '..'/'.' 을 통해, 부모/현재 디렉토리 기준으로 상대경로 설정 가능
- 기본(대문)페이지: 기본IP 주소만 입력하면 IP주소/index.html이 기본으로 열림. index.php를 열게 하기위해서는 index.html을 삭제하면 됨

<유동IP와 DDNS>
3. 통신사가 제공하는 IP는 계속 바뀜. Dynamic Address. 통신사가 한정적으로 IP를 가지고 있기 때문에, 사용하지 않을 때 회수했다가 새로 부여하는 방식임.
- 이를 해결하기 위한 DDNS(Dynamic DNS): 사용자는 도메인네임으로 접속할 뿐 IP는 모름. DDNS는 도메인과 호스트 IP를 동기화해주는 기능을 제공.

'NETWORK' 카테고리의 다른 글

인터넷  (0) 2020.10.23
Trackback 0 And Comment 0

Why is ORDER BY in a FROM Subquery Ignored?

|

MySQL의 서브 쿼리에서의 order by는 경우에 따라 무의미하다.

 

MySQL은 서브쿼리의 결과 순서를 따로 메모리에 적재해 놓지 않기에 서브쿼리의 order가 메인쿼리에서는 무시됨.

 

따라서,

 

SELECT @rownum:=@rownum+1 as num, x.*
FROM (SELECT  col1, col2
             FROM TABLE1
           ORDER BY col2
           LIMIT 18446744073709551615
) X,
(SELECT @rownum:=0) r

위와 같이

서브쿼리에 LIMIT를 정해 주는 것으로 원하는 결과를 얻을 수 있다고 한다.

출처: https://amnesis.tistory.com/17 [달바라기]

출처: https://mariadb.com/kb/en/why-is-order-by-in-a-from-subquery-ignored/

Trackback 0 And Comment 0
prev | 1 | 2 | 3 | 4 | ··· | 24 | next