반응형 Spring24 Spring Boot 모니터링 구축 들어가며... 실무에서는 와탭과 같은 모니터링 솔루션을 도입하여 사용하고 있으나, Spring Boot로 구성한 개인 프로젝트에서는 모니터링을 위해 많이 사용되고 있다는 Spring Actuator + Prometheus + Grafana 조합으로 적용 하면서 내용을 정리해 보기 위해 포스팅 합니다. Spring Actuator 기본 설정 + Prometheus + Grafana 적용 Spring Actuator 보안 적용 (추후 작성 예정) Spring Actuator Spring Actuator는 Spring Boot 애플리케이션의 모니터링과 관리를 간편하게 할 수 있는 기능을 제공합니다. 이 기능은 애플리케이션의 상태를 실시간으로 추적하고, 메트릭을 수집하며, 다양한 관리 작업을 수행할 수 있도록 .. 2024. 4. 9. SpringBoot Gradle Gradle Gradle은 프로젝트를 빌드하고 관리하기 위한 오픈 소스 빌드 자동화 도구입니다. Groovy 또는 Kotlin을 기반으로 하는 DSL(Domain Specific Language)을 사용하여 빌드 스크립트를 작성하며, 안드로이드 애플리케이션부터 Java, Kotlin, 그루비 등의 프로젝트까지 다양한 유형의 프로젝트를 지원합니다. 특징 유연성: Gradle은 Groovy나 Kotlin과 같은 DSL(Domain Specific Language)을 사용하여 빌드 스크립트를 작성할 수 있습니다. 이는 빌드 프로세스를 세밀하게 제어할 수 있도록 합니다. 선언적 DSL: Gradle은 선언적 DSL을 사용하여 프로젝트의 의존성, 작업 등을 정의할 수 있습니다. 이는 빌드 스크립트를 간단하게 만들.. 2024. 3. 26. Spring Batch Spring Batch 스프링 배치(Spring Batch)는 스프링 프레임워크 기반으로 개발된 배치 처리 프레임워크입니다. 배치 처리란 대량의 데이터를 일괄적으로 처리하는 작업을 말합니다. 스프링 배치는 이러한 대량의 데이터를 처리하는데 필요한 모든 기능을 제공하여, 안정적이고 확장 가능한 배치 처리 시스템을 구축할 수 있도록 도와줍니다. 또한, 기업 환경에서 대용량 데이터 처리 및 정기적인 배치 작업이 필요한 시스템에 쿼츠와같은 스케줄러와 함께 사용되고 있습니다. 특징 단순한 설정: 스프링 배치는 스프링 프레임워크와 통합되어 있어서, 스프링의 IoC(Inversion of Control) 컨테이너와 의존성 주입(Dependency Injection) 등의 기능을 활용할 수 있습니다. 이를 통해 간단한.. 2024. 3. 24. SpringBoot Gzip 설정 프론트 서버에서 백엔드 서버에 API를 요청시 헤더 설정에 Accept-Encoding: gzip 설정하여 요청을 하였지만 json 응답값이 gzip 으로 압축되지 않고 온다는 문의를 받았습니다. gzip 압축... 그게 뭔지 모르니 우선 검색을 통해 알게 되었고 SpingBoot 에 적용 후, 개발 프론트 서버 + 로컬 백엔드와 연결하여 테스트 후 응답값이 정상적으로 gzip 으로 압축이 된걸 확인하고 배포하였지만 백엔드 개발 서버에서는 여전히 적용되지 않았습니다. 로컬서버 내장톰캣,개발서버 외장톰캣의 차이는 생각도 안하고 CloudFront, Nginx에도 설정도 변경...해봤으니 각각에 대해 설정하는 포스팅 입니다. gzip 데이터를 보다 효율적으로 전송하고 저장하기 위해 사용됩니다. 주로 웹 서버.. 2024. 3. 17. Spring SSE 주문 프로젝트에서 고객이 웹에서 주문에 대한 상태변경을 실시간 알림으로 받기 위해 숏폴링으로 구축되어 있었고 불필요한 요청을 줄이기위해 SSE 와 웹소켓중 고민하다 SSE 를 진행하였으며, SSE에 대한 기술 포스팅입니다. (결국 웹소켓으로 변경...) 롱 폴링(Long Polling) 클라이언트가 서버에 데이터를 요청하면, 서버는 업데이트가 발생할 때까지 응답을 보류합니다. 업데이트가 발생하면 즉시 응답하고, 클라이언트는 다시 요청을 보내어 새로운 업데이트를 기다립니다. 이러한 방식은 폴링보다는 더 효율적으로 업데이트를 전달할 수 있지만, 여전히 서버에 부하가 발생할 수 있습니다. 숏 폴링(Short Polling) 폴링과 롱 폴링의 중간 형태로, 클라이언트가 주기적으로 서버에 데이터를 요청하며, 서버.. 2024. 3. 17. Spring Cache 목적 운영중이던 프로젝트에서 사용자별 권한,즐겨찾기,메뉴별 다국어 정보를 메뉴 이동마다 DB를 통해 가져오고 있었고 해당 정보들은 거의 변동이 없었기에 반복적으로 사용되는 데이터를 redis 메모리에 저장함으로써 애플리케이션의 성능을 향상 Cache . . .? 데이터나 값을 미리 저장해 두는 임시 저장소를 말합니다. 주로 프로그램이나 시스템의 성능을 향상시키기 위해 사용됩니다. 캐시는 일반적으로 데이터나 계산 결과를 저장하고, 해당 데이터나 결과가 필요할 때 바로 사용할 수 있도록 합니다. 특징 속도 향상: 캐시된 데이터는 메모리나 빠른 저장 장치에 저장되어 있기 때문에 데이터에 빠르게 접근할 수 있습니다. 이로 인해 데이터 액세스 시간이 단축되어 전반적으로 프로그램이 더 빨리 실행됩니다. 자원 절약:.. 2024. 3. 16. WebSocket Client 라이브러리 목적 WebSocket Client 사용방법 업비트 웹소켓을 연결하여 실시간 데이터처리시 Mysql 과 Redis 저장 속도를 비교해보기 위해!! 예제소스 https://github.com/devHjlee/devHjBlog/tree/main/WebSocketClient WebSocket ? 웹 애플리케이션에서 양방향 통신을 가능하게 하는 통신 프로토콜 및 API이며 HTTP와 마찬가지로 웹 브라우저와 웹 서버 간의 통신을 위해 사용 양방향 통신: 클라이언트(웹 브라우저)와 서버 간에 양방향 통신을 제공. 클라이언트나 서버가 데이터를 보낼 때 언제든지 연결을 통해 상호 작용할 수 있음을 의미하며 실시간 채팅, 온라인 게임, 주식 시장 데이터 업데이트 등의 기능을 구현 낮은 오버헤드: 기존의 HTTP 프로토.. 2023. 9. 14. Spring Filter 개념 구현방법 목적 Filter 활용 예제소스 https://github.com/devHjlee/devHjBlog/tree/main/filter-interceptor-aop Filter 필터는 디스패처서블릿에 요청이 전달되기 전/후 에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리 할 수 있는 기능을 제공합니다. javax.servlet.Filter는 Java Servlet API의 일부로, 웹 애플리케이션에서 들어오는 요청과 해당 응답을 가로채고 조작하는 데 사용되는 인터페이스입니다. 필터는 요청 전후에 특정 작업을 수행하거나 응답을 수정하는 데 유용합니다. 주요 목적은 애플리케이션의 공통된 작업을 중앙에서 관리하고 코드 중복을 피하는 것입니다. 필터는 웹 애플리케이션의 요청 및 응답 처리 파이프라인에서 동작.. 2023. 5. 22. Spring ControllerAdvice 활용 목적 Spring ControllerAdvice 사용방법 예제소스 https://github.com/devHjlee/devHjBlog/tree/main/springControllerAdivce ControllerAdvice 스프링프레임워크에서 예외 처리 코드를 중복해서 작성하지 않고, 전체 컨트롤러에 대한 전역적인 예외처리를 정의 할 수 있다. 컨트롤러 메소드에서 예외가 발생하면 ControllerAdvice가 이를 가로채고 정의된 예외 처리 로직을 적용한다. RestControllerAdvice ControllerAdvice 와 비슷한 기능을 제공하지만 반환되는 값의 형식이 다르다. ControllerAdvice 는 ModelAndView 객체를 반환하여 뷰를 랜더링 할 수 있지만, RestContro.. 2023. 5. 4. Spring Event 활용 목적 Spring Event 사용방법 예제소스 https://github.com/devHjlee/devHjBlog/tree/main/springEventPublisher Spring Event 스프링이벤트란 스프링의 Bean 과 Bean 사이에 데이터를 전달하는 방법 일반적으로 DI 를 통해 이루어진다 A Class 에서 B Class 에 대한 의존성을 주입받아 A Class 에서 B Class Method 를 호출하여 본인의 클래스에서 사용 이벤트는 A Class 에서 ApplicationContext 로 넘겨주고 이를 Listener 에서 받아 처리. 이벤트에는 발생시키는 Publisher 와 받는 Listener 이 있고 이벤트에서 데이터를 담는 이벤트 모델로 이루어져 있다. 직접적인 결합이 없기 .. 2023. 3. 21. JPA+QueryDsl 게시판 CRUD 구현(2) JPA+QueryDsl 게시판 CRUD 구현(1) 목적 신규 프로젝트에서 사용 되었던 JPA, QueryDsl 을 정리 Spring Data Jpa 로 간단한 게시판 구현을 통해 정리 User, Post Entity 에서 Fetch LAZY, EAGER 변경해가면서 이해 QueryDsl 로 동적쿼리 작성 예제소스 https://github.com/devHjlee/devHjBlog/tree/main/springJpaCrud QueryDsl 이란? 정적타입을 이용하여 SQL 과 같은 쿼리를 생성할 수 있도록 제공하는 오픈소스(JPQL 을 만들어주는 builder 최종적으로는 JPQL 로 변환) 예시 : 학교 1:N 학급 1:N 학생 연관관계를 갖고있을때 JPA만을 통해 조회를 진행하게되면 학교에 해당하는 학.. 2023. 3. 9. JPA Batch JDBC Batch 목적 JPA를 통해 개발할시 대용량 Insert 방법 구현 JPA Batch JDBC Batch 예제소스 https://github.com/devHjlee/devHjBlog/tree/main/springJpaBulk Enity ID 전략에따라 구현하는 방법 ID 직접할당 : JPA, JDBC Batch IDENTITY : JDBC Batch Hibernate 에서는 IDENTITY 전략에 대해서는 Batch Insert를 비활성화시켜놨는데 새로 할당할 Key에 대해 미리 알수 없기 때문이다. SEQUENCE : 데이터베이스 시퀀스를 사용해 식별자를 조회해오고 조회된 식별자를 엔티티에 할당하는방법(Mysql 불가능) JPA, JDBC Batch TABLE : 키생성용 테이블을 통해 시퀀스전략을 흉내내는 전.. 2023. 3. 3. JPA+QueryDsl 게시판 CRUD 구현(1) 목적 신규 프로젝트에서 사용 되었던 JPA, QueryDsl 을 정리 Spring Data Jpa 로 간단한 게시판 구현을 통해 정리 User, Post Entity 에서 Fetch LAZY, EAGER 변경해가면서 이해 QueryDsl 로 동적쿼리 작성 예제소스 https://github.com/devHjlee/devHjBlog/tree/main/springJpaCrud ORM ?? ORM(Object-Relational Mapping)은 객체와 관계형 데이터베이스를 매핑하며 ORM 프레임워크는 객체와 테이블을 매핑하여 패러다임 불일치 문제를 개발자 대신 해결해준다. 하이버네이트(hibernate.org)라는 오픈소스 ORM 프레임워크가 등장하면서 하이버네이트를 기반으로 새로운 자바 ORM 기술 표준이.. 2023. 2. 15. Srping Boot Quartz DB Cluster,Log 구현 개요 스프링스케줄러+shedLock 로 이중화 기능 구현하였으나 스케줄에 대한 설정을 위해 Quartz 로 변경 구현 목록 DB Cluster 를 통한 이중화 CronTrigger 생성,수정,일시정지,재기동 스케줄 변경 정보, 스케줄 수행 이력 Job 실패시 기존 등록된 수행시간에 맞춰 지정된 횟수만큼 수행 (횟수 초과시 중지) 목차 공식 홈페이지 : http://www.quartz-scheduler.org/ 0.Quartz란? 1.개발환경 2.용어정리 3.프로젝트 구조 4.소스 설명 Quartz란? Job Scheduling 라이브러리 이며 자바로 개발되어 모든 자바 프로그램에서 사용 가능하고 간단한 interval형식이나 Cron 표현식 스케줄링 지원 장점 DB 기반의 클러스터 기능 제공 시스템 Fa.. 2023. 1. 18. Spring Boot zip END header not found zip END header not found 관련 정리 intellij에서 진행중이던 프로젝트가 건드린것 없이 build 오류 발생 오류내역 : zip END header not found jdk 버전이 잘못된줄 알았으나 maven 프로젝트들은 정상적으로 동작하고 있었고 구글링 검색결과 gradle 연관된 파일이 잘못되어 졌다는 결론 해결방법 2가지중 2번을 선택하여 해결 1. 해당 프로젝트의 gradle-wrapper.properties 파일에서 gradle 버전변경 gradle 버전은 최신으로 되어있어서 기존 그대로 유지 2. /usr/x/.gradle 폴더 삭제 삭제 후 intellij 재기동을 하니 gradle build가 정상적으로 동작하여 해결 2022. 11. 2. Spring Boot Connection Pool 설정 Spring Boot Connection Pool 설정 Spring boot 기본 connection pool이 spring boot 2.0.0버전부터 hikariCP로 변경되었고 Spring boot 2.0.0 이상버전에서 hikariCP를 TomcatJDBC Connection Pool 로 변경하는 방법 성능상으로 hikariCP가 다른 DBCP보다 성능은 좋지만 혹시 변경할 일이 있을 경우를 대비해 포스팅 Spring boot 초기세팅(hikaraCP) Pom.xml 1 2 3 4 5 6 7 8 9 10 org.springframework.boot spring-boot-starter-data-jpa mysql mysql-connector-java runtime Colored by Color Scri.. 2022. 11. 1. Spring boot + JPA (1) 목적 JPA 개념정리 및 사용법 정리하게된 계기 기존에는 Mybatis 를 사용하였는데 새프로젝트에서 JPA 를 사용하게되어 정리 JPA (Java Persistence API) 자바 ORM 을 위한 표준기술로 Hibernate, Spring JPA 와 같은 구현체가 있고 이것의 표준인터페이스 장점으로는 Mybatis 프로젝트와 비교하면 코드량이 줄고 객체위주 코드가 작성됨으로 가독성이 좋아지고 특정 데이터베이스에 종속되지 않는다. 단점으로는 복잡한 쿼리처리,성능저하위험,학습시간등 이있는데 복잡한 쿼리는 QueryDSL로 처리가 가능한거 같다. 개발환경 OS 윈도우10 Jdk 1.8 Framework Spring Boot 2.7.0 DB mysql 8.0 패키지 구조 의존성추가 1 2 3 4 5 6 7 .. 2022. 9. 26. Spring Data Redis 로 Redis 연동 개발환경 Spring Boot 2.7.0 JDK 1.8 Build Maven https://devhj.tistory.com/24?category=721156 윈도우10 Redis 설치 및 기본 설정 1.Redis란? 레디스(Redis)는 Remote Dictionary Server의 약자로서[4], "키-값" 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템(DBMS)이다. 2009년 살 devhj.tistory.com 프로젝트생성 (의존성 : Spring data Redis) application.yml spring: redis: lettuce: pool: max-active: 10 max-idle: 10 min-idle: 2 port: 6379 host.. 2022. 9. 20. Intellij Spring boot Jmx RMI remote objects have benn exported Intellij 에서 Spring boot 2.7.3 프로젝트를 생성 후 내장톰캣으로 프로젝트를 구동하였는데 JMX 관련하여 오류가 발생 The server sockets created using the LocalRMIServerSocketFactory only accept connections from clients running on the host where the RMI remote objects have been exported Port already in use: nested exception 구동할때마다 바뀌는 Exception 내용들이 있어서 구글링을 통해 JMX 를 비활설화 application.properties 에서 spring.application.admin.enabled=false.. 2022. 9. 13. Spring + Mssql + Mybatis 연동 개발환경 Os Windows 10 IDE STS 3.9.6 Jdk 1.8.0_172 Spring 5.2.1.RELEASE DB MsSql 1. 프로젝트 생성 - Spring Legacy Project > Spring MVC project 생성 후 Java 버전을 1.8로 변경 2. Pom.xml 의존성추가 - mybatis, mybatis-spring, spring-jdbc, mssql-jdbc, spring-test - https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc org.mybatis mybatis 3.4.6 org.mybatis mybatis-spring 1.3.2 org.springframework spring-jdbc.. 2019. 12. 3. Spring Security 구성하기(2) - 패턴구분 및 로그아웃 개발환경 Os Windows 10 IDE STS 3.9.6 Jdk 1.8.0_172 Spring 5.2.1.RELEASE Spring Security 4.2.13.RELEASE DB MsSql View JSP 1. security-context.xml > url 별로 접근권한 구분 1) security:intercept-url pattern - hasRole(role) : 현재 로그인된 사용자가 설정된 role이 존재하면 true 를 반환 - hasAnyRole(role1,role2) : 현재 로그이된 사용자가 콤마로 구분된 role중 하나라도 가지고 있으면 true를 반환 권한의 갯수는 제한이 없음 - permitAll : 어떤 사용자든 true를 반환 - denyAll : 어떤 사용자든 false를 .. 2019. 11. 26. Spring Security 구성하기(1) 개발환경 Os Windows 10 IDE STS 3.9.6 Jdk 1.8.0_172 Spring 5.2.1.RELEASE Spring Security 4.2.13.RELEASE DB MsSql View JSP 1. 프로젝트 최초 생성 / 구조 - New > Spring Legacy Project > SPring MVC Project 2. Spring Security 관련 추가 작업 1) 의존성 추가를 위해 POM.xml 에 Spring Security 4.2.2.RELEASE 추가 org.springframework.security spring-security-core 4.2.2.RELEASE jar compile org.springframework.security spring-security-web 4.. 2019. 11. 26. Spring Boot + Maven 웹프로젝트 시작하기_ application.properties 설정 개발환경 Os Windows 10 IDE STS 3.9.5 Jdk 1.8.0_172 Spring 5.0.9.RELEASE View Thymeleaf 1. application.properties - Spring boot 를 이용시 DB,Logging, Server port 등에 관한 설정을 적용하는 환경설정파일 (application.properties 에 대한 지식이 부족하여 해당내용은 나중에 더 보강해야됨) - 아래는 현재 글을 작성하면서 사용하고있는 설정들이고 DB나 log 등 추가설정도 가능하다. - 프로젝트 구조 - application.properties 내용 # =================================================================== # COM.. 2018. 10. 1. Spring Boot + Maven 웹프로젝트 시작하기_프로젝트생성 개발환경 Os Windows 10 IDE STS 3.9.5 Jdk 1.8.0_172 Spring 5.0.9.RELEASE View Thymeleaf 1.File > New > Spring Starter Project 2. 프로젝트의 사용할 Dependency 선택 - 저는 뷰단을 JSP가아닌 Thymeleaf 를 사용하기위해 Thymeleaf를 추가 3. run as > spring boot app - Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured - 아래와같이 에러가 떨어지는 것은 SpringBoot는 어플리케이션이 시작될 때 필요한 기본 설정들을.. 2018. 9. 21. 이전 1 다음 반응형