개발/사이드 프로젝트

사이드 프로젝트 Pinpoint 도입 후기

배경 주말이나 퇴근시간에 짬짬히 사이드 프로젝트를 진행하고 있었는데 문득 이 사이드 프로젝트가 공개되었을 때 장애에 대비하기 위해, 그리고 무엇보다 회사에 APM이 없어서 이를 적용해보고 싶다는 생각에 연습삼아 사이드 프로젝트에 핀포인트를 도입하였습니다. (정시 퇴근을 위한 눈물겨운 노력) 사이드 프로젝트 소개는 팀원의 블로그로 대체합니다 deveric.tistory.com/114 (나도 써야지..) 핀포인트 개념과 설치 방법은 추후 작성에 작성할 예정입니다. 핀포인트란? pinpoint-apm.github.io/pinpoint/index.html 네이버에서 만든 대규모 분산 시스템의 성능을 분석하고 문제를 진단, 처리하는 플랫폼입니다. 실시간으로 어플리케이션의 요청을 모니터링할 수 있으며, 이를 통해 ..

2021.04.03 게시됨

개발/Spring

[입문] jOOQ에 대해 알아보자

필자는 JPA로 개발할때 QueryDSL-jpa를 활용한 Type-Safe 한 SQL 작성을 굉장히 선호합니다.사람이 실수 할 수 있는 여지를 미연에 방지할 수 있기 때문입니다. 하지만 회사에서 JPA가 아닌 프로젝트를 맡게 되었고 이로인해 native sql 에서도이런 type-safe한 쿼리를 작성할 수 없을까? 라는 물음으로 찾아보게 되었습니다. (아 mybatis 쓰기 싫어요 ㅜㅜ) 물론 사실 QueryDSL 도 querydsl-sql이라는 형태로native SQL을 지원하지만 주변에서 jOOQ의 평이 좋아 직접 한번 입문 해보기로 하였습니다. 자세한 코드는 [여기] 서 확인할 수 있습니다.DB 스키마는 공식문서에서 제공하는 스키마를 살짝 각색하여 진행하였습니다.(링크의 src/main/resou..

2021.03.04 게시됨

개발/Spring

JPA로 Type-Safe한 CTE 작성하기

RDBMS에서 계층형 쿼리를 작성할때 Common Table Expression을 사용하여쿼리를 작성 할 수 있습니다. 일반적인 SQL에서는 WITH [ Recursive ] 라는 구문으로 작성가능합니다.해당 구문은 [ANSI 표준] 이기 때문에 MySQL이나, MariaDB, Oracle 등대부분의 RDBMS에서 사용할 수 있습니다. 이번에는 해당 구문을 JPA에서 Native SQL을 사용하지 않고 추상화 레벨을 유지하며,QueryDSL과 함께 사용할 수 있도록 하면서 겪은 삽질을 기록하였습니다. 스포일러) "공식적"으로 JPA는 CTE를 지원하지 않습니다 본 글은 MariaDB 기준으로 작성하였습니다. 해당 코드는 [여기] 서 확인할 수 있습니다. CTE 란? Common Table Expressi..

2021.02.21 게시됨

개발/devops

[k8s] 5. 서비스 - 파드를 연결하고 외부에 노출

지난 시간엔 디플로이먼트를 통해 레플리카 셋, 파드를 편리하게 관리하는 법을 배웠습니다.이번 시간에는 파드를 외부에 노출하는 서비스에 대해 알아봅니다. 1. 이전까지이전 글에서는 다른 파드에 접근하기 위해 임시로 테스트 파드를 만든 뒤테스트 파드에서 해당 파드로 접근을 했었습니다. 즉, 클러스터 내부에서만 사용할 수 있었습니다. 또한 더 큰 문제는 파드의 IP는 계속 변한다는 부분입이다. 여러개의 디플로이먼트를 연동하려면파드의 IP가 아닌 다른 걸로 서로를 발견할 수 있는 방법이 필요합니다. (Discovery) 여담이지만, 이 내용을 보니 Spring Cloud의 디스커버리 서비스인 Eureka가 떠오르네요.  2. 서비스 란서비스의 주요기능은 다음과 같습니다.1.  여러 개의 파드에 고유한 도메인 이..

2020.10.11 게시됨

개발/devops

[k8s] 4. 디플로이먼트 - 레플리카셋, 파드 배포 관리

실제 운영환경에서는 레플리카셋을 YAML 파일에서 사용하는 경우는 거의 없습니다.대부분 레플리카 셋과 파드의 정보를 정의하는 Deployment라는 이름의 오브젝트를YAML 파일에 정의해 사용합니다. 1. 디플로이먼트레플리카 셋의 상위 오브젝트이기 때문에 디플로이먼트를 생성하면 레플리카 셋도 함께 생성됩니다.따라서 디플로이먼트를 사용하면 파드와 레플리카 셋을 직접 사용할 필요가 없습니다. 생성 예시) deployment-nginx.yamlapiVersion: apps/v1kind: Deploymentmetadata: name: my-nginx-deploymentspec: replicas: 3 selector: matchLabels: app: my-nginx template: ..

2020.10.11 게시됨

개발/devops

[k8s] 2. 파드 - 컨테이너의 기본 단위

쿠버네티스에는 셀 수도 없을 만큼 많은 리소스 종류와 컴포넌트가 있습니다.그중에 이번엔 제일 기초가 되는 파드에 대해 알아보도록 하겠습니다. - 1. Pod(파드) 란파드는 제일 기초적인 리소스로, 쿠버네티스 상의 컨테이너 애플리케이션의 기본 단위입니다.파드는 1개 이상의 컨테이너로 구성된 집합입니다. 다음과 같이 기본적인 nginx 파드를 만들어보았습니다. nginx-pod.yaml 이라는 파일을 만들고 아래의 내용을 입력합니다.apiVersion: v1kind: Podmetadata: name: my-nginx-podspec: containers: - name : my-nginx-container image: nginx:latest ports: - containerPor..

2020.10.10 게시됨