문제 시나리오 사용자의 네트워크 지연 사용자의 잘못된 조작 중복요청이 발생 할 경우 데이터의 동시성 문제로 일관된 데이터가 입력이 될 수 있기 때문에 중복요청을 방지 하고자 했다. 많은 방법이 있지만 Spring AOP (Aspect-Oriented Programming)를 활용하여 문제를 해결하고자 했다. @Aspect @Component public class DuplicateRequestAspect { private Set requestSet = Collections.synchronizedSet(new HashSet()); @Pointcut("within(*..*Controller)") public void onRequest() {} @Around("onRequest()") public Object..
분류 전체보기
이전 글 처럼 간단하게 스크립트 실행만 해줘도 되지만 실행이 완료 / 실패 상관없이 pipline이 완료가 된다. deploy.sh 파일의 실행 로그를 보려면 verbose 옵션을 주어야 한다. pipeline { agent any stages { stage('Clone') { steps { script { git branch: 'develop', credentialsId: 'github', url: 'https://github.com/sudosoo/ElasitcKafka.git' } } } stage('ConfigAppender') { steps { script { sshagent(credentials: ['ssh_key']) { def workspaceDir = "${JENKINS_HOME}/work..
이번 장에서 만들 파일들은 한경로에 넣어준다. 젠킨스 파이프 라인 스크립트 pipeline { agent any stages { stage('Clone') { steps { script { git branch: 'develop', credentialsId: 'ljh8651', url: 'https://github.com/sudosoo/ElasitcKafka' } } } stage('Build') { steps { script { sh './gradlew clean bootJar' } } } stage('Deploy') { steps { script { sshagent(credentials: ['ssh_key']) { // 파일 전송 'scp -o StrictHostKeyChecking=no -P 포트 ..
CICD란 ? CI/CD는 소프트웨어 개발의 일환으로 사용되는 프로세스의 한 형태이다. CI는 "지속적 통합(Continuous Integration)"을 나타내며, CD는 "지속적 배포(Continuous Deployment)" 또는 "지속적 전달(Continuous Delivery)"를 나타낸다. 무중단 배포의 원리 배포 할 때, 새로운 컨테이너를 띄우고 NginX(로드밸런서)로 새로운 띄운 컨테이너로 연결한 뒤 이전 컨테이너는 내린다 글 들어가기 앞서 앞에 아래 글 들이 선행 되어야 한다. https://soobysu.tistory.com/119 [NginX] docker NginX (NPM) 역방향프록시 개념과 설정 NAS 1 Nginx의 역방향 프록시의 개념은 이러하다. 원래라면 http://m..
1. Jar 생성 build -> boo.Jar 로 Jar파일을 생성해준다. boot.jar 실행하면 /build/libs/ 안에 프로젝트이름-0.0.1-SNAPSHOT.Jar 파일이 생성된다. 2. Dockerfile 만들기 FROM openjdk:17-alpine ARG JAR_FILE=*.jar COPY ${JAR_FILE} app.jar COPY ./config/application.properties /src/main/resources/ ENTRYPOINT ["java", "-jar", "/app.jar", "--spring.config.location=file:/src/main/resources/application.properties"] FROM : Docker Image 생성 시에 기반이..
우선 집에 공유기가 있다면 공유기 포트를 열어주어야 한다. 80포트를 아까 설정해주었던 nginx http 포트인 12122 로 포워딩 시켜주는 것이다. 여기서 집에 공유기가 있다면 공유기 포트를 열어주어야 한다. 80 으로 들어올 것을 12122(docker nginx컨테이너 80포트)로 포트포워딩 시키고 443 으로 들어올 것을 12121(docker nginx컨테이너 443포트)로 포트포워딩 시킨다. 위 내용을 글로 해석해 보면 80포트로 들어오는것을 Nas의 12122 포트로 12122는 컨테이너 > 80 포트로 보내준다. 이 부분이 굉장히 헷깔린다. 컨테이너 설치가 완료 됐다면 Nginx Proxy Manager (설정페이지) 웹브라우저에 NAS의 IP:관리포트 를 넣어준다. 위 설정대로라면 N..
Nginx의 역방향 프록시의 개념은 이러하다. 원래라면 http://myHomeIp.synology:dockerPort 로 kibana , CMAK , Jenkins 홈을 GUI를 사용했는데 이젠 NginX를 통해 컨테이너에 접근하고 Https 보안까지 가능해진 것이다. Jenkins와 GitHub의 WebHook 또한 Https 프로토콜을 이용해야 했기 때문에 NginX는 필수 적이었다. Jenkins 와 Github WebHook 을 연동하려고 하는데 Github에서 https로 웹훅을 요청 하는데 Nas에서는 Http로 설정 되어있어서 NginX로 리버스 프록시를 사용한 주소가 필요했다. 필자는 Synology 의 NAS를 사용하지만 일반 docker 사용자도 똑같이 따라하면 된다. docker-c..
jenkins contextLoads() FAILEDjava.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:142 Caused by: org.springframework.beans.factory.BeanCreationException at AutowiredAnnotationBeanPostProcessor.java:488 Caused by: java.lang.IllegalArgumentException at PropertyPlaceholderHelper.java:180TakeItEasyApplicationTests > contextLoads() FAILED java.lang.Illeg..