개발 40

유스케이스 (Use Case)

한마디로 "사용자가 본 시스템" 이다. 사용자의 입장에서 시스템이 어떻게 동작하는가? 에 관한 것. 유스케이스는 한마디로 "사용자가 본 시스템"이다. 사용자의 입장에서 시스템이 어떻게 동작하는가?에 관한 것이기 때문에 사용자의 입장에서 시스템을 보는 관점이 필요하다. 설계보다 분석의 시각으로 시스템을 보기 때문에 개발자가 아닌 사람들이나 고객과의 커뮤니케이션을 용이하게 하는 방법으로 많이 활용된다. 유스케이스는 유스케이스 다이어그램(Use Case Diagram)으로 나타낼 수 있다. 이 다이어그램은 액터(Actor)와 유스케이스(Use Case), 그리고 둘의 관계(Relationship)로 구성되어 있다. 액터(Actor) : 시스템의 구성요소가 아닌, 외부의 존재이다. 시스템의 서비스를 활용하거나,..

개발 2022.03.14

Quartz Scheduler

주요 요소 Scheduler: Quartz 실행 환경을 관리하는 핵심 개체 Job: 사용자가 수행할 작업을 정의하는 인터페이스. Trigger 개체를 이용하여 스케줄할 수 있다. JobDetail: 작업명과 작업그룹 등 수행할 Job에 대한 상세 정보를 정의하는 개체 Trigger: 정의한 Job 개체의 실행 스케줄을 정의하는 개체. Scheduler 개체에게 Job 수행시점을 알려주는 개체 특징 수행 작업을 정의하는 Job과, 실행 스케줄을 정의하는 Trigger를 분리함으로써 유연성을 제공한다. Job과 실행 스케줄을 정의한 경우, Job은 그대로 두고 실행 스케줄만을 변경할 수 있다. 하나의 Job에 여러 개의 실행 스케줄을 정의할 수 있다. 사용법 org.quartz.Job 인터페이스를 구현 Jo..

개발 2022.03.14

cron

cron이란? 유닉스 계열 컴퓨터 운영 체제의 시간 기반 잡 스케줄러 셀 명령어들이 주어진 일정에 주기적으로 실행되도록 규정해놓은 crontab 파일에 의해 구동된다. cron 관련 명령어 crontab -l: 현재 등록된 cron list 출력 crontab -e: cron 수정 주기 설정 # ┌───────────── 분 (0 - 59) # │ ┌────────────── 시 (0 - 23) # │ │ ┌─────────────── 일 (1 - 31) # │ │ │ ┌──────────────── 월 (1 - 12) # │ │ │ │ ┌───────────────── 요일 (0 - 6) (0~6 : 일요일~토요일, 7과 0이 같으므로 둘 다 일요일로 쓸 수 있다.) # │ │ │ │ │ # │ │ │..

개발 2022.03.14

유용하게 쓸 수 있는 vim 단축키

