출처: https://opentutorials.org/module/384/4332



1. CGI(Common Gateway Interface)

CGI(Common Gateway Interface)는 웹서버와 외부 프로그램을 연결해주는 표준화된 프로토콜이다.

웹이 처음 등장했을 때는 HTML과 이미지를 전달해주는 웹서버 밖에 없었다. 하지만 웹에 대한 수요가 증가하면서 정적인 HTML만을 가지고 정보를 제공하는 것에 대한 한계를 극복하기 위해 등장한 기술이 CGI이다. 웹서버가 처리할 수 없는 정보가 웹서버로 요청되었을 때, 그 정보를 처리할 수 있는 외부 프로그램을 호출함으로써 외부 프로그램이 처리한 결과를 웹서버가 받아서 웹브라우저로 전송하는 것이다.

외부 프로그램은 C, C++, Python 등 어떤 언어로든 작성될 수 있는데, 이를 가능케 하는 것은 웹서버와 외부 프로그램은 서로 공통의 규칙인 CGI 표준을 따르기 때문이다.



2. FastCGI

CGI는 하나의 요청(request)에 하나의 프로세스를 생성한다. 이것은 프로세스를 생성하고 제거하는 과정에서 많은 부하가 발생하기 때문에 성능이 느리다. 이를 개선하기 위해 등장한 것이 FastCGI이다. 

FastCGI는 요청이 있을 때마다 프로세스가 만들어지는 것이 아니라 만들어진 프로세스가 계속해서 새로운 요청들을 처리한다. 덕분에 프로세스를 생성하고 제거하는 데에 드는 부하가 줄어든다.


3. PHP-FPM(FastCGI Process Manager)

PHP-FPM은 PHP를 FastCGI 모드로 동작하도록 해준다. PHP5.4 RC부터는 PHP에 기본으로 내장되었다.

PHP-FPM을 사용하면 아래와 같은 이점이 생긴다. 


  • Adaptive process spawning 
  • Basic statistics (ala Apache's mod_status) 
  • Advanced process management with graceful stop/start
  • Ability to start workers with different uid/gid/chroot/environment and different php.ini (replaces safe_mode)
  • Stdout & stderr logging
  • Emergency restart in case of accidental opcode cache destruction
  • 업로드를 빠르게 처리해준다.
  • "slowlog"를 통해서 느리게 동작하는 부분을 추적할 수 있게 한다.
  • Enhancements to FastCGI, such as fastcgi_finish_request() - 요청을 일단 끝내고 후처리가 요구되는 작업을 백그라운드로 처리할 수 있도록 해준다.


'IT > PHP' 카테고리의 다른 글

날짜 관련 소스 예제  (0) 2018.02.14
ftp를 이용한 원격 파일 업,다운로드  (0) 2018.02.14
PHP XML 파싱(Parsing) 간단 예제  (0) 2018.02.14

예제1) 두 정수 a, b가 있을 때, swap() 구현


a = a^b;

b = a^b;  // b = (a^b)^b = a

a = a^b;  // a = (a^b)^a = b



예제2) 직사각형의 세 좌표가 있을 때, 하나의 좌표 구하기


x1^x2^x3 = x4

y1^y2^y3 = y4


상속(Inheritance)은 IS-A(이즈 어) 관계다.


예) Computer - Notebook 클래스 관계

ㄴNotebook 클래스는 Computer 클래스의 모든 필드/메소드를 상속받는다

ㄴ부모 클래스: Computer

ㄴ자식 클래스: Notebook

ㄴComputer is the superclass(base class or parent class) of Notebook

ㄴNotebook is a subclass(extended class or child class) of Computer 

ㄴ"A Notebook is a Computer" 성립O 

ㄴ"A Computer is a Notebook" 성립X

'IT > Java' 카테고리의 다른 글

JAVA의 컴파일 과정, JVM 메모리 구조, JVM GC 개념  (0) 2018.12.28
Wrapper class 개념  (0) 2018.11.10
== vs equals() 개념  (0) 2018.11.04
try-catch-finally 실행 순서  (0) 2018.10.25
e.printStackTrace()  (0) 2018.07.18

출처

: https://www.baeldung.com/java-wrapper-classes

: http://jusungpark.tistory.com/17

: https://code.i-harness.com/ko-kr/q/20930e




1. 정의: 

wrapper classes are objects encapsulating primitive Java types.

기본형(primitive type)을 객체로 이용될 수 있게 기본형 데이터를 감싼 클래스이다.


