Development/DevOps 11

Apache JMeter를 활용한 부하테스트

Intro 부하테스트는 여러명의 사용자가 동시에 어플리케이션에 요청을 보내는 상황을 시뮬레이션 하여 다양한 부하조건에서의 응답을 테스트 하는 과정 입니다. 얼마만큼의 요청을 견딜 수 있는지 테스트 함으로서 병목 구간을 찾아 성능 개선을 하거나 서버를 증설하는 등의 필요한 대응을 할 수 있습니다. 다양한 테스트 툴이 있지만, 사용하기 쉬운 JMeter를 활용해 간단한 테스트를 진행 해 보겠습니다. 설치 Apt-cache로 검색을 해 봤더니 이미 apt 저장소에 있길래 apt를 이용해 설치 해 보았습니다. sudo apt install jmeter https://jmeter.apache.org/download_jmeter.cgi MacOS 유저라면 brew로 설치 하셔도 되고, Apache 홈페이지를 통해 ..

Development/DevOps 2022.04.26

Docker) MariaDB 컨테이너 설치하기. IntelliJ IDEA 로 DB 접속하기

Intro 입사 전 국비학원에서 Oracle Database 교육을 몇주간 짧게 받은게 전부였는데 입사 후에도 맡은 프로젝트들에서 JPA를 사용하다 보니 쿼리를 직접 짤 일이 많지 않았습니다. 데이터베이스 공부를 따로 하려고 했는데 자바 심화과정, 스프링, JPA, 운영체제, 자료구조 및 알고리즘 등 평소 너무나도 공부하고싶었던 것들이 너무나도 많았다보니 자연스레 우선순위에서 밀려 아직까지도 손을 대지 못하고 있습니다. 업무중에 드문 드문 조금이라도 복잡한 쿼리를 짜내야 하는 일이 생길 때 마다 개념은 어렴풋 알고 있어도 정확한 사용법을 모르는 문법이나 함수 등을 매번 검색하다보니 병목이 생기는 구간이라는게 명백해졌습니다. 병목구간을 알면서도 외면하기엔 양심의 가책이 큽니다. 학습도 중요하지만 꾸준히 사..

Development/DevOps 2022.03.26

Swagger 활용 API Document 자동 생성

Intro 프론트엔드와 백엔드의 업무가 점점 더 구분되어가고, MSA가 보편화되고 있는 지금의 추세에서 RESTAPI의 쓰임이 점점 더 많아지고 있습니다. 외부에 공개하는 API 뿐만 아니라 소프트웨어 내부적으로만 사용하는 API라고 해도 어플리케이션이 점점 커질수록 개발자의 기억력에만 의존하기에는 그 규모가 점점 버거워지기 마련입니다. 특히나 API를 공개하거나 개발자간의 협력에서 필요한 상황이 오면 체계화된 읽기 좋은 API Document의 작성은 선택이 아닌 필수입니다. 마침 회사에서 진행중인 프로젝트에도 조금의 여유가 생겨 API Document 정리를 해야할 때가 왔습니다. 여러가지 오픈소스 선택지가 있습니다만 이번에는 Swagger를 선택해서 테스트를 진행 해 보았으며 꽤나 만족스러웠습니다...

Development/DevOps 2022.02.23

인코딩 깨진 한글 파일 이름 복구하기

Intro 파일들을 주고 받다보면, 사용하고 있는 운영체제와 상관 없이 한글 파일명이 알아볼 수 없게 깨져있는 경우가 종종 있습니다. 특히 인터넷에서 파일을 다운받았을 때 그런 일이 많은데.. 모두 아시는 것 처럼 인코딩 문제 입니다. 파일명이 중요하지 않다면 그냥 한번 열어보고 말면 되지만, 파일명이 중요해서 꼭 알아야 할 때는 굉장히 절망적입니다. 다행인 것은 단방향 암호화처럼 원본 데이터가 손상된게 아닌 단지 인코딩문제로 못 알아보는 것 이기 때문에 다시 디코딩을 해 주면 원래의 파일 명을 알아 낼 수 있습니다. 원인 왠만한 인코딩 문제는 이렇게 못 알아 볼 정도는 아닌데. euc-kr로 인코딩 되어 있는 경우에는 이런 상황이 됩니다. 요즘에는 흔하게 일어나지 않는데, 오래된 소프트웨어를 사용하다 ..

Development/DevOps 2022.01.06

Docker) 도커로 Tomcat 컨테이너 실행

Intro log4j 취약점 테스트 진행 중 로컬에서 테스트하기에는 부담이 있어서 도커를 이용해 가상환경에서 하고자 합니다. 간단하게 톰캣만 돌리면 되는데, 우분투 컨테이너를 생성해서 JDK 설치하고 jar파일을 바로 실행 해 돌리다가, 이제 war로된 프로젝트로 테스트를 하려니 외장 톰캣이 또 필요해져서 어차피 이렇게 하나씩 올리면서 할꺼, 그냥 톰캣 컨테이너 만들어진걸 쓰게 되었습니다. 제가 나중에 필요할때 쉽게 찾아 할 수 있게, 또한 혹시나 또 필요한분이 있으시면 도움이 되었으면 하는 마음에 글로 간단하게 정리 해 올려 둡니다. Tomcat 공식 Tomcat 이미지 https://hub.docker.com/_/tomcat 딱히 복잡할 건 없고 docker run tomcat:9.0 이면 간단하게 ..

Development/DevOps 2021.12.23

Puppeteer 활용 브라우저 테스트 자동화

