[Concept | Architecture] 3Tier

시스템 설계시 프로젝트의 목적에 따라 물리적인 계층(Tier)을 나누고 서비스를 논리적(Layer)으로 분리하게 된다. 효과적인 분업을 위해 반드시 이해가 필요한 부분이다. 1티어 / 2티어 / 3티어의 개념과 장단점을 설명한다.


Tier (계층) : 물리적인 분리단위 (서버 분리)
Layer (층) : 논리적인 분리단위 (기능 분리)

1> 1Tier

장점 : 구현이 간편함, 비용이 적게듬
단점 : 확장이 힘듬, 이관시 재구성이 필요함, 분업이 어려움


2> 2Tier

장점 : 데이터관련 변경이 용이함
단점 : 3Tier에 비해 유연성이 떨어짐


3> 3Tier

장점 : 다른계층에 의존하지 않으므로 분업시 효율적임
단점 : 구현시 고려사항이 많아 비용이 증가함

1) Client(Presentation) Tier : HTML, Javascript, CSS, Image
  - 사용자 인터페이스를 지원함
  - Frontend or GUI 라고도 불림
  - 보안상의 이점을 위해 Frontend서버를 두기도함
    (이때 Frontend서버는 단순한 것이므로 구현이 쉽고 가벼운 것을 이용)
2) Application Tier : Java, NodeJS, Python, PHP
  - 정보를 처리하는 로직이 포함되어 있음
  - Backend 라고도 불림
3) Data Tier : Oracle DB, Maria DB, Postgresql
  - 데이터베이스 서버 자체를 말함

[Tip | Windows10] 서비스 포트 확인

윈도우 환경에서 포트를 확인하고 사용중인 프로세스를 종료하는 방법을 설명한다.
포트가 이미 사용중이라는 에러 메시지가 발생할 경우 프로세스를 종료해야만 한다.
(예, Eclipse 비정상 종료시 tomcat이 종료되지 않아 아래와 같은 메시지를 출력한다.)


테스트환경 : Windows10
작성일 : 2021-02-20

1> 사용중인 프로세스를 확인

# 명령프롬프트 실행 또는 실행(윈도우키 + R) > cmd
netstat -ano | findstr "8005 8080 8009"

2> 프로세스 종료
왼쪽(로컬주소)에서 사용중인 프로세스 PID 5288 을 taskkill명령으로 종료한다.

taskkill /f /pid 5288

명령 실행 후 프로세스 종료를 확인한다.

[Tip | CentOS] 서비스 로그 확인

프로젝트 테스트 또는 운영시 에러추적을 위해 로그를 남기게 된다.
리눅스 환경에서 로그분석을 위한 명령어 사용법을 설명한다.


테스트서버 : CentOS
작성일 : 2021-02-19

TIP.
Case 1. 실시간 로그 확인중 에러발생
에러가 발생한 시간이나 키워드로 4> 지난 로그 확인 방법을 활용
Case 2. 에러 발생 후 로그 확인
에러 추적 범위를 좁혀가며 에러를 찾는다. 
(ex. 시간조건으로 파일을 출력 > 단어조건으로 파일을 출력 > 특정단어로 확인)
특히, 로그파일의 용량이 클경우 범위를 좁혀가며 추적해야만 파일을 열고 닫을때 소모되는 시간을 줄일 수 있다.

1> 실시간 로그 확인

# 로그파일을 실시간으로 모니터링
tail -f {로그파일}

# 로그파일 중 특정단어가 포함된 라인만 모니터링
# - error가 포함된 라인 출력(대소문자 미구분)
tail -f {로그파일} | grep -wi 'error'
# - error or wran or exception 포함된 라인 출력(여러단어)
tail -f {로그파일} | grep -wi 'error\|warn\|exception'

2> 지난 로그 확인 – 특정단어포함

# error가 포함된 라인 출력(대소문자 미구분)
grep -ri 'error' {로그파일}
grep -ri 'error' {로그파일} > {출력파일}

# error or wran or exception 포함된 라인 출력(여러단어)
grep -ri 'error\|warn\|exception' {로그파일}
grep -ri 'error\|warn\|exception' {로그파일} > {출력파일}

3> 지난 로그 확인 – 특정단어불포함

# debug가 불포함된 라인 출력(대소문자 미구분)
grep -vi 'debug' {로그파일}
grep -vi 'debug' {로그파일} > {출력파일}

# debug or trace 불포함된 라인 출력(여러단어)
grep -vi 'debug\|trace' {로그파일}
grep -vi 'debug\|trace' {로그파일} > {출력파일}

4> 지난 로그 확인 – 특정시간 또는 에러시 출력되는 문구

# 에러가 발생한 시간대 위아래 2000라인
grep -C 2000 -i '2021-02-19 16:27\|2021-02-19 16:30' {로그파일}
grep -C 2000 -i '2021-02-19 16:27\|2021-02-19 16:30' {로그파일} > {출력파일}

# 에러문구 위아래 2000라인
grep -C 2000 -i 'Null Pointer Exception\|File Not Found' {로그파일}
grep -C 2000 -i 'Null Pointer Exception\|File Not Found' {로그파일} > {출렦파일}