전체 글 148

Git 원격 저장소 성능 유지하기 (feat - Git 크라켄 성능 최적화)

개요 협업을 하면 가장 많이 사용할 git 명령어 중 pull, push의 속도가 현저히 느려짐을 체감했다. 아무래도, 여러 게임들이 하나의 프로젝트에 들어가기도 했고, 브랜치를 머지 후에 삭제하는 옵션을 적용안시켰기 때문에, 사용하지 않은 브랜치가 계속 쌓이고 있었다. 원격 저장소 뿐만 아니라, 사용하고 있는 Git 크라켄의 최적화에 대해서도 정리하였다. 1. git gc 명령어를 이용한다. garbage collect을 이용하여, 저장소를 효율적으로 관리한다. 자세한 설명은 아래 링크 참조 https://git-scm.com/docs/git-gc (깃 공식 Doc) ## 깃 크라켄 내 터미널에서는 사용 불가 -> git bash 이용 추천 GC 하려는 폴더로 이동 git gc 명령어 또는 git gc..

개발자가 반드시 알아야하는 데이터베이스 - NOSQL vs RDBMS 간단 정리 feat Redis

개요사내에서 분산환경에서 데이터 저장소 선택과 활용이라는 강의를 들었는데, 굉장히 유용한 강의였고, 블로그거리가 많아서 좋았다 ㅋㅋ해당 강의에 대한 요약을 앞으로 2편정도 더 올릴 생각이다.오늘은 강의 초반내용인 RDBMS와 NOSQL의 특징 및 차이에 대해서 아주 간단하게 다뤄본다.RDBMS장점Relation 기반 높은 신뢰성 비교적 높은 성능 비교적 다양한 기능 관리편의성단점비용이 높음Schema 변경 어려움커질수록 느려진다확장성 부족 (처음 시작은 단일 장비 기준으로 만들어짐)NOSQL장점관계없는 데이터 처리에 최적화높은 확장성을 가지는 경우 많음Schemaless단점제한적인 일관성Join, Transaction 미지원관리비용이 큰 경우 있음NOSQL에 대해 자세히확장성/가용성모든 데이터의 신뢰성이..

무중단 배포 진행하기 2023 (3) - 젠킨스 잡 Setting 및 실행파일 확인하기

젠킨스 잡 Setting 아래와 같이 새로운 잡을 생성한다. 설정 완료 후 , 설정한 브랜치에 push을 하면 아래와 같이 자동으로 빌드가 된다. CD(Continues deploy) - 실행 파일 생성하기 수정사항 기존에는 맥 로컬에 Jenkins을 설치하여, 해당 프로젝트를 진행하려 했으나, 맥 로컬의 원격 접속 IP가 재부팅하면 바뀌는 이슈가 있어, Centos7 으로 OS을 변경하였다. (centos7 젠킨스 위치 : sudo vim /etc/sysconfig/jenkins) push을 하면 자동으로 빌드가 되고, 이 파일 위치는 아래와 같다. /var/lib/jenkins/workspace/파일이름 이후 젠킨스 관리 → Tools → Gradle에서 Add Gradle을 한다. https://g..

개발자가 반드시 알아야하는 데이터베이스 - MYSQL에서 쿼리 최적화 하기 (1) - MYSQL Optimizer

개요사내에서 MYSQL 최적화에 대해 강의하는 시간이 있어, 수강하게 되었다.아래 내용은 강의 들은 내용을 간략하게 정리한 것이다.MYSQL Optimizer먼저 Optimizer 란 쿼리 실행 계획을 생성하고 최적화하는 역할을 수행하는 컴포넌트이다.Optimizer을 알아보기 전 MYSQL에 대해 간략히 짚고 넘어가자. MYSQL 서버의 구성도이다.Engine : 클라이언트와의 연결을 관리하는 Connection Management , SQL Parser, Query Optimizer 등 MYSQL에서 행동하는 모든 게 실행되는 곳이다. MEMORY : Engine 실행에 필요한 메모리 Storage Engine : DB의 핵심인 데이터가 저장되는 곳이다.  아래는 쿼리 실행 과정이다.  Optimiz..

스프링 배치 5.0 - 스프링 배치란 (1)

