쉘 작업 하다가 쉘 명령어가 실행이 안되었을 경우

어떻게 확인해야 하나 고민하다가 java에서 처럼 예외처리하는 방법이 있는지 찾아봄

 

 * 실행 명령어를 조건문에 넣어서 1과 0으로 판단 (0: TRUE, 1: FALSE)

"실행 명령어" && echo "실행됨" || echo "실행안됨!"

위 명령어의 처리 순서

 

"실행 명령어" 실행 결과가 정상 일 경우 `&& echo "실행됨"`이 실행 되어 결과적으로 "실행됨"이 출력

"실행 명령어" 실행 결과가 오류 발생 시 `|| echo "실행안됨!"`이 실행 되어 결과적으로 "실행안됨!"이 출력

 

 * 다중 명령어 수행 시

{

	"실행 명령어1" &&
	"실행 명령어2" &&
	echo "실행 명령어 수행 완료 로그"
    
} || {

	echo "실행 명령어 수행 실패 로그"
	"실행 명령어 수행 실패 시 수행될 명령어"
	exit 1
    
}

'Basic > shell' 카테고리의 다른 글

[Shell] netstat  (0) 2020.02.12
[Shell] -ksh {파일명}.sh: not found  (0) 2019.09.05
[Shell] rsync  (0) 2019.09.03
[Shell] 파일 찾기  (0) 2019.08.12
[shell] value too great for base (error token is "08")  (0) 2019.07.07
# 현재 폴더 내에 파일 검색 (하위폴더 포함)
find .

 

# 현 폴더 이하 생성된지 7일 이하 파일 찾기
find -type f -ctime -7
# 현 폴더 이하 7일 이내로 수정된 파일 찾기
find -type f -mtime -7

 

# 현 폴더 내에 파일 총 개수 찾기
find "path" -type f | wc -l

 

'Basic > shell' 카테고리의 다른 글

[Shell] netstat  (0) 2020.02.12
[Shell] -ksh {파일명}.sh: not found  (0) 2019.09.05
[Shell] rsync  (0) 2019.09.03
[Shell] Exception Handling  (0) 2019.08.12
[shell] value too great for base (error token is "08")  (0) 2019.07.07

[BoostCourse] 프로젝트 5. 예약관리 시스템: 예약하기

 

 * 이 글은 웹 프로그래밍 과정을 진행하면서 "개인적인" 생각을 정리한 글입니다.
 * 잘못된 부분, 이해가 안 되는 부분 또는 더 좋은 생각이 있으신 분들은 댓글 남겨주세요.

 

 - 다음 글

[부스트코스] 프로젝트5. 예약관리 시스템: 예약하기(BE) 제출 [PASS & Feedback]

 

[참고 문서]

[기획서]  - 부코_웹_PJT3-5_예약서비스.pptx
[Trello]   - boostCourse (작성 중)
 

부코_웹_PJT3-5_예약서비스.pptx

예약서비스

docs.google.com

 

Full Stack Course

Trello is the visual collaboration platform that gives teams perspective on projects. Use Trello to collaborate, communicate and coordinate on all of your projects.

trello.com

 

[목차]

1. 프로젝트 기능 요구사항 정의서
2. 프로젝트 기술 요구사항 정의서
3. 예약하기, 예약확인 시퀀스 다이어그램
4. API Data Flow
5. 예약하기 View 구현 상세
6. 세션 등록 이벤트 시점
7. 예약확인 페이지 JsonData 확인

 

1. 프로젝트 기능 요구사항 정의서

 

2. 프로젝트 기술 요구사항 정의서

 

3. 예약하기, 예약확인 시퀀스 다이어그램

4. API Data Flow

5. 예약하기 View 구현 상세

 

6. 세션 등록 이벤트 시점

7. 예약 확인 페이지 JsonData 확인

 

8. 예약확인 페이지 구현

 

[수정 순서]

 1. 개념 목차 만들기

 2. PPT로 목차 시각화

 3. 주요 개념들 쿼리 작성 및 결과 시각화

 

Part 01 데이터 모델링

