맥북 실리콘 환경에서 도커를 통해 ngrinder를 실행하고 포트 변경하는 경우가 많을 것 같아 여러 포스팅을 찾아보았는데, 정리된 블로그가 마땅히 없어 정리하게 되었습니다. 우선, 맥북 m1 로컬 환경에 ngrinder를 직접 설치하려하니 환경 설정을 신경쓰기가 싫어 Docker를 통해 ngrinder를 실행하고자 했습니다. 추가로, ngrinder는 기본 값으로 8080포트를 사용하는데, 저는 백엔드 로컬에서 8080 포트를 사용하고있어 7070 포트로 ngrinder가 실행되게끔 변경했습니다. 굉장히 쉬울 것이라 생각했는데 이리저리 삽질을 하다가 ㅜㅜ.. 한 분께서 정리해주신 블로그를 통해 해결했습니다. 여기서 저는 포트 변경을 추가로 수행했습니다. silicon MacBook 에서 nGri..
Backend
프로젝트에 레디스 Cache를 적용하며 많은 에러를 경험했습니다. 그리고 에러를 해결하며, 정확히 이해하지 못했던 개념들을 다시 되짚어볼 수 있었습니다. 레디스 Cache를 적용하며 겪은 에러는 크게 4가지인데, 하나씩 살펴보며 해결책과 관련 개념을 정리했습니다. 우선, 요구사항은 다음과 같았습니다. 서비스에서 이루어지는 메서드 들 중 findUsersById 를 통해 사용자 인증 과정을 거치게 했는데, 아래의 findUsersById 메서드에서 DB에 접근하는 횟수를 줄이는 것이 목표였습니다.public UserEntity findUsersById(Long userId){ return userRepository.findById(userId) .orElseThrow(()..
Docker compose 실행 중 다음과 같은 오류를 만났습니다. docker.errors.DockerException: Error while fetching server API version: HTTPConnection.request() got an unexpected keyword argument 'chunked'더보기전체 에러 코드$ sudo docker-compose up -dTraceback (most recent call last): File "/usr/lib/python3/dist-packages/docker/api/client.py", line 214, in _retrieve_server_version return self.version(api_version=False)["ApiV..
젠킨스를 올바르게 설정했는데 9090 포트로 접속하니, 계속해서 접속이 되지 않는 상황이 생겼습니다. 세 가지를 확인해 해결했습니다. 1. 젠킨스 설정과 Docker부터 Docker-Compose까지 올바른지 전부 확인 docker-compose.yml파일이 올바른지 확인합니다. yml 파일을 작성할 때 주의해야할 점은 아래와 같습니다.1. 첫 줄에는 도커 컴포즈 버전을 적는다.2. 주 항목에는 services, networks, volumes가 있고, 들여쓰기를 해서 하위 항목들을 작성한다.3. 들여쓰기는 몇 칸이든 상관은 없지만, 2칸으로 하기로 했으면 모든 내용들이 2칸으로 동일해야한다.4. 이름 뒤에는 무조건 : 를 붙인다.5. : 과 - 뒤에는 반드시 공백이 하나 있어야한다. Docker ..
JaCoCo는 Java 코드의 커버리지를 체크해주는 라이브러리입니다. JaCoCo를 통해 테스트 결과가 커버리지 기준을 충족하지 못하면 프로젝트 빌드가 실패하도록 설정할 수 있습니다. 또 테스트 커버리지 결과를 html 등의 리포트로 확인할 수 있습니다. 리팩토링 중인 프로젝트에 Jacoco를 도입해보았습니다. JaCoCo 공식 문서와 우아한 기술 블로그(Gradle 프로젝트에 JaCoCo 설정하기) 를 참고했습니다. JaCoCo 플러그인 추가 우선 저는 Gradle 프로젝트에 해당 라이브러리를 추가했습니다. build.gradle 설정에 아래 코드를 추가합니다. plugins { id 'java' ... id 'jacoco' } jacoco { //JaCoCo 버전 (최신) toolVersion = "..
프로젝트 리팩토링 도중, 이틀을 고민한 부분이 있습니다. 바로 DTO가 어느 계층까지 내려와야하는 것인지에 대한 고민이었습니다. 지나고보니 그렇게까지 오래 고민할 필요는 없는 것 같지만..? 고민했던 부분들이 누군가에겐 도움이 되었으면 하는 바람에 이 글을 쓰게 되었습니다. 결론부터 말하면, 정해진 정답은 없다는 것입니다. 개발하는 서비스마다 다르고, 같은 서비스에서도 기능마다 다를 수 있습니다. 1. DTO란?우선 DTO란 계층간 데이터 교환을 위해 사용하는 객체입니다. 이때 계층은 Presentation(View, Controller), Business(Service), Persistence(DAO, Repository)로 나뉘게 됩니다. 스프링 프레임워크에 익숙한 개발자들은 보통 Controll..