Dev/Etc

    HikariCP Pool Locking 케이스 스터디

    HikariCP Pool Locking 케이스 스터디 HikariCP Deadlock 발생 케이스 및 해결방법을 정리한 내용입니다. Pool Locking 발생 예시 환경 (가정) Thead Count: 8개 MaximumPoolSize: 5개 한 쓰레드에서 생성되는 DB 커넥션 수: 2개 1) 모든 커넥션을 사용하는 상태 Pool에 Idle Connection이 없기 때문에 handOffQueue에서 5개 쓰레드가 대기 (※ C는 Connecting, W는 Waiting, T1~T8은 Thread) Connection Timeout이 되면 SQLTransientConnectionException 발생 Exception이 발생하면 Transaction이 Rollback되면서 Connection Pool에..

    트러블 슈팅 툴

    트러블 슈팅 툴 GC GCViewer IBM GC Analyzer Java VisualVM Java Heap Eclipse Memory Analyzer Java Decompiler Java Decompiler Thread Dump IBM Thread Dump Analyzer Thread Logic

    덤프파일 생성방법

    덤프파일 생성방법 Heap dump jmap은 JVM 프로세스의 heap 덤프를 생성하는 명령어이다. jmap -dump:format=b,file=`hostname`_dump.hprof $pid Thread dump jstack은 JVM 프로세스의 thread 덤프를 생성하는 명령어이다. jstack -l $pid >> `hostname`_thread_dump.txt CPU 사용량 (top) top은 실시간 리눅스 CPU, 메모리 사용량을 체크할 수 있는 도구이다. top -H -n 1 -p $pid >> `hostname`_cpu.txt 프로세스 스택 정보 (pstack) pstack은 프로세스의 스택 정보를 보여주는 명령어지만, 멀티 쓰레드 프로그램의 경우 쓰레드 별 스택 정보를 확인할 수 있어 쓰레..

    자가 서명 인증서 생성

    자가 서명 인증서 생성 인증서는 개인키 소유자의 공개키(public key)에 인증기관의 개인키(private key)로 전자서명한 데이터입니다. 모든 인증서는 발급기관(Certificate Authority: CA)가 있어야 하지만 자가 서명 인증서는 서명해줄 상위 인증기관이 없으므로 개인키로 스스로 서명하여 인증서를 만듭니다. 이렇게 스스로 서명한 CA 인증서를 Self Signed Certificate라고 합니다. 1. 개인키 생성 openssl genrsa -des3 -out example.key 2048 Generating RSA private key, 2048 bit long modulus (2 primes) .............................................++..

    정규표현식

    정규표현식 (Regular Expression) 정규 표현식은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다. 정규 표현식은 많은 텍스트 편집기와 프로그래밍 언어에서 문자열의 검색과 치환을 위해 지원하고 있다. 정규표현식 문법 .(dot): 1개의 문자 ?: 선행하는 문자가 0 또는 1 회만 매치한다. "a?b" ===> "ab", "b" *: 선행하는 문자가 0 회 이상 매치한다. "a*b" ===> "b", "ab", "aab", "aaab", ... +: 선행하는 문자가 1 회 이상 매치한다. "a+b" ===> "ab", "aab", "aaab", ... {n}: 선행하는 문자가 정확히 n번 매치한다. "a{5}b" ===> "aaaaab" {n, m}: 선행하는 문자가 ..

    콘솔 창 없이 배치파일 실행하는 방법

    run.vbs Set shellObj = CreateObject("Wscript.Shell") Dim command command = "cmd /c file_name.bat" shellObj.Run command, 0, false run.vbs 파일을 생성하고 실행하면 file_name.bat이 콘솔 창 없이 실행된다.

    메소드 체이닝 (Method Chaining)

    OOP에서 여러 메소드를 이어서 호출하는 문법입니다. 메소드가 객체(this)를 반환하여 여러 메소드를 순차적으로 선언할 수 있도록 합니다. 메소드 체이닝을 이용하면 코드가 간결해져 하나의 문장처럼 읽히게 할 수 있다는 장점이 있고 장기적으로는 유지보수에 도움이 됩니다. 예시 아래에 메소드 체이닝을 적용한 가상의 DBConnector 클래스를 구현하였습니다. 클래스 (DBConnector - Javascript) class DBConnector { constructor(host, port, user, passwd) { this.host = host; this.port = port; this.user = user; this.passwd = passwd; } setHost(host) { this.host =..

    테스트 주도 개발 (TDD: Test Driven Development)

    TDD란? TDD는 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나입니다. 우선 개발자는 요구되는 새로운 기능에 대한 자동화된 테스트케이스를 작성하고, 그 후에 해당 테스트를 통과하는 가장 최소한의 코드를 작성합니다. 마지막으로 상황에 맞도록 리팩토링합니다. TDD 과정 1) 테스트를 추가한다 테스트 주도 개발에서는 새로은 기능 개발을 시작할 때 테스트를 작성하는 것으로 시작합니다. 이 때, 개발자는 기능의 사양과 요구 사항을 명확하게 이해해하고 테스트를 작성하여야 합니다. 2) 모든 테스트를 실행하고 새로운 테스트가 실패하는지 확인한다 요구되는 사항이 이미 존재하여 새로운 테스트를 통과하는 가능성을 배제하기 때문에 새롭게 추가한 테스트는 새로운 코드가 없이는 통과하지 못할 것입니다...

    WEB서버와 WAS 비교

    WEB 서버 WEB 서버는 클라이언트로 부터 HTTP요청을 받아들이고 반응하는 역할을 합니다. 주로 정적 컨텐츠(이미지, 비디오, HTML)를 서비스합니다. 대표적으로 Apache, Nginx가 있습니다. WAS WAS(Web Application Server)는 동적 컨텐츠를 서비스한다는 점에서 일반 WEB 서버와 구별됩니다. 주로 동적인 컨텐츠를 다루기 때문에 데이터베이스와 같이 수행됩니다. 프로그래밍 언어를 읽고 처리하기 때문에 동적으로 HTTP 문서를 만들어 클라이언트의 다양한 요구에 맞춰 웹 서비스를 제공할 수 있습니다. Tomcat, JBoss 등이 WAS에 해당됩니다. WEB - WAS 실행흐름 Client에서 요청이 들어오면 WEB서버는 무엇을 요구하는지에 따라 다른 행동을 취합니다. 정적..