Postgresql Idle in transaction
2024. 3. 14. 18:10
데이터 엔지니어링/Database
다음 명령어를 통해 postgresql 의 활성화되어있는 프로스를 확인해보면 Idle in transaction 상태가 보인다. select * from pg_stat_activity; 찾아보니 이런 경우는 postgresql 에 transaction 이 잡혀있지만 아무런 동작도 하지 않으면 idle in transaction 상태가 된다고 한다. 이런 경우가 많이 발생하게 되면 connection 은 잡고있지만 아무것도 하지 않게 되어 리소스가 낭비된다. 이러한 문제를 해결하는 방법 중 하나는 다음과 같이 수동으로 해당 프로세스의 connection 을 terminate 해주어야 한다. terminate 를 할 때에는 process id 인 pid 를 가져와 terminate 를 실행하면 된다. sel..
Pyspark Window function
2024. 3. 14. 16:48
데이터 엔지니어링/Spark
Pyspark 에서 Window 함수를 사용해 rank 나 row number 등과 같은 결과를 계산할 수 있다. 직접 사용해보았지만 제대로 이해하고 사용하고 있는 것 같지 않아서 정리해보려고 한다. Window Functions Pyspark window 함수는 frame 과 partition 과 같은 행(row) 의 그룹에서 입력된 모든 row 를 하나의 값으로 반환한다. Window 함수의 핵심은 여러 개의 row 를 하나의 값으로 사용한다는 것이다. Pyspark window 함수는 3가지 종류의 함수로 구분된다고 한다. Ranking Functions Analytic Functions Aggregate Functions 아래의 테이블은 Window Functions 를 정리한 함수들이다. 참고하..
0. jekyll 초기 설정 및 준비
2024. 2. 25. 18:16
기타/Github Blog
블로그에 글을 작성하면서 뭔가.. 나만의 wiki 를 한번 만들어볼까? 하는 생각에 그럼 github 블로그에 정리해보자! 라는 생각이 들어 github 블로그를 만들어봐야겠다는 생각이 들었다. 처음에는 테마를 받아서 적용시켜보려고 하는데 원하는 기능을 추가해주어야 했고 이럴거면 내가 원하는 테마에 맞게 블로그 테마를 만들어서 적용해보자는 생각이 들었고 그렇게 jekyll 을 사용해보자는 생각이 들었다. 그래서 이렇게 블로그를 만들기 위한 준비 단계를 정리해봤다. 추가) 만만치 않은 작업이 될 것 같아서.. 중간에 포기.. ㅎㅎㅎ 글을 정리하려다가 블로그 만드는데 시간이 더 들 것 같은.. ㅎㅎㅎ 사전 준비 ruby 설치하기 brew install ruby ruby 설치 결과 확인 $ ruby -v ru..
메모리 단편화 (Memory Fragmentation)
2024. 2. 18. 18:34
컴퓨터 과학/개념정리
메모리를 공부하면서 메모리 단편화에 대해서 알게 되었다. 그래서 추가적으로 메모리 단편화가 무엇인지 정리해보려고 한다. 메모리 단편화가 무엇인가 RAM 에서 메모리의 공간이 작은 조각으로 나누어져 사용가능한 메모리가 충분히 존재하지만 할당이 불가능한 상태를 메모리 단편화라고 한다. 메모리 단편화는 2가지로 구분할 수 있다. 내부 단편화 (Internal Fragmentation) 외부 단편화 (External Fragmentation) 내부 단편화 (Internal Fragmentation) 내부 단편화란 메모리를 할당할 때 OS 에서 할당한 메모리 공간보다 프로세스가 더 적은 공간을 사용해서 낭비되는 상태를 말한다. 예를 들어, 10MB 의 메모리 크기가 주어졌는데 실제 프로세스는 5MB 만 사용하는 ..
메모리 구조 (Memory Structure)
2024. 2. 18. 17:27
컴퓨터 과학/개념정리
디스크에 저장되어있는 프로그램을 실행하게 되면 프로그램에 대하 정보를 읽어와 메모리에 로드하게 된다. 그럼 메모리에 어떻게 적재되고 어디에 적재되는가에 대해서 정리해보자. 먼저 메모리는 다음과 같이 4개의 영역으로 구분된다. 그럼 각 영역이 어떤 역할을 하는지 알아보자. 코드(Code) 영역 코드 영역에는 우리가 작성한 코드가 저장된다. 이때 컴파일이 완료된 상태의 코드(0과 1로 이루어진 기계어)가 할당된다. 예를 들어, 코드 내에 있는 함수나 조건문, 상수 와 같은 코드들이 컴파일되어 메모리에 할당된다. 따라서 CPU 가 작업을 수행할 때 코드 영역에 있는 명령어들을 가져가 실행하게 된다. 데이터(Data) 영역 데이터 영역에는 전역 변수(global) 와 정적 변수(static) 가 할당된다. ma..
Postgresql auto increment 적용하기
2024. 2. 16. 19:13
데이터 엔지니어링/Database
Mysql 에서는 auto_increment 라는 속성을 부여해주면 자동으로 증가하게 만들어줄 수 있다. Postgres 에서는 auto_increment 라는 속성을 부여할 수 없기 때문에 다른 방법을 통해서 증가하게 만들어주어야 한다. 그래서 postgres 의 auto increment 에는 어떤 방법들이 있는지 정리해보려고 한다. Sequence 객체를 사용해서 auto increment 하기 postgres 에는 Sequence 라고 하는 number generator 가 있다. 더 쉽게 말해서 순차적인 값을 생성해주는 객체라고 생각하면 된다. Sequence 는 다음과 같이 명령어를 통해 생성할 수 있다. CREATE SEQUENCE seq_user_id INCREMENT 1 START 1 M..
Spark explode() 함수 사용시 주의할 점
2024. 2. 11. 18:16
데이터 엔지니어링/Spark
spark explode() 함수는 리스트 타입의 컬럼에서 각각의 element 를 하나의 row 로 펼쳐주는 기능을 한다. explode() 함수의 사용 방법에 대해서는 다음과 같이 이전에 정리해두었다. https://jaynamm.tistory.com/entry/Spark-explode-%EC%82%AC%EC%9A%A9%ED%95%B4%EC%84%9C-List-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EB%A6%AC%ED%95%98%EA%B8%B0 Spark explode() 사용해서 List 로 된 컬럼을 행으로 분리하기 Spark Dataframe 에 다음과 같이 리스트 형태로 들어간 컬럼이 있을 것이다. scala> val df = Seq(("Nam", List("A"..
프로그램과 프로세스의 차이
2024. 2. 11. 17:04
컴퓨터 과학/개념정리
CS 를 다시 공부하면서 프로그램과 프로세스에 대해서 정확히 설명하지 못했고 (반성하자) 프로그램과 프로세스의 차이에 대해서 제대로 알고 있지 않다는 생각이 들어 제대로 이해하고자 공부한 내용을 정리해보려고 한다. 프로그램 (Program) 프로그램이란 흔히 소프트웨어라고 하는 애플리케이션들을 말한다 예를 들어, 카카오톡이나 계산기 등을 프로그램이라고 할 수 있다. 조금 더 자세하게 설명하자면 컴퓨터가 실행할 수 있는 명령의 집합이자 Disk 에 저장되는 정적인 엔티티라고 할 수 있다. 변함없이 디스크에 저장되어있기 때문에 정적이라고 표현한다. 프로세스 (Process) 프로세스란 프로그램의 실행을 의미한다. 따라서, 동적인 엔티티라고 할 수 있다. 프로세스는 프로그램이 실행될 때 운영 체제에 의해 생성..