boot

· Redis
개요 Spring 프로젝트 같은 멀티 쓰레드 환경에서는 동시성 처리가 필요한 상황이 발생합니다. 서버가 1대라면 쓰레드 동기화를 통해 처리가 가능하지만, 서버가 여러대로 늘어난다면 요청이 분산되기 때문에 무용지물이 됩니다. 만약 쇼핑몰에서 재고가 1개인 상품을 2명의 회원의 동시에 주문한 경우 2번에 요청에서 상품을 조회 당시에는 재고가 1개이므로 2명의 회원 모두 주문에 성공하는 경우가 발생할 수 있습니다. ZooKeeper나 MySQL 분산락을 사용할 수 있지만 Redis를 도입하고있고, 예정이라면 Redis를 통해 분산락으로 동시성 처리가 가능합니다. 라이브러리 선택 Redis를 이용해 분산락을 사용하기 전에 고려해야 할 것이 있는데 어떠한 라이브러리를 사용할 것인가 입니다. Spring에서 제공하..
· Spring
개요 업무상 Amazon SQS를 적용할 일이 있어 예전에 정리한 SQS 설정 방법대로 설정했지만 Listener이 작동하지 않는 이슈가 있었습니다. 서칭해본 결과 Spring Cloud AWS 2.x 버전은 Spring Boot 3.x에 완전히 호환되지 않는 것처럼 보입니다. AWS @SqsListener not working with spring cloud (using springboot 3) Currently, we have an SQS client configured using an IAM Role that is picked up on the cluster. However, migrating over to Springboot 3 the @SqsListener is no longer consumin..
· Spring
Spring Boot Admin은 Spring Boot 애플리케이션을 관리하고 모니터링하기 위한 커뮤니티 프로젝트이다. 현재 업무에는 ELK를 구축해 실시간 로깅, 서버 매트릭 정보 모니터링 등등을 사용하고 있지만, 서버 이전 시 한정적인 환경에서 Spring Boot Admin을 사용할 가능성도 있어 정리하며 구축하려 한다. 아래 예제는 Spring Boot 2.6.7 버전 기준이다. 1. Spring Boot Admin Server 구축 build.gradle Spring Boot 프로젝트 생성 후 사용할 라이브러리를 추가한다. dependencies { .... // 접속 시 보안 처리 implementation 'org.springframework.boot:spring-boot-starter-se..
· Spring
Application에 개발자가 예상하지 못한 오류가 발생하면 사용자의 문의보다 빠르게 발생과 원인을 알 수 있도록 슬랙 알림 설정을 해보자. Application은 Spring Boot로 로그는 Logback을 사용해서 간단한 설정으로 Slack 알림을 받아볼 수 있다. 1. Slack Webhook 앱 생성 슬랙 사이드 바 하단에 앱 추가 버튼을 클릭 해 WebHooks 앱을 추가한다. 생성된 웹후크 URL을 복사 2. Logback Slack Appender 의존성 추가 및 Logback 설정 build.gradle dependencies { ... implementation group: 'com.github.maricn', name: 'logback-slack-appender', version: ..
· Spring
도입한 이유 업무를 진행하던 중 로깅과 오류 모니터링을 해야 했다. ELK를 도입하고 싶지만 주어진 시간이 너무 없어서 도입하고 공부할 시간이 너무 없었다. 나는 도입하는 것도 중요하지만 어떻게 효율적으로 사용하고 고도화가 가능한지를 생각해보고 도입하는 것이 중요하다 생각돼서 간단한 Sentry를 이용해 로깅과 오류 모니터링을 구축하였다. Sentry는 여러 언어와 프레임워크를 지원하고 구축 방법도 매우 쉬워서 쉽게 로깅과 모니터링이 가능하다. 가격 정보를 간단하게 정리하면 아래와 같다. 더 자세한 정보는 홈페이지를 참고 바란다. Developer : 1개 계정 사용, 30일 데이터 보존, 오류 5,000개 제한, 트랜잭션 10,000개 제한 Team, Business : 무제한 계정 사용, 90일 데이..
· Spring
스프링 배치(Spring Batch)란? Spring Batch는 엔터프라이즈 시스템의 운영에 있어 대용량 일괄처리의 편의를 위해 설계된 가볍고 포괄적인 배치 프레임워크다. Spring의 특성을 그대로 가져왔기 때문에 DI, AOP, 서비스 추상화 등 Spring 프레임워크의 3대 요소를 모두 사용할 수 있다. 보통 아래와 같은 경우 많이 사용한다. 대용량의 비즈니스 데이터를 복잡한 작업으로 처리해야하는 경우 특정한 시점에 스케쥴러를 통해 자동화된 작업이 필요한 경우 (ex. 푸시알림, 월 별 리포트) 대용량 데이터의 포맷을 변경, 유효성 검사 등의 작업을 트랜잭션 안에서 처리 후 기록해야하는 경우 Spring Batch는 로깅/추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 건너뛰기, 리소스 관..
· Spring
H2 Database란? H2DB는 자바 기반의 오픈소스 관계형 데이터 베이스 관리 시스템(RDBMS)이다. H2DB는 서버(Server) 모드와 임베디드(Embedded) 모드의 인메모리 DB 기능을 지원하고 디스크 기반 테이블을 또한 생성할 수 있다. 또한 브라우저 기반의 콘솔모드를 이용할 수 있으며, 별도의 설치과정이 없고 용량도 2MB(압축버전) 이하로 매우 저용량 이므로 매우 가볍고 빠르며, JDBC API 또한 지원하고 있다. SQL 문법은 다른 DBMS들과 마찬가지로 표준 SQL의 대부분이 지원된다. In-memory Database란? 데이터를 디스크에 저장하는 Mysql이나 Oracle과 같은 DBMS와는 다르게 데이터 스토리지의 메인 메모리에 설치되어 운영되는 방식의 데이터베이스 관리 ..
· Spring
보통 기본적인 유효성 검증은 Validation 어노테이션들로 설정한다. 만약 더 섬세한 유효성 검증이 필요할때는 자신만에 어노테이션을 만들어 설정할 수 있다. 만약 연락처 필드의 유효성 검증(PhoneValidator)을 만든다고 가정해보겠다. // @Phone 어노테이션 @Inherited @Documented @Repeatable @Constraint(validatedBy = PhoneValidator.class) @Target({ ElementType.METHOD, ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) @ReportAsSingleViolation public @Interface Phone { Stirng message() defaul..
· JPA
Hibernate란? 하이버네이트는 자바 언어를 위한 ORM 프레임워크이고 JPA의 구현체로, JPA 인터페이스를 구현하고 내부적으로 JDBC API를 사용한다. 하이버네이트는 자바객체를 통해 데이터베이스가 Oracle, MySql, MSSQL 등 에 상관없이 다룰수 있도록 하는 추상화를 목표로 한다. Mybatis에 익숙한 사람들이라면, Mybatis 구조가 들어가는 자리에 Hiberante가 들어오는 구조라고 이해하면 된다. 이를 통해 개발자는 SQL를 직접 사용하지 않고 메서드 호출만으로 쿼리가 수행된다, 즉 SQL을 작성하는 시간을 줄여 생산성이 높아진다. 하지만 직접 SQL을 작성하는것보다는 성능상 좋지 않고 세밀하게 데이터를 조작하기 힘들다. 이를 보안하기 위해 JPQL과 NativeQuery..
· Spring
이 전 블로그 글에서 Spring Boot 프로젝트를 생성하고 Prometheus와 연동까지 해봤다. 이제 Grafana를 연동해 시각화를 해보자. Grafana 설치 및 사용 Grafana 역시 도커로 설치하겠다. docker run -d -p 3000:3000 --name grafana grafana/grafana 설치 후 컨테이너가 실행됫으면 http://localhost:3000에 접속해보면 grafana 홈페이지에 접속될 것 이다. 초기 로그인은 admin/admin으로 접속해 비밀번호를 바꾸면 된다. 이제 Data source를 추가해 Prometheus와 연동해보자 전 블로그 글에서 접속했던 http request들이 확인되면 정상적으로 연동이 된 것이다. 전체 코드는 아래 GitHub에서 ..
beekei
'boot' 태그의 글 목록