DB I/O bound 애플리케이션 + Message Queue
2023. 4. 2. 13:13
개발 지식/DevOps
0. DB I/O bound 애플리케이션 성능 향상 방법 하드디스크를 많이 사용하는 파일 I/O bound 애플리케이션이라면 서버를 늘려서 성능 향상이 가능하다 하지만 보통은 DB를 사용하는 경우가 많고, DB I/O bound 애플리케이션의 경우 DB 성능에 의존적이기 때문에 애플리케이션의 서버를 늘려도 DB 병목현상을 해결 할 수 없어서 성능향상이 되지 않을 것 이다 요청이 많이 발생하게 될 경우 즉, 트래픽이 크게 증가하는 경우 서버가 다운되는 현상을 경험하게 된다 이를 막기 위한 방법 중 하나가 Message Queue를 활용하는 방법이다 1. 톰캣 요청 처리 구조 요청이 들어올 경우 우선 큐에 적재 (톰캣 기본 설정 - 큐 사이즈: 100, 스레드 사이즈: 200) 큐에 들어간 요청이 놀고 있는..
Nginx를 통한 로드밸런싱 + 무중단 배포
2023. 3. 16. 00:37
개발 지식/DevOps
GCP에 접속해 보니 젠킨스 서버가...."vm에서 암호화폐 채굴로 인해 무료 서비스 약관을 위반하여 vm 인스턴스가 정지되었습니다."라는 안내와 함께 서버가 중지되어 있었다.. 암호화폐 채굴한 적 없고 젠킨스 공부하고 있었다고 항소요청을 하니 5분도 안 돼서 정지를 풀어줬다 0. 목표 및 테스트 환경 Nginx로 로드밸런싱하여 무중단으로 배포할 수 있는 환경을 구성 로드밸런싱을 진행하기 전 서버를 여러 개로 실행해야 하기 때문에 동일한 환경의 서버를 2개 더 생성했다 GCP의 경우 머신이미지 기능을 활용하면 간단하게 서버 복사가 가능하다 CentOS로 진행 - Jenkins를 실행시킬 jenkins-test-1 - Docker 컨테이너를 띄울 worker-test-1, 2, 3 - nginx를 실행시킬..
Jenkins 배포 환경 구축
2023. 3. 11. 21:46
개발 지식/DevOps
0. 목표 및 테스트 환경 Jenkins 세팅 SSH를 통한 배포 dockerized 애플리케이션 배포 자동화 GCP 클라우드 서버를 통해 진행! CentOS로 진행 - Jenkins를 실행시킬 jenkins-test-1 - Docker 컨테이너를 띄울 worker-test-1 2개의 서버를 생성하였음 1. 관련 파일 설치 - wget, maven(Java 포함), git, docker 설치 sudo yum install wget sudo yum install maven sudo yum install git sudo yum install docker 2. Jenkins 설치 Jenkins 설치 시 패키지를 먼저 추가해 준 다음 설치를 진행해야 한다 sudo wget -O /etc/yum.repos.d/j..
간단한 Docker 환경 구축하기
2023. 3. 11. 18:44
개발 지식/DevOps
0. Docker 환경의 애플리케이션 실행 과정 Docker File 빌드 시 Docker Image가 생성됨. Docker Image를 저장소에 푸쉬하면 Docker Image가 저장소에 업로드 됨. 풀을 통해 Docker Image 다운로드 다운로드된 Docker Image를 런하여 컨테이너 실행 1. Docker File 작성 https://spring.io/guides/topicals/spring-boot-docker/ Spring | Home Cloud Your code, any cloud—we’ve got you covered. Connect and scale your services, whatever your platform. spring.io Spring Boot 에서 제공하는 샘플 코드를..
CPU bound Test
2023. 3. 8. 23:11
개발 지식/DevOps
1. 기본 용어 정의 Burst 어떤 현상이 짧은 시간 안에 집중적으로 일어나는 일 CPU Burst 프로세스가 CPU에서 명령을 실행하는 시간 I/O Burst 프로세스가 I/O(Input/Output) 를 요청한 뒤 기다리는 시간 CPU bound 프로세스 CPU burst가 많은 프로세스 주로 행렬 곱이나 고속 연산을 할 때 CPU 성능에 의해 작업 속도가 결정됨 ex) 머신러닝 프로그램 I/O bound 프로세스 CPU burst가 많은 프로세스 파일 쓰기, 디스크 작업, 네트워크 통신을 할 때 주로 나타남 작업(다른 시스템과 통신) 병목에 의해 작업 속도가 결정됨 ex) 백엔드 API 서버 2. CPU bound 애플리케이션 Hash 연산을 반복하여 CPU를 극단적으로 사용하는 애플리케이션을 통..
H2 DB 최초 생성 시 not found 에러 처리
2022. 8. 9. 20:56
개발 지식/JPA
증상 H2 DB를 처음 생성하려고 하면 에러 메시지가 뜨면서 생성되지 않는다 만약 이 화면이 접근이 안된다면 주소창에 ip 주소를 localhost로 변경하면 된다 원인 JDBC URL은 원격 접근 주소이며, 아직 DB 파일이 생성 전이기 때문에 연결할 주소를 찾지 못하고 not found 에러가 발생한다 해결 방법 DB 원격 접근 주소: jdbc:h2:tcp://localhost/~/datajpa 파일 직접 접근 주소: jdbc:h2:~/datajpa 파일을 직접 접근하는 주소로 변경하면 파일이 생성되면서 접속된다 파일 주소를 직접 사용하게 되면 멀티로 연결이 안 되는 등 문제가 발생하기 때문에 접속 후 다시 원격 주소로 변경하고 접속하는 것을 권장한다
H2 DataBase 초기 접속
2022. 6. 9. 15:49
개발 지식/Etc.
데이터베이스 파일 생성 방법 JDBC URL: jdbc:h2:~/DB이름 최초 접속 시 파일 생성 반드시 url에 세션키 값이 있어야함! JDBC URL: jdbc:h2:tcp://localhost/~/DB 이름 이렇게 접속 다음 접속 부터 네트워크 모드로 정상 접속 가능
spring-boot-devtools 라이브러리
2022. 6. 9. 15:39
개발 지식/Memo
spring-boot-devtools 라이브러리를 사용하면 캐시 삭제 등 개발 시 유용한 기능들을 제공한다 가장 대표적인 예로 thymeleaf 등 개발 시 동적 값을 변경할 경우 서버를 재시작해야하는데 devtools 를 사용하면 리컴파일로 간단하게 처리할 수 있다 gradle 기준으로 작성 dependencies { .... implementation 'org.springframework.boot:spring-boot-devtools' .... } 라이브러리 추가 후 th:text 부분의 문구를 변경했을 경우 기본 문구 다시 컴파일 후 새로고침을 하면 바로 적용되는 것을 확인할 수 있다!
git branch 가져오기
2022. 5. 10. 21:48
개발 지식/Memo
single-branch 를 통해 clone 한 경우 브랜치를 추가로 가져올 경우 아래 명령어를 입력 git remote set-branches --add origin 브랜치명 git fetch origin git checkout --track origin/브랜치명 https://velog.io/@burningjeong/fatal-originmain-is-not-a-commit-and-a-branch-main-cannot-be-created-from-it
JPA 기초 정리
2022. 5. 2. 23:15
개발 지식/JPA
연관관계 맵핑 toString(), lombok 무한 루프 주의 ex) Team - Member 연관관계가 있을 경우 Team.getMember.toString -> Member.getTeam.toString -> Team.getMember.toString -> Member.getTeam.toString -> Team.getMember.toString -> Member.getTeam.toString -> Team.getMember.toString -> Member.getTeam.toString -> 무한 반복됨 Json 생성 라이브러리 Controller에서 Entity 절대 반환 금지 무한루프 발생 가능성 엔티티 변경 시 API의 스펙 자체가 변경되어버림 (단순 값만 있는 DTO 변환 후 반환하는 방법..