- Project & Issu 모델링 작업 ※ 실제 테이블 구조가 아닌 이해를 돕기 위해 간단하게 재구성 한 구조 입니다.이해를 돕기 위해 변경 전 테이블 구조를 먼저 보여주고 고도화 요구사항을 설명하고 변경한 테이블 구조에 대해서 설명합니다.index, 데이터 양을 중점으로 생각해서 테이블을 설계하였습니다.마지막에는 index에 대해서 정리한 내용을 설명합니다. 변경 전 테이블 구조 흐름 1. 고객 정보를 등록 2. 메신저를 보낸다 -> 소통 내용 태이블에 INSERT -> 소통 ID를 고객별 마지막 소통 ID 컬럼에 UPDATE 3. 고객별 대화 내용 조회 (쉽게 말해서 카카오톡에서 대화 목록을 보여준다고 생각하면 된다. 대화 목록에는 마지막으로 연락한 메세지 내용이 보인다.) -> 소통 내용에 많은 데이..
- Project & Issu 오라클 PL SQL 마이그레이션 CREATE OR REPLACE PROCEDURE "P_TEST" IS BEGIN DBMS_OUTPUT.PUT_LINE('Hello from P_TEST');END;/마이그레이션 시 생각 못 했던 사항을 정리 - 마이그레이션 할 데이터 조회시 ID로 ORDER BY를 해준다. -> 어디까지 완료된건지, 문제가 어디서 터진건지 확인 가능 -> 마이그레이션 할 데이터 조회 시점 이후에 추가된 데이터가 있는 경우 추가로 작업하기 편하다. - 마이그레이션 쿼리를 PL SQL로 하는 경우 에외나 문제 포인트에 ROLLBACK 처리를 해준다. -> DB 툴에서 설정해놓은 대로 ROLLBACK 되는 경우가 있는데, 툴에 의존하지 않고 ROLLBACK 할 수 있도록 예외 처리 코드를 넣어줘야..
- Project & Issu feign client 버그 - java.lang.IllegalArgumentException: name is required - 원인 : feign client로 통신할 때 파라미터 값에 (@RequestParameter String name ) '&'이 포함되어있으면 발생 - 해결 : @RequestBody를 사용해서 값을 넘겨준다. package com.....; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.data.domain.Page; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.anno..
- Project & Issu csv 파일 인코딩 문제 1.한글 문제 [문제] UTF-8로 인코딩해서 CVC 파일 출력 시 한글이 깨지는 문제 [해결] Microsoft Office EXCEL.exe 프로그램으로 csv 파일을 실행했을 때 'ANSI'라는 인코딩 방식으로 자동 인식한다. 'UTF-8'로 인코딩 된 파일을 'ANSI'로 읽으면 한글이 깨진다. 따라서 MS949로 인코딩 해서 출력한다. private void download(String pathFileNamee, resultList) { try (CSVPrinter csvPrinter = new CSVPrinter( new BufferedWriter( new OutputStreamWriter( new FileOutputStream(pathFileName, true), "MS949"/*Standa..
- Project & Issu feign client에서 @RequestParameter에 "&" 를 넘겨주지 못 하는 버그 에러 java.lang.IllegalArgumentException: name is required - 원인 : feign client에서 @RequestParameter에 "&" 를 넘겨주지 못 하는 버그 - 해결 : @RequestBody 사용 참고 https://github.com/spring-cloud/spring-cloud-openfeign/issues/211
- Project & Issu 좋아요 기능 동시성 처리 요약 : 좋아요 service에 redis 분산 락 처리를 하여 동시성 테스트 완료 1차 커밋 : feat : 좋아요 기능 추가(redis를 사용한 동시성 처리, queryDSL 사용), board test code 추가 · jeoningu/Springboot-JPA-Blog@3726ea1 (github.com) 1. 좋아요 service 멀티쓰레드 동작시 갱신손실 문제 동시성 처리를 해주지 않으면 좋아요 service를 테스트 코드에서 멀티쓰레드로 동작시켰을 때 동시성 테스트에 통과하지 못 합니다. 동시성 테스트를 해봤을 때 아래 로그에서 볼 수 있듯이 여러 쓰레드로 한 자원에 대해서 update를 하려고 할 때 이전 쓰레드에서 update를 하기 전 값을 select함으로써 이전 쓰레드에서 updat..
- Project & Issu 게시판 개인 프로젝트 JPA 이슈 해결 - N+1, LazyInitializationException 서론 JPA를 사용하면 연관관계를 갖는 엔티티에 의해 N+1 문제가 생긴다고 하던데, 게시판 개인 프로젝트에서도 게시물 목록을 조회 시 N+1 문제가 발생했다. 추가적으로 연관관계에서 성능을 위해 FetchType을 EAGER 보단 LAZY로 변경하는 걸 권장하길래 글 엔티티와 댓글 엔티티 연관관계에서 FetchType을 LAZY로 변경했더니 게시글 글 조회 시 LazyInitializationException 으로 인한 500Error가 발생했다. 위 2가지 문제 상황에 대해서 해결해보자. "배운점 선 요약"에서 주요 학습 내용 요약을 보고 "버그 내용", "처리 내용 및 결과"의 상단 부분을 보면 된다. 자세한 내용은 ""에 작성하였다. 게시판 개인 프로젝트에서 소스 참조 : https://githu..
- Project & Issu 토이 프로젝트에 적용할 기능, 기술에 대한 기록 - 알림 기능, 요청에 대한 이력 적재 기능, maven -> gradle 두서 없이 작성 중. 아직 정리가 안 되어 있는 상태. 작성 배경 프로젝트에 적용할 기능, 기술에 대한 기록용 정리 하면서 작성하는게 아니라 일단 기록하기 위해 작성 기능목록 1. 알림 기능 2. 요청에 대한 이력 적재 기능 3. Maven vs Gradle 4. jpa n+1 문제 해결 프로젝트 주소 jeoningu/Springboot-JPA-Blog (github.com) 서론 - 알림 기능을 구현해보려 하는데, 어떻게 구현해야 할지 정리가 필요하고 관련된 내용들도 추가적으로 학습해서 정리해보려 한다. - Runnable, BlockingQueue로 구현된 기능에 대해서 작업한 적이 있는데, 알림 개발시에 참고할 수 있을 거 같아서 우선 이것들을 학습해보려고 한다. 학습하기 위해 참고할 블로그 목록을..
- Project & Issu JWT 연습 Json Web Token 스프링 시큐리티 공부 18 - JWT (Json Web Token) (tistory.com) JWT 자바 가이드. 이 글은 OAuth와 JSON Web Token과 같은 토큰 기반의… | by Out of Bedlam | Medium server: port: 8080 servlet: context-path: / encoding: charset: UTF-8 enabled: true force: true spring: datasource: # h2 연결용 DB 정보 driver-class-name: org.h2.Driver # Database를 H2로 사용하겠다. # url: jdbc:h2:~/test # H2 접속 정보 # url: jdbc:h2:tcp://localhost/~/..
- Project & Issu security 4.0.0 org.springframework.boot spring-boot-starter-parent 2.7.7 com.jig security1 0.0.1-SNAPSHOT security1 security1 11 org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-mustache org.springframework.boot spring-boot-starter-security org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-devtools runtime true com.mysq..