목록분류 전체보기 (328)
삶 가운데 남긴 기록 AACII.TISTORY.COM

Thread dump는 언제 해야 하는 가? 1. Java 어플리케이션이 Hang 상태가 될 때 Hang 상태는 Java 어플리케이션의 Thread들이 멈춰있는 상황입니다. Shared Resource의 접근할 경우 다른 Thread가 사용할 수 없도록 Lock을 획득하며, 또한 이러한 Lock을 다른 Thread들이 이미 획득하고 있을 경우, Lock을 획득하기 위해 대기하게 됩니다. Java에서의 Lock은 내부 Monitor를 통해 관리되기 때문에 Monitor 획득이 Lock 획득을 의미합니다. 이렇게 Lock을 획득하기 위해 대기하는 Thread들이 많아지고, 대기 시간이 길어지면 Hang 인것처럼 보여지게 됩니다. Java 프로그램에서 Lock을 획득하기 위해서는 Synchronized구문을 ..

com.google.zxing 라이브러리 아래는 Zxing Core 3.5.x 버전을 기반으로 한 예제입니다. maven이나 gradle 등을 통해 라이브러리를 프로젝트에 추가할 수 있습니다. 다만 너무 최근 버전보다 안정화된 버전을 사용하는 것을 권장드립니다. 이 zxing 라이브러리는 String을 QR 코드로, 다시 QR코드를 String으로 복원할 수 있습니다. QR 코드 스펙상 문자열의 길이의 제한이 있을 수 있습니다. 인코딩 방식이나 오류 레벨 설정 라이브러리 종류나 버전 등에 따라 차이가 있을 수 있지만 수백 글자에서 수천 자까지만 가능합니다. 따라서 긴 문자열은 QR코드를 여러개로 분할하여 변환해야 합니다. 아래 예제는 긴 문자열을 1000 글자로 나누어서 QR 코드로 변환 후 다시 Str..
Westwood에서 만든 고전 게임 DUNE2000입니다. 듄은 프랭크 허버트의 SF 소설을 원작으로 하고 있습니다. 듄은 스타워즈나 스타크래프트, 바람 계곡의 나우시카 등 스페이스 오페라 장르에 많은 영향을 끼친 고전 작품입니다. 영화로 1984년에도 제작되었고 2021년 드뉘 빌뇌브 감독, 티모시 샬라메 주연으로 새로 제작되어 개봉했습니다. DUNE2000은 RTS(리얼 타임 시뮬레이션) 게임 장르를 개척한 작품인 dune2를 윈도 95용으로 리메이크한 버전입니다. 배경 설정 서기 1만6천년 즈음 발생한 버틀레리안 지하드(종교적 성향이 강한 반기계 운동) 때문에 기계 문명이 쇠퇴하고 정치는 중세 귀족 문명으로 퇴행했습니다. 대신 인간 컴퓨터라 불리는 멘타트와 인간의 초능력을 이용한 우주 항행 기법이 ..
postgresql 14 에서 백업 및 복원 방법을 알려드리겠습니다. # 데이터베이스 백업 pg_dump -h 호스트네임 -p 포트번호 -U 사용자이름 -F tar -b -v 데이터베이스이름 > 백업파일이름 실행하게 되면 비밀번호를 물어보게 됩니다. 이 때 비밀번호는 postgresql 사용자이름에 할당된 비밀번호를 입력하면됩니다. # 데이터베이스 복원 pg_restore -h 호스트네임 -p 포트번호 -U 사용자이름 -d 데이터베이스이름 백업파일이름 복원할 때도 마찬가지로 비밀번호를 물어봅니다. postgresql에 있는 모든 데이터베이스를 백업 및 복원은 다음과 같습니다. 백업은 pg_dumpall 명령으로, 복원은 psql 명령으로 합니다. # 모든 데이터베이스 백업 pg_dumpall -h 호스트..
여기서는 grep의 다양한 옵션에 대해 다루지는 않겠습니다. 사용하기 유용했던 패턴 샘플만 몇개 언급하도록 하겠습니다. 1. 실행 중인 프로세스 중 "java"를 포함하는 프로세스를 찾을 때 ps -ef | grep java 하지만 이건 우리가 찾으려는 프로세스 외에 프로세스가 grep 자체 프로세스도 표시되는데요. 그래서, 2. 실행 중인 프로세스 중 "java"를 포함하는 프로세스를 찾되, grep로 시작하는 프로세스를 제외할 때 ps -ef | grep java | grep -v grep 요렇게 하면 됩니다. 3. 실행 중인 프로세스 중 "java"를 포함하는 프로세스의 PID만 찾되, grep로 시작하는 프로세스를 제외할 때 ps -ef | grep java | grep -v grep | awk ..
classpath 경로 지정 JVM이 클래스 파일을 찾는 경로를 지정할 수 있습니다. java -cp /path/to/classes com.example.MyApp 힙 메모리의 최대/최소 용량 지정 객체들이 저장되는 메모리 영역인 힙 메모리의 최대/최소 크기를 지정해줄 수 있습니다. application 성격상 알맞게 조절 할 수 있죠. java -Xmx512m -Xms256m com.example.MyApp 시스템 프로퍼티 설정 시스템에서 전역적으로 사용하는 값들을 지정할 수 있습니다. 자바의 System 클래스의 getProperty()메소드를 이용해서 그 값들을 받을 수 있습니다. java.version, os.name, path.separator 같은 것들이 대표적인 시스템 프로퍼티입니다. jav..
각종 지표의 계산법은 참고일 뿐 직접 계산할 필요 없이 HTS 등 기업정보에서 지표로 표시됩니다. ROE(자기자본대비이익률)로 고르기 ROE = (당기순이익 / 평균자기자본) X 100 종목 선정의 알파요 오메가는 ROE입니다. 높을수록 좋지만, 주가가 너무 높아지면 고평가 된 것입니다. 그러므로 HTS 등을 통해 ROE 대비 주가를 살펴봐야 합니다. EPS(주당순이익), PER(주가수익비율)로 고르기 EPS = 세후순이익 / 발행주식수 PER = 주가 / EPS 적정 주가 = EPS X PER 물론 주가가 적정 주가를 따르는 것은 아니지만 실제 주가와 비교해 보면 저평가된 것은 고를 수 있습니다. PER이 낮으면 저평가 된 것이므로 PER로만 골라도 됩니다. PER은 시장이 이 기업의 미래 가치를 평가..
자바 application에서 파일을 저장할 때 절대경로는 보통 사용하지 않고 상대경로를 사용합니다. System.property("user.dir")을 통해 현재 application이 실행되는 작업 디렉토리를 얻고 그 기반으로 생성되는 파일의 경로를 지정합니다. File.separator는 파일 경로를 생성 할 때 운영체제에 맞는 파일의 구분자를 자동으로 선택해 줍니다. public class DynamicFilePathExample { public static void main(String[] args) { // 현재 작업 디렉토리 확인 String currentDir = System.getProperty("user.dir"); // 파일 저장 경로 설정 (현재 작업 디렉토리 내의 example.t..
https://aacii.tistory.com/381 /var/cache 디렉터리의 용량 부족 리눅스 서버를 운영하다가 종종 /var/cache 디렉터리의 용량이 부족한 경우가 있습니다. 이럴 때 대처하는 방법을 소개합니다. 캐시 파일 확인 먼저 /var/cache 디렉터리 내의 파일 및 하위 디렉터리 blog.aacii.net /var 파티션이 용량이 부족한 관계로 디스크를 추가했습니다. CentOS 7에서 디스크를 추가하고 /var 파티션 용량을 확장해보겠습니다. 당연하겠지만 root 권한으로 작업해야합니다. su - 디스크 용량 확인 df -h 새 디스크 확인 새로운 디스크가 시스템에 제대로 인식되었는지 확인합니다. fdisk -l 리눅스에 설치된 디스크 목록을 확인합니다. /dev/sda1 /de..
Spring 개발을 위해 STS를 다운로드 후 압축을 풀다가 파일 경로가 260자 이상 제한에 걸려서 압축 풀기에 실패했습니다. 반디집 설정에도 260자 넘어도 압축이 풀리도록 설정되어 있는데도 실패했죠. 반디집은 환경설정 > 기타 항목에 있습니다. Windows 10 1607 버전부터는 NTFS 파일시스템에서 길이 제한을 늘릴 수 있습니다. 1. 윈도우 키 + R 키를 눌러서 gpedit.msc 를 입력해서 그룹 정책 편집기를 실행합니다. 2. 컴퓨터 구성 -> 관리 템플릿 -> 시스템 -> 파일 시스템 경로를 찾아 갑니다. 3. "Win32 긴 경로 사용"을 선택해 사용 상태로 바꿔줍니다. 4. cmd 명령 프롬프트를 열고 gpupdate 를 실행해서 그룹 정책을 업데이트 합니다. 그러면 STS 압축..
리눅스 서버를 운영하다가 종종 /var/cache 디렉터리의 용량이 부족한 경우가 있습니다. 이럴 때 대처하는 방법을 소개합니다. 캐시 파일 확인 먼저 /var/cache 디렉터리 내의 파일 및 하위 디렉터리를 확인하여 어떤 파일이 공간을 차지하고 있는지 확인합니다. du -sh /var/cache/* 용량 크기순으로 정렬된 목록이 나타납니다. 캐시 파일 정리 불필요한 캐시 파일이나 오래된 파일을 삭제하여 공간을 확보할 수 있습니다. sudo yum clean all 오래된 패키지 캐시를 삭제할 수 있습니다. 패키지 관리 도구 사용 시스템에서 사용하지 않는 패키지를 확인하고 삭제하여 불필요한 파일을 제거합니다. sudo yum autoremove 디스크 용량 확인 df -h
사전 준비 여기서는 리눅스(CentOS)에서 설치시 사용했던 oracle 계정으로 작업합니다. https://blog.aacii.net/277 CentOS 7 oracle 19c 설치 오라클 데이터베이스 19c 다운로드 https://www.oracle.com/database/technologies/oracle-database-software-downloads.html 파일: Linux x86-64 종류: zip 자신의 운영체제에 맞는 zip 파일을 다운로드합니다. 호스트 네임 등 blog.aacii.net 먼저 백업 덤프 파일이 저장될 디렉토리와 그 별칭을 생성해야 합니다. 안그러면 ORA-39002, ORA-39070, ORA-39087 에러 삼종 세트를 보게되실 겁니다. 여기서 dump 및 복원 시..
사용자 생성 먼저 새로운 사용자를 생성해야 합니다. CREATE USER 사용자이름 WITH PASSWORD '사용자패스워드'; 데이터베이스 생성 생성된 사용자가 사용할 새 데이터 베이스를 생성합니다. CREATE DATABASE 생성할데이터베이스이름; 사용자에게 권한 부여 GRANT ALL PRIVILEGES ON DATABASE 생성된데이터베이스 TO 생성된사용자이름; 사용자 스키마 생성 CREATE SCHEMA 생성할스키마 AUTHORIZATION 사용자이름; 확인 \du -- 사용자 목록 확인 \l -- 데이터베이스 목록 확인 \dn -- 스키마 목록 확인 이제 이 스키마를 사용하여 해당 사용자가 테이블, 뷰 등을 생성할 수 있습니다.
application 실행시 arguments 지정 방법 메뉴 바에서 "Run" 또는 "Debug"을 선택한 후, "Edit Configurations"을 선택합니다. 원하는 구성(예: Application)을 선택하고, "Configuration" 탭에서 "Program arguments" 섹션에 인수를 입력합니다. "Run/Debug Configurations" 대화 상자에서 "Program arguments" 필드에 직접 값을 입력할 수 있습니다 "Run/Debug Configurations" 대화 상자에서 "Environment variables" 섹션을 통해 환경 변수를 설정할 수 있습니다. Runnable JAR 파일로 export 방법 1. 프로젝트 설정 확인: 프로젝트가 메이븐(Maven)..
지정가 주문 원하는 종목과 수량과 가격을 모두 지정해서 내는 주문. 시장가 주문 원하는 종목과 수량만 지정하고 가격은 현재 시장가로 주문. 빠른 체결 가능한 방법 조건부 지정가 주문 지정가 주문을 냈다가 장마감 전 10분간의 동시 호가 시간에 시장가 주문으로 전환 최유리 지정가 주문 종목과 수량만 지정하고 가격은 최우선 매도호가나 최우선 매수호가로 지정되는 주문. 정규시간에 가능 최우선 지정가 주문 종목과 수량만 지정하고 가격은 최우선 매수호가나 최우선 매도호가로 지정되는 주문. 정규시간에 가능 조건부여 주문 IOC: 주문 수량중 체결할 수 있는 수량만 매매를 체결하고 매매되지 않은 수량은 취소. FOK: 주문 수량 전부에 대해 체결할 수 있는 경우만 매매하고 없으면 주문 수량 전부 취소.