전체 글

전체 글

    [Spring Data JPA] 영속성 관리

    이 글은 모두 자바 ORM 표준 JPA 프로그래밍 도서를 통해 학습하고 정리한 내용입니다. 엔티티 매니저 팩토리와 엔티티 매니저 엔티티 매니저 엔티티를 저장하고, 수정하고, 삭제하고, 조회하는 등 엔티티와 관련된 모든 일을 처리한다. (엔티티를 저장하는 가상의 데이터베이스라고 생각하면 이해하기 쉽다.) 데이터베이스 연결이 꼭 필요한 시점까지 커넥션을 얻지 않는다. 즉, 트랜잭션을 시작할 때 커넥션을 획득한다. 엔티티 매니저 팩토리 EntityManagerFactory emf = Persistence.createEntityManagerFactory("book"); 엔티티 매니저 팩토리(이하 엔매팩)는 엔티티 매니저를 만드는 공장이다. 공장을 만드는 비용은 매우 커서 애플리케이션 당 한개만 만들어서 공유하도..

    서비스에 @Transactional을 선언한 경우와 선언하지 않은 경우의 JPA save 동작

    서비스에 트랜잭션이 달린 경우 // postService.java @Transactional public void save() { repository.save(something); } 2021-08-22 15:54:08.656 DEBUG 9192 --- [ http-nio-8080-exec-1 ] o.s.o.j.JpaTransactionManager : Creating new transaction with name [me.elastic.application.PostService.save]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT 2021-08-22 15:54:08.657 DEBUG 9193 --- [ http-nio-8080-exec-1 ] o.h.e.t.i.Transact..

    Spring Data Elasticsearch 공식 문서에서 Repository 위주 정리

    8. Elasticsearch Repositories 원문: Spring Data Elasticsearch 해당 Document에서 예시로 들 Entity는 다음과 같다. @Document(indexName="books") class Book { @Id private String id; @Field(type = FieldType.text) private String name; @Field(type = FieldType.text) private String summary; @Field(type = FieldType.Integer) private Integer price; // getter ... } 8.1 Automatic creation of indices with the corresponding map..

    [백준] 문자열 폭발 java

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Stack; import java.util.stream.IntStream; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String origin = br.readLine(); String bomb = br.readLine(); Stack stack = new Stack(); for (..

    [프로그래머스] 다리를 지나는 트럭 java

    import java.util.ArrayDeque; import java.util.Deque; class 다리를_지나는_트럭 { public int solution(int bridge_length, int weight, int[] truck_weights) { int answer = 0; // 트럭이 지나면서 걸린 시간 int nowWeight = 0; // 다리 위에 있는 트럭들의 총 무게 Deque deque = new ArrayDeque(); for (int truck : truck_weights) { while (true) { if (deque.isEmpty()) { // 다리 위에 트럭이 없을 때 deque.offer(truck); answer++; nowWeight += truck; break..

    [자료구조 간단 정리] - 해시, 스택, 큐

    해시 해시 테이블 해시 테이블은 hash function을 사용해 주어진 key 값을 hash 값으로 매핑하고, 이 해시값을 index로 하여금 value를 key와 함께 저장하는 자료구조이다. 예를 들어, hash function := mod 3이라고 해보자. 그러면 주어진 key에 대한 value 쌍은 다음과 같다. key hash value 1 1 2 2 3 0 4 1 하지만 위의 예시에서 확인할 수 있듯이, key가 1, 4일때의 value 값이 동일한 것을 확인할 수 있다. 이렇게 서로 다른 key가 같은 해시값을 가지는 상황을 hash collision이라고 한다. 해시 충돌 해시 충돌이 발생했을 때엔 어떻게 해결할 수 있을까? 우선, Chaining 방식이 존재한다. 즉, 같은 해시값을 갖는..

    java.lang.NoClassDefFoundError: org/springframework/http/HttpHeaders 해결 방법

    dependency에 starter-web을 추가해주면 된다. implementation 'org.springframework.boot:spring-boot-starter-web' 참고 자료 https://stackoverflow.com/questions/62693959/spring-boot-2-3-1-elasticsearch-7-6-2

    정적 분석 도구 Sonarqube 도입하기

    SonarQube Overview 소나큐브는 프로그래밍 언어의 버그, 코드 스멜, 보안 취약성과 같은 정적 분석과 자동화된 리뷰를 수행하여 코드 품질의 지속적인 인스펙션을 지원하는 플랫폼이다. 정적 분석이란? 프로그램의 실행 없이 코드를 분석하는 것. 테스트 커버리지를 확인할 수 있는 Jacoco도 정적 분석 도구라고 불린다. 코드 스멜이란? 프로그래밍 코드에서 더 심각한 문제를 일으킬 가능성이 있는 프로그램 소스 코드의 특징을 말한다. Why SonarQube? 레퍼런스가 많다. Github이나 Jenkins와의 연동을 통해 자동 정적 코드 분석을 구성할 수 있다. 소나 큐브 적용까지의 대장정에 앞서 코드 커버리지에 대해서 알아보자. 코드 커버리지에 대해서 알아보기 Jacoco에 대해서 알아보기 소나큐..

    Code Coverage

    Code Coverage? 코드 커버리지 소스코드를 기반으로 수행하는 화이트 박스 테스트를 통해 측정한다. 블랙박스 테스트 소프트웨어의 내부 구조나 작동 원리를 모르는 상태에서 동작을 검사하는 방식 올바른 입력과 올바르지 않은 입력을 입력해 올바른 출력이 나오는지 테스트 사용자 관점의 테스트 방법 화이트박스 테스트 응용 프로그램의 내부 구조와 동작을 검사하는 테스트 방식 내부 소스 코드를 테스트하는 기법 개발자 관점의 단위 테스트 방법 측정 기준 구문 (라인 커버리지): 코드 한 줄이 한 번이상 실행된다면 충족 조건: 모든 조건식의 내부 조건이 true/false를 가지게 되면 충족 조건 커버리지를 기준으로 테스트 할 경우 구문 커버리지와 결정 커버리지를 만족하지 못하는 경우가 존재할 수 있다. 결정 (..

    Git Submodule로 민감한 정보 관리하기

    Git Submodule About Git Submodule 서브모듈이란 하나의 저장소 안에 있는 또 다른 별개의 저장소이다. 보통 다른 원격 저장소를 pull 해 온 뒤 서브모듈로서 사용하게 된다. How to link 예를 들어, 게시판을 만들고 있는 board라는 프로젝트 디렉토리에서 게시판을 개발하던 중 채팅 모듈을 원격 저장소에서 가져와 게시판 프로젝트에서 사용한다고 가정하자. 채팅 모듈의 원격 저장소 링크: https://fakegit.com/chat.git (가안) board 디렉토리에서, 채팅 모듈을 서브모듈로서 사용하기 위해 다음 명령어를 사용한다. git submodule add https://fakegit.com/chat.git 그럼 .gitmodules 파일과 함께 chat/이 생성..