본문 바로가기

분류 전체보기

(308)
Data Jpa의 exists에 대한 고찰 현상 현장 실습중 인자의 리스트의 값이 DB에 모두 있어야만 True가 반환되는 로직을 구현해야 할 일이 생겼다. 나는 현장실습에서 사용중인 data jpa를 통해 해당 로직을 구현하였다. 나는 다음과 같이 메서드를 data jpa의 메서드 네이밍 컨벤션에 따라 작성하였다. Boolean existsAllByIdIn(List ids); 이후 해당 로직이 올바르게 동작하는지 테스트를 해보았지만 이상한 점을 찾았다. 내가 원하는 로직은 인자로 주어지는 값이 DB에 모두 있어야지만 true를 반환하는 것이지만 실제로 동작할때는 하나라도 값이 있으면 true를 반환하는 식으로 동작하였다. 즉 and 가 아닌 or 처럼 연산되는 문제점을 발견한것이다. 보다 정확한 쿼리를 확인하기 위해 p6spy 라이브러리를 통해..
Optional의 동작방식 현상 Data Jpa를 사용하는 환경에서 Optional을 반환하는 exits 메서드를 만들고 만약 DB에 중복된 값존재한다면 레포지토리 레이어에서 바로 예외를 발생시키고자 하였다. 그러나 중복된 값이 있더라도 예외는 발생하지 않았고 DDL을 통해 생성한 유니크 제약조건에 의해서 예외가 발생했다. 원인 내가 Optional문법에 대해서 정확하게 모르고 있어서 생긴 문제였다. 문제가 된 코드는 다음과 같다. Optional existsByCode(String code); userRepository.existsByCode(DTO.getCode()).orElseThrow(() -> new IllegalArgumentException("이미 존재하는 유저 코드입니다.")); Optional 문법에서 orElse..
백준 1030 프렉탈 평면 (파이썬) https://www.acmicpc.net/status?from_problem=1&problem_id=1030 채점 현황 www.acmicpc.net 문제 풀이 문제 이해를 시도하다가 도저히 안되어서 블로그를 참고했지만...이해하는데 오래 걸린 문제이다. 푸는데 이해를 하는데 고생을 한 만큼 글로 정리하고자 한다. 이 문제는 분할정복을 이용해서 푸는 문제로 재귀를 이용해서 풀었다. 문제를 푸는 순서는 다음과 같다. 입력값들을 받는다. 전체 프렉탈을 구성해 놓고 출력을 하는 것이 아닌 문제에서 원하는 지점에 대해서 검사를 한다. (전체 프렉탈을 구성할 경우 최대 2^30 * 2^30 인 프렉탈이 나오고 메모리 공간이 부족한 것은 물론 시간 복잡도 적인 측면에서 보아도 얻을 이점이 존재하지 않기 때문이다.)..
@PostConstructor에서 지연로딩 사용하기 링크 https://www.inflearn.com/questions/963059/postconstructor-관련해서-질문있습니다 현상 @PostConstructror에서 지연로딩 시도시 JPA에서 쿼리를 하나 보내고 바로 DB와의 트랜잭션을 종료하여 지연로딩에 실패하는 현상이 발생 원인 @PostConstructor는 빈 컨테이너의 초기화가 완료된 이후 실행되는 것이 아닌 빈 객체만 생성되고 트랜잭션같은 AOP 작업은 성공적으로 수행되지 못해 지연로딩에 실패하는것이다. 고치는 법 @PostConstructor에서 직접 트랜잭션을 열어 수행해주면 된다.
deleteBy~~ 의 문제점 오류 일기 현상 data JPA를 사용하는 환경에서 특정 날짜 사이에 존재하는 엔티티를 삭제해야 하는 상황이 생겨 deleteBy~~를 통해서 삭제 메서드를 작성하고 테스트를 해보았습니다. 그러나 저의 예상과는 달리 하나씩 삭제 쿼리를 날리는 현상이 발생했습니다. 원인 제가 겪고 있는 문제를 잘 정리한 블로그입니다. JPA에서 대량의 데이터를 삭제할때 주의해야할 점 JPA에서 대량의 데이터를 삭제할때 주의해야할 점 안녕하세요? 이번 시간엔 JPA에서 대량의 데이터를 삭제할때 주의해야할 점을 샘플예제로 소개드리려고 합니다. 모든 코드는 Github에 있기 때문에 함께 보시면 더 이해하기 쉬우실 것 같습니다. ( jojoldu.tistory.com 느낀 점 data JPA라고 모든 것을 마법같이 해결해주지 ..
mysql Too many connections 오류 현상 JPA(하이버 네이트)을 통해 DB와 connection을 맺는 과정에서 접속이 안되는 오류가 발생하였습니다. com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Too many connections 원인 https://goto-pangyo.tistory.com/183 hikaripool-1 - thread starvation or clock leap detected 원인, 해결법 현상 AWS의 EC2 인스턴스에서 스프링부트 jar파일을 실행시켰을때 종종 hikaripool-1 - thread starvation or clock leap detected 다음과 같은 오류가 발행하며 죽어버리는 현상 발견하였습니다. 환경 JDK ..
hikaripool-1 - thread starvation or clock leap detected 원인, 해결법 현상 AWS의 EC2 인스턴스에서 스프링부트 jar파일을 실행시켰을때 종종 hikaripool-1 - thread starvation or clock leap detected 다음과 같은 오류가 발행하며 죽어버리는 현상 발견하였습니다. 환경 JDK 17 SpringBoot: 3.1.1 (dev)mysql: 8.0.32 (local)h2 JPA: 3.1.2 원인 ❗관련 자료를 찾아보고 정리한 내용이므로 부정확한 내용이 섞여있을 수 있습니다. 스프링부트에는 다음과 같이 @PostConstructor를 통해서 더미 데이터를 save하는 코드를 작성하였고 이 코드가 담긴 jar파일을 ec2에서 실행시켰을떄 hikaripool-1 - thread starvation or clock leap detected 과 같..
백준 16938 캠프 준비(파이썬) https://www.acmicpc.net/problem/16938 16938번: 캠프 준비 난이도가 10, 30인 문제를 고르거나, 20, 30인 문제를 고르면 된다. www.acmicpc.net 풀이 주어지는 입력은 N, L, R, X와 문제의 난이도인 A이다. 이때 문제에서 주어진 조건은 두 개이다. 1. 문제 난이도의 합은 L이상 R이하이다. 2. 문제 난이도의 가장 큰 편자는 X이하이다. 위의 조건을 그대로 파이썬에서 구현하기 위해 itertools.combinations를 사용하면 된다. 문제를 풀기위한 로직은 다음과 같다. 문제들의 난이도를 모아놓은 A리스트에서 itertools.combinations를 사용해서 2부터 N개만큼 원소를 뽑아 a라는 리스트에 담는다. a에 속한 원소들의 합이 ..
스프링 시큐리티 주요 아키텍처 이해 - 위임 필터 및 필터 빈 초기화 - DelegatingProxyChain, FilterChainProxy 스프링 시큐리티 주요 아키텍처 이해 - 위임 필터 및 필터 빈 초기화 - DelegatingProxyChain, FilterChainProxy 인프런 정수원님의 “스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security"를 보고 작성한 글입니다. 클라이언트로부터 요청이 올 경우 서블릿 필터 -> 서블릿순으로 진행한다. 서블릿 필터에서는 스프링 빈을 사용할 수 없다. 서블릿 필터는 서블릿 스펙에서 정의되었기에 서블릿 컨테이너에서 다루고 스프링 빈은 스프링 컨테이너에서 다루기 때문이다. 스프링 시큐리티는 서블릿 필터기반으로 모든 요청을 처리한다. 클라이언트로부터 요청이 오면 서블릿 필터(WAS)는 서블릿이 가지고 있는 DelegatingFilterProxy를 통해서 스프링 빈에..
백준 15486 이진수 덧셈(파이썬) https://www.acmicpc.net/problem/15486 15486번: 퇴사 2 첫째 줄에 N (1 ≤ N ≤ 1,500,000)이 주어진다. 둘째 줄부터 N개의 줄에 Ti와 Pi가 공백으로 구분되어서 주어지며, 1일부터 N일까지 순서대로 주어진다. (1 ≤ Ti ≤ 50, 1 ≤ Pi ≤ 1,000) www.acmicpc.net 풀이 모든 경우를 고려했을때 최댓값을 구하라는 것 문제의 요구사항에 따라서 DP문제임을 알 수 있다. 나는 특정일에 얻을 수 있는 최대 이익을 구하는데 집중을 하였다. 먼저 특정일에 주어진 일을 기간안에 완수할수 있는지 없는지를 확인하여야 한다. 그렇기에 특정 일에 주어진 일을 마무리 할 수 있는 날을 구한다. fin_date = idx + T[idx] - 1 이후 ..