Section 01 데이터모델링

 Point 1 데이터 모델링의 이해

  1. 데이터 모델링

  2. 데이터 모델링의 특징

  3. 데이터 모델링 단계

  4. 데이터 모델링을 위한 ERD

  5. 데이터 모델링 고려사항

 

데이터 모델링의 이해

 

데이터 모델링의 이해

 Point 2 3층 스키마

  1. 3층 스키마

  2. 3층 스키마 구조

3층 스키마

 

 Point 3 엔티티

  1. 엔티티

  2. 엔티티 도출

  3. 엔티티 특징

  4. 엔티티 종류

   1) 유형과 무형 엔티티

   2) 발생시점에 따른 엔티티 종류

엔티티

 

 Point 4 속성

  1. 속성

  2. 속성의 특징과 종류

   1) 속성의 특징

   2) 속성의 종류

속성

 Point 5 관계

  1. 관계

  2. 관계의 종류

   1) 존재관계

   2) 행위관계

  3. 관계 차수

   1) 관계 차수

   2) 관계 차수의 종류

  4. 식별 관계와 비식별 관계

   1) 식별 관계

   2) 비식별 관계

관계

 Point 6 엔티티 식별자

  1. 주식별자

  2. 식별자의 종류

   1) 식별자의 대표성

   2) 생성 여부

   3) 속성의 수

   4) 대체여부

 

Section 2 데이터 모델과 성능

 Point 1 정규화

  1. 정규화

  2. 함수적 종속성

   1) 제 1정규화

   2) 제 2정규화

   3) 제 3정규화

   4) BCNF

 3. 정규화 예제

정규화

 

 Point 2 정규화와 성능

  1. 정규화의 문제점

  2. 정규화를 사용한 성능 튜닝

정규화 문제점

 

 Point 3 반정규화

  1. 반정규화

  2. 반정규화를 수행하는 경우

  3. 반정규화 기법

   1) 계산된 컬럼 추가

   2) 테이블 수직분할

   3) 테이블 수평분할

   4) 테이블 병합

반정규화

 

 Point 4 분산 데이터베이스

  1. 분산 데이터베이스

  2. 분산 데이터베이스 설계 방식

  

분산 데이터베이스
분산 데이터베이스 설계 방식
분산 데이터베이스 장단점

 


 

Part 02 SQL 기본과 활용

Section 1 SQL 기본

 Point 1 관계형 데이터베이스

  1. 관계형 데이터베이스

   1) 관계형 데이터베이스의 등장

   2) 데이터베이스와 데이터베이스 관리 시스템의 차이점

   3) 관계형 데이터베이스 집합 연산과 관계 연산

  2. 테이블 구조

관계형 데이터베이스
테이블 구조

 Point 2 SQL 종류

  1. SQL

  2. SQL 종류

  3. SQL 문의 실행 순서

SQL 종류

 

 Point 3 DDL

  1. 테이블 생성

   1) 기본적인 테이블 생성

   2) 제약조건 사용

   3) 테이블 생성 시에 CASCADE 사용

   4) 테이블명 변경

  2. 테이블 변경

   1) 컬럼 추가

   2) 컬럼 변경

   3) 컬럼 삭제

   4) 컬럼명 변경

  3. 테이블 삭제

  4. 뷰 생성과 삭제

DDL 테이블 생성
DDL 테이블 변경 및 삭제
DDL 뷰

 Point 4 DML

  1. INSERT 문

   1) INSERT 문

   2) SELECT 문으로 입력

   3) Nologging 사용

  2. Update 문

  3. DELETE 문

 

DML 

  4. SELECT 문

   1) SELECT문 사용

   2) Order by를 사용한 정렬

   3) Index를 사용한 정렬

   4) Distinct와 Alias

SELECT ORDER BY
SELECT INDEX

 

 Point 5 WHERE 문 사용

  1. WHERE문이 사용하는 연산자

  2. Like문 사용

  3. Between문 사용

  4. IN문 사용

  5. NULL 값 조회

