회고/주간 회고

    Google Search Console 수집 불가 및 Page Insight 점수 안 뜨는 문제 관련 문제 회고 (쿠키, API 설계 관련 문제)

    문제 Page Insight 점수가 제대로 측정되지 않고, Google Search Console 에 일부 페이지가 Server Error 로 정상적으로 수집되지 않고 있다는 정보를 전달 받았다. Page Insight 화면 에러 표출 한국어로는 필수 traces 수집기가 실행되지 않았습니다. 라는 메세지가 표출 Google Search Console 크롤링 결과 화면 Page fetch 에 Failed: Server error (5xx) 가 표출되며 정상적으로 크롤링이 이뤄지지 않음 원인 파악 힌트 사내 직원 컴퓨터에서는 해당 페이지가 정상적으로 접속됨 QA 과정도 무사히 통과했음 서버상엔 에러 로그가 표출되지 않음 어떠한 VoC 도 들어오지 않음 아마 이용자는 이 문제에 별로 불편을 느끼지 못할만한 ..

    레디스 코드 변경과 함께 일어났던 인프라 문제 회고

    프로덕션 환경 및 주요 라이브러리 윈도우즈 서버 MSSQL Spring Framework 4.3.30.RELEASE Maven 리포지토리 Java 1.8 Redis 5.0.7 Elastic Search 7.17 Spring Session Data Redis 1.3.1.RELEASE Lettuce 6.1.4.RELEASE Mybatis 환경만 봐도 꽤 레거시 서비스이다. 히스토리와 개선 필요성 SI 업체에 의해 서비스가 만들어짐 서비스 자체가 3년이 안됐는데 스프링 4버전을 채택하는 등 기술 선택에 대한 미스가 많았다. '오래된 기술은 나쁘다.' 라는 단순한 이유가 아니라 기술 선택에 대한 이유 없이 그냥 쓴 것이 잘못이라고 생각한다. 초기엔 이용량이 적었기 때문에 인덱싱이나 쿼리 속도에 대..

    회사에서 있었던 레디스 코드 대형 리팩토링 회고

    초기의 상황 설명 회사에 Redis 를 이용하는 코드가 있었다. 환경은 자바, 스프링 프레임워크 (4.3.30), Lettuce 를 사용했다. 레디스 이용시 CPU 나 메모리가 팍팍 튀는 현상이 생겼다. 레디스의 코드를 살펴보니 커넥션 풀을 직접 관리하고 있었고, 클라이언트 코드도 정제가 잘 안되어있어 코드의 의도도 알아보기 힘들었다. 리팩토링을 결심했다. 기존 레디스 코드 살펴보기 레디스 유틸 // 레디스 유틸 함수쪽 내용 public void nonClusterAppend(String key, String value) throws Exception { RedisClient client = RedisClient.create(getRedisUri()); client.setOptions(ClientOpti..

    인텔리제이 톰캣 로그 실종 및 스프링 세션 springSessionRepositoryFilter(DelegatingFilterProxy 타입) 빈을 찾지 못하는 에러에 대한 회고

    톰캣 로그 실종 web.xml 에서 필터를 하나 수정했다. DelegatingFilterProxy 타입의 springSessionRepositoryFilter 빈을 주석해제하여 이용하고 싶었다. 정상적으로 동작할 것 같았는데, 톰캣 초기화 과정에서 오류가 발생하고 정상적으로 톰캣이 실행되지 않았다. 설상가상으로 오류는 콘솔 창에 로그로 표기되지도 않았다. 로그 18-Apr-2023 10:29:12.540 SEVERE [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal One or more Filters failed to start. Full details will be found in the app..

    잘못된 도파민 보상 체계를 만들었던 경험 회고

    회고하게 된 이유 요즘 너무 보상만을 바라고 행동하는 경향이 잦아짐과 동시에 행동 자체에 대한 재미가 조금 사라지는 현상이 있었다. 이 현상이 보기보다 더 큰 문제인 이유는 내가 이 방식이 맞다고 생각하는 그릇된 생각을 가졌기 때문에 이번 기회에 인지하지 못했으면 계속 잘못된 생각을 가지고 무언가 노력하다가 결국 나가떨어졌을 것 같기 때문에 엄청 큰 문제이다. 난 이 현상의 문제 자체를 전혀 인지하지 못하고 있었다. 왜인지 모르게 내 자신에 대한 집중도가 낮아졌던 것 같다. 보상만을 생각하지 말고 원래 과정도 즐겼듯이 과정에서도 항상 즐거운 마음을 잃지 말도록 하자. 이 노력은 나에게 좋은 노력이라는 것을 계속 되새겨야 한다. 도파민 분비 방식을 잘 이해하자. 원본 영상 https://www.youtub..

    스프링 초기 세팅 시 뜬 에러 메세지 관련 회고 (Invalid bean definition with name 'xxx' defined in null)

    스프링 초기 세팅 관련 에러 갑자기 프로젝트가 이상해져서 초기부터 세팅하는데 아래와 같은 에러 로그 메세지가 떴다. Invalid bean definition with name 'rootURL' defined in null 잘 보니 globals.properties 에 있는 값을 가져오지 못해서 그랬다. ${Globals.web.xxx} 값을 가져오지 못하고 있었다. 원인 -Dspring.profiles.active=local 을 VM Options 에 주지 않아서였다. 그래서 profiles.active 를 찾지 못하니 올바른 디렉토리 경로의 globals.properties 를 찾지 못했다. 보통 .properties 파일들이 local/globals.properties, prod/gl..

    JS 에서 selector 를 이용할 때 NPE 를 늦게 캐치하는 문제에 대한 회고

    JS 에서의 NPE (Null Pointer Exception) 가 문제가 되었던 이유 타입스크립트 없는 바닐라 JS로 코딩을 하다보니 런타임이 아니면 NPE 를 눈치챌 수 없었다. IDE 에서 도움을 줄 수 없다. JS 에서 주로 DOM 엘리먼트에 대한 작업을 하는데 대부분 브라우저 내장 API 를 통해 작업이 진행된다. 브라우저 내장 API 를 이용하다보니 메서드를 통해 불러오게 된다. DOM 을 불러올 때 보통 document.querySelector() 를 이용해 불러왔다. 그런데 DOM 은 조건부로 생성되는 경우가 많은데 DOM 이 없는 경우 document.querySelector() 메서드의 결과가 null 을 가리키게 된다. 처음엔 null 을 가리킨지 모르고 . 을 통해 메서드를 불러오니..

    message_en_US.properties 파일을 찾지 못하는 에러 발생 회고

    다국어를 못찾는 에러 자바에서 new Location("en_US") 등으로 로케일 설정을 했을 때 message_en_US.properties 파일을 정상적으로 찾지 못했다. 대신 message_en_us.properties 파일을 찾아냈다. 아래 원인을 보면 알겠지만, 대소문자 일반화에 대해서 Locale.defaultLocale() 과 new Locale("ko_KR") 의 결과가 달라서 발생했다. 원인 근본적 원인 Locale 클래스의 Locale.defaultLocale() 이라는 정적메서드의 미묘한 동작 때문에 발생했다. 운영체제에 있는 로케일 정보를 가져올 때는 ko_KR 과 같이 대소문자에 대한 일반화를 안하고 가져오고, 내가 직접 생성자로 new Locale("ko_KR") 과 같이 생성..

    AWS 타겟 그룹 헬스체크 설정으로 인한 장애 회고

    AWS 타겟 그룹 헬스체크 설정으로 인한 장애 회고

    문제 현상 운영업무의 일환으로 AWS IAM 을 이용하여 AWS 타겟 그룹을 수시로 모니터링하고 있다. 최근 모니터링 중 타겟 그룹에 있는 타겟 인스턴스의 Health status 가 계속 unhealthy 상태가 되며 타겟 그룹에서 제외되는 현상이 발생했다. 총 3개의 타겟 인스턴스가 운영 중인데, 그 중 1개의 타겟 인스턴스 CPU 사용률이 매우 올라가면, 이상하게 CPU 사용률이 낮은 다른 타겟 인스턴스가 타겟에서 제외됐다. 모니터링하는데는 AWS 에서 제공하는 ELB V2 CLI 의 describe-target-health 메서드를 이용하고 있다. 해결 AWS 헬스체크 설정을 통해 해결했다. AWS 로드 밸런싱 타겟 그룹의 헬스 체크 설정을 좀 더 느슨하게 만들었다. Unhealthy thresh..

    2023년 2월 3.5주차 회고

    사내 정치 김영한님의 수강생 20만명 달성 기념 라이브에서 김봉진 대표님이 했던 말을 듣고 많은 생각을 했다. '업무를 잘하는 것은 사내 정치를 포함하는 것이다.' 그리고 아래와 같은 잠정적인 결론을 냈다. 사내 정치를 무조건 나쁜 시선으로만 보지 말자. 내가 원하는 바람직한 기술적 변화를 일으키기 위해 논리보다 강력한 수단이 될 수 있다. 인간은 이성보다는 감성으로 더 많이 움직인다는 것을 항상 염두에 두자. 스티브 잡스 이야기 며칠 전부터 스티브잡스에 대한 유튜브를 많이 봤다. 그는 뛰어난 능력과 대비되는 나쁜 성격으로 유명한 사람이다. 이를테면 옷을 이상하게 입었다고 직원을 해고하는 사람이다. 사실 이건 누구나에게 알려진 사실이고, 그 이외에 추가적인 그의 특이한 점을 발견했는데 인상..

    쿠키와 Iframe 으로 인한 트러블 슈팅 회고

    원인 클라이언트사에 Iframe 에 embed 시킬 수 있는 전용 미니 웹페이지를 제공했다. 문제는 Iframe 에 embed 된 웹사이트에서 쿠키가 함께 사용되었다. 여기서 문제가 생겼다. 쿠키는 자신이 사용되어야 할 곳을 도메인 으로 구분한다. Iframe 은 aaa.co.kr 도메인 내의 페이지를 보여준다. Iframe 을 보여주는 웹페이지 자체는 bbb.co.kr 이었다. aaa.co.kr 에서 bbb.co.kr 의 쿠키를 받으니 쿠키는 매 응답마다 왔지만 바로 버려졌다. 브라우저 내부에서 Iframe 으로부터 전달받은 쿠키를 그대로 사용하면 보안상 이슈가 생긴다. 브라우저 초창기에는 Iframe 으로부터 전달받은 쿠키를 그냥 사용했으나, 점차 이를 악용하는 피싱 사이트들이 생겨났다. 마음만 먹으..

    2023년 2월 2주차 임대차 계약 관련 회고

    2023년 2월 2주차 회고 드디어 집을 구했다. 1월 말과 2월 초는 집을 구하느라 매우 바빴다. 결과적으로 내 문제를 해결해주는 집을 구했다. 몇가지 아쉬운 협의점도 있지만, 결과적으로는 손해가 아니라서 감내하기로 했다. 집에 잔존했던 문제들 현재 살고있는 집도 나쁘진 않았지만, 몇가지 문제가 있었다. 이건 정리해두면 도움이 될 것 같아 따로 정리한다. 소음 관련 문제 지금 살고 있는 곳은 법적으로 '근린생활시설'이다. '근린생활시설'은 주거용 혹은 상업용으로 선택하여 쓸 수 있는 시설이다. 1층에 택배회사가 있는데 이 회사에 아침마다 택배를 싣는 대형 트럭이 들어와서 매우 시끄럽다. 나는 개인적으로 소음에 민감하다. 작은방에서 자면, 소음이 없는 편인데 큰 방에서는 개인..

반응형