2. 종류:

  • primitive type에는 boolean, byte, short, char, int, long, float, double 등 
  • non-primitive type이자, reference type인 wrapper class에는 Boolean, Byte, Short, Character, Integer, Long, Float, Double 등

Boolean, Character, Number는 Object class의 자식에 해당하고

모든 숫자와 관련된 wrapper 클래스(Byte. Short, Integer, Long, Float, Double, BigInteger, BigDecimal)들은 모두 Number class의 자식에 해당한다.


3. wrapper class를 사용하는 이유? 

자바 Collection 인터페이스는 객체만 취급하기 때문에 primitive type을 객체로 boxing(또는 wrapping)하여 사용해야 하는 경우가 있다.  

를 들어, 매개변수로 객체가 요구되는 경우, 기본형이 아닌 객체로 저장해야 하는 경우, 객체간의 비교가 필요한 경우 등에 wrapper class가 쓰인다.



4. Auto Boxing/Unboxing

자바 컴파일러는 기본형 데이터를 자동으로 객체로 변환하여 처리할 수 있는 Auto Boxing을 지원하며,

객체를 자동으로 기본형 데이터로 변환하여 처리할 수 있는 Auto Unboxing을 지원한다.


Object[] objs = new Object[100];
int a = 1;

//Auto Boxing
objs[0] = a;

//Auto Unboxing
int b = (Integer)objs[0];


'IT > Java' 카테고리의 다른 글

JAVA의 컴파일 과정, JVM 메모리 구조, JVM GC 개념  (0) 2018.12.28
상속(Inheritance) 개념  (0) 2018.11.11
== vs equals() 개념  (0) 2018.11.04
try-catch-finally 실행 순서  (0) 2018.10.25
e.printStackTrace()  (0) 2018.07.18

참고

: http://yacht.yonsei.ac.kr/doku.php?id=yais:linux:manage:gpg

: https://ko.wikipedia.org/wiki/GNU



1. GPG(GNU Privacy Guard) 개념

GPG (GNU Privacy Guard)는 파일의 암호화 및 파일의 무결성 점검 등에 이용할 수 있다. GPG를 이용하여, 암호화를 위한 키를 생성하고 파일들을 암호화 할 수 있다.

암호화 키는 다른 사람들에게 제공할 수 있는 public key와 그 public key로 암호화된 자료를 풀 때 쓰이는, 자신만이 가지게 되는 private key로 이루어진다. 

따라서, 다른 사람들이 자신의 public key로 파일을 암호화 해서 보내주게 되면, 오직 본인만이 자신이 가진 private key를 이용해서 암호를 풀고 원 자료를 획득할 수 있다.