WHERE 조건문이 사용하는 연산자
LIKE & BETWEEN
NULL 값 관련

 

 Point 6 GROUP 연산

  1. GROUP BY 문

  2. HAVING문 사용

  3. 집계함수 종류

  4. COUNT 함수

  5. GROUP BY 사용 예제

   1) 부서별, 관리자별 급여 평균 계산

   2) 직업별 급여 합계 중에 급여 합계가 1000 이상인 직원

   3) 사원번호 1000 ~ 1003 번의 부서별 급여 합계

 

 Point 7 SELECT 문 실행 순서

 

 Point 8 명시적 형변환과 암시적 형변환

명시적, 암시적 형변환

 

 Point 9 내장형 함수

  1. 내장형 함수

  2. DUAL 테이블

  3. 내장형 함수의 종류

   1) 문자형 함수

   2) 숫자형 함수

   3) 날짜형 함수

내장형 함수 (1)
내장형 함수 (2)

 

 Point 10 DECODE와 CASE 문

  1. DECODE

  2. CASE문

 

 Point 11 ROWNUM과 ROWID

  1. ROWNUM

  2. ROWID

rownum, rowid

 

 Point 12 WITH 구문

WITH

 

 Point 13 DCL

  1. GRANT

  2. REVOKE

DCL

 

 Point 14 TCL

  1. Commit

  2. Rollback

  3. Savepoint

TCL

 

Section 2 SQL 활용

 Point 1 JOIN

  1. Equi JOIN

   1) Equi JOIN

   2) Inner Join

   3) Intersect 연산

  2. Non-Equi JOIN

  3. OUTER JOIN

   1) LEFT OUTER JOIN, RIGHT OUTER JOIN

  4. CROSS JOIN

  5. UNUON을 사용한 합집합 구현

   1) UNION

   2) UNION ALL

  6. 차집합을 만드는 MINUS 

 

 Point 2 계층형 조회(Connect by)

 

 Point 3 서브쿼리(Subquery)

  1. Main query와 Subquery

  2. 단일 행 Subquery와 다중 행 Subquery

  3. 다중 행(Multi row) Subquery

   1) IN

   2) ALL

   3) EXISTS

  4. 스칼라(scala) Subquery

  5. 연관(Correlated) Subquery

 

 Point 4 그룹 함수(Group Function)

  1. Rollup

  2. Grouping 함수

  3. Grouping Sets 함수

  4. Cube 함수

 

 Point 5 윈도우 함수

  1. 윈도우 함수

  2. 순위 함수

  3. 집계 함수(Rank Function)

  4. 행 순서관련 함수

  5. 비율 관련 함수

 

 Point 6 테이블 파티션

  1. Partition 기능

  2. Range Partition

  3. List Partition

  4. Hash Partition

  5. 파티션 인덱스

  

Section 3 SQL 최적화의 원리

 Point 1 옵티마이저와 실행계획

  1. 옵티마이저

  2. 옵티마이저 특징

  3. 옵티마이저의 필요성

  4. 옵티마이저 실행계획 확인

 

 Point 2 옵티마이저 종류

  1. 옵티마이저의 실행 방법

  2. 옵티마이저 엔진

  3. 비용 기반 옵티마이저

 

 Point 3 인덱스

  1. 인덱스

  2. 인덱스 생성

  3. 인덱스 스캔

   1) 인덱스 유일 스캔

   2) 인덱스 범위 스캔

   3) 인덱스 전체 스캔

 

 Point 4 실행계획

 

 Point 5 옵티마이저 조인

  1. Nested Loop 조인

  2. Sort Merge 조인

  3. Hash 조인

 

 

 

 

Step 01. 디자인 패턴, 꼭 써야 한다.

 - J2EE 패턴

 - Transfer Object 패턴

 - Service Locator 패턴

 

Step 02. 내가 만든 프로그램의 속도를 알고 싶다.

 - 프로파일링 툴이란?

 - System 클래스

 - System.currentTimeMillis와 System.nanoTime

 

Step 03. 왜 자꾸 String을 쓰지 말라는거야?

 - String 클래스를 잘못 사용한 사례

 - StringBuffer 클래스와 StringBuilder 클래스

 - String vs StringBuffer vs StringBuilder

 - 버전에 따른 차이

 

Step 04. 어디에 담아야 하는지...

 - Collection 및 Map 인터페이스의 이해

 - Set 클래스 중 무엇이 가장 빠를까?

 - List 관련 클래스 중 무엇이 빠를까?

 - Map 관련 클래스 중에서 무엇이 빠를까?

 - Collection 관련 글래스의 동기화

 

