
생각의 흐름
2024년 회고
2025년이 된 지 약 한 달이 지났지만, 2024년 회고를 하고자 한다.2024년엔 많은 일들이 있었지만, 개발과 관련된 이야기를 위주로 회고를 해보도록 하겠다. 취업취업을 했다. 가고 싶은 서비스 기업은 아니었지만, 현재 취업시장에서 모든 조건을 충족시켜 취업하기엔 무리라는 생각이 들었다.실제로 취업을 한 후 취업 시장이 더 안좋아져 취업을 선택한 것이 좋은 선택이 되었다고 생각한다.또한, 면접경험이 나에게 긍정적으로 다가왔다. 면접 질문 및 태도가 몇몇 사람에겐 부정적으로 다가갈 수도 있었다고 생각했지만, 입사 후에 많은 것을 배울 수 있다고 생각했기 때문이다.길고 긴 취준 생활을 거쳐, 4월에 취업에 성공했다. 취업 후 느낀 점취업을 한 후 대학생 및 취준생일 때는 생각하지 못한 많은 것들을 경험..
Deadlock in Oracle with Insert query
이번글은 Oracle Insert 시 발생하는 데드락 문제 분석과 해결 방안에 대해 작성해보았습니다.데드락이 발생한 상황 가정상품(Product)과 사은품(Gift) 두 개의 테이블이 있다고 가정해 보겠습니다.여기서 상품 테이블의 기본 키(PK)는 사은품 테이블의 기본 키(PK)이자 외래 키(FK)로 설정되어 있으며, 상품 테이블의 PK는 시퀀스(sequence)를 통해 생성됩니다.상품 및 사은품 Insert 쿼리는 다음과 같은 흐름으로 이루어집니다.아래 흐름은 하나의 트랜잭션에서 동작합니다.상품 sequence의 LAST NUMBER로 return_id를 지정상품 insert. PK는 sequence의 NEXT_VAL로 지정한다.1)에서 return_id를 가져와 사은품의 PK로 지정하여 insert...

Connection Pool
웹 애플리케이션에서 데이터베이스와 연결을 맺을 때마다 Conenction을 생성한다면 많은 비용이 들뿐만 아니라, Connection 관리를 직접해줘야 되는 단점이 존재한다.이를 해결하기 위해 Connection Pool을 사용하는데, 여러 오픈 소스 라이브러리가 존재한다.(Apache Commons DBCP, Tomcat-JDBC, HikariCP)또한, Connection Pool을 적절히 사용하기 위해선 구조와 원리에 대해 알고 있어야 한다.사내에서 Apache Commons DBCP사용하므로 이에 대해 알아보자.Commons DBCP 속성 설정initialSize : 최초 시점에 getConnection() 를 통해 커넥션 풀에 채워 넣을 커넥션 개수 (default = 0)maxTotal (1...
추상 팩토리 패턴과 전략패턴 활용
데이터베이스 모니터링 아키텍처를 설계 중 여러 데이터베이스의 Collector, Loader를 사용하기 위해 추상 팩토리 패턴, 전략패턴을 활용하여 아키텍처를 설계해보았습니다.추상 팩토리 패턴객체 생성 패턴 중 하나로, 관련된 객체들을 하나의 팩토리(Factory)에서 생성하도록 하는 디자인 패턴입니다.객체 생성에 대한 구체적인 클래스를 감추고, 상위 인터페이스만을 통해 객체를 생성함으로써 코드의 유연성과 확장성을 높이는 데 도움이 됩니다.추상 팩토리public interface MonitoringFactory { Collector createCollector(); Loader createLoader();}public class OracleMonitoringFactory implements Monit..
blkid를 활용하여 Mount시 Volume 고정하기
AWS에서 인스턴스에 EBS를 여러 개 연결하면 Mount 시 EBS의 파일 크기가 작은 순으로 할당되는 것을 막기 위해, blkid 명령어로 EBS의 UUID를 얻어 Mount 시 EBS 연결을 UUID를 통해 할당되게 만들 수 있습니다./etc/fstab 파일에 마운트할 디스크나 블록 디바이스의 파일 시스템 명( /dev/sda1 등)을 적는 것보다 UUID를 적는 것이 더 유리합니다.blkid란?blkid는 디스크 블록 장치의 파일 시스템 종류와 함께 파일 시스템의 UUID 값을 출력합니다. 이 UUID 값은 이후 파일 시스템을 시스템에 자동 마운트하는 과정에서 사용됩니다.파일 시스템 생성아래 명령어를 사용하기 위해서는 파일 시스템을 디스크 블록에 먼저 생성해야 합니다.mkfs.xfs -f /dev..
JNI 사용하기
JNI(Java Native Interface)는 자바와 Native Code(C,C++)를 연결하는 데 사용되는 프레임워크이다. JNI를 통해 자바 Application에서 Natice Library를 호출하거나, Native Application에서 Java Method를 호출 할 수 있다.이를 통해, 성능 향상, 기존 Native Library 재사용을 할 수 있다.자바에서 사용하는 방법Native method자바는 Method 구현이 native code에서 제공될 것임을 나타내는데 사용되는 native keyword를 제공한다.공유 라이브러리 : Java 코드 내에서 라이브러리에 대한 참조만 있다. 실행 파일을 실행하는 환경이 프로그램에서 사용하는 libs의 모든 파일에 액세스 할 수 있어야 한..

Oracle Process
DB Process & ThreadOracle ProcessProcess는 OS에 따라 달라진다오라클 프로세스는 오라클 데이터베이스 코드를 실행하는 실행 단위입니다. Process Architecture (oracle.com)Multiprocess and MultiThread데이터베이스와 애플리케이션의 작업을 여러 프로세스로 나누면 여러 사용자와 애플리케이션이 동시에 인스턴스에 연결할 수 있으며 시스템 성능도 향상됩니다.쓰레드 모드로 사용하면 일부 프로세스들을 OS 프로세스로 실행 가능하다.Oracle Process ≠ OS Process종류Client Process : Application 또는 Oracle Tool 을 실행시킨다.SQLPlus을 실행시킬 시 OS는 Client Process를 실행시킨..
![[프로그래머스 문제풀이]2024 KAKAO WINTER INTERNSHIP 산 모양 타일링](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDDPyI%2FbtsFXceEIWP%2FireIw9jr3CkKQIZH5aQtv0%2Fimg.png)
[프로그래머스 문제풀이]2024 KAKAO WINTER INTERNSHIP 산 모양 타일링
보자마자 DP문제다. DP문제는 점화식을 세워야 한다. 가로의 길이는 2*n+1이므로 현재 위치에서 어떤 타일을 사용해서 모양을 완성시킬 수 있는가에 대해 알아보자 가로로 타일을 채워갈 때 크게 두 가지로 나눌 수 있다. 타일을 정삼각형으로 쌓아야 하는 경우, 역삼각형으로 쌓아야 하는 경우다. 현재 위치가 x일 때, 삼각형 하나만 사용하는 경우엔 가로로 한 칸을 채울 수 있다. 따라서, dp [x] += dp [x-1] 마름모 타일이 서있지 않는 경우, 둘 다 가로로 두 칸을 채울 수 있다. 따라서 , dp [x] += dp [x-2] 마지막으로 마름모 타일을 돌려 높이가 1인 경우다. 이땐 현재 위치에서 타일을 정삼각형으로 쌓아야 하는 경우, 현재 위치보다 한 칸 앞의 타일의 높이가 1인 경우이다. 따..