본문 바로가기

개발

(32)
파일 옮길 땐 tar를 쓰자 수정 내역24.11.20 rsync로 대규모 파일 이관 레퍼런스 추가24.11.22 심볼릭 링크 아카이빙 케이스 및 재발시, 사전에 수행할 명령어 추가문제 상황개발 서버에 디비 구조가 변경된 코드를 배포하다 스크립트 이슈로 다른 팀이 사용 중인 서버에도 배포됐다.실제 사용자들이 쓰는 서비스는 아니어서 문제가 발생한다는 걸 뒤늦게 알았지만, 어쨌든 수습은 해야 했다.잘못 배포된 서버에 운영 서버에 있는 jar와 다른 파일들을 옮기는 과정에서 새로 알게 된 내용을 정리했다.tar를 쓰는 이유파일의 inode를 유지하기 위해서다.단순히 파일을 복사하면 수정 시간이 현재 시간으로 변경되고, 권한도 초기화된다.실행 파일의 경우 접근 권한 x가 사라지고 다른 파일들의 경우 수정 날짜가 원본과 다르기 때문에 누가 수..
ArrayBuffer, Blob 들어가기 전에프로젝트 도메인 특성상 자주 마주할 것이라 생각해 나에게 필요해 보이는 것들 위주로 정리했다. 짧게 요약하면1. 이진 데이터를 다루지만 자료형이 없다.2. ArrayBuffer은 고정 크기, Blob은 가변 크기3. ArrayBuffer를 통해 Blob 불변 객체를 만들 수 있다.문제 상황pdf 다운로드 기능 구현 도중 인코딩 이슈가 발생해 pdf 쪽수는 맞는데 빈 페이지만 보여주는 문제가 있었다.task 서버에서 바이너리를 인코딩을 안 해서 생긴 문제였지만,검색 과정에서 arrayBuffer와 Blob을 알게 됐고, 둘이 어떤 차이인지 궁금해 정리하게 됐다. 관련 stackoverflowhttps://stackoverflow.com/questions/34436133/pdf-is-blank-..
단위 테스트 적용하기 수정 내역24.10.31 easy-random 등을 이용한 fixture 개선 시도에 대한 내용 추가24.11.19 assertion의 extract 체이닝 케이스 추가목차- 서론- 프로젝트 특징- 테스트 코드 분리- 단위 테스트 구성- 객체 찍어내기- easy-random, fixutre monkey 도입- service, repository 관리- 실제 테스트 만들기- assertThat을 여러 개 써도 될지?서론테스트 코드를 작성한 이유는 지금 맡은 유지 보수 업무를 보다 효과적으로 수행하고 싶었다.기존에 작성된 코드가 잘 사용되지 않는 패턴으로 구성되어 있어 이해하는 데 어려움이 있었고주석은 달아놓지만 여기서 놓치는 부분들을 테스트로 보완하고 싶었다. 또한, 우리 팀에 TDD 프로세스를 소개하고 ..
오류 요약해서 남기기 수정 이력- 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 차이가 운..