Nginx 무중단 배포 System Architecture . Install Nginx # 도커 이미지 가져오기 $ docker pull nginx # nginx 서버 기동 $ docker run -itd -p 80:80 -v /home/ec2-user/app/nginx:/usr/share/nginx/conf --restart=always --name nginx -u root nginx # 가동 서비스 확인 $ docker ps -itd i: t 옵션과 같이 사용. 표준입력 활성화. 컨테이너와 연결되어있지 않더라도 표준입력 유지 t: i 옵션과 같이 사용. TTY 모드로 사용하며 bash 사용을 위해 반드시 필요 d: 컨테이너를 백그라운드로 실행. 실행시킨 뒤 docker ps 명령어로 컨테이너 실행 확..
Docker & Jenkins 배포 자동화 구축 System Architecture . Install Docker # Install $ sudo yum update -y # 인스턴스에 있는 패키지 업데이트 $ sudo yum install -y docker # docker 설치 $ docker -v # 버전 확인 # Setting $ sudo systemctl enable docker.service # 재부팅 시 docker 자동 실행 설정 # Start $ sudo systemctl start docker.service # docker 서비스 실행 $ systemctl status docker.service # docker 서비스 상태 확인 . Install Jenkins docker search, p..
AWS EC2 & RDS Free Tier 구축 System Architecture . AWS EC2 & RDS 구축 AWS EC2 & RDS 구축 방법은 향로님의 블로그 가 참고하기 좋은 것 같다. 2023년 10월 기준 UI 가 블로그 이미지와 약간 다르긴 하지만 기본적인 설정은 동일하다. . 그 밖에도 자세한 구축 방법은 많은 블로그에서 다루고 있어서 구축 과정에서 참고하면 좋을 내용들을 다뤄보려고 한다. . AWS 프리티어 무료 사용량 EC2(Amazon Elastic Compute Cloud) : 클라우드에서 제공되는 크기 조정 가능한 컴퓨팅 월별 750시간 무료 (EC2 인스턴스 하나를 풀로 돌려도 남는 시간) EC2 인스턴스 하나당 750시간 가동이 기준이므로, EC2 인스턴스 두 개를 돌린..
Firebase 구글에서 제공하는 모바일 앱/웹을 위한 플랫폼인 Firebase 을 알아보려고 한다. AWS 같은 클라우드 컴퓨팅 플랫폼으로 기대(?)했었는데.. 알고 보니 백엔드의 역할을 대신해 주는 플랫폼으로 보인다.😥 . 인증, 데이터베이스, 스토리지, 푸시 알림 등의 기능을 제공하여 백엔드 개발 없이 프론트 개발만으로도 빠른 앱/웹 개발이 필요한 사람들에게는 유용할 것 같다. 백엔드 개발을 해야 하는데.. 필요가 없다니..🥲 백엔드 개발이 필요 없는 플랫폼인만큼.. Spring-boot 프로젝트를 firebase 에 배포할 수는 없어 보이고 필요하다면 별도 서버에 배포가 필요해 보인다. . Firebase 를 알아보는 김에 Spring-boot 와 연동까지는 해보자. Spring-boot 와 Fi..
Spring Batch & Jenkins 구동 방식 개선 현재 실무에서 스프링 배치의 구동 방식이 아래와 같다 Deploy Tool 배치 프로젝트 특정 브랜치의 jar 파일을 배치 서버에 배포 Jenkins Build periodically - Schedule 설정 Execute shell 을 통한 배치 실행 쉘에는 파라미터, 프로파일 설정과 jar 파일로 배치 잡을 실행하는 커멘드가 포함 현상 현재 구동 방식에서는 한 가지(한 가지가 아닐 수도 있지만..) 문제가 있었다. . jar 파일이 배포되는 사이 배치 잡이 실행되거나, 배치 잡이 실행되는 사이 jar 파일이 배포되면 Class 정보를 찾을 수 없다는 예외(java.lang.NoClassDefFoundError, java.lang.ClassNot..
Oracle Select vs OR vs IN 비교 약 2만 건 정도의 데이터를 조회하는 API를 개발해야 하는데, 하나씩 조회, OR 연산자 사용, IN 연산자 사용 중 어떤 방법이 성능상 유리할지 궁금했다. 당연히 모두가 아는 결과를 테스트하는 것일 수도 있지만.. 내 눈으로 직접 확인해 보아야 믿을 수 있을 것 같다.. . 실제 서비스 환경과 동일하게 SpringBoot, MyBatis, Oracle 환경으로 테스트하였고, 오라클에서 IN 절에 허용되는 최대 식은 1,000개인 이유로 1,000건 단위로 분할조회 하도록 하였다. 1,000건이 초과하면 ORA-01795 maximum number of expressions in a list is 1000 예외를 던진다고 한다. (그런데 테스트 당시에..
Spring Assert Statements package org.springframework.util; 인수를 검증하고 예외를 발생시키는 유용한 클래스 Assert Class Spring Assert 특징 Assert 메서드는 정적 예상되는 인수를 가정하고, 조건이 충족되지 않으면 런타임 예외를 발생 첫 번째 매개 변수는 검증을 위한 인수 또는 확인할 논리적 조건 두 번째 매개 변수는 유효성 검사에 실패할 경우 표시되는 예외 메시지 Example public class Car { private String state = "stop"; /** * speed > 0 조건을 충족하지 않을 경우 런타임 예외 발생 */ public void drive(int speed) { Assert.isTrue(speed ..
Redis Transactions 프로젝트에 Redis 를 적용하면서 Redis Transaction 을 잘 모르고 사용했다가, Spring Transaction 과 함께 데이터가 롤백되어 버리는 상황을 맞이하고 Redis Transaction 에 대해 알아보게 되었다. . Redis 는 싱글 스레드 기반으로 데이터 처리 반면, 이벤트 루프(Event Loop)라는 Redis 동작 원리로 여러 클라이언트 요청을 동시에 응답하는 동시성 보유 유저 레벨에서는 싱글 스레드로 동작하지만, 커널 I/O 레벨에서는 스레드 풀 이용 따라서, 동시성 문제에 대한 처리가 필요 Redis 동시성 처리를 위한 트랜잭션 방법은 SessionCallback 인터페이스를 구현하는 방법과 @Transactional 을 사용하는 방..