Hot-Plug(또는 Hot-Add)란?구동 중인 인스턴스의 CPU 또는 RAM 사양을 실시간으로 변경하는 기술 기존의 사양 변경은 인스턴스의 재부팅이 불가피한 방식으로 작동하고 있었다. 하지만 서비스를 중단하기 어려운 경우에도 사양을 변경할 수 있는 기능이 필요했다. 우리 솔루션은 OpenStack을 기반으로 만든 클라우드 솔루션인데 OpenStack은 Hot-Plug 기능을 지원하지 않고 있었고, AWS, Azure, GCP를 포함한 다른 클라우드 서비스들도 Hot-Plug 기능을 제공하지 않고 있으며, VMware만이 Hot-Add 라는 이름으로 기능을 지원하고 있었다. OpenStack이 기능을 지원하지 않았기 때문에 직접 인스턴스를 제어하여 인스턴스의 사양을 변경하는 방법 밖에 없었다.구현기능의..
1화ssh 접속 ssh -Y -C user@192.168.10.1 # ssh: Secure SHell 접속 명령어 # -Y: X 전송 지정(데스크톱 환경) # -C: 통신 내용 압축2화루트 권한 얻는 명령어 sudo -i3화파일 내용을 대문자 소문자 차이를 무시하고 검색 grep -r -i -E "{검색어}" {디렉토리 경로} # grep: global regular expression print # -r: 서브 폴더까지 검색하도록 지정 # -i: ignore case, 알파벳 대문자 소문자 차이 무시 # -E: 정규표현식 사용4화, 5화vim 명령어i: 끼워넣기 모드shift + r: 치환 모드v: 선택 모드문자열 선택 + y: 복사shift + p: 붙여넣기/: 검색 모드u 또는 횟..
젠킨스 도커 컨테이너에서 호스트로 파일을 전송하거나 원격으로 명령어를 .sh 파일을 실행 시키려고 공개 키를 만들고 호스트로 보내려 했다.# SSH 키 생성 (id_rsa와 id_rsa.pub 파일 생성)ssh-keygen -t rsa -b 4096 -f /var/jenkins_home/.ssh/id_rsa -N ""# SSH 공개키를 호스트로 복사ssh-copy-id -i /var/jenkins_home/.ssh/id_rsa.pub user@remote_host 그러나 Permission denied(public key) 문제로 공개 키를 추가할 수 없었다. 다른 방법은 직접 공개 키를 복사해서 호스트의 ~/.ssh/authorized_keys 파일 끝에 붙여넣는 방법이 있었다. 내가 직접 하다가 실..
서버가 이상하다?! 최근에 만든 토이 프로젝트를 외부에서 접속해 보고 싶어서 스마트폰에서 접속을 시도했다. 화면을 제대로 나왔지만 서버에서 데이터를 제대로 가져오지 못 하는 것 같았다. 이 때까지만 해도 오라클 프리티어 인스턴스에 젠킨스 + 서버 + DB가 동시에 실행 중인 상태라 리소스 부족으로 DB가 비정상 종료 됐다고 생각했다. 해킹을 당했구나!! 예상대로 DB는 inactive 상태였다. DB를 다시 켰지만 데이터가 제대로 나오지 않았다. DB에 직접 접속해서 DB를 열어 보았다. 내가 만든 DB는 없어지고 RESTORE_DATA_...의 DB가 생성되어 있었다. 내용을 조회해 보니 대략 "데이터를 복구하고 싶으면 0.08 BTC를 달라"는 내용의 글이 들어 있었다. 구축한지 며칠도 되지 않아서 ..
리액트도 Spring Boot의 application-dev.properties, application-prod.properties 처럼 각각 실행 환경에서 다른 설정을 사용하고 싶을 때 하는 설정 방법이 있다. development 환경에서 http://localhost:8080을 production 환경에서 https://api.seogineer.com를 사용해서 동적으로 각 profile 마다 다른 URL을 사용하고 싶었다. 프로젝트의 root 경로에 .env.development, .env.production 파일을 생성하고 각 profile에 맞는 URL을 입력한다. 이때, 호출할 때 사용하는 이름은 접두사 REACT_APP_로 시작하여야 한다.# .env.developmentREACT_APP..
CORS 문제Access to XMLHttpRequest at 'http://localhost:8080/example' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. 리액트에서 API 서버로 요청을 보냈더니 위와 같은 메세지를 받았다.보안상 서로 다른 도메인이 서버 자원에 접근하려 하는 경우 이를 막는 것이다. CORS 설정을 통해 이 문제를 해결할 수 있다. @Configurationclass WebConfig { @Bean fun corsConfigurer(): WebMvcCo..
문제오라클 클라우드 인스턴스의 수신 규칙을 설정 했음에도 접속이 불가능한 상황이 발생했다. 원인클라우드의 수신 규칙뿐만 아니라 우분투 리눅스의 방화벽 설정이 존재했다. 해결환경: Oracle Cloud, Ubuntu 24.04 아래 명령어로 방화벽 상태를 조회할 수 있다.sudo iptables -L --line Chain INPUT - target - REJECT가 된 부분을 아래 명령어로 찾아서 제거했다.sudo iptables -D INPUT 6# num이 6이었기 때문에 명령어에 6을 사용함. 그리고 아래 명령어로 방화벽 설정에 포트를 추가했다.sudo iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPTsudo iptables -..
문제 상황JPA의 saveAll()을 이용하여 600건의 데이터를 저장하는 기능을 만들었다. 실제 결과는 300건만 저장되고 있었다. 원인JDBC 기본 배치 크기는 따로 설정하지 않은 경우 한번에 처리될 수 있는 개수가 제한되어 있음 해결방법1 - 배치 크기 설정application.properties에 설정을 통해 배치 크기를 조정할 수 있다.단, 키 생성 전략으로 IDENTITY 방식을 사용하면 사용할 수 없다. 영속성 컨텍스트 내부에서 엔티티 식별을 위해 PK값을 사용하는데 IDENTITY 방식은 DB에 INSERT한 후에 PK 확인이 가능하기 때문이다.spring.jpa.properties.hibernate.jdbc.batch_size=2000spring.jpa.properties.hibernat..
Spring Boot 3.2.3.RELEASE가 아니라 Spring Framework 3.2.3.RELEASE로 개발된 프로젝트에서 개발 및 유지보수를 하면서 아래와 같은 코드를 반복적으로 보았다.TransactionStatus status = this.transactionManager.getTransaction(new DefaultTransactionDefinition());try{ //do something transactionManager.commit(status);} catch (Exception e) { transactionManager.rollback(status);} 주로 @Transactional로 사용하는 기능을 코드로 사용하고 있었다. 스프링 프레임워크의 특징 중 하나인..
토이 프로젝트를 위해 서버를 여러 대 만들어 사용하다 보니 키페어도 여러 개가 생겼다. id_rsa1, id_rsa2 같은 방식으로 여러 개를 만들어 사용했더니 시간이 지나면서 어느 서버에 접속하는 키인지 잊어버리게 되었다. 다른 사람들은 어떻게 여러 개의 키 페어를 관리하는지 찾아봤다. 키 페어란?보안 목적으로 사용되는 두 개의 암호화 키, 즉 공개 키(public key)와 비밀 키(private key)를 의미합니다.키 페어의 구성 요소는 공개키와 비밀키가 있으며, 공개키는 클라우드 인스턴스에 업로드 되고, 비밀키는 로컬에 안전하게 보관하고, 접근 권한을 제한해야 합니다. 일반적으로 .pem, .key와 같은 확장자를 가진 파일에 저장된다. config 파일에 별명-키로 관리 하기1. ~/.ssh ..