Step 05. 지금까지 사용하던 for 루프를 더 빠르게 할 수 있다고?

 - 조건문에서의 속도는?

 - 반복 구문에서의 속도는?

 - 반복 구문에서의 필요없는 반복

 

Step 06. static 제대로 한번 써 보자

 - static의 특징

 - static 잘 활용하기

 - static 잘못 쓰면 이렇게 된다.

 - static과 메모리 릭

 

Step 07. 클래스 정보, 어떻게 알아낼 수 있나?

 - reflection 관련 클래스들

 - reflection 관련 클래스를 사용한 예

 - reflection 클래스를 잘못 사용한 사례

 

Step 08. synchronized는 제대로 알고 써야 한다

 - 자바에서 스레드는 어떻게 사용하나?

 - interrupt() 메서드는 절대적인 것이 아니다.

 - synchronized를 이해하자

 - 동기화는 이렇게 사용한다 - 동일 객체 접근 시

 - 동기화는 이렇게 사용한다 - static 사용 시

 - 동기화를 위해서 자바에서 제공하는 것들

 - JVM 내에서 synchronization은 어떻게 동작할까?

 

Step 09. IO에서 발생하는 병목 현상

 - 기본적인 IO는 이렇게 처리한다.

 - IO에서 병목이 발생한 사례

 - 그럼 NIO의 원리는 어떻게 되는 거지?

 - DirectByteBuffer를 잘못 사용하여 문제가 발생한 사례

 - lastModified() 메서드의 성능 저하

 

Step 10. 로그는 반드시 필요한 내용만 찍자

 - System.out.println()의 문제점

 - System.out.format() 메서드

 - 로그를 더 간결하게 처리하는 방법

 - 로거 사용 시의 문제점

 - 로그를 깔끔하게 처리하게 도와주는 slf4j와 LogBack

 - 예외 처리도 이렇게

 

Step 11. JSP와 서블릿, Spring에서 발생할 수 있는 여러 문제점

 - JSP와 Servlet의 기본적인 동작 원리는 꼭 알아야 한다.

 - 적절한 include 사용하기

 - 자바 빈즈, 잘 쓰면 약 못쓰면 독

 - 태그 라이브러리도 잘 써야 한다.

 - 스프링 프레임워크 간단 정리

 - 스프링 프레임워크를 사용하면서 발생할 수 있는 문제점들

 

Step 12. DB를 사용하면서 발생 가능한 문제점들

 - DB Connection과 Connection Pool, DataSource

 - DB를 사용할 때 닫아야 하는 것들

 - JDK 7에서 등장한 AutoClosable 인터페이스

 - ResultSet.last() 메서드

 - JDBC를 사용하면서 유의할 만한 몇 가지 팁

 

Step 13. XML과 JSON도 잘 쓰자

 - 자바에서 사용하는 XML 파서의 종류는?

 - SAX 파서는 어떻게 사용할까?

 - DOM 파서는 어떻게 사용할까?

 - XML 파서가 문제가 된 사례

 - JSON과 파서들

 - 데이터 전송을 빠르게 하는 라이브러리 소개

 

Step 14. 서버를 어떻게 세팅해야 할까?

 - 설정해야 하는 대상

 - 아파치 웹 서버의 설정

 - 웹 서버의 Keep Alive

 - DB Connection Poll 및 스레드 개수 설정

 - WAS 인스턴스 개수 설정

 - Session Timeout 시간 설정

 

Step 15. 안드로이드 개발하면서 이것만은 피하자

 - 일반적인 서버 프로그램 개발과 안드로이드 개발은 다르다.

 - 구글에서 이야기하는 안드로이드 성능 개선

 - 안드로이드 분석에 도움이 되는 기본적인 툴들

 - 안드로이드 앱의 상황을 확인하는 방법은?

 - systrace를 활용하자

 - 안드로이드에서는 이미지 처리만 잘해도 성능이 좋아진다.

 

