본문 바로가기

개발

(37)
그림으로 배우는 리눅스 구조 2주차 목차-  프로세스 확인하기-  프로세스 생성-  ELF-  랜덤 스택(ASLR)-  첫 프로세스-  프로세스의 상태-  좀비 프로세스, 고아 프로세스-  시그널-  세션-  프로세스 그룹-  데몬  -  service vs systemctl-  정리-  Rerference 프로세스 확인하기    VSZ: 가상 메모리RSS: 실제 메모리VSZ와 RSS의 관계를 어떻게 봐야 할지 모르겠지만, 어떤 뜻인지는 알아두면 좋을 것 같다.  내 기준 STAT에서 자주 참고할만한 요소이다.-  D: 디스크 I/O 대기중-  L: 메모리에서 페이지가 lock된 상태-  R: 실행중인 상태-  S: 인터럽트에 의한 대기-  Z: 좀비 프로세스-  : 높은 우선순위-  +: 포어 그라운드   프로세스 생성  fork   현..
그림으로 배우는 리눅스 구조 1주차 목차이 책을 읽은 이유들어가기 전에프로그램, 프로세스 차이커널커널의 부팅 과정시스템 콜시스템 콜의 매개변수는 레지스터다정적 링크 vs 동적 링크어떻게 공유 라이브러리를 찾아갈까?Reference  이 책을 읽은 이유예전에 보안을 공부하고, C로 네이티브 개발을 하다 보니 커널 코드를 분석해 보고 싶었다.하지만, 무작정 커널 분석을 시작하기엔 막연한 부분도 많고, 기억 안 나는 부분도 있어 개요를 잡을 필요가 있었다.스터디에서 선정된 책이지만, 개인적으로 괜찮다고 생각해 스터디를 신청하고 읽게 됐다.  들어가기 전에책을 읽기 전에 OS의 정의에 대해 정리할 필요가 있었다.OS ⇒ 유저와 하드웨어를 연결하는 인터페이스인터페이스의 의미가 “서로 이어 준다”는 뜻이 있어, 브리지(bridge)라고 표현한 글들도..
[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 모두 동시성 이슈는 거의 발생하지 않음트래픽이 일정하고, 쓰는 시간대가 ..
파일 옮길 땐 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 프로세스를 소개하고 ..