본문 바로가기
반응형

개발 이야기129

Neo4j를 docker-compose로 띄워보기 Neo4j는 Graph Database로, 데이터 간의 관계를 저장하고 탐색하는 데 최적화되어 있습니다.2024년 Graph Database에서 1위를 고수하고 있습니다. 그래프 데이터베이스는 관계형 데이터베이스(RDBMS)와 다르게 노드(Node), 엣지(Edge), 속성(Property)으로 구성된 그래프 구조를 사용하여 데이터를 구성합니다. 해당 포스팅에서는 docker-compose를 사용하여 Neo4j를 구성해봅니다. 목차1. docker-compose.yml 구성services: neo4j: container_name: neo4j-boot image: neo4j:5.22.0 ports: - 7474:7474 # for browser console - 768.. 2024. 7. 30.
Springboot 에서 Gzip으로 압축(with Kotlin) Gzip은 파일이나 데이터를 압축하기 위한 소프트웨어 기술을 의미합니다.간혹 .tar.gz이란 포맷을 가진 파일을 볼 수 있는데 여기에 사용된 압축 기술도 Gzip입니다.압축률이 준수하고, 속도도 빨라서 웹 환경에서도 자주 사용되곤 합니다. 이번 포스팅에서는 Springboot 프로젝트에서 Gzip을 사용한 압축/압축해제 하는 방법을 정리합니다. 목차1. 압축 하기아래와 같이 코드를 작성해줍니다.import java.io.BufferedReaderimport java.io.ByteArrayInputStreamimport java.io.ByteArrayOutputStreamimport java.io.InputStreamReaderimport java.util.*import java.util.zip.GZIP.. 2024. 7. 6.
AWS S3 타계정의 버킷 업로드 시 BucketOwnerFullControl 설정 목차1. 서로 다른 AWS 계정에서 업로드 시 객체 소유권S3 버킷에 파일 객체를 업로드할 때, 버킷 생성 AWS 계정과 동일한 계정이라면 특별한 문제가 발생하지 않습니다. 그러나 다른 계정 간에 S3 버킷에 파일을 업로드하는 경우, 해당 객체에 대한 접근 권한 설정이 복잡해질 수 있습니다.이는 아래와 같은 AWS S3 소유권 정책 때문입니다.  2. AWS 콘솔을 통해 버킷 정책 변경아래와 같이 AWS 콘솔에 접근하여 버킷의 정책을 변경해줍니다.이는 애플리케이션 측에서 bucket-owner-full-control를 설정하여 객체를 업로드할 때해당 객체의 소유자를 버킷 소유자로 합니다.  3. 의존성 추가Springboot에서 S3 업로드 및 조회를 하려면 라이브러리 의존성을 먼저 추가해줘야합니다.//.. 2024. 6. 6.
DTO에서 LocalDateTime 유효성 체크와 에러핸들링 방법 이번 포스팅에서는 실무에 많이 사용되는@RequestBody로 선언된 DTO의 LocalDateTime 활용시, 참고 할만한 정보를 소개합니다.목차먼저 제 피씨 환경은 아래와 같습니다.Springboot 3.1.4Java 17Kotlin 1.8.22IntellijLocalDateTime 타입의 날짜 포맷 허용 범위는?아래와 같은 데이터 클래스가 있습니다.data class MemberRequestDto( val id: Long?, val name: String, val email: String, val age: Int, val createdTime: LocalDateTime,) LocalDateTime의 Document를 봅시다.A date-time without a time-.. 2024. 6. 1.
JdbcTemplate로 batchUpdate 사용해보기 목차1. BatchHelper 클래스아래와 같이 jdbcTemplate을 인자로하는 헬퍼 클래스를 하나 만들어 줍니다.import org.springframework.jdbc.core.BatchPreparedStatementSetterimport org.springframework.jdbc.core.JdbcTemplateimport java.sql.PreparedStatementobject BatchHelper { fun executeBatchUpdate( jdbcTemplate: JdbcTemplate, sql: String, list: List, setter: (ps: PreparedStatement, i: Int) -> Unit ) { .. 2024. 5. 28.
[독서]도메인 주도 개발 시작하기 목차요즘 부쩍 독서에 취미 붙이는 것이 삶을 살아가는데 있어 중요하다는 생각을 했습니다.그리고 IT 또는 회사 생활 등 여러 카테고리의 책을 읽는 것을 습관화 하려 마음 먹었습니다.어떤 책을 읽어볼까 고민하던 찰나에언제 사놓은지 기억도 가물가물한 "도메인 주도 개발 시작하기"를 발견했고주말에 무작정 카페에 가 읽었습니다. 여러 IT도서들과 마찬가지로 개발자로서 업무 경력이 있으면 읽기 수월한 것 같았습니다.특히 스프링 개발 경험이 있다면 이해가 쉽고놓치고 있었거나 실무에 도움되는 내용들을 되새김질 할 수 있었던 것 같습니다. 이번 포스팅에서는 "도메인 주도 개발 시작하기" 도서를 읽고 느낀점을 정리해봅니다.1. DDD(Domain Driven Design) 개념의 등장 DDD는 도메인 기반 디자인을 뜻합.. 2024. 5. 7.
Crontab OS별 사용 방법 정리 목차리눅스에서 crontab 표현식(* * * * * 등)은 OS 별 차이가 없지만설치 또는 시작 명령어는 일부 차이가 있습니다. 이번 포스팅에서는 crontab 사용방법을 정리합니다.1. 설치1-1. OS 확인cat /etc/*release*Ubuntu나 CentOS의 경우 위와 같은 명령어로 확인 할 수 있습니다.cat /etc/issue만약 안되면 위 커맨드로 해봅니다. 1-2. OS 별 설치# CentOSsudo yum update -ysudo yum install -y cronie# Ubuntusudo apt update -ysudo apt install -y cron  2. 편집# editcrontab -e# listcrontab -l*      *      *      *      * 분(0.. 2024. 5. 7.
자주 쓰는 DB Command와 Query 해당 포스팅에서는 현업에서 자주 사용하는 DB 커맨드 및 쿼리를 정리합니다.DB는 Mysql기준입니다. 보통 개발 DB나 로컬 DB에서 실행하겠지만...그게 아니라면 주의해서 실행하도록 합시다.목차1. 사용자 생성 및 권한 설정-- 사용자 계정 생성CREATE USER 'my_name'@'%' identified WITH mysql_native_password BY 'my_password';-- 특정 Database에 대한 모든 권한 지급GRANT ALL PRIVILEGES ON dbname.* TO 'my_name'@'%';-- Read 권한만 지급GRANT select ON dbname.* TO 'my_name'@'%';-- CRUD 권한 지급GRANT select, insert, update, de.. 2024. 5. 3.
[독서] 대규모 서비스를 지탱하는 기술 이번 포스팅에서는 "웹 개발자를 위한 대규모 서비스를 지탱하는 기술"을 읽은 후기를 작성하고자 합니다.웹 개발자로 근 10년 근속했지만, 대규모 서비스 개발에 참여한 적 있냐고 물어본다면자신있게 말할 수 있는 경험이 없습니다.사실 그런 경험은 제가 선택하기 어려운 부분이기도 했습니다.직접 경험이 아닌 책을 통한 간접 경험도 나름의 가치가 있을 거라고 생각해서 이 책을 읽게 되었습니다.책에서 얻은 경험을 언젠가 써먹을 일이 있지도 않을까하여...😯  목차1. 얻게 된 깨알 지식이 책은 대규모 서비스에 필요한 깨알 지식이 포함되어 있습니다.탐색 속도 측면에서 Memory는 Disk에 비해 10만~100만배 이상 빠르다.SSD는 물리적 회전의 HDD보다 훨씬 탐색이 빠르다.부하에는 크게 CPU, IO 두가지.. 2024. 4. 13.
Kubernetes ConfigMap with Springboot 현업에서 Kubernetes 환경에 서버를 띄운다면Configuration의 외부화는 필수적입니다.당장에 생각나는건 아래와 같은 측면에서 유리하다고 볼 수 있을 것 같습니다.민감 정보에 대한 보안 유지환경마다 다른 변수와 애플리케이션 코드 디커플링빠른 로컬 환경 구성이번 포스팅에서는 쿠버네티스의 ConfigMap을 활용하여애플리케이션의 환경변수를 외부화 하는 방법을 정리합니다. 목차1. 기본 사용법# configmap.ymlapiVersion: v1kind: ConfigMapmetadata: name: api-server-configdata: DATASOURCE_USERNAME: "root" DATASOURCE_PASSWORD: "1234"먼저 ConfigMap은 위와 같이 구성해 볼 수 있습니다... 2024. 4. 10.
Telepresence 사용해보기 Telepresence는 MSA구조의 프로젝트에서 애플리케이션을 로컬에서 개발하기 위한 도구입니다. 개발자들이 Kubernetes cluster에서 서비스를 로컬 컴퓨터에서 실행하여 디버깅 및 테스트를 쉽게 할 수 있게 합니다.즉, Cluster내에서만 접근 가능한 마이크로 서비스들을 로컬에서 쉽게 접근 할 수 있습니다.이번 포스팅에서는 Telepresence로 로컬에 설치된 Kubernetes Cluster(Minikube) 연결해보겠습니다.목차1. Telepresence 설치설치는 공식 홈페이지에 있는 문서를 참고하면 됩니다. 저는 Mac(M2) 랩탑이라서 아래와 같이 설치해줬습니다.# 다운로드~ sudo curl -fL https://app.getambassador.io/download/tel2o.. 2024. 4. 3.
Kubernetes CronJob 실행 해보기 CronJob은 특정 잡을 주기적으로 실행 시킬 때 사용합니다.주기적으로 파드를 띄워 프로그램을 실행/종료를 반복합니다.이번 포스팅에서는 간단한 Cronjob을 실행해봅니다.목차1. cronjob.yml 작성apiVersion: batch/v1kind: CronJobmetadata: name: hellospec: schedule: "* * * * *" jobTemplate: spec: template: spec: containers: - name: hello image: busybox args: - /bin/sh - -c - date; echo.. 2024. 3. 30.
반응형