https://developers.google.com/web/tools/puppeteer 소개 Headless 브라우저에 대한 이해가 필요 합니다. 해당 내용은 https://shanepark.tistory.com/290 에서 확인 하실 수 있습니다. Puppeteer Puppeteer는 Chrome 팀이 개발한 Node 라이브러리 입니다. Headless 혹은 온전한 크롬도 컨트롤 할 수 있는 고차원 API를 제공 하며, Panthom이나 NightmareJS 등 이전의 자동화 테스트 라이브러리들과 비슷하게 작동합니다. 특징 Broswer에서 여러분이 수동으로 하는 대부분의 일들을 Puppeteer를 통해 할 수 있습니다. 몇가지 사용 예제 페이지의 스크린샷 혹은 PDF 파일 생성 싱글 페이지 어플리케..

Development/DevOps 2021.11.30

Headless Chrome 브라우저 테스트

https://developers.google.com/web/updates/2017/04/headless-chrome Intro Headless Chrome은 Chrome 59 버전에서 추가되었습니다. Headless Chrome이 추가되기 이전에는 보통 PhantomJS 를 이용해서 Headless 웹 테스팅을 했다고 하는데요, Chrome이 Headless Chrome 기능을 업데이트 하자, PhantomJS는 개발 중단을 선언 했습니다. 아무래도 크롬이 직접 제공하다 보니 서드파티 소프트웨어를 사용할 필요가 줄어들 수 밖에 없습니다. @Before Chrome alias 설정 Chrome 명령어를 쉽게 사용하기 위해 alias를 선언 해 줍니다. 저는 MacOS나 Linux에서 모두 zsh를 사용하..

Development/DevOps 2021.11.30

도커 컨테이너 백업

도커 컨테이너 백업하기 Intro 최근 집에서 서버로 사용중이던 컴퓨터가 알수없는 이유로 자꾸 다운이 되는 바람에 우분투 서버를 한번 새로 깔아보려고 합니다. 저번에 아무 대책 없이 다 날리고 우분투를 깔았다가 서버를 다시 셋팅하느라 참 고생을 했었는데.. 그 때 그 고생을 줄이기 위해 로컬에는 아무것도 올리지 않고 도커만 사용하고 있습니다. 사실 회사에서는 능력이 출중하신 선배님께서 docker-compose 를 이용해 모두 세팅을 마쳐 두시고, 볼륨도 다 지정 해 두었기에 서버를 옮기거나 한다고 해도 docker-compose.yml 을 비롯한 셋팅 파일과 볼륨 폴더만 쏙 빼가면 되는데.. 제가 세팅했을 때에는 그런 환경을 몰랐을 때라 도커도 힘겹게 셋팅했던 기억이 납니다. 지금이라도 compose로..

Development/DevOps 2021.11.25

SSH를 이용한 Proxy, Dynamic Port Forwarding (SOCKS)

Dynamic Port Forwarding 을 이용하면 ssh client의 로컬에 SOCKS 프록시 서버로 동작하는 소켓을 만들 수 있습니다. 클라이언트가 해당 포트에 접속하면, 그 연결은 리모트(ssh server) 머신으로 포워딩 되며, 목적지의 dynamic port로 전달 됩니다. 이 때, SOCKS proxy를 사용하는 모든 어플리케이션은 SSH 서버에 접속되며, 서버는 모든 트래픽을 실제 목적지로 전달 합니다. Linux, macOS 등 Unix 시스템에서는 아래와 같은 방법으로 dynamic port forwarding(SOCKS)을 생성 할 수 있습니다. ssh -D [로컬아이피:]로컬포트 [USER아이디@]SSH서버 ​ 바로 실습 해 보겠습니다. 아래의 주소의 curl을 보내면 외부 아..

Development/DevOps 2021.10.28

나만의 라이브러리 만들어 jitPack으로 배포하고 Maven/Gradle 에서 사용하기

Intro 나만의 유틸리티 / 모듈 프로젝트를 배포 해야 하는 이유 중복 코드 프로젝트를 진행하다 보면 여러 프로젝트 에서 공통으로 사용되는 유틸리티성 클래스를 만들 때가 있습니다. Apache의 Commons같은 경우가 재 사용 가능한 자바 기반의 컴포넌트들을 아놓은 통합 프로젝트로서 그런 용도로 사용됩니다. 하지만 모든 사용자에게 맞는건 아니여서 누구든 자주 사용하던 자신만의 유틸성 클래스를 꼭 만들게 되는데요. 여기저기 사용 된다고 해서 한번 만든 유틸성 클래스를 여러곳에 복사해서 붙여넣으면, 작업하다가 어디에선가 문제가 발견되었을때 여태까지 해당 클래스를 사용한 모든 클래스를 하나 하나 열어 코드를 일일히 찾아서 바꿔줘야 하는 번거로움이 있습니다. 자신만의 하나의 유틸리티성 통합 프로젝트를 만들어..

Development/DevOps 2021.09.12

docker container에서 localhost 접속하기 host.docker.internal

docker에서 컨테이너들이 실행 중인 서버를 바라 봐야 할 경우가 있습니다. Docker Compose를 이용해 여러개의 도커 컨테이너를 실행해서 하나의 어플리케이션을 담당한다고 했을때, 하나의 네트워크로 연결해 사용하게 되는데요. 정작 컨테이너에서 로컬 서버에는 어떻게 접근해야 할까요? 제 맥북에서 사용중인 Docker에는 컨테이너가 아직 PostgreSQL 하나밖에 없어서, 이 컨테이너를 이용해서 시도 해 보겠습니다. ​ 제 컨테이너 같이 DB 서버라면 사실 필요할 일은 없지만, Apache나 NginX 같은 웹 서버의 경우는 흔하게 필요한 상황이 발생 할 수 있겠습니다. ​ 일단 해당 Container로 접속 해 보겠습니다. GUI환경이라면 위에 보이는 CLI 버튼으로 쉽게 접속 해 터미널을 띄울..

Development/DevOps 2021.08.21