전체 글

갑자기 팀원들한테 테스트 서버가 접속이 안된다고 연락이 왔다. 분명 어제도 배포 workflow가 동작하고 정상 작동하는 것을 확인했기 때문에 이상해서 로그를 확인했더니, 처음 보는 로그가 있었다. 확인해보자.Caused by: org.redisson.client.RedisAuthRequiredException: NOAUTH Authentication required.  NOAUTH Authentication required. 란NOAUTH Authentication required는 비밀번호가 설정되어 있음에도 AUTH 설정이 안되있어서 발생하는 에러이기도 하다. 이를 확인하려면 redis-cli에 접속해보자. 필자는 Docker container로 redis를 관리하고 있으므로 조금 다른 명령어를 사..
Nginx는 프론트부터 백엔드까지 프로젝트를 배포 및 운영하려면 꼭 고쳐야할 관문처럼 하나라고 생각한다. 하지만 처음 접하면 색깔도 없는 터미널에서 글자 하나만 틀려도 오류가 발생하고 원인을 찾는 것도 굉장히 어려워 골머리를 앓곤했다. 물론 쉬운 방법만이 능사는 아니지만, 기술적 역량이나 아키텍처에 공을 들여야하는 부분이 아니다보니 세세한 인프라 설정에 시간을 들이는 것 보다 어플리케이션 단에서 기술적 챌린지에 시간을 쏟는게 더 낫다고 본다. Nginx Proxy Manager 란Nginx Proxy Manager는 Nginx를 Web console기반으로 관리 가능한 GUI 오픈소스이다. 꽤 많은 유즈케이스를 커버 가능한데, 단순 서버 프록시 (라우팅)부터 정적 파일 호스팅까지 가능하다. 🚨 정적 파..
서론서비스 운영을 해나가면서 기존에 수작업으로 서버 health check하는 방식으로는 서비스를 모니터링하기 어려워 프로메테우스를 도입해 서버 매트릭을 수집하고 그라파나를 커스터마이징해 삐삐 서비스를 위한 대시보드를 구축했습니다. 이를 통해 모니터링을 손쉽게할 수 있었지만, 또 다른 문제점이 있었습니다.삐삐는 24시간 라이브 서비스 중이지만 백엔드 개발자가 24시간 대시보드를 볼 수 없는 노릇이었습니다. 또, 프론트(iOS와 AOS)의 통합 테스트는 함께 진행하였지만, 모바일 플랫폼의 특성 상 심사를 거쳐 배포를 해야므로 배포할 때마다 대기할 수도 없었습니다. 그 외에도 API와 클라이언트 간의 버저닝이라던가 슬랙에 쌓이는 에러 로그 관리, 모바일 플랫폼 마다 따로 대응해줘야 하는 트러블슈팅 등 고려할..
들어가기 전에서비스 런칭 초기 유저가 급격히 유입되었지만, 사소한 버그가 유저 경험에 악영향을 미쳐 유저 이탈이 발생하는 것을 종종 보았습니다. 실제로 삐삐 서비스(https://bibbi.app/) 배포 이후 발생한 버그를 뒤늦게 발견하고 일하던 중 급히 뛰어나가 전화를 돌리며 문제를 파악하고 핫픽스 하는 경험을 했고.... 🥲 이로인해 팀 내에서 서비스 모니터링이 필요하다는 의견이 나왔습니다. 실제로 서비스를 운영하고 많은 양의 트래픽이 발생하면서 기존의 스프링 부트 터미널 로그로는 에러 추적이나 트래픽 관측이 불가능하다고 느꼈습니다. 실시간으로 많은 양의 로그가 쌓이고 있기 때문에 터미널에서 plain text로부터 원하는 데이터를 찾는 것은 굉장히 어려웠고, 24시간 로그를 확인할 수 없는 노릇..
최근 회사 업무 공부를 위해서는 로우레밸 기술(이라하지만 흔히들 레거시라고 부르는 기술)들을 공부하고 사이드 프로젝트는 최신 기술 및 버전을 사용하다 보니, 버저닝 관리 실패로 발생한 오류였다. 원인쿼리를 날리는 과정에서 SSLHanndshakeException으로 인해 DB Connection 획득을 실패해 conn이 null인 에러가 발생했다.The last packet successfully received from the server was 65 milliseconds ago. The last packet sent successfully to the server was 61 milliseconds ago. at java.base/jdk.internal.reflect.NativeConstructo..
새로 추가된 기능들이 있어서, 오랜만에 통합 테스트를 추가하고 실행하는데 에러가 발생했다. 스프링 어플리케이션 자체 실행에는 문제가 없고 테스트는 정상적으로 실행되지만, 테스트 로그에는 엄청난 양의 에러 로그가 남고 Build 결과에도 에러가 가득했다. 트러블 슈팅 현상 분석 에러 로그가 엄청나게 길지만 결국 아래 로그가 반복되고 있었다. java.lang.instrument.IllegalClassFormatException: Error while instrumenting sun/security/ec/SunEC$1 with JaCoCo 0.8.8.202204050719/5dcf34a. at org.jacoco.agent.rt.internal_b6258fc.CoverageTransformer.transfo..
@DataJpaTest를 이용한 Repository 테스트 중 본 어플리케이션 실행에서 발생하지 않던 DDL에서 예외가 발생했다. H2 ↔️ MySQL 문법 차이로 인해 테이블이 제대로 생성되지 않는 것으로 보여서 application-test.properties 를 계속 수정했지만 해결되지 않았다. 문득, 지난 번에도 @DataJpaTest 테스트에서 발생하는 에러를 @AutoConfigureTestDatabase으로 해결한 기억이나서 시도하였고 해결되었다. 그때도 디버깅 과정 기록을 미뤄두고 있었는데, 이 참에 블로깅하고 장기 기억으로 가보자. 문제 분석 시도할 때마다 다양한 예외가 발생하고 인터넷에도 다양한 예외 케이스가 있는데, 데이터베이스 설정 문제이거나 DDL 혹은 SQL 문법 오류다. 공통적..
소마 멘토님과 배포 DB의 데이터를 직접 수정하는 일에 대해 이야기하는 도중에 터미널을 켜는 나를 보고 깜짝 놀라며 터미널로 관리를 하고 있냐고 물었던 것이 아직도 기억난다. 컬럼명 조차도 제대로 보이지 않는 mysql cli를 썼던 이유를 생각해봤더니, 백엔드 개발을 여기저기서 배울 때 이렇게 하는 것만 봐왔고 프로젝트 개발까지만 하고 유지보수 단계까지 가보지 않아 불편함을 크게 느껴보지 못해서 였던 것 같다. Datagrip을 배우면서 신세계를 맛보고 여기저기에 츄라이해왔는데, 불호하는 사람은 못본 것 같다. 하나 아쉬운 점은 public subnet에 있어야만 가능해서 보안적으로 아쉽다는 것이었는데, 내가 모르는 것이였다.... SSH Tunneling을 통해 안전하면서도 편하게 DB를 다룰 수 있..
이전 노션 블로그의 Transaction 이란? (2020.12.22)로부터 마이그레이션된 글입니다. 트랜잭션, Transaction 이란? Transaction이란, DB의 상태를 변화시키기 위해 수행하는 작업의 단위를 뜻한다. DB의 상태를 변화시킨다는 것은 아래의 SQL을 이용해서 DB에 접근하는 것을 의미한다. SELECT INSERT DELETE UPDATE 착각하지 말아야 할 것은 작업의 단위는 SQL 한 문장이 아니다. 많은 SQL 명령문들을 사람이 정하는 기준에 따라 정하는 것이 작업의 단위다. 계시판을 예를들어 보면, 사용자가 게시글을 작성하고, 업로드 버튼을 누른다. 그 후에 다시 게판에 돌아왔을 때, 게시판은 자신의 글을 포함한 업데이트된 게시판을 보게 된다. 이러한 상황을 DB 작업..
이전 노션 블로그의 빌드 관리 도구 Maven과 Gradle 비교하기 (2021.01.06)로부터 마이그레이션된 글입니다. 빌드 관리 도구란? 프로젝트 생성, 테스트 빌드, 배포 등의 작업을 위한 전용 프로그램 프로젝트에서 작성한 java 코드와 프로젝트 내에 필요한 각종 xml, properties, jar 파일들을 JVM이나 WAS가 인식할 수 있도록 패키징해주는 빌드 과정 = 빌드 자동화 도구 프로젝트에 필요한 외부 라이브러리들의 종류와 버전들, 종속성 정보를 명시하여 자동으로 다운로드하고 관리하는 도구 Maven Maven은 Java용 프로젝트 관리도구로 Apache의 Ant 대안으로 만들어 졌다. 빌드 중인 프로젝트, 빌드 순서, 라이브러리 종속성 관계를 pom.xml 에 명시한다. 외부저장소에..
sckwon770
sckwon770