전체 글

잔디심는 정원사
어댑터 패턴 (Adaptor Pattern)
·CS/Design Pattern
어댑터 패턴이란?어댑터 패턴은 서로 호환되지 않는 인터페이스를 가진 객체들이 협력할 수 있도록 하는 패턴으로, 래퍼로도 불립니다. 기존에 사용했던 시스템(레거시 시스템)을 원하는 인터페이스로 사용가능하게 합니다.  어댑터 패턴의 사용 방법클래스 어댑터 (상속)Adaptee : 기존 레거시 시스템Target: 어댑터가 구현하는 인터페이스Adapter: Client와 Adaptee중간에서 호환성이 없는 둘을 연결시켜주는 역할 담당클래스 어댑터 방식에서는 상속을 이용해 구성Adaptee는 extends, Target은 implements해서 구현Client: 기존 시스템을 어댑터를 통해 이용하려는 쪽. Client interface를 통해 Service를 이용// Target 인터페이스 - 새로운 인터페이스p..
UML(UML 필요성, 클래스 다이어그램)
·CS/OOP
UML이란?UML(Unified Modeling Language)은 프로그램의 구조와 행위를 시각적으로 표현하기 위한 표준화된 모델링 언어입니다. 복잡한 소프트웨어 시스템의 설계를 다이어그램으로 표현함으로써, 개발자와 이해관계자 간의 의사소통을 용이하게 합니다. UML 사용 이유모델 검증: UML을 사용하면 구현 전에 시스템 모델을 검증할 수 있고, 잠재적인 문제를 사전에 발견하고 수정할 수 있습니다.비용 절감: 코드를 작성하고 테스트하는 것보다 UML 모델을 사용하여 시스템을 설계하고 검증하는 것이 비용이 적게 듭니다.테스트 및 검증: 시스템이 실제로 요구사항을 만족하는지 테스트하고 검증하기 위해 사용됩니다.UML 다이어그램 종류 구조 다이어그램클래스 다이어그램객체 다이어그램복합체 구조 다이어그램배치 ..
[Docker] Docker 사용하지 않는 도커 이미지 일괄 삭제
·Infra
리눅스 서버에서 볼륨 사용량이 높아지는 주요 원인 중 하나는 도커 이미지의 누적입니다. 불필요한 이미지를 정리함으로써 서버의 공간을 효과적으로 관리할 수 있습니다. 사용하지 않는 도커 이미지를 삭제하는 명령어는 다음과 같습니다 모든 중지된 컨테이너의 이미지 삭제 이 명령어는 모든 중지된 컨테이너에 사용된 이미지를 삭제합니다. 실행 중인 컨테이너의 이미지는 삭제되지 않습니다. docker rmi $(docker ps -a -q) 사용되지 않는 모든 이미지 삭제 이 명령어는 사용되지 않는 모든 이미지를 삭제합니다. -a 또는 --all 플래그는 모든 사용되지 않는 이미지를 포함하라는 의미입니다. docker image prune -a 특정 이미지 삭제 이 명령어는 지정된 이미지 ID에 해당하는 이미지를 삭제..
[CI/CD] github actions, nginx, docker hub이용해서 무중단 배포하기 - 개선편
지난 블로그에서 Github Actions, Nginx, Docker를 이용해서 무중단 배포에 대해 다룬 적이 있습니다 [CI/CD] github actions, nginx, docker이용해서 blue-green 무중단 배포하기1. Blue_Green 배포란? 8080 포트로 연결된 컨테이너 8081포트로 다른 다른 버전의 컨테이너 띄우기 nginx.conf 수정후 reload (업스트립 8081 수정) 8080 컨테이너 제거 새로 배포할 때마다 새로운 컨테이너들minsu20.tistory.com 현재 시스템의 단점은 주요 구성 파일들이 GitHub에서 관리되지 않고 EC2 서버에 직접 생성되어 관리된다는 것입니다. 이러한 접근 방식은 버전 관리 및 추적 면에서 비효율적일 수 있습니다. 또한, 파일 전..
[Java] Java Record 이것의 정체
·CS/JAVA
Java Record의 등장최신 프로그래밍 언어들은 간결하고 효율적인 코드 작성을 중요하게 여깁니다. 데이터를 담는 객체를 정의할 때, 이러한 현대적인 언어들이 제공하는 기능 중 하나가 바로 불변성을 가진 데이터 홀더입니다.Kotlin의 data class 가 개발자들에게 큰 인기를 끌면서, Java도 이에 대한 답변으로 record 를 제시했습니다.  record 는 데이터를 운반하는 간단한 구조를 정의할 때 사용되며, 내부적으로 불변성을 가진 필드와 함께, 필수적인 메소드들을 자동으로 생성합니다. Record와 Data Class 비교Kotlin의 data class 와 마찬가지로, Java의 record 는 개발자가 수동으로 equlas(), hashCode(), toString() 등을 정의할 필..
[Infra] Prometheus & Grafana를 이용해 서버 모니터링 구축하기
·Infra
Node-Exporter란? Node-Exporter는 서버의 하드웨어 및 OS 메트릭을 수집하는 오픈 소스 에이전트입니다. 이는 CPU, 메모리, 디스크 사용량, 네트워크 상태, 시스템 부하 등과 같은 다양한 서버 메트릭을 수집합니다. Node-Exporter는 Prometheus 모니터링 툴과 함께 사용되어 이러한 메트릭을 시각화하고 분석하는 데 도움을 줍니다. Prometheus란? Prometheus는 오픈 소스 모니터링 시스템으로, 시계열 데이터를 수집하여 저장하고, 규칙 기반의 경고와 쿼리를 실행할 수 있습니다. Prometheus는 다양한 소스에서 메트릭을 수집하는 여러 에이전트와 통합할 수 있는 강력한 도구로, 이 데이터를 활용하여 시스템의 건강 상태를 모니터링하고, 잠재적 문제를 신속하게..
[JPA] MultipleBagFetchException와 N+1문제 동시에 해결하기
·Spring/JPA
안녕하세요! 오늘은 JPA를 사용하다보면 한 번쯤 만나게 되는 에러인 N+1문제와 MultipleBagFetchException문제를 해결하는 방법에 대해 공유하고자 합니다. 🥲 문제 상황 제 프로젝트에서 한 엔티티가 2개의 연관된 엔티티를 List 타입으로 가지고 있었습니다. 그리고 게시글 전체를 조회할 때 JobPost의 WorkDay(요일)와 Job(하는 일)은 모두 보여줘야 했습니다. { "data": { "numOfPost": 0, "posts": [ { "jobPostId": null, "title": "string", "storeName": "string", "latitude": 0.0, "longitude": 0.0, "salary": 0, "salaryType": "연봉", "curren..
[Java] Java의 compareTo 메소드와 Comparable 인터페이스
·CS/JAVA
Java에서 객체를 정렬하거나 비교하는 방법에 대해 알아보고자 합니다. 이를 위해 필요한 것이 바로 Comparable 인터페이스와 그 안의 compareTo 메소드입니다. 또한, 이를 이용한 PriorityQueue의 사용법도 함께 알아보도록 하겠습니다. 📚 Comparable 인터페이스란? Comparable은 Java에서 제공하는 인터페이스 중 하나로, 어떤 클래스가 비교 가능하다는 것을 나타내줍니다. Comparable 인터페이스를 구현하는 클래스는 자신의 인스턴스를 다른 객체와 비교할 수 있습니다. 🔍 compareTo 메소드란? Comparable 인터페이스에는 단 하나의 메소드인 compareTo가 포함되어 있습니다. 이 메소드는 두 개의 객체를 비교하고 그 결과를 정수형으로 반환합니다. p..
[Spring Boot] FCM을 이용해 Android 앱에 Push 알림 보내기
·Spring
Firebase Cloud Messaging(FCM)은 백엔드 서비스나 서버간 통신을 위한 메시지 전달을 위해 Firebase에서 제공하는 무료 메시징 솔루션입니다. 이 글에서는 Spring Boot를 이용해서 FCM을 사용해 Android 앱에 푸시 알림을 보내는 방법에 대해 다루겠습니다. 왜 FCM을 사용했을까? 서버에서 어떤 데이터를 앱에 전달하려면 네트워크 연결은 필수입니다. 앱은 서버에서 데이터가 언제 송신될지 모르기 때문에 서비스 컴포넌트로 네트워크에 항상 연결되어 있어야 하는 것입니다. 문제는 백그라운드 제약 때문에 앱이 포그라운드 상황이 아니라면 서버와 연결을 지속할 수 없다는 것입니다. 하지만 클라우드 메시징은 서버의 데이터를 앱에 직접 전달하지 않고 FCM 서버를 거쳐서 앱에 전달하는 ..
[Redis] Redis와 Refresh Token을 이용해서 토큰 재발급 하기
·Spring/Redis
- 빠른 성능: 인메모리 기반인 Redis는 빠른 응답 속도를 제공합니다. - 유연한 데이터 만료 관리: Redis는 각 키에 대해 만료 시간을 설정할 수 있어, Refresh Token의 유효기간 관리가 용이합니다. - 내구성: Redis는 데이터를 디스크에도 저장할 수 있어 서버 재시작 시에도 데이터를 유지할 수 있습니다. 이러한 이유 때문에 Redis를 이용해서 토큰을 재발급받았습니다. 1️⃣ Access Token과 Refresh Token 발급 사용자가 성공적으로 로그인하면, JWT를 사용하여 사용자의 ID와 기타 정보를 포함한 Access Token과 Refresh Token을 발급합니다. Access Token은 짧은 유효 시간을 가지며, Refresh Token은 상대적으로 긴 유효 시간을..
minsu20