일35 AWS Code Deploy + Jenkins + GitLab AWS Code Deploy 사용자 -> 젠킨스 -> s3 배포, code deploy 실행 -> codeDeploy 가 배포그룹에 등록된 ec2 에 설치된 에이전트 를 실행 -> codeDeploy 에이전트가 (s3 -> ec2) 복사 진행 -> codeDeploy 에이전트가 appspec.yml 실행 -> appspec.yml 에 정의된 스크립트 실행 -> 배포 완료 Jenkins 아이템 만들기 codeDeploy 는 appspec.yml 을 통해 배포 위치, 실행할 스크립트를 관리한다. 프로젝트 트리의 최상단에 위치 시킨다. 서버에 ${DMSCONSISTENCY_DEPLOY_HOME}/src 이 경로가 존재 해야 함 sudo su - env 에 DMSCONSISTENCY_DEPLOY_HOME 나와야.. 2022. 1. 4. Spring Boot JPA #5 h2 디비랑 연결하는 실습 h2?? h2 디비는 서버의 램을 사용하는 인메모리 디비이다. 따라서 서버 어플리케이션을 재시작하면 데이터가 사라진다. application.properties 여기 파일을 application.yml 로 바꾸고 아래 내용 복붙 실서비스 때는 아래 내용으로 바꾸고 쓴다. jpa: hibernate: ddl-auto: none generate-ddl: false https://deep-dive-dev.tistory.com/31 참고 h2는 기본적으로 create-drop이 디폴트이다. application.yml server: port:8083 spring: h2: console: enabled: true path: /h2-console datasource: url: jdbc:h.. 2021. 12. 12. AWS DMS :: from aurora mySQL to S3 DMS는 데이터베이스의 데이터를 빠르고 안전하게 aws 로 마이그레이션 할 수 있도록 도와준다. DMS 는 이기종 간 마이그레이션도 지원한다. 여러 소스에서 s3 로 복제하여 데이터레이크 솔루션을 구축할 수도 있다. 여기서는 오로라 디비의 데이터 증분을 지속적으로 복제하는 DMS 를 구축 해본다. DMS 는 네 가지를 생성하면 된다. 복제 인스턴스 복제를 수행할 컴퓨팅 파워이다. 타겟 엔드포인트 데이터를 보낼 장소를 연결 소스 엔드포인트 데이터를 가져올 장소를 연결 태스크 복제 작업을 정의한다. 복제 인스턴스 생성 이름과 인스턴스 타입, 엔진 버전을 선택한다. 엔진은 3.4.1 이상으로 만들어야 s3 파티션 별 복제가 가능하다. 있어야 하는 VPC 를 선택하고 AZ 를선택한다. (운영은 다중 AZ) 엔드.. 2021. 12. 6. Spring boot JPA #4 공지사항이 목록 요청처리 API 만들기 lombok은 보통 4가지의 아규먼트를 사용한다. @AllArgsConstructor @NoArgsConstructor @Builder @Data @NoArgsConstructor 이 애노테이션은 파라미터가 없는 생성자를 생성합니다. @AllArgsConstructor 이 애노테이션은 클래스에 존재하는 모든 필드에 대한 생성자를 자동으로 생성해줍니다. @Builder 빌더 패턴을 사용할 수 있게 해준다 빌더패턴 : https://jdm.kr/blog/217 위와 같이 빌더 패턴으로 객체를 만들어 줄 수 있다. 데이터 갯수 리턴 리턴 타입이 int 이던 String 이던 api 에서 반환할 떄는 똑같이 문자열로 반환된다. Post mapping 어노테이션 @Reque.. 2021. 11. 28. Spring Boot JPA #3 게시판 - 공지사항 게시판 목록 요청 처리 API 작성 intelij 로 바꿈.. 설정은 이클립스와 같이 프로젝트를 만들어 주면 된다. 이클립스의 경우 메소드 옆에 콩버튼을 누르면 api 요청용 파일이 생성되고 옆에 플레이버튼을 누르면 api 요청 및 응담 폼이 출력된다. 공지사항 데이터 받아줄 모델(객체) 설정한다. lombok 으로 @data annotation 을 넣으면 getter setter 를 굳이 안 작성해도 자동으로 잡아준다. 객체를 리턴하는 메소드를 작성하고 Getmapping 어노테이션을 붙여주면 get 리퀘스트 시 이와 같은 응답을 받을 수 있다. 2021. 11. 21. Spring Boot JPA #2 기본 주소 매핑 메소드 first-url 주소로 받고, GET 방식을 쓰는 메소드를 만듬 해당주소로 접속해보면 이처럼 로그인 창이 뜨는데 spring security 를 넣었기 때문이다. 따라서 해당 부분에 대한 수정 필요 spring Security 관련 클래스를 하나 생성하여 모든 리퀘스트에 대한 퍼미션을 주도록 위와같이 설정한다. http://localhost:8083/first-url 요청을 보내면 매핑되는 것을 확일할 수 있다. http://localhost:8083/helloworld string을 리턴하는 api 를 만들기 위해서는 @ResponceBody 라는 어노테이션이 필요하다 기본적으로 스프링 부트는 페이지를 리턴하기 때문에 이에 따른 어노테이션이 필요하다. ——————————————.. 2021. 11. 21. Spring Boot JPA #1 환경 구축 eclipse 설치 - 구글 eclipse marketplace - sts 설치 project 생성 - spring boot/spring starter project 프로젝트가 만들어지면 실행을 해본다. 그럼 신기하게도 was 가 자동으로 세팅 및 실행되면 서버가 뜬다. 애플리케이션 실행 시 port 8080 already in use 뜨는 경우 해당프로세스를 죽이거나 -> lsof -i tcp:8080 kill pid 컨피그 수정해서 포트를 바꿈 2021. 11. 21. Kafka Lag Monitoring System Kafka 의 lag(프로듀서 offset, 컨슈머 offset 간의 차이) 을 모니터링 하여 이상 감지를 할 수 있는 시스템을 구축하는 법. Kafka - burrow - telegraf - Elasticsearch - Grafana, Kibana 각 서비스의 role Burrow : kafka 로부터 offset등의 데이터를 수집, API response 로 데이터 전달 Telegraf : Burrow 에 request 를 통해서 데이터를 받아, ES 에 적재 (index 설정 ) es: telegraf 로 부터 받은 데이터 적재 grafana : es의 데이터 조회 및 시각화 Zookeeper cluster 설치 # mkdir ~/local # cd ~/local # wget https://down.. 2021. 9. 26. 카프카 프로듀서 프로듀서란 ? 카프카 브로커로 보내주는 역할을 하는 것 1. ProducerRecord 객체를 Serializer 를 사용하여 전송에 적합하게 직렬화 한다. 2. 파티셔너가 해당 레코드가 저장될 파티션을 결정 짓는다. 3. 파티션이 결정되면 프로듀서가 저장될 토픽과 레코드를 알게 된다. 4. 레코드가 해당하는 토픽의 파티션에 저장된다. 5. 브로커는 수신된 레코드의 메세지를 처리한 후 응답을 전송한다. 6. 성공하면 RecordMetadata 객체를 반환하고 실패하면 에러를 반환하고, 프로듀서는 리트라이를 설정에 따라하게 된다. 카프카 프로듀서 만들기 ProducerRecord 의 메세지를 2021. 9. 26. Kafka 리밸런싱 리스너 동작 test 리밸런스 리스너를 달았을 때 실재로 컨슈머 커밋 및 이어서 컨슈밍이 중복/손실 없이 일어나는지 실제 로그를 보며 테스트 해보았다. 그리고 리밸런스 리스너의 효용성에 대해 정리해보았다. 0. 테스트 환경 및 방법 현 커밋 방식 : 폴링 루프 완료 이후 어싱크 커밋 데이터 프로듀싱 : 퍼포먼스 프로듀싱 툴 사용 ./kafka-producer-perf-test.sh --topic test --record-size 10 --num-records 9999999999 --producer- props bootstrap.server=[브로커]:9092 --throughput 300 그라파나 랙 정보 확인 : http://브로커:3000/d/5nhADrDWR/kafka-lag?orgId=1&refresh=30s 1. 리.. 2021. 9. 4. Kafka 성능측정 툴 아래와 같이 카프카 빌트인 툴로 퍼포먼스 TEST 가능 PRODUCER TEST [root@f6fb6ac1b445 bin]# ./kafka-producer-perf-test.sh --topic test --record-size 1000 --num-records 5000 -- producer-props bootstrap.servers=n1:9092,n2:9092,n3:9092 --throughput 100 501 records sent, 100.2 records/sec (0.10 MB/sec), 2.7 ms avg latency, 335.0 ms max latency. 501 records sent, 100.2 records/sec (0.10 MB/sec), 0.8 ms avg latency, 6.0 ms.. 2021. 9. 4. MySQL benchmark tool DBT2 sysbench 운영에서 이용중인 디비의 성능 측정이 필요했다. 따라서 벤치마크 툴을 설치하여 사용하기로 했다. 한번도 안해본 것이기에 진행하면서 환장할 뻔 했다. 로그를 남겨가면서 진행했다.. (어디서 꼬일지 모르니..) 그 과정을 걍 복붙 해본다. 요약 -> DBT2 쓰려다 sysbench 로 넘어간 이야기 .. 만약 디비 성능측정 툴을 설치하는 분이 있다면 DBT2 보다는 sysbench 를 선택하면 필자처럼 삽질은 안할 것이다. (sysbench는 10분컷이다.) mySQL 성능 측정을 해보자 https://jjon.tistory.com/entry/MySQL-benchmark-tool-MySQL-%EC%84%B1%EB%8A%A5-%ED%85%8C%EC%8A%A4%ED%8A%B8-%ED%88%B4-DBT2 여기 따.. 2021. 9. 4. Kafka consumer 개발 1. Properties 생성 private Properties props = new Properties(); props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, PropertiesUtil.getProperty("kafka.servers")); props.put(ConsumerConfig.GROUP_ID_CONFIG, PropertiesUtil.getProperty("kafka.group.id")); props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,.. 2021. 9. 4. Kafka Consumer 개념 :: 컨슈머, 컨슈머그룹, 리밸런싱 카프카는 프로듀서 / 커슈머가 핵심이다. 프로듀서 : 데이터를 카프카에 넣어줌 컨슈머 : 데이터를 카프카에서 가져옴 카프카는 사실 쉽게말하면 걍 버퍼 다. 여기서 컨슈머를 정리해본다. 컨슈머와 컨슈머 그룹 컨슈머에 가장 큰 컨슈머와 컨슈머 그룹을 이해해야 한다. 위딩에서 짐작이 되겠지만 컨슈머들을 묶고 있는 것이 컨슈머 그룹이다. 컨슈머에서 가져가는 병목을 줄이기 위해 여러 컨슈머를 실행해 둘 수 있다. 이 여러 컨슈머들이 가져가는 데이터들의 오프셋을 공유하는 것이 컨슈머 그룹이다. 같은 컨슈머 그룹에 속한 컨슈머들은 오프셋들을 공유하며, 토픽의 파티션을 분배해서 컨슈밍 한다. 아래 그림괴 같이 컨슈머하나는 여러 파티션에 연결되어 컨슈밍 하는 것이 가능하다. 하지만 파티션 입장에서는 각 컨슈머 그룹의 컨.. 2021. 8. 28. [Python] AWS S3 Lifecycle 스토리지 클래스 변경 배치 별거 아닌 코드 공유 AWS의 s3 는 *라이프 사이클이 있다. 일정 주기로 오브젝트 들의 스토리지 클래스를 변경하여 비용 효율화 한다. *s3 라이프 사이클 https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/object-lifecycle-mgmt.html 하지만 세부 설정은 불가능 하다. 일정 조절이나 스토리지 클래스를 입맛대로 바꾸기 힘들다. 따라서 배치 서비스를 개발 하였다. 저장 1. airflow 에서 스케줄링으로 트리거 시켜줌 2. csv 에서 조건 읽어, 해달경로의 오브젝트들에 cp 명령어를 날려줌 복원 1. 원하는 딥아카이브 파일을 파라미터를 포함하여 실행 2. 복원완료 시 s3 에서 이벤트 트리거를 주어, (슬랙 얼럿 기능을 하는).. 2021. 8. 28. kafka 요약 메세지 발행과 구독하기 메세지 발행/구독 시스템에서는 데이터를 발행자가 구독자에게 직접 보내지 않는다. 대신 메세지를 구분해서 발행구독 시스템 에게 보내면 구독자가 특정 메세지를 구독 하게 된다. 발행된 메세지를 저장하고 중계하는 역할을 브로커라고 한다. 초기의 발행 구독 시스템의 발전과정 phase 1 초기 프론트엔드 서버에서 대시보드를 보여주는 메트릭 서버로 직접 데이터를 밀어 주는 방식 단순하기 때문에문제가 없다 phase 2 데시보드를 보여주는 서버 이외에 데이터 분석 서버등 데이터를 수신받기 위한 서버 요구가 추가 된다면 아래와 같이 아키텍쳐가 복잡해지고 운영에 문제가 생긴다. phase 3 모든 어플리케이션의 메트릭을 하나의 애플리케이션이 수신하게 하고 하나의 서버로 제공하면 어떤 시스템에서도.. 2021. 8. 19. 이전 1 2 다음