본문 바로가기

개발

(37)
오류 요약해서 남기기 수정 이력- 24.10.01 server name 및 ip 정보 추가문제 제기우리 팀에선 개발하면서 발생하는 오류들을 슬랙 봇으로 요약해서 보여주고 있었다.하지만, 오류를 그대로 출력했기 때문에 상황에 따라선 불필요한 내용이 많아져 제대로 읽기 힘든 상황들이 있었다.이런 불편함을 해소하기 위해 오류 메시지를 어떻게 요약해서 보여줄 수 있는지 고민한 결과 다음 형태가 나올 수 있었다.초기 오류 메시지 형식구분: java.lang.NullPointerException 클래스: Test1.java 메소드: testMethod1 사유: at com.mapp.server.util.ExceptionInstrumentationUtil.handleFatalThrowable(ExceptionInstrum..
[Java] p6spy 긴 바인딩 로그 치환하기 문제 상황이미지 저장 시, p6spy 로그 길이가 너무 길어짐운영서버에 적용하지 않은 로그였지만, 개발 서버의 로그 용량이 불필요하게 커졌다.이 글에서 다루지 않는 부분성능 이슈설치법해결 방법다음 블로그를 참고했다. p6spy 구조를 잘 정리해놨고, 샘플 코드도 있다.https://backtony.tistory.com/34여유가 있다면 글을 정독하는 것도 좋다.  post 테이블의 image 컬럼에 test란 값을 넣을 때 바인딩 로그는 다음과 같다.insert into post (image,id) values ('test',default)우리가 보내는 데이터는 작은따옴표(’)로 둘러쌓이기 때문에 이 값들만 뽑아내, 길다 싶은 문자열을 잘라내거나 다른 문자로 치환하면 된다.이 값을 추출하는 작업을 정규표..
[python] pandas csv 분할 중 .0 .1 문제 문제 상황python pandas를 사용해, csv를 일정 라인씩 분할하는 과정에서 일부 데이터 끝에 .0, .1이 붙음python 3.10pandas 2.2.2문제 배경oracle DB로 데이터를 이관해야 함보안 정책 문제로 DB dump를 못해 데이터를 csv로 넣어줘야 했음이마저도 큰 csv를 올리면 컴퓨터가 터져서 분할해야 했음문제의 파이썬 코드# CSV 파일 읽기df = pd.read_csv('파일명.csv')# 전체 row 수total_rows = len(df)# 500만 row씩 파일로 저장chunk_size = 5000000for i in range(0, total_rows, chunk_size): chunk_df = df.iloc[i:i + chunk_size] file_nam..
UPPER SNAKE CASE를 사용하면서 생긴 문제 문제 제기레거시 프로젝트 리뉴얼 과정에서 프론트 코드가 UPPER SNAKE CASE인 것을 발견했다. ex) POST_IDdto를 해당 컨벤션에 맞췄지만, 첫 단어가 소문자로 변환되는 문제가 있었고, lombok을 써도 해결되지 않았다.CAEML CASE를 써왔기에 이런 컨벤션 문제가 당황스러웠지만, 앞으로 레거시 프로젝트를 다루면 이런 상황들을 접하게 될 것이라 생각해 정리했다.해결 방안 1. JsonProperty 사용lombok의 @Getter를 쓰지 않고 직접 작성했다.개인적으로 이 방법이 가장 깔끔했지만 다음 문제가 있었다.각 getter마다 추가해야 한다.해당 코드를 추가할 곳이 매우 많다.오타가 자주 발생한다. 생각보다 JsonProperty 하고 변수명 바꿔쓰는 경우가 많았다.import..
proxyBeanMethods=false를 써야 하는지 문제 제기WebClient를 적용하는 과정에서 WebClient 객체를 Spring에서 관리하도록 하고 싶었다.여러 서버와 통신하기 때문에 각 서버별로 WebClient 객체를 만들어야 해서 Config 클래스에서 Bean 어노테이션을 사용했다.다른 사람들과 공식 문서에선 어떻게 사용했는지 찾아본 결과 proxyBeanMethods 을 false로 주는 케이스들이 보여 어떤 차이가 있는지 알아보게 됐다.이 기준으로 정리함내용이 너무 방대해서 정리하는 기준점이 필요했다. 지엽적인 부분으로 자주 빠지게 됐고 모두 정리해 봤자 나중 가면 기억도 안 나고, 틀린 내용이나 단편적인 케이스를 일반화할 것 같아서 이렇구나~라고 보고 넘겼다. 본 것 들은 Reference 항목에 적어놨다.true/false 차이가 운..
[Java] 토큰 인증 처리에 대한 정리 문제 제기토큰 인증 관련 글들을 보면 jwt의 만료 기간만 보고 인증을 결정하는 내용들을 자주 봤다.이 경우 인증을 stateless 하게 관리해 성능상의 이점이 있지만 로그아웃된 토큰 or 토큰이 탈취됐을 때에 대해선 대응이 부족한 것 같단 생각이 들었다.서비스 신뢰도나 최악의 상황을 고려하면 인증 관련 정보는 stateful로 관리하는 게 맞는다고 생각해 여기에 맞춰 토큰 인증을 만들었다. 2가지 토큰으로 인증을 처리한다.access 토큰: 실제 인증에 사용되는 토큰. 기간이 짧다.refresh 토큰: access 토큰 만료 시 갱신에 사용되는 토큰. 기간이 길다. 인증 EntityEntity를 생성하고 access, refresh 토큰과 memberId를 넣는다.디테일을 위해 넣은 거지만 @PreP..
[Python] 키워드 인자에서 **kwargs 주의점 쓰게 된 이유파이썬 **kwargs, *args이라 검색만 해도 관련 내용이 많이 나온다.하지만 키워드 인자를 사용한 예시는 내 기준 구글 1~2페이지에선 보이지 않았고 다 비슷한 내용들이었다.개념만 슥 보고 넘어가기엔 이후에 팀원들도 같은 실수를 할 수 있다 생각해서 공유하기 전에 생각을 정리하기로 했다. 급한 분들을 위해 요약하면**kwargs에 키워드 인자를 사용하면 키워드 인자도 딕셔너리에 들어간다**kwargs인수를 딕셔너리 형태로 만든다.하지만 키워드 인자처럼 사용하면 이런 결과가 나온다.def test1(**kwargs):    print(kwargs)    passdata = {'A': 1, 'B': 2}test1(kwargs=data)결과{'kwargs': {'A': 1, 'B': 2}}..
리눅스 환경에서 버전 관리 한 줄 요약: 블로그 명령어 믿지 말자. 할 거면 링크 주고 이 사이트 보고 진행하겠다고 말하자서론팀 문서를 보고 작업하다 버전 업이 필요하단 부분이 있었다.블로그에서 버전 업에 관한 포스팅을 찾아보고 진행하던 중 굳이 이렇게 해야 하나? 싶은 부분이 있었다아무리 생각해도 좀 아닌 거 같아서 물어봤지만, 이미 이전 명령어를 수행했던 시점에서 문제가 발생해버렸다.apt-get(yum)? wget?패키지 설치 시 apt-get이나 wget으로 설치하는 글 2가지로 나뉜다. 예외가 있겠지만 대부분의 상황에선 wget이다.만약 서버에 구 버전이 있는 경우 버전업 하지 말고 wget으로 다운로드한 폴더의 bin에 들어가서 해당 버전에 맞춰 레포를 빌드하거나 실행하자 apt-get 은 삭제해도 잔존물이 남아있거나 ..