스프링 배치 스프링 배치는 대용량 데이터 처리와 반복적인 작업을 효과적으로 처리하기 위해 개발된 프레임 워크이다. 스프링 배치의 기본 개념과 주요 기능, 그리고 사용하는 방법에 대해 알아본다. 스프링 배치란? 스프링 배치는 스프링 프레임워크의 일부로, 대용량 데이터 처리와 배치 작업을 지원하는 오픈 소스 프레임워크 주로 일괄 처리 작업, 데이터 추출 및 가공, 데이터 로드, 작업 모니터링 및 관리 등의 작업을 수행하는 데 사용 주요 개념과 구성 요소 Job: 스프링 배치의 실행 단위로, 하나 이상의 Step으로 구성된다. Step: Job을 구성하는 단계로, 하나 이상의 Tasklet 또는 Reader-Processor-Writer 패턴을 포함한다. Tasklet: 단일 작업을 수행하는 컴포넌트로, 개발..

Spring boot + JPA 환경에서 Insert 동시 요청 시 처리방법

개요 이전에 회사에서 멀티스레딩 환경에서 동시성 이슈 관련해서 글을 작성한 적이 있다. 그 때는 동시성 이슈 즉 insert 요청이 동시에 온다면 락(LOCK)을 걸어 처리하는 방법을 제시하였다. Spring boot + JPA 환경에서 비관적 vs 낙관적 Lock 선택하기 - https://code-killer.tistory.com/163 사내에서도 해당 방법으로 처리하려던 와중 큰 프로젝트에 참여하게 되었고, 위 이슈는 크리티컬하지 않았기 때문에, 추후 개선 이슈로 놔두었다. 큰 프로젝트가 마무리 되고, 해당 이슈를 다시 살펴보는데, 그땐 생각하지 못했던 의문들이 떠올랐다. "그때 당시에는 동시 요청이 오니까, 일단 락을 걸어 비동기로 처리를 해야겠다." 라고 단순히 생각했었는데 정확히 따지자면, 1..

무중단 배포 진행하기 2023 (4) - profile 간단 설정

개요 대부분의 무중단 배포 관련 블로그에서는 프로필(profile) 설정을 필수로 언급하고 있다. 일반적으로 현업에서는 무중단 배포을 위해 여러 대의 머신(인스턴스)을 사용하고 있기 때문에 이 경우 프로필 과정은 필요하지 않다. 그러나 많은 사람들이 무중단 배포를 사이드 프로젝트로 진행하고 있는데, 이 경우 머신의 개수가 제한되어 있어,단일 머신에서 무중단 배포 환경을 구축하는 상황이기 때문이다. 이런 경우를 위해 2개의 프로필을 생성하여 프로젝트를 다른 포트 번호로 실행하고 있다. application.properties 설정 properties 설정에 spring.config.activate.on-profile=이름 을 추가해야한다. 만약 해당 profile의 DB, PORT 등 설정을 다르게 두고 ..

무중단 배포 진행하기 2023 - 젠킨스 빌드 시 3가지 에러 상황

첫번 째 에러 상황 ERROR: JAVA_HOME is set to an invalid directory: /usr/lib/jvm/java-11-openjdk-devel.x86_64/bin/javac Please set the JAVA_HOME variable in your environment to match the location of your Java installation. Build step 'Invoke Gradle script' changed build result to FAILURE Build step 'Invoke Gradle script' marked build as failure Finished: FAILURE 생각해보니, 해당 프로젝트는 java 17 버전으로 빌드해야해서, java..

JAVA - UnsupportedOperationException 발생 해결

List로 변환 가능한 메소드 자바에서는 list로 변환하는 3가지 메소드가 있다. Arrays.asList() Collection.singletonList() List.of() 3가지에 대한 자세한 설명은 아래 링크에 있다. https://code-killer.tistory.com/148 이 3가지 메소드의 가장 큰 특징 중 하나는 List의 길이를 바꿀 수 없다는 점이다. 즉 List의 메소드 중 길이를 바꾸는 add , remove 등의 기능을 사용할 수 없다. 발생 상황 List cardList; List tempCardList = new ArrayList(); .... 중략 (cardList에 Card가 add) ..... //Collection.singletonList()을 활용하여 2차원 L..

ELK - primary shard is not active Timeout 에러

네트워크 팀에서 VM 머신 초기화로 인해 elastic이 꺼졌었다. 다시 재부팅 하는 과정에서 위와 같은 로그가 남았는데, 구글링 해보니 elasticsearch 구성파일 중cluster.initial_master_nodes 설정 문제였다. 해당 설정은 맨 처음 클러스터를 시작할 때만 적용하고 이후에, 지워야 하는 옵션임을 공식문서에서 확인하였다. https://www.elastic.co/guide/en/elasticsearch/reference/7.10/modules-discovery-settings.html 그 이후에 cluster의 상태를 보니 red 상태였다. 로그를 보니, 몇몇 샤드들이 활성화가 되지 않아있었다. 그말은 해당 샤드를 가지고 있는 노드가 클러스터에 안붙었다는 얘기인데, 계속 원인을..

728x90