![[Ubuntu] ssh 원격접속 보안 강화](https://blog.kakaocdn.net/dn/vOZdu/btsLzqF56aG/NTpSpB9fXfkkt4pbYiRsTk/img.jpg)
![[DB 성능 최적화] 인덱스(Index)](https://blog.kakaocdn.net/dn/nA2td/btsI9RE76dJ/L4bSgASjdtfHqK9KGAAC4k/img.png)
![[JPA] 병합(Merge)과 변경 감지(Dirty Checking)](https://blog.kakaocdn.net/dn/bFZDNu/btsIWaxR2k8/cSvhbm9EekSz6ubAKDeTkK/img.png)
![[Linux] 프로세스와 시그널](https://blog.kakaocdn.net/dn/bkg05L/btsKDFCOXxP/e8zaWDdfLamdv5yM8KsPZ1/img.jpg)
![[Docker] Docker Compose를 이용한 SpringBoot + MySQL + Redis 컨테이너 동시에 띄우기](https://blog.kakaocdn.net/dn/bQ4rTl/btsJfoCTWhU/Cfi1RaJSboO8ccgtmJepX1/img.webp)
![[Github Actions] 기본 문법 + 스프링부트 프로젝트 배포 자동화](https://blog.kakaocdn.net/dn/PPr6T/btsJtKAsSo9/rdlgK2vLTiqH2KUkdRBqkK/img.png)
![[Database] 트랜잭션 ACID, DB 연결구조와 세션](https://blog.kakaocdn.net/dn/c7kA33/btsFcQKD9PM/TAAAfUh62KENKRsO32rye0/img.png)
![[JAVA] 상속 - 타입 변환과 다형성(매우 중요)](https://blog.kakaocdn.net/dn/viEHP/btrVjnz9GER/zaV6B2QF28VWdHsPVapgZ1/img.jpg)
![[Git] 소스트리(Sourcetree)로 브랜치(Branch) 다루기](https://blog.kakaocdn.net/dn/1Ulru/btsCy6Do1i6/E5Ooi4C792QgEUJrdGQKAk/img.png)
![[Linux / Ubuntu] VMware Tools 수동 설치](https://blog.kakaocdn.net/dn/cNmx0k/btsGbDbW1yY/767altqOB2ZCrUZi5Z3tC1/img.png)
![[JSP] IntelliJ 에서 JSP 개발환경 만들기](https://blog.kakaocdn.net/dn/cNQOvx/btsC7qtoxqm/UuNX5TxNKYHXQ3Wk18KFyk/img.png)


![[Docker] Dockerfile](https://blog.kakaocdn.net/dn/uT8Tk/btsNXl904QP/wyiue9yS1rYw7qTG64BU61/img.webp)
이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.DockerfileDockerfile은 Docker 이미지를 생성하기 위한 스크립트이다.Dockerfile이란 텍스트 파일로, Docker 엔진에게 이미지를 어떻게 빌드할지 지시하는 명령어들을 포함한다. 특징일반적으로 프로젝트 루트 디렉토리에 Dockerfile이라는 이름으로 저장여러 명령어(인스트럭션)로 구성각 명령어는 이미지에 새로운 레이어를 추가레이어 방식으로 이미지를 구성하여 캐싱과 재사용성 향상 FROMFROM은 베이스 이미지를 생성하는 역할을 한다.Docker 컨테이너를 특정 초기 이미지를 기반으로 추가적인 세팅을 할 수 있다. 여기서 얘기한 ‘특정 초기 이미지’가 곧 베이스 이미지이다. 누군가는 JDK..
![[Docker] 볼륨 (Volume)](https://blog.kakaocdn.net/dn/YqkED/btsNWsuFG3F/GyYQV0HCxdarOjvIpWRSWk/img.webp)
이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.도커 볼륨의 개념기존 컨테이너를 새로운 컨테이너로 교체하면, 기존 컨테이너 내부에 있던 데이터도 같이 삭제된다.만약 이 컨테이너가 MySQL을 실행시키는 컨테이너였다면 MySQL에 저장된 데이터도 같이 삭제 돼버린다. 따라서 컨테이너 내부에 저장된 데이터가 삭제되면 안 되는 경우에는 볼륨(Volume)이라는 개념을 활용해야 한다. 도커의 볼륨(Volume)이란 도커 컨테이너에서 데이터를 영속적으로 저장하기 위한 방법이다.볼륨(Volume)은 컨테이너 자체의 저장 공간을 사용하지 않고, 호스트 자체의 저장 공간을 공유해서 사용하는 형태이다. 볼륨 종류바인드 마운트(Bind Mount)바인드 마운트는 호스트 시스템의..
![[Docker] 자주 사용하는 명령어 정리](https://blog.kakaocdn.net/dn/bRfUXL/btsNV6ra4Jv/BLDUuSnKECJtlkVa0DtuJk/img.webp)
이미지 관련 명령어다운로드이미지 다운로드# docker pull 이미지명docker pull nginx # docker pull nginx:latest와 동일하게 작동 특정 버전 이미지 다운로드# docker pull 이미지명:태그명docker pull nginx:stable-perl 조회이미지 조회docker image ls 모든 이미지 조회중간 이미지(intermediate images)와 태그가 없는 이미지(dangling images)도 포함docker image ls -a 삭제사용하고 있지 않은 이미지 삭제docker image rm [이미지 ID 또는 이미지명] 이미지 강제 삭제docker image rm -f [이미지 ID 또는 이미지명] 전체 이미지 삭제# 컨테이너에서 사용하고 있지 않은..
![[Kubernetes] 핵심 명령어 정리](https://blog.kakaocdn.net/dn/daz8K6/btsNQWCv6zG/wFh6VOrLphzaSjCHLONAw0/img.png)
이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.파드(Pod) 관련 명령어파드 조회kubectl get pods 파드 포트로 포워딩# kubectl port-forward pod/[파드명] [로컬에서의 포트]/[파드에서의 포트]kubectl port-forward pod/nginx-pod 80:80 파드 삭제# kubectl delete pod [파드명]kubectl delete pod nginx-pod # nginx-pod라는 파드 삭제 파드 디버깅파드 세부 정보 조회# kubectl describe pods [파드명]kubectl describe pods nginx-pod # nginx-pod 파드의 세부 정보 조회 파드 로그 확인# kubectl logs ..
![[Kubernetes] 볼륨(Volume)](https://blog.kakaocdn.net/dn/HPZiO/btsNR2BPORy/VIzy5SQcmiGAkBMv7Hfqp1/img.png)
이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.기존 파드를 새로운 파드로 교체하면, 기존 파드 내부에 있던 데이터도 같이 삭제된다. 만약 이 파드가 MySQL을 실행시키는 파드였다면 MySQL에 저장된 데이터도 같이 삭제 돼버린다. 따라서 파드 내부에 저장된 데이터가 삭제되면 안 되는 경우에는 볼륨(Volume)이라는 개념을 활용해야 한다. Volume볼륨(Volume)이란 데이터를 영속적으로 저장하기 위한 방법이다. 쿠버네티스에서 볼륨은 크게 2가지 종류로 나뉜다.로컬 볼륨(Local Volume)퍼시스턴트 볼륨(Persistent Volume, PV) 로컬 볼륨파드 내부의 공간 일부를 볼륨(Volume)으로 활용하는 방식이다.이 방식은 파드가 삭제되는 즉시..
![[Spring Boot 핵심원리와 활용] 사용자 정의 메트릭](https://blog.kakaocdn.net/dn/rvNvJ/btsNS3t6q4a/PY9aikdrKJCajCMBNTvV81/img.png)
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다.MeterRegistry마이크로미터 기능을 제공하는 핵심 컴포넌트스프링을 통해서 주입 받아서 사용하고, 이곳을 통해서 카운터, 게이지 등을 등록한다.MeterRegistry는 마이크로미터(Micrometer)에서 모든 메트릭(Counter, Gauge, Timer 등)을 등록하고 관리하는 중심 객체이다.Spring Boot에서는 MeterRegistry를 빈(bean)으로 자동 주입받아 사용할 수 있으며, 이 객체를 통해 커스텀 메트릭을 생성하거나 값을 기록할 수 있다. 카운터(Counter)Counter(카운터)단조롭게 증가하는 단일 누적 측정항목 (단일 값, 보통 하나씩 증가)누적이므로 전체 값을 포함(to..
![[Kubernetes] 환경변수 관리(ConfigMap, Secret)](https://blog.kakaocdn.net/dn/OSlem/btsNNWu0Omm/XisvfDanLtDZAEFgwMb8Z0/img.png)
이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.ConfigMapSpring Boot에서는 설정값을 application.yml으로 분리해서 관리한다.별도의 파일로 분리를 해서 관리함으로써 유지보수가 편리해지고 개발, 테스트, 프로덕션과 같은 환경 분리가 편해진다. 쿠버네티스에서는 파드(Pod), 디플로이먼트(Deployment), 서비스(Service)가 각각의 역할을 가지고 있는 것처럼 환경 변수를 관리하는 역할을 가진 오브젝트가 따로 존재한다.그게 바로 컨피그맵(ConfigMap)이다. spring-config.yamlapiVersion: v1kind: ConfigMap# ConfigMap 기본 정보metadata: name: spring-config #..
![[Spring Boot 핵심원리와 활용] 마이크로미터, 프로메테우스, 그라파나](https://blog.kakaocdn.net/dn/rNG6e/btsNSMMzAYK/waMEgT3sfKmcyamC2bdxck/img.png)
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다.마이크로미터세상에는 수 많은 모니터링 툴이 있고, 시스템의 다양한 정보를 이 모니터링 툴에 전달해서 사용하게 된다.모니터링 툴이 작동하려면 시스템의 다양한 지표들을 각각의 모니터링 툴에 맞도록 만들어서 보내주어야 한다.그런데 중간에 사용하는 모니터링 툴을 변경하면 기존에 측정했던 코드를 모두 변경한 툴에 맞도록 다시 변경해야 한다.개발자 입장에서는 단순히 툴 하나를 변경했을 뿐인데, 측정하는 코드까지 모두 변경해야 하는 문제가 발생한다.이런 문제를 해결하는 것이 바로 마이크로미터(Micrometer)라는 라이브러리이다. 다양한 메트릭마이크로미터와 액츄에이터가 기본으로 제공하는 다양한 메트릭은 아래와 같다.JVM ..
![[Kubernetes] Deployment와 Service](https://blog.kakaocdn.net/dn/NfolE/btsNMLgTmR2/CAg8id90FKpPqW8A95v9Ek/img.png)
이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.DeploymentDeployment 개념디플로이먼트(Deployment) 란 파드를 묶음으로 쉽게 관리할 수 있는 기능을 말한다.현업에서는 일반적으로 서버를 작동시킬 때 파드(Pod)를 수동으로 배포하진 않는다.디플로이먼트(Deployment)라는 걸 활용해서 파드(Pod)를 자동으로 배포한다. 디플로이먼트의 장점파드의 수를 지정하는 대로 여러 개의 파드를 쉽게 생성할 수 있음.ex) 파드를 100개를 생성하라고 시키면 디플로이먼트가 알아서 파드를 100개 생성해준다.파드가 비정상적으로 종료된 경우, 알아서 새로 파드를 생성해 파드 수를 유지한다.동일한 구성의 여러 파드를 일괄적으로 일시 중지, 삭제, 업데이트를..
![[Spring Boot 핵심원리와 활용] 액츄에이터(Actuator)](https://blog.kakaocdn.net/dn/nbLis/btsNSaApJzn/95wHVgwV5BTx21SRo8Qkd0/img.png)
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다.액츄에이터를 사용하려면 스프링부트 의존성에 다음과 같이 추가해야한다.build.gradledependencies { implementation 'org.springframework.boot:spring-boot-starter- actuator' // actuator 추가} 의존성을 추가하고 /actuator 경로로 접근하면 액츄에이터에 접근할 수 있다.http://localhost:8080/actuator 액츄에이터의 모든 기능을 웹에 노출하려면 application.yml에 아래와 같이 작성하면 된다.application.ymlmanagement: endpoints: web: exposur..