springboot 82

[JPA] @GeneratedValue의 Auto_increment 미적용 될때

미적용 예시 상황 a테이블과 b테이블을 각각 save를 사용해서 insert 하게되면 id값이 합쳐서 올라가는 현상이 있습니다. @GeneratedValue를 사용하면 default값으로 AUTO가 적용되고, AUTO는 IDENTITY를 기본으로 사용한다고 알고 있었는데, 실제로 적용되는 전략은 IDENTITY가 아닌것 입니다. 실제 ddl 쿼리 내용을 보면 sequence 전략이 찍혀있다 시퀀스 전략이란 시퀀스 전략은 모든 엔티디에 대한 id값을 시퀀스 테이블 하나에서 통합적으로 관리하는 전략이다 그래서 id값이 하나의 엔티티처럼 증가하는 현상이 발생한것. IDENTITY 전략을 적용하기 위해선? yml 혹은 propertice에 다음과 같은 설정을 추가해 줘야한다. spring.jpa.hibernat..

Springboot 2023.08.17

SpringBoot/java POI 이용해서 엑샐 생성하기

POI? 아파치에서 만든 java로 엑셀을 핸들링할 수 있게 해주는 라이브러리 입니다. 의존성 (gradle) implementation group: 'org.apache.poi', name: 'poi', version: '4.1.2' implementation group: 'org.apache.poi', name: 'poi-ooxml', version: '4.1.2' // .xlsx 를 사용하려면 해당 의존성을 추가해야합니다. 사용법 기본 적인 사용법은 간단합니다. 용어 workbook 하나의 엑셀파일을 의미합니다. 가장 큰 단위로 생각 하면 됩니다. sheet sheet는 말그대로 엑셀 시트를 생성해 주는 것 입니다. Sheet sheet = workbook.createSheet("시트명"); row..

Springboot 2023.08.17

Spring boot Static 필드에 @Value 사용

