Problem 카프카로 서버간의 restAPI 통신을 구현을 하려고 하던 중... 게시판에는 멤버정보 들어간다. 게시판 생성요청 정보에는 게시판 제목 멤버 id 게시판 완료 게시판 제목, 멤버 이름(작성자) 게시판 생성요청시에 작성자id 를 가지고 멤버 서버로 멤버 정보를 요청하는 방식을 해보려고 한다. 카프카를 사용할때 1 . 게시판서버 게시판생성메서드에서 프로듀서로 작성자id 를 특정 토픽에 보내고 2 . 멤버서버에서 컨슈머 리스너를 통해 해당 토픽에 요청정보가 들어오면 3 . 요청을 처리하고 다시 객체를 반환 해줘야 하는데 이것을 다시 프로듀서로 작성하고 4 . 게시판서버에서 리스너로 응답받은 객체를 생성메서드에서 처리를 완료하여 게시판객체를 완성시키려고 했다.. 찾아보니 컨슈머리스너는 void 이..
시나리오 A사용자가 B사용자에게 메세지 / 멘션 / 댓글 을 달면 B사용자에게 알림이 가는 API를 만들려고 한다. FLOW 웹을 열때 각 사용자는 SSE로 자기 이름으로 구독을 시작한다. A사용자가 B사용자에게 메세지 보냄 > 카프카에 메세지를 보냈다고 프로듀싱 > 카프카 컨슈머가 토픽을 Listen > SSE로 구독하고 있는 B사용자의 알림 메서드 보냄 > B사용자 종에 빨간불 ON 서버는 클라이언트에게 요청을 스스로 보낼 수 없다. 그렇기 때문에 중간에 소통을 해줄 기술이 따로 필요하다. Poling / WebSoket / SSE (Server Sent Events) 등이 있다. 이 세가지 기술을 모두 설명하진 않고 SSE를 채택한 이유는 알림 서비스는 [ 새로운 알림이 있는지 , 실시간성 보장 ..
이전 글 처럼 간단하게 스크립트 실행만 해줘도 되지만 실행이 완료 / 실패 상관없이 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..