2. GNU(GNU's Not Unix) 개념

GNU는 운영체제 중 하나로서, 컴퓨터 소프트웨어의 모음집이다. GNU는 온전히 자유 소프트웨어로 이루어져 있으며, 그 중 대부분이 GNU 프로젝트의 GPL로 라이센스된다.

"GNU's Not Unix!"(GNU는 유닉스가 아니다!)의 재귀 약자이며, 이렇게 선정된 이유는 GNU의 디자인이 유닉스 계열이지만 자유 소프트웨어인 점과 유닉스 코드를 포함하지 않는다는 점에서 차별을 두려는 것이다.

GNU 프로젝트는 운영체제 커널, GNU HURD를 포함하고 있으며 이는 자유 소프트웨어 재단(FSF)에서 본래 초점을 두고 있었던 것이다.

그러나 GNU가 아닌 커널(가장 유명한 것으로 리눅스)은 GNU 소프트웨어와 함께 사용할 수도 있다. 즉, 허드(Hurd) 커널은 아직 운영용으로 준비되지는 않았는데, 이는 어떻게 GNU 시스템이 일반적으로 사용되고 있는지를 설명한다.

GNU 소프트웨어와 리눅스 커널의 결합은 리눅스(또는 GNU/리눅스)로 알려져 있다.


비교 연산자 ==는 primitive 변수 간의 값의 동일여부를 비교하는 것인데, objective 변수끼리 비교하게 되면, 그 객체의 주소값의 동일여부를 비교하게 된다. 

equals() 메소드는 문자열 간의 값의 동일여부를 비교하는 것이다.


'IT > Java' 카테고리의 다른 글

상속(Inheritance) 개념  (0) 2018.11.11
Wrapper class 개념  (0) 2018.11.10
try-catch-finally 실행 순서  (0) 2018.10.25
e.printStackTrace()  (0) 2018.07.18
@builder 관련 내용  (0) 2018.03.08

참고: http://inpiringblog.blogspot.com/2015/07/try-catch-finally.html


try {

// 프로그램 실행 로직


} catch(Exception e) {

// 예외발생 시의 로직


} finally {

/* 

1. 기본 실행 순서:

try문에서 예외가 발생하지 않았으면 catch문은 생략되어 try문이 실행된 이후에 finally문이 실행되고, 

try문에서 예외가 발생했으면 try문, catch문 순서로 실행된 이후에 finally문이 실행된다.

try문이나 catch문 안에 return문 또는 throw문이 있다면, 그 return문 또는 throw문 전까지 로직이 실행된 후 finally문이 실행되고 나서 그 return문 또는 throw문이 실행된다(결론적으로 finally문은 무조건 실행된다).


2. catch문과 finally문 안에 throw문이 있는 경우:

try문에서 예외가 발생했으면, finally문 안에 있는 throw문이 먼저 실행되기 때문에 catch문 안에 있는 throw문은 실행되지 않는다.

*/




}

'IT > Java' 카테고리의 다른 글

Wrapper class 개념  (0) 2018.11.10
== vs equals() 개념  (0) 2018.11.04
e.printStackTrace()  (0) 2018.07.18
@builder 관련 내용  (0) 2018.03.08
String to char[]  (0) 2018.02.24

참고: 

- https://stackoverflow.com/questions/6630887/using-is-null-or-is-not-null-on-join-conditions-theory-question

- https://community.teradata.com/t5/General/Is-Null-conditions-in-ON-Join-Vs-Is-Null-in-Where/td-p/50758




1. JOIN ON 절에 IS NULL 체크 관련 쿼리문 예시

select *

from TB_PARENT P with(nolock)

left outer join TB_CHILD C with(nolock)

on P.pid = C.pid 

and C.pid is null

결과: JOIN ON 조건문은 테이블들이 서로 JOIN되는 과정에서 적용된다. TB_CHILD 테이블의 pid 컬럼값이 NULL인 것은 없을 것이며 left outer join이 되고 나서야 NULL값이 생성되기 때문에, 위의 JOIN ON 조건은 항상 false가 되어 LEFT OUTER JOIN문은 왼쪽 테이블(TB_PARENT)의 모든 ROW를 반환할 때, 오른쪽 테이블(TB_CHILD) 관련 컬럼값을 NULL로 채워 반환한다. 따라서, 자식이 없는 부모 데이터를 찾을 수 없다.




2. WHERE 절에  IS NULL 체크 관련 쿼리문 예시

select *

from TB_PARENT P with(nolock)

left outer join TB_CHILD C with(nolock)

on P.pid = C.pid

where C.pid is null  

결과: WHERE 조건문은 테이블들이 서로 JOIN된 후에 적용된다. 왼쪽 테이블(TB_PARENT)과 오른쪽 테이블(TB_CHILD)이 LEFT OUTER JOIN되고 나서 where 조건문이 적용되기 때문에 자식이 없는 부모 데이터를 찾을 수 있다.



출처: 

- https://m.blog.naver.com/PostView.nhn?blogId=njk118&logNo=220701895258&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F

- http://ukjin.tistory.com/130





1. e.getMessage() vs e.toString() vs e.printStackTrace()

e.getMessage(): error 이벤트와 함께 들어오는 메세지를 출력.


e.toString(): error 이벤트의 toString()을 호출해서 간단한 error 메세지 출력.


e.printStackTrace(): error 메세지의 발생 근원지를 찾아서 단계적으로 error를 출력.


2. log4j에서 e.printStackTrace() 메세지를 log에 남기는 방법

logger.error("some error occured!!", e);


또는


logger.debug("some error occured!!", e);


'IT > Java' 카테고리의 다른 글

== vs equals() 개념  (0) 2018.11.04
try-catch-finally 실행 순서  (0) 2018.10.25
@builder 관련 내용  (0) 2018.03.08
String to char[]  (0) 2018.02.24
Java 환경변수 설정 이유  (0) 2018.02.04

출처: http://blog.bizmerce.com/?p=2533

       https://engineering.linecorp.com/ko/blog/detail/319




1. 정의:

   orchestration은 기능적으로 보다 높은 수준으로 인프라를 관리할 수 있는 automation 작업이다. 


2. 관련 도구:

   - 설정 관리 도구:  Chef, Puppet, Ansible, SaltStack 등

   - CI/CD 관리 도구: Travis CI, Jenkins, Circle CI 등

   - 컨테이너 관리 도구: Docker swarm, Kubernetes 등

+ Recent posts