Static 필드에 @Value 사용 Static 필드에 @Value 값은 바인딩 될 수 없습니다. 정확한 이유는 잘 모르지만 제 생각엔 java에서 가장 먼저 jvm 이 가장 먼저 메모리에 띄우는 것들이 static 인데 메모리에 이미 올라간 상태로 @Value 로 바인딩하려니 안되는 것 같습니다. 쉽게 말해 메모리에 올라가는 순서 때문에 발생한 문제인것 같습니다. ( 정확한 이유는 좀 더 공부를 해 봐야겠습니다) 해결 방법은 간단합니다. setter로 바인딩 해주면 그만입니다. @Component public class EncryptionUtil { public static String key; @Value("${enc.key}"}) public void setKey(String value) { ke..

Springboot 2023.08.16

springboot + fluentd + mongoDB 연동

fluntd? 흔히 아는 ELK에 로그스테시와 같이 로그를 저장소에 적제하거나 필터링하고 어딘가로 전송해주는 큐 역할을 하는 툴입니다. 해당 글에선 docker를 사용해서 할 예정입니다. fluntd Dockerfile FROM fluent/fluentd:v1.11-debian-1 USER root RUN buildDeps="sudo make gcc g++ libc-dev" \ && apt-get update \ && apt-get install -y --no-install-recommends ${buildDeps} \ && sudo apt-get install -y libmariadb-dev \ && sudo gem install fluent-plugin-mongo \ && sudo gem instal..

Springboot 2023.08.16

spring boot logback으로 error 로그만 파일로 남기기

logback 해당 라이브러리는 spring-web에 들어있기때문에 따로 의존성을 설정해 둘 필요는 없습니다. %black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable error ACCEPT DENY ${LOGS}/spring-boot-logger.log %d %p %C{1.} [%t] %m%n ${LOGS}/archived/spring-boot-logger-%d{yyyy-MM-dd}.%i.log 10MB property : xml 에서 사용할 변수값 선언 appender : 기능단위 자바로치면 method 격이라고 생각하면됩니다. 위 설정파일에서는 Console이라는 appender에서는 기본적으로 스프링..

Springboot 2023.08.16

Grafana 활용기(Spring Boot)

Grafana 애플리케이션과 연동하는것은 이글에서 다루지 않겠습니다. 그라파나를 쓰면서 느낀점들이나 알게된점들을 정리하는 글 입니다. 남이만든거 잘 가져다 쓰자 https://grafana.com/grafana/dashboards/6756 위 사이트로 들어가면 다음과 같은 id 또는 JSON 파일을 다운로드 받을수 있습니다. id를 복사해서 import로 들어갑니다. JSON파일을 import 해 줘도 되고 사진과같이 아이디 정보를 입력해면 해당 대시보드를 받아서 사용해 볼 수 있을.... 거라 생각했는데 하고있는 프로젝트는 클러스터가 무려 세개~~ 그리고 매트릭정보나 env정보가 맞지않아서 저는 참고 정도만 하고 제가 직접 만들었습니다. newDashboad를 클릭후 대시보드를 선택하면 머리가 하얗게 ..

Springboot 2023.08.16

Springboot + prometheus + grafana모니터링 시스템 구축

Spring boot 설정 의존성 추가 implementation 'org.springframework.boot:spring-boot-starter-actuator:2.7.2' implementation 'io.micrometer:micrometer-registry-prometheus' implementation 'io.micrometer:micrometer-core' yml 설정 management: endpoints: web: exposure: include: - info - health - loggers - mappings - metrics - shutdown - prometheus 위 설정을 해주고 엔트포인트로 /actuator 로 접속되면 application/json+hal 타입에 해당 주소와..

Springboot 2023.08.16

JPA CascadeType 종류와 부모 테이블 삭제

Cascade? Cascade는 사전적의미로 종속, 계산식 폭포 등의 의미를 품고 있다. 이름에서 알수 있듯이 db 관계를 맺고 있는 테이블끼리 cascade를 한다는건 상위 테이블을 삭제하면 관계맺은 하위 테이블 까지 튜플이 같이 삭제된다는 뜻이 된다. PersistentObjectException: detached entity passed to persist 위 에러는 JPA 사용시 자동으로 생성되는 값을 가진 필드에 직접 값을 할당해 저장하고자 할때 발생되는 에러이다. JPA 에서의 Cascade JPA 라는 ORM 에서 Cascade는 다음과 같은 타입과 종류가 있습니다. javax.persistence.CascadeType JPA Cascade Type ALL 상위엔티티에서 하위 엔티티로 모든작..

Springboot 2023.08.16

SpringBoot/한글파일(.hwp) 데이터 바인딩 후 다운로드 하기

제가 하는 프로젝트에서 받은 요구사항이 자동으로 문서를 생성하고 다운로드까지 제공해야하는 요구사항이 있었습니다. 한글 파일에 데이터 바인딩 문서를 생성(다운로드) 위와같은 절차를 거쳐야 하기 때문에 일반적인 static 파일을 view로 보여주는 요구사항과 비슷해보지만 정말 다른 요구사항을 직면하면서 해결해 나가며 배운 내용입니다. 1. 한글파일 .hml 파일로 확장자 변환하기. 한글파일을 뜯어보면 .hml파일로 확장자를 변환해서 vs 같은 ide 툴로 열어보면 xml 구조로 되어있습니다. xml 이라는 점을 이용해서 DOM 에 Element 을 이용해서 직접 바인딩을 해주는방법이 있습니다. (더 좋은방법이 있다면 알려주세요..) 2. 작업하기 쉽게 .hml파일 정렬하기 해당 사이트 추천 (xml 정렬 ..

Springboot 2023.08.16

java 이미지 포맷 변환 / png to jpg

자바에서는 imageIO 클래스를 이용해 이미지를 컨트롤 할 수 있다. 이미지 포맷 변환 프로세스 사용자가 파일 저장 서버단에서 파일 전송 후 png 파일인 경우 파일 포맷을 변경 변환된 jpg 파일 저장 multipartFile 타입 File 타입으로 캐스팅 public static File multipartFileToFile(MultipartFile file) throws IOException { File convFile = new File(file.getOriginalFilename()); convFile.createNewFile(); FileOutputStream fos = new FileOutputStream(convFile); fos.write(file.getBytes()); fos.close..

Springboot 2023.08.16