개발메모
-
# DB time zone 다루기개발메모 2025. 4. 1. 12:16
회사에서 생성한 postgresql의 timestamp timezone이 UTC (국제표준시)로 되어있다. 하지만 사용자는 한국에서 데이터를 등록 및 조회하기 때문에 UTC로 보이게 되면 많은 혼동이 생기게 된다.사실 DB 생성 시에 time zone을 바꾸면 되기는 하지만,모종의 이유로 할 수 없을 경우를 대비해 UTC -> KST로 변경하는 법을 알아보자.(이걸 하게 되면 다른 시간대도 OK) 우선 JVM 전역에서 동작할 TimeZone을 다루는 컴포넌트를 만들자.import jakarta.annotation.PostConstructimport org.springframework.stereotype.Componentimport java.util.TimeZone@Componentclass TimeZon..
-
# apache POI 라이브러리 사용과 엑셀 row 빈 값개발메모 2025. 3. 31. 23:39
이전에는 경험해보지 못한 오류를 맞이하게 되었다. POI로 업로드한 엑셀을 파싱할 때,어떤 파일은 문제없이 업로드가 처리 되고, 어떤 파일은 오류가 발생한 것이었다. 두 파일은 row 수 만 차이가 있었을 뿐, 필수값 입력 및 데이터 형식에 문제가 없었다.그래서 파일을 작성한 작업자에게 업로드 전의 상황을 확인해 보니,정상 업로드 된 엑셀 파일에 새로운 데이터를 덮어쓰는 과정에서새로 등록한 데이터의 row 수가 기존 데이터의 row 수보다 적어서 복붙 후 남은 기존 데이터 row를 수동으로 지웠다고 했다.그 부분이 미심쩍어서 찾아보니,엑셀 프로그램은 새로 시트를 생성 후 row에 한번도 데이터를 입력한 적이 없다고 하면, 해당 row는 void-존재하지 않는- row로 간주하고, 한 번 이라도 값을 입력..
-
# DB PK Index 생성 속도 저하 이슈 (postgreSQL)개발메모 2025. 3. 24. 22:28
회사에서 엑셀 업로드로 데이터를 등록하면서 생긴 일이다.엑셀 업로드를 진행함에 있어 속도 저하가 너무 심했던 것. 많은 원인을 분석 해봤다. - 엑셀 row를 읽어 들이는 반복문에 쓸데 없는 조건이나 반복이 중첩되나? -> 없음- 기준정보 데이터를 DB에서 불러오는 과정에서 누수가 발생할 쿼리가 존재 하는가? -> 없음- 혹시 개발용으로 생성한 DB 인스턴스의 리소스가 너무 박한가? -> 원인은 아니었음. 그럼 무엇이었을까.해당 프로젝트는 Spring boot + JPA를 사용하고 있었기에Hibernate 옵션에서 SQL DDL을 로그에 표시하도록 설정을 변경 하고 엑셀 업로드를 다시 진행 했다.그랬더니..만약 500건이라고 치면, PK Index를 500건의 인서트가 발생 할 때마다 생성하는 쿼리가 조..
-
# AWS ECS 구성하기개발메모 2025. 2. 17. 10:33
회사에서 사용해야 하는 일이 생겼다.이번 회사는 인프라를 스스로 구축해야 했기 때문에 하나하나 GPT와 함께 진행했다.지금 기재하는 내용은 내가 필요했던 사항들에 대한 개요로 작성했다.추가되거나 변경될 수 있는 여지가 있는 부분들은 별도 포스트에 기재할 예정이다. ECS 구성 전에 현재 상황- github로 형상관리- spring + kotlin 프로젝트 3개 (spring gateway 1, spring boot 2)- postgreSQL rds 사용- redis cache 사용 구현하고자 하는 아키텍쳐...는 좀 과하지만 인프라 구조- 3개의 프로젝트는 같은 보안체계 안에서 구동- spring gateway는 외부(클라이언트, 프론트)에서 요청을 받아 나머지 spring boot에 전달한다.- spr..
-
# 외부 DNS 도메인 AWS alb 연동개발메모 2025. 2. 11. 17:47
aws route 53으로 DNS를 구성해 사용하는 방법도 있으나,이미 회사 도메인을 별도 DNS로 구매했기 때문에 어쨌든 연동할 필요가 생겼다.작업 전 기반 사항- ECS 구축- ECS에 연결된 ALB- 도메인 연결 전에는 SSL 등록 없이 ALB의 DNS로 사용. (대신 내부에서만 사용..)- DNS 도메인 구매 및 인증서 발급 위 기반사항에 대한 내용은 추후에 다루기로 하고,일단 오늘은 외부 DNS에서 발급한 도메인에서 파생된 서브도메인을 AWS서비스와 연결하는 방법을 기재 하겠다. 작업 순서를 적으면 다음과 같다 1. DNS에서 발급한 인증서를 ACM에 등록2. ALB의 리스너 규칙에 HTTPS 추가3. ALB의 보안그룹에 HTTPS 인바운드 규칙 추가4. ALB 리스너의 대상그룹의 상태검사 프로..
-
# AWS ElastiCache 사용하기개발메모 2025. 2. 6. 14:13
# 클라우드 인프라를 한번도 구성해 본 적 없이 처음 세팅 해보게 되었다# 처음에 VPC, SubNet등 개념을 몰라서 삽질을 많이 했었다.# 해당 내용은 정말 기본 적인 ElastiCache를 설정하는 방법에 지나지 않고, 네트워크 보안등의 추가 작업이 필요. Elasticache (valkey) 설정1. VPC 설정 1. 기본 VPC 사용 2. 별도 VPC 설정 1. VPC 생성 1. AWS console > VPC 검색 2. VPC 생성 클릭 1. 이름, IPv4 CIDR 블록 세팅. 나머지는 기본설정 유지 2. subnet 생성 1. VPC에서 서브넷 메뉴 ..
-
# shell 파일 명령어(프로세스 종료)개발메모 2025. 2. 4. 08:46
개발이나 개인 로컬에서 스프링 프로젝트 빌드 시,매번 프로세스 찾아 죽이고 다시 살리는 방식이 너무 귀찮았다.(사실 젠킨스나 도커를 이용하면 될테지만, 재래식 개발자라..) 무튼 그에 대한 간단한 메모 #!/bin/bash# 종료할 프로세스의 이름 (예: myapp)PROCESS_NAME="myapp"# 프로세스 ID 확인PID=$(pgrep -f "$PROCESS_NAME")if [ -n "$PID" ]; then kill -9 "$PID" echo "프로세스 종료 완료."else echo "프로세스 ($PROCESS_NAME) 실행 중이지 않음."fi#빌드 및 실행 명령어...
-
# 맥북 명령어 끄적끄적개발메모 2025. 1. 3. 11:10
mv : 파일 이동 및 이름 변경# 파일 이동mv {이동하려는 파일명(경로 포함 가능)} {이동하고자 하는 경로}# 이름 변경mv {기존 파일명} {변경 파일명} open : 해당 경로 파인더 실행 또는 파일 실행# 파인더 실행open .# 특정 파일 실행 (pdf)open {파일이름} ++ intellij 터미널 실행터미널 실행 설정 여부 확인 intellij 직접 설치의 경우)상단의 Tools > Create Command-line Launcher.. 에서 환경 변수 등록 jetbrain toolbox 설치의 경우jetbrain toolbox > 설정 > 도구 > 셀 스크립트 생성 활성화 설정 완료 후 터미널에서 실행. # 기본 실행 명령어idea# 특정 경로 지정 실행idea {프로젝트 경로}