본문 바로가기

전체보기

(180)
[JPA] FindAll이 같은 값만 나와요 문제 상황API에서 entity 리스트를 반환해야 하는데, 동일한 원소만 지속적으로 반환되는 문제가 발생했다.요청에는 문제가 없었고, 데이터가 매핑된 쿼리 결과 로그를 다른 SQL 툴에서 실행 결과는 정확했다. JPA가 생성한 쿼리 역시 문제가 없었다. 혹시나 해서 JPARepository에서 반환 타입을 List 대신 List>로 변경하니 올바른 결과가 나왔다.흥미로운 점은 두 경우 모두 반환되는 개수는 동일했지만, List는 쿼리 결과의 첫 번째 원소만 채워져서 반환됐다.배포 시간이 촉박해, 일단 Map을 DTO로 변환한 후 원인을 파악하고 해결하기로 결정했다.뭐가 문제였을까?복합키 문제였다.@IdClass나@EmbededId를 통해 복합키를 설정해야 했는데, 복합키 컬럼 하나에만 @Id 어노테이션을..
[PostgreSQL] FAQ를 번역해 보았다. (스압) 회사에서 주로 PostgreSQL을 쓰다 보니, 관련 Docs를 보는 일들이 많았다.링크들을 클릭하다 우연히 FAQ를 보게 됐는데 생각보다 유용해서 필요해 보이는 것만 추려서 번역했다. (고마워요 gpt, 구글!) 번역할 때 삼은 기준이다. 원문 그대로 쓰는 경우영어로 많이 부르는 경우 ex) prepared, query plan, lock한글로 번역할 때 생소한 부분 ex) localerow, columngaps ⇒ 간격이란 뜻이 있지만, 갭이라 하는 경우도 많아 원문 그대로 씀기타 예약어, 명령어 및 볼드 처리 된 부분한국어 해석의 경우statistics ⇒ 통계optimizer ⇒ 최적화기double quote ⇒ 쌍따옴표space ⇒ 공백punctutation ⇒ 구두점(.)numbering ⇒ ..
[PostgreSQL] FDW로 Cross Database 해결하기 문제 상황PostgreSQL 환경에서 다른 Database 내에 있는 DB Function을 호출해야 함JPA에서는 서로 다른 Database에 접근하려면 Cross Database 이슈 발생DBConfig를 통해 해결할 수 있지만, 코드 추가 없이 해결 하고 싶었음FDW를 통해 문제를 해결했다. 그러나 DB Function을 원격으로 호출하는 방법은 아니었다. 해당 DB Function이 접근하는 테이블에 대한 외래 테이블을 만들고, Function 소스 코드를 복사해와, 테이블명을 바꿨다.운영 환경하나의 PostgreSQL RDS에 여러 Database를 두고 있음서비스 특성B2B로, 제한된 사용자만 사용(입력이 정직함)두 DB 모두 동시성 이슈는 거의 발생하지 않음트래픽이 일정하고, 쓰는 시간대가 ..
2024년 회고 들어가기 전에일주일은 짧고, 한 달은 긴데, 1년은 짧다는 말을 들었다.주말만 보면서 달리다보니 어느덧 12월이 되고, 곧 1년차로 접어들었다.올해 있던 일을 정리해 어떤 점이 좋았고, 아쉬웠는지를 돌아보려 한다.좋았던 것취업이것보다 더 좋은 게 뭐가 있을까 싶다. 회사 비전도 좋고, 팀원들도 좋아서 첫 직장으로 좋은 출발이라 생각한다.또한, 앉아서 출근 + 역하고 회사 거리 가까움 + 주변에 일하는 친구 많음 3가지 덕분에 회사 생활이 더 낫다.아이러니했던 것은 합격에 결정적인 점이 백엔드가 아니라, 1학년 때 C로 네트워크 프로그래밍을 했던 것이었다.프로젝트 설명 후, 자유 주제로 하나 말해보라 해서 이때 공부한 것을 설명했는데 크게 만족하셔서 제일 먼저 합격 문자를 받았다.막상 회사 다녀보니 피로도..
90만원짜리 신분증 만든 후기 문제의 발단???: 운전할 때 되면 면허 딸 거야!9년이 지난 후, 나는 이때의 발언을 매우 후회한다.특정 시기가 되면 본격적으로 운전을 하게 될 거라 생각했지만, 그렇지 않았다. 어쩌다 여행 얘기가 나올 때, 서울 안에서 노는 게 지겨워서 근교로 빠질 때 외엔 운전이 필요한 상황도 없었고 이마저도 드물게 발생했기 때문에 어물쩍 넘어갔다.이렇게 점점 나이 먹게 되니 남들 다 따는 면허 없으니 친구들한테 미안했고, 여행 갈 때도 불편하게 가다 보니 면허를 결국 따야겠단 다짐을 했다.필기 준비는 여유있게시험 접수하고 2시간 정도 달달 외운 걸로 평가하긴 그렇지만, 우습게 볼 건 아니었다.생각 조금만 해보면 풀리는 문제도 있었지만, 어떤 거는 그렇지 못해 키워드 몇 개 따서 외웠다.그렇게 어영부영 준비해서 1..
파일 옮길 땐 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 프로세스를 소개하고 ..