JPA는 Hibernate의 구현체 중 하나로, Interface 타입으로 사용하기 때문에 내구 구현에 대해 잘 모르고 사용하는 경우가 많습니다. 오늘은 우리가 사용하고 있는 findAll() 메서드는 내부적으로 어떻게 호출될지 이번 포스팅을 통해 알아보려고 합니다. JpaRepositoryJpaRepository는 Interface 타입으로 선언되었기 때문에 아래 코드와 같이 내부 구현을 알 수 없습니다. 그렇기 때문에 Spring Context가 띄워질 때, JpaRepository가 어떤 구현체를 사용하는지 알아보겠습니다.@NoRepositoryBeanpublic interface JpaRepository extends ListCrudRepository, ListPagingAndSortingRepo..
Java
작성 계기 지난 리팩토링 프로젝트에서 Spring Boot 3로 업그레이드 하면서 JDK 17로 바꾸게 됐는데, 이에 따라 여러 Dependencies를 고치게 되었다. 이에 따라 다양한 이슈가 발생했었는데, 가장 기억에 남았던 이슈라 글로 정리 해 본다. 이슈 사항 Kotlin Entity 에서 @OneToMany List fundImageList 형식으로 사용하는 곳에서 RuntimeExecption 발생 MutableList로 고치니 잘 동작 => 이대로 끝나면 발전 가능성이 없는 것이다. 무엇이 문제였을까? 공변성과 반공변성 Effective Java와 Kotlin In Action에서 공변 / 반공변에 대해 학습했었는데 와닿지 못 했었던 내용이라 그냥 달달 외웠었다. 지금 이슈가 발생했던 부분은..
작성 계기 Web3를 통한 프로젝트의 경우 truffle / hardhat 등의 Smart Contract을 위한 대중성있는 블록체인 프레임워크가 존재한다. Java에서도 Web3j 모듈에서 다양하게 지원하긴 하지만, Web3 프로젝트에 비해 그 과정이 상당히 복잡하고 러닝커브가 높다. Web3에 비해 커뮤니티 풀이 생각 외로 적고, 프로젝트 전체 플로우에 대해 참조할만한 블로그도 없어서 직접 작성하게 됐다. 사용 스택 Spring Boot 2.7 & Gradle 7.0 JDK 11 Solidity 0.8.19 위 기술 스택으로 사용한 이유 Gradle 8.0 이상의 프로젝트 (JDK 17 / Spring Boot 3.0)에서는 아직 지원이 안 되는듯하여 이슈로 올라와있다. Solidity 0.8.20 ..
간단한 Rest Docs 작성 예시[build.graddle.kt]plugin { id("com.epages.restdocs-api-spec") version "0.17.1"}configure { setServer("http://localhost:9999") title = "Rest API 문서" description = "Rest API 문서" version = "0.1.0" format = "yaml" outputDirectory = "build/docs" outputFileNamePrefix = "rest_docs"}val asciidoctorExtensions: Configuration by configurations.creatingdependencies { testImplementation("c..
서론 사내 클라우드 서비스 모니터링 관련 프로젝트를 시작하게 되면서 Naver / KT / AWS 클라우드를 연동하게 되었다. 대중적인 AWS와는 달리 네이버와 KT는 예시 코드가 부족하여 직접 삽질하면서 얻은 결과물을 정리해야겠다고 판단하여 작성하게 되었다. API 연동 api 연동은 Rest API와 네이버 클라우드 공식 가이드를 참고하여 진행했다. [네이버 클라우드 API 가이드 홈페이지] 기본적인 signature 만드는 방식에 대해서는 가이드 문서에 자세하게 설명되어 있으니 가이드 문서 참고! Java 예시 코드 @Autowired protected RestTemplate restTemplate; /** * ncloud 서버 리스트를 조회한다. * * @return Map * @author Ch..
문제 정보는 아래 링크를 확인해주세요! [9576 - 책 나눠주기] 9576번: 책 나눠주기 백준이는 방 청소를 하면서 필요 없는 전공 서적을 사람들에게 나눠주려고 한다. 나눠줄 책을 모아보니 총 N권이었다. 책이 너무 많기 때문에 백준이는 책을 구분하기 위해 각각 1부터 N까지의 �� www.acmicpc.net 문제 접근 방법 a와 b를 입력 받는 동시에 리스트에 b를 기준으로 오름차순 정렬을 해준다. 나눠준 책을 확인하기위한 배열 생성 정렬된 책 정보를 통해 a~b까지 분기문을 돌면서 등록되지 않은 책을 등록하고 최대 수량 증가 위 과정을 테스트 케이스만큼 반복한다. [소스 코드] package algorithm.grid; import java.util.*; /* * 백준 9576 * 책 나눠주기 ..
문제 정보는 아래 링크를 확인해주세요! [3109 빵집] 3109번: 빵집 문제 유명한 제빵사 김원웅은 빵집을 운영하고 있다. 원웅이의 빵집은 글로벌 재정 위기를 피해가지 못했고, 결국 심각한 재정 위기에 빠졌다. 원웅이는 지출을 줄이고자 여기저기 지출을 살펴� www.acmicpc.net 문제 접근 방법 (0,0) 부터 오른쪽 대각선 위, 옆, 대각선 아래를 검사해주면서 지나갈 수 있는 곳을 방문 표시해주고, 오른쪽 라인으로 (0,C)까지 이동하면서 검사를 반복한다. 검사를 마치고 (0,C)까지 이동할 수 있다면 종료 (R,0)까지 위 세가지 과정을 반복한다. 유의해야할점은 해당 파이프라인으로부터의 가지치기를 방지하기위해 재귀함수를 리턴한다. 자세한 설명은 아래 그림 참조 [소스 코드] package ..
문제 정보는 아래 링크를 확인해주세요! [백준 - 1202 보석도둑] 1202번: 보석 도둑 문제 세계적인 도둑 상덕이는 보석점을 털기로 결심했다. 상덕이가 털 보석점에는 보석이 총 N개 있다. 각 보석은 무게 Mi와 가격 Vi를 가지고 있다. 상덕이는 가방을 K개 가지고 있고, 각 가방에 � www.acmicpc.net 문제 접근 방법 가방과 보석점을 오름차순으로 정렬한다. 우선순위 큐를 하나 만든다. 가방에 대한 분기문을 진행하면서 현재 가방의 무게보다 작은 보석점의 가격을 우선순위 큐에 담는다. 우선순위 큐에서 가격이 가장 높은 것을 꺼낸다. 결과값에 더해준다. [소스 코드] package algorithm; import java.util.*; public class Algorithm { //보석점..