Step 16. JVM은 도대체 어떻게 구동될까?

 - HotSpot VM은 어떻게 구성되어 있을까?

 - JIT Optimizer라는 게 도대체 뭘까?

 - JRockit의 JIT 컴파일 및 최적화 절차

 - IBM JVM의 JIT 컴파일 및 최적화 절차

 - JVM이 시작할 때의 절차는 이렇다

 - JVM이 종료될 때의 절차는 이렇다

 - 클래스 로딩 절차도 알고 싶어요?

 - 예외는 JVM에서 어떻게 처리될까?

 

Step 17. 도대체 GC는 언제 발생할까?

 - GC란?

 - 자바의 Runtime data area는 이렇게 구성된다

 - GC의 원리

 - GC의 종류

 - 5가지 GC 방식

 - 강제로 GC 시키기

 

Step 18. GC가 어떻게 수행되고 있는지 보고 싶다.

 - 자바 인스턴스 확인을 위한 jps

 - GC 상황을 확인하는 jstat

 - jstat 명령에서 GC 튜닝을 위해서 가장 유용한 옵션은 두 개

 - 원격으로 JVM 상황을 모니터링하기 위한 jstatd

 - verbosegc 옵션을 이용하여 gc 로그 남기기

 - 어설프게 아는 것이 제일 무섭다

 

Step 19. GC 튜닝을 항상 할 필요는 없다.

 - GC 튜닝을 꼭 해야 할까?

 - GC의 성능을 결정하는 옵션들

 - GC 튜닝의 절차

 - 1, 2 단계: GC 상황 모니터링 및 결과 분석하기

 - 3-1 단계: GC 방식 지정

 - 3-2 단계: 메모리 크기

 - 4 단계: GC튜닝 결과 분석

 

Step 20. 모니터링 API인 JMX

 - JMX란?

 - MBean에 대해서 조금만 더 자세히 알아보자

 - Visual VM을 통한 JMX 모니터링

 - 원격으로 JMX를 사용하기 위해서는...

 

Step 21. 반드시 튜닝해야 하는 대상은?

 - 반드시 튜닝해야 하는 대상 선정

 - 왜 로그인 화면을 튜닝(분석)해야 하는가?

 - 쇼핑몰 사이트에서는...

 

Step 22. 어떤 화면이 많이 쓰이는지 알고 싶다

 - 웹 로그란?

 - 웹 로그를 통해서 접근 통계를 분석하기 싫다면?

 

Step 23. 튜닝의 절차는 그때그때 달라요

 - 성능 튜닝을 위한 아주 기초 법칙

 - 성능 튜닝 Step By Step

 - 성능 튜닝의 비법

 

Step 24. 애플리케이션에서 점검해야 할 대상들

 - 패턴과 아키텍처는 잘 구성되어 있는가?

 - 기본적인 애플리케이션 코딩은 잘 되어 있는가?

 - 웹 관련 코딩은 잘 되어 있는가?

 - DB 관련 코딩은 잘 되어 있는가?

 - 서버의 설정은 잘 되어 있는가?

 - 모니터링은 어떻게 하고 있는가?

 

 

 

 * 오류 해결하기

 

변수가 08일 때 수식으로 비교하려 할 때 발생

쉘 스크립트는 특별한 접두사나 표기법이 없다면 숫자를 10진수로 해석한다.
만약에 숫자 앞에 0이 있다면 8진수이고, 0x이 있으면 16진수
#이 들어간 숫자는 진법#숫자로 계산된다.

 

# 10진수
23 > 23
45 > 45

# 8진수 ('0'다음에 나오는 숫자)
071  > 8 (10진수로 표현)

# 16진수 ('0x'나 '0X' 다음에 나오는 숫자)
0x7a > ? (10진수로 표현)

* 날짜로 만들어지는 폴더 경로를 SFTP 명령어로 작성 하고 싶다.

 

이를테면 SFTP 로 접근해서 해당 경로에 파일을 지운다던가

 

이때 폴더가 날짜값으로 만들어지는 이유로 반복문을 돌리는데 숫자 2자리 수 이전 값에서는 01, 02, ... 09와 같은 포맷을 만들기 위해서는 몇가지 작업이 필요하더라

 


 * 한 자리 수 숫자 앞에 0을 붙이는 방법

 

