본문 바로가기

Spring Boot

(16)
[Spring-Boot] 객체 지향 설계 원칙 SOLID 📚객체지향 프로그래밍의 설계 원칙 SOLID란?SOLID란 객체 지향 프로그래밍을 하면서 지켜야하는 5대 원칙으로 각각 SRP(단일 책임 원칙), OCP(개방-폐쇄 원칙), LSP(리스코프 치환 원칙), DIP(의존 역전 원칙), ISP(인터페이스 분리 원칙)의 앞글자를 따서 만들어졌다. SOLID 원칙을 적용하면 코드를 확장하고 유지 보수 관리하기가 더 쉬워지며, 불필요한 복잡성을 제거해 리팩토링에 소요되는 시간을 줄임으로써 프로젝트 개발의 생산성을 높일 수 있다. 🤔단일 책임 원칙 - SRP (Single Responsibility Principle)단일 책임 원칙은 클래스(객체)는 단 하나의 책임(단일 책임)만 가져야 한다.객체가 가진 공개 메서드, 필드, 상수 등은 해당 객체의 단일 책임에 의..
[Spring-Boot] QueryDsl 적용해보기 🤯기능 요구 사항문제 리스트를 응답한다.필터링 기능을 문제 리스트에 적용 한다.문제 리스트는 페이징이 되어 응답한다.필터링 목록검색 조건카테고리별 정렬 (Y or N 선택)풀었는 문제 정렬안 풀었는 문제 정렬스터디원이 풀었는 문제이면 스터디원 프로필 이미지 가져오기내가 풀었는 문제인지이런식으로 하나의 API에 조건이 6개이며 동적인 조건은 4개이다. 이럴 때 사용하는 것이 QueryDsl 이다.👩‍🚀QueryDsl 란?자바 백엔드 기술은 Spring Boot와 Spring Data JPA를 함께 사용한다. 하지만 복잡한 쿼리, 동적 쿼리를 구현하는 데 있어 한계가 있다. 이러한 문제점을 해결할 수 있는 것이 QueryDSL이다. QueryDSL은 자바 코드로 SQL문을 작성할 수 있어 컴파일 시에 ..
[Spring-Boot] Prometheus + Grafana 모니터링 구축 🤔모니터링이 필요한 이유?서비스 안정성 유지 (System Reliability)서버, DB, 애플리케이션 등 다양한 컴포넌트가 정상적으로 동작하는지 실시간으로 확인할 수 있음로그만으로 분석하기 어려운 경우, 메트릭 데이터를 기반으로 장애 원인 파악 가능성능 최적화 (Performance Optimization)애플리케이션의 응답 속도, DB 쿼리 성능 등을 모니터링하여 최적화 가능예: 특정 API 호출이 느려지는 패턴을 분석해 코드 개선리소스 관리 (Resource Management)서버의 CPU, 메모리, 디스크 사용량을 지속적으로 체크예: 특정 시간대에 트래픽이 몰린다면 → 서버 증설 or 로드 밸런싱 설정모니터링이 없으면 시스템이 언제, 왜 느려졌는지 또는 장애가 발생했는지 알 수 없다!Pro..
[Spring-Boot] 스프링 데이터 JPA 👻 JPA 란?JPA(Java Persistence API)는 자바 진영에서 ORM(Object-Relational Mapping)을 통해 관계형 데이터베이스(RDBMS)와 객체(Entity)를 쉽게 다룰 수 있도록 도와주는 표준 API이다.🍄 ORM(객체 관계 매핑) 란?객체(Entity)와 데이터베이스 테이블을 자동으로 매핑하는 기술SQL을 직접 작성하지 않아도 객체를 저장, 조회, 수정, 삭제 가능👉 Entity 란?데이터베이스의 테이블과 매핑되는 자바 객체@Entity 어노테이션을 사용해 JPA가 관리하도록 설정 😮 JPQL 란?JPQL은 SQL과 비슷하지만 객체를 대상으로 하는 쿼리 언어이다.JPA에서 SQL이 제공하지 않는 기능을 필요로 할 때 주로 사용한다.@Query 어노테이션을 붙..
[Spring-Boot] Exception 예외처리 👀Exception(예외) 란?Exception 는 프로그램 실행 중에 발생할 수 있는 예상치 못한 상황이나 문제를 의미합니다. 자바에서는 예외가 발생하면 프로그램의 정상적인 흐름을 방해할 수 있기 때문에  예외를 적절히 처리하여 프로그램이 중단되지 않고 계속 실행될 수 있도록 하는 것을 말합니다. 자바에서 Throwable 클래스를 기준으로 Error, Exception 클래스로 나뉘어집니다. 실행시 발생할 수 있는 프로그램 오류를 에러와 예외 두가지로 구분할 수 있습니다. 🧐Error(오류)와 Exception(예외)의 차이오류 : 시스템 레벨에서 발생하며 복구가 거의 불가능한 문제 ex) 메모리 부족예외 : 프로그램에서 발생할 수 있는 문제로 적절히 처리하면 복구가 가능한 문제 ex) 파일을 ..
[Spring-Boot] Redis에 저장 조회 해보기 🥕 Redis 란?Redis는 Remote Dictionary Server의 약자로 빠른 오픈 소스 인메모리(Key-Value) 데이터 저장소입니다. Redis는 Key - value 구조를 기반으로 비정형 데이터를 저장하고 관리하는 시스템으로 비관계형 데이터 베이스(NoSQL)의 일종입니다. Redis는 주로 메모리 내 In- memory에서 데이터를 저장하고 관리하지만 데이터를 디스크에 지속적으로 저장 할 수 있는 영속성 기능도 지원합니다. 이를 통해 빠른 읽기 쓰기를 제공하며 복잡한 데이터 구조를 지원합니다.Redis 주요 타입String: 가장 기본적인 데이터 타입으로, 텍스트나 숫자 등의 데이터를 저장합니다.List: 리스트 형태로 순차적인 데이터를 저장합니다.Set: 고유한 값을 저장하는 ..
[Spring-Boot] Cross-Origin Resource Sharing 🥵  CORS란?도메인이 다른 서버끼리 리소스를 주고 받을 때 브라우저에서는 보안적인 이유로 cross-origin HTTP 요청들을 제한합니다. 그래서 cross-origin 요청을 하려면 서버의 동의가 필요합니다. 만약 서버가 동의한다면 브라우저에서는 요청을 허락하고, 동의하지 않는다면 브라우저에서 거절합니다. 이 정책은 악의적인 사이트가 사용자의 데이터를 탈취하지 못하도록, 다른 출처(origin)에서 리소스를 요청할 때 제한을 두는 역할을 합니다. 🎅 CORS 경험 이 전까지는 하나의 어플리케이션으로 계속 JSP만 하다가 API서버를 만들어 서로 다른 도메인으로 요청하는 작업이 처음이였다. 백앤드 개발자 입장에서는 서버 코드 오류 없이 테스트 까지 했는데 프론트쪽에서 CORS에러가 났다고 해줬..
[Spring-Boot] JWT Access Token Refresh Token JWT (Json Web Token) 란?JWT는 일반적으로 클라이언트와 서버 사이에서 통신할 때 권한을 위해 사용하느 토큰이다. 웹 상에서 정보를 Json형태로 주고 받기 위해 표준규약에 따라 생성한 암호화된 토큰으로 복잡하고 읽을 수 없는 String 형태로 저장되어있다.  😎 JWT 구성요소헤더(Header), 페이로드(Payload), 서명(Signature)세 파트로 나눠져 있다. 헤더(Header)어떠한 알고리즘으로 암호화 할 것인지 어떠한 토큰을 사용할 것 인지에 대한 정보가 들어있다. 페이로드(Payload) 전달하려는 정보(사용자의 ID나 데이터들, 이것들을 클레임이라고 부름)가 들어있다. Payload에 있는 내용은 수정이 가능하며 더 많은 정보를 추가할 수 있다. 하지만 노출과 수정..