이 문서는 가장 많이 쓰고 있는 단축키만 모아둔 것입니다. 이 문서에 표시된 단축키는 모두 명령어 모드에서 작동합니다. (처음 vi 열었을 때의 모드, Esc를 눌렀을 때의 모드) 자세한 내용은 링크를 참조하세요 (vim 입문) vi 기본 명령어 vi filename : 파일 열기, 작성 :set nu : 행 번호 표시 :set nonu : 행 번호 숨기기 커서 이동 → ← ↑ ↓ : 상하좌우 이동 w : 오른쪽 단어 맨 뒤로 커서 이동 b : 왼쪽 단어 맨 앞으로 커서 이동 ^ : 행의 맨 왼쪽으로 $ : 행의 맨 오른쪽으로 G : 파일의 마지막 줄로 21G : 21번째 행으로 이동 H : 화면의 맨 위로 M : 화면의 중간으로 L : 화면의 맨 아래쪽으로 삽입 a : 커서 오른쪽에 삽입 (append..

개발 2022.03.14

파일 & 디렉토리 권한

UNIX 환경에서의 파일 및 디렉토리 권한과 관련된 내용을 정리한 문서 (참고 링크) UNIX 환경에서 ls -al 을 입력하면 아래와 같이 현재 디렉토리 내의 모든 파일, 디렉토리 리스트를 볼 수 있다. 그 중 맨 왼쪽에 있는 부분이 권한을 보여주는 부분이다. 아래는 샘플로 만든 macOS 터미널 캡쳐본이다. (macOS는 유닉스 계열 운영체제이다) 권한 의미 정리 d rwx rwx rwx 파일 타입 소유자 그룹 기타 - 일반 파일 b 블럭형 장치파일 (하드디스크 등) c character device (장치 파일, 마우스 등) d directory p 파이프 파일 s 소켓 파일 r read w write x execute 권한 관련 명령어 chmod : 권한 변경 위 권한을 각각 2진수로 본 숫자를 ..

개발 2022.03.14

LINUX 서버에서 자주 쓰는 명령어

grep : 문자열 패턴 검색 grep {옵션} {문자열} {파일} {옵션} -c : 일치하는 행의 수를 출력 -n : 행의 번호를 함께 출력 -i : 비교시 대소문자를 구별 안함 -v : 지정한 패턴과 일치하지 않는 행만 출력 -l : 패턴이 포함된 파일의 이름을 출력 -w : 패턴이 전체 단어와 일치하는 행만 출력 {파일} * : 현재 디렉토리의 모든 파일 그냥 파일명을 입력해도 된다. egrep : 여러 개의 문자열을 동시에 찾을 수 있고, 추가 정규표현식 메타문자를 지원한다. + : + 앞의 정규표현식이 1회 이상 나타남 ? : ? 앞의 정규표현식이 0 또는 1회 나타남 | : 문자열간의 OR 연산자 () : 정규표현식을 둘러쌈 ps : 프로세스 관리 (ps -ef를 많이 씀) -e : 현재 실행..

개발 2022.03.14

로컬 파일을 게이트웨이를 통해 서버로 보내기

FileZilla 설치 - filezilla-project.org/download.php?type=client 게이트웨이에 연결 왼쪽 모서리의 사이트 관리자 버튼 클릭 일반 탭 호스트: 게이트웨이 호스트 프로토콜: SFTP 로그온 유형: 인터랙티브 사용자: 사용자 ID 연결 버튼 후 비밀번호 입력 로컬 사이트 파일 드래그해서 리모트 사이트의 게이트웨이로 이동 (비밀번호 재입력 요청하면 입력) 게이트웨이에서 서버로 파일 보내기 (remote copy) [gateway:/path] rcp {대상 파일} user@{서버 호스트}:{/ 루트부터의 경로} 파일을 보낸 뒤에는 게이트웨이에 남아 있는 파일은 삭제해 주는게 좋다. 시간이 지나면 잊어버리기 때문

개발 2022.03.14

메소드 네이밍

메소드는 동사가 앞으로 나오는 네이밍을 사용한다. // 동사: 3인칭 단수 file.exists(); // 형용사: is~ list.isEmpty(); // 유효성 체크 isValid(); 자주 쓰는 메소드 네이밍 isValid: 주로 true/false를 판별할 수 있는 유효성 체크에 사용한다. initSomething: 초기화에 사용한다. 단순히 init만 사용하는 것이 아니라 무엇을 어떻게 초기화하는지 보여주면 좋다. 메소드의 이름 짓기가 어렵다면 체크해야 할 사항들 메소드 추출의 범위가 잘못된 것은 아닌가? 기능이 애매모호하지는 않은가? 메소드가 두 가지 이상의 기능을 하고 있지는 않은가?

개발 2022.03.14

로그 레벨 (Log Level)

FATAL 가장 크리티컬한 에러가 발생했을 때 시스템이 더이상 유지될 수 없을 때 ERROR 일반 에러가 발생했을 때 시스템 유지는 가능하지만 분명한 문제가 발생했을 때 시스템에 이상이 있고, 사용자에게 영향을 미치거나 개발자의 수정을 필요로 할 때 WARN 에러는 아니지만 주의할 필요가 있을 때 자체적으로 해결할 수 있으나 그래도 잘못된 경우 예상치 못한 이벤트가 발생했고, 사용자가 영향을 받을 수는 있지만 개발자의 즉각적인 수정이 필요하지 않을 때 INFO 일반 정보를 나타낼 때 특정한 이벤트 포인트, 긴 시간이 걸리는 작업(DB 동기화 등)이 시작되거나 종료될 때 시스템(서버 시작, 종료)이나 세션(로그인/로그아웃), DB 접속 확인 등의 높은 수준의 분석이 필요할 때 DEBUG 일반 정보를 상세히..

개발 2022.03.14

객체지향의 5대 원칙

SOLID, 로버트 마틴이 2000년대 초반에 명명한 객체 지향 프로그래밍 및 설계의 다섯가지 기본 원칙이다. SOLID라고 외우는 것은 쉽지만 각 원칙도 줄이면 오히려 외우기가 어렵고, 풀어서 읽는 것이 오히려 이해하기 좋다고 생각해서 약어로 쓰지 않았다. Single Responsibility Principal, 단일 책임의 원칙 There should never be more than one reason for a class to change, 클래스 변경의 이유는 단 하나여야 한다. 쉽게 말해, 하나의 클래스는 하나의 책임만을 가지고 있어야 한다. 이 원칙을 도입하면 코드가 간결해지기 때문에 가독성이 향상되고 유지보수가 용이해진다 이 원칙을 도입하기 위해서는 기존에 여러 곳에 흩어져있는 책임을 한..

개발 2022.03.14