본문 바로가기

전체 글41

AWS CloudWatch 대시보드 사용하기 CloudWatch 로그, 지표 및 이벤트 형태로 모니터링 및 운영 데이터를 수집하여 AWS와 온프레미스 서버에서 실행되는 AWS 리소스, 애플리케이션 및 서비스에 대한 통합된 보기를 제공 사용한 이유 Web Server와 Was는 로그 파일이 생성됩니다. 이 로그 파일을 확인하기 위해서는 직접 EC2 인스턴스에 접속해서 로그 파일을 열어보는 수 밖에 없었습니다. 때문에 개발의 편의와 손쉬운 정보 수집, 빠른 문제 상황에 대응하기 위한 로그 시각화 수단이 필요했습니다. 일반적으로 로그 시각화 용도로 ELK(Elastic Logstash Kibana) 스택 중 하나인 Kibana, 매트릭스 지표 시각화에 특화된 Grafana를 많이 사용하지만, 저희 팀 프로젝트는 AWS를 사용하는 환경이고, CloudWa.. 2021. 10. 30.
NFS를 이용해 로깅 파일을 관리하기 NFS Network File System NFS란? 한줄로 요약하면, 유닉스 시스템에서의 저장공간 공유를 위한 프로토콜입니다. A라는 인스턴스에 unluckyJung이라는 디렉토리를 만들어두면 B, C라는 인스턴스에서도 A의 unluckyJung 디렉토리에 접근할수 있게 해주는 분산 파일시스템 프로토콜을 이야기합니다. 사용한 이유 Scale Out 작업을 수행하면서 Babble 인프라내 WAS가 N개로 늘어나게 되었습니다. 각 WAS별로 찍히는 로그를 CloudWatch를 통해서 확인하려면 WAS의 개수에 맞춰 N개의 추가 설정이 필요했습니다. 즉 WAS가 100개가 된다면, CloudWatch로 추적되는 화면이 100개가 되겠죠. 이것은 로그 추적에 있어서도 불편함을 야기하게 되었고, NFS를 이용해.. 2021. 10. 27.
도커 스웜을 이용한 스케일 아웃 기존에 내가 진행하던 프로젝트는 WAS가 한 대 뿐이었다. 이번에 성능 향상을 목적으로 스케일 아웃을 진행하기로 결정했다. 스케일 아웃을 진행하면서 처리해야될 작업들에는 다음이 있었다. 서버가 여러 대인 점을 이용한 무중단 배포 WAS가 늘어나면서 NGINX에서 요청을 전달한 WAS 선택 방법 (로드 밸런싱) 이를 해결하기 위해서 나는 도커 스웜을 사용해보기로 결정했다. 그 이유는 다음과 같다. 도커 스웜은 자체적으로 롤링 업데이트를 지원하며, 매우 간단하게 사용할 수 있다. ingress 네트워크를 통해 NGINX에 추가적인 설정을 하지않아도, ingress의 로드 밸런서가 라운드 로빈 방식을 사용해서 WAS의 트래픽을 분산시킬 수 있다. 간단해서 학습하는데 비용이 적게든다. 도커 스웜 모드 클러스터 .. 2021. 10. 27.
MySQL(MariaDB) Replication with JPA summary 개요 복제(Replication)는 한 서버에서 다른 서버로 데이터가 동기화 되는 것을 말하며, 원본 데이터를 가진 서버를 소스(Source/Master) 서버, 복제된 데이터를 가지는 서버를 레플리카(Replica/Slave) 서버라고 부른다. 소스 서버에서 데이터 및 스키마에 대한 변경이 최초로 발생하며, 레플리카 서버에서는 이러한 변경 내역을 소스 서버로부터 전달 받아 자기 데이터에 반영한다. 복제에는 여러가지 목적이 존재한다. 스케일 아웃: 서버 분리로 트래픽도 분산 시킨다. 데이터 백업: 레플리카 서버를 이용해 백업한다. 데이터 분석: 분석용 쿼리만 별도로 실행되는 서버(DB) 구축이 가능하다. 데이터의 지리적(물리적) 분산: 물리적 거리만큼의 통신속도를 개선할 수 있다. 복제 아.. 2021. 10. 23.
Java 이미지 리사이징 및 압축 이미지 처리 방법 Java에서 이미지 처리하는 방법에는 여러 가지가 있다. AWT: Java 기본 라이브러리로 창 생성, 버튼 등의 GUI와 관련된 처리를 할 수 있도록 도와주는 라이브러리다. ImageJ: 이미지 작업을 위해 만들어진 라이브러리다. 만들어진 목적이 GUI가 아니라 처음부터 이미지 처리였기때문에 이미지 처리에대해 좋은 기능이 많이 있다. OpenIMAJ: 비디오, 오디오 처리나 머신 러닝 등의 작업을 할 수 있다. 이 라이브러리를 통해서도 이미지 처리를 할 수 있다. TwelveMonkeys ImageIO: Java 기본 라이브러리인 ImageIO를 확장한 형태다. 기존 ImageIO에서 다른 이미지 포맷도 지원해준다. AWT를 선택한 이유 복잡한 이미지 처리는 발생하지 않을 것으로 추정.. 2021. 10. 23.
도커 위의 DBMS를 로컬로 마이그레이션 하기 이전에 로컬에서 잘 돌아가고 있는 데이터베이스를 굳이 도커 위로 마이그레이션 시킨 경험이 있었다. 그 후로 큰 이슈 없이 서비스가 잘 동작했기 때문에 도커 위에 데이터베이스를 운영하는 것에 만족하고 있었는데, 얼마전 브라운이 초청해주신 홍정민 DBA님의 특별 강연에서 DBA님이 도커 위에 데이터베이스를 운영하는 것에 대해 부정적인 말씀을 하셔서, 질문을 드리고 답변을 받게 되었다. 그리고 답변 받은 내용을 베이스로 확신을 얻어서 도커 위에 올렸던 데이터베이스를 다시 로컬로 내려보았다! 도커에서 사용중인 데이터베이스 덤프 백업하기 도커에서 동작하고 있는 데이터베이스를 덤프로 추출하여 백업한다. 도커 컨테이너의 bash로 접속한 다음, mysqldump 명령어를 통해 덤핑한다. $ sudo docker ex.. 2021. 10. 6.
Reverse Proxy를 거치기전의 IP를 WAS에서 알아내기 Goal Reverse Proxy를 거치기전의 Clinet의 IP를 WAS에서 알수 있도록 구성해봅니다. 개요 IP 차단 기능을 구현했는데, 배포환경에선 정상적으로 작동하지 않았습니다. 원인은, WAS측에서 요청한 클라이언트의 IP를 보고 필터링을 하도록 구현했는데, WAS는 실제 Client가 아닌, 본인입장에서 Client인 중간에 있는 리버스 프록시(NGINX)의 IP를 알게되기 때문입니다. 해결 리버스 프록시에서 X-Forwarded-For Header 추가 X-Forwarded-For Header 는 엄밀하게는 표준이 아니지만, 이런 상황에 대해서 사실상 표준처럼 쓰이는 헤더입니다. 리버스 프록시(NGINX)쪽에서 X-Forwarded-For Headerd의 값으로 클라이언트 IP를 넣어줍니다... 2021. 10. 3.
Git rebase merge 트러블 슈팅 babble 팀에선 프로젝트 초기 단계에서 아래와 같은 Git branch merge 전략을 사용하고 있었다. 기존 babble 팀에서 사용하던 Merge 전략 신규 기능 개발시 Develop를 기준으로 새로운 브랜치를 생성하고 작업을 진행한다. 개발이 완료되었을 때 작업된 커밋 내용들을 Squarsh Merge를 이용해서 병합한다. Squarsh Merge를 통해 Develop 브랜치에 병합된 내용들을 Release, Main 브랜치에 동기화 시킬 땐 일반적인 Merge를 이용한다. 정리하자면 아래와 같다. 신규기능 브랜치 --Squarsh Merge--> Develop Develop --(Default) Merge--> Release Release --(Default) Merge--> Main 이와 .. 2021. 9. 26.
(구구만 고생하신) SonarCloud 적용기 summary 우아한테크코스 레벨4 HTTP 서버 구현하기 미션을 진행하던 중이었다. 미션대로 구현을 완료하고 PR(Pull Request)를 작성했는데 정적분석 툴 SonarQube 가 자동으로 동작하고, 분석 결과도 PR 페이지에서 곧장 보여주고 있었다?! 자세히보니 SonarQube가 아니라 SonarCloud 였다! SonarQube에서 제공하는 Github 연동 서비스는 유료로 알고 있는데, SonarCloud의 경우 무료로 이용할 수 있었다!! 마침 Babble 팀에서도 배포 했을 때가 아닌 PR을 작성 했을 때 정적분석이 이뤄지길 바라고 있었고, 분석 결과를 PR 페이지에서 곧바로 확인할 수 있다는게 너무 멋져서 도입을 고려하게 되었다. SonarCloud에 대해 조사하다보니, SonarCl.. 2021. 9. 23.