`seq [option] [first_number] [increment] [last_number]`

`seq [option] [first_number] [last_number]`

`seq [option] [last_number]`

 

[option]

-f 포맷방식 "02g", "03g"
-w 마지막 숫자(last_number) 자릿수에 맞게 0을 채움 seq -w 1 10
-s 숫자 사이에 특정 구분자를 추가 seq -s "/t" -w 1 5

 


 * 내가 활용한 방법

`seq -f "02g" 시작 끝`

 

for time in `seq -f "02g" $START $END` ; do

	shtp -i $SSHKEY "사용자계정@호스트" << EOF
    	rm /경로/$time/*
    	quit
        EOF
    
done

 

'Basic > shell' 카테고리의 다른 글

[Shell] netstat  (0) 2020.02.12
[Shell] -ksh {파일명}.sh: not found  (0) 2019.09.05
[Shell] rsync  (0) 2019.09.03
[Shell] Exception Handling  (0) 2019.08.12
[Shell] 파일 찾기  (0) 2019.08.12

[작업내용]

...더보기

파일을 읽어서 DB에 넣을 때 특정 컬럼의 값이 Not Null 일 때 다른 컬럼의 값에 특정 문자열을 추가 하는 작업

ex) A 컬럼의 값이 존재 -> B 컬럼에 "이득" 문자열 추가 삽입

[문제]

...더보기

Not Null 값으로 보이는 컬럼 값을 DB가 값이 있는 것으로 판단하여 특정 문자열을 추가하는  현상

 

[원인 파악]

...더보기

해당 파일에서  특정 컬럼에 들어가는 내용을 모두 읽어 String의 값에 length를 확인

 * 문제의 값의 length는 1로 출력됨

 * 눈으로 판단하기에는 \t으로 보이는 값이 출력되고 있음

 * trim()으로 처리 하려고 했으나 trim() 또는 replaceAll(" ", "")로 처리가 안됨

 

문자열이 특수한 값인지 파악하기 위하여 str.chatAt(0)의 값을 형변환 한 뒤 출력

 * 출력된 값은 12288

 * 12288이란 값은 cjk 문자셋에서 나타나는 IDEOGRAPHIC SPACE라 불리는 유니코드 \u3000 또는 HTML 표현으로는 &#12288; 이라는 문자로 폰트 지원이 없으면 눈에 보이지 않는 코드로 존재

 

[해결 방법]

...더보기

현 상황에서 해결한 방법은 몇 가지 가정을 기반으로 작업하였다.

 * 현 상황에서는 특수 문자가 컬럼 내에 하나만 존재한다.

 * 문자열 사이에는 존재하지 않는다.

 

* 이 작업을 했을 경우 예상되는 이슈

 - 특정 파일의 값을 개발자가 임의로 수정하는 경우이기 때문에 모든 값을 알지 못하면 의도하지 않은 값이 수정될 수 있다.

 

String whatTheString = " ";
System.out.println("[LOG] [SpecialWord:" + whatTheString.length() + "]");

/* trim() 처리 시도 */
System.out.println("[LOG] [Trim(): " + whatTheString.trim() + "]["+ whatTheString.trim().length() + "]");

/* 문자열 확인 (12288의 값이 출력) */
int whatInt = whatTheString.charAt(0);
System.out.println("[LOG] [charAt(0):" +  whatInt + "]");

/* 모든 문자열의 공백을 제거 */
String replaceAllStr = whatTheString.replaceAll("\\p{Z}", "");
System.out.println("[LOG] [replaceAll:" + replaceAllStr + "]");

/* 문자열 처음과 끝에 내용만 없애기 */
String replaceStr = whatTheString.replaceAll("(^\\p{Z}+|\\p{Z}+$)", "");
System.out.println("[LOG] [replaceAll(regExp):" + replaceStr + "][" + replaceStr.length() + "]");

 

[Git] checkout

 

 이클립스 설정을 잡다하게 해서 새로 세팅하고 싶은 마음에 소스를 지우고, 이클립스 설정을 다시 세팅하고 소스를 내려 받도록 한다. 

 

git ls-files -d | git checkout .

 

+ Recent posts