일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- JPA
- lombok
- 이펙티브자바
- 배낭문제
- 동시성처리
- BFS
- TDD
- 코딩테스트
- @Transactional
- 타임리프
- JVM
- spring
- effective java
- interceptor
- 알고리즘
- 파이썬
- 클린아키텍처
- EffectiveJava
- Java
- 자바
- AOP
- 멱등성
- EntityGraph
- 캐시
- Spring Security
- cache
- thymeleaf
- collapse
- Garbage Collection
- Transactional
- Today
- Total
목록전체 글 (69)
Jinnie devlog

N+1 문제란, 연관 관계에서 발생하는 이슈로 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 갯수(n) 만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오게 된다. 이를 N+1 문제라고 한다. N+1이 발생하는 이유는? jpaRepository에 정의한 인터페이스 메서드를 실행하면 JPA는 메서드 이름을 분석해서 JPQL을 생성하여 실행하게 된다. JPQL은 SQL을 추상화한 객체지향 쿼리 언어로서 특정 SQL에 종속되지 않고 엔티티 객체와 필드 이름을 가지고 쿼리를 한다. 그렇기 때문에 JPQL은 findAll()이란 메소드를 수행하였을 때 해당 엔티티를 조회하는 select * from Owner 쿼리만 실행하게 되는것이다. JPQL 입장에서는 연관관계 데이터를 무시하고 해당 엔티..

연관관계가 있는 엔티티를 조회할 경우 지연 로딩으로 설정되어 있으면 연관관계에서 종속된 엔티티는 쿼리 실행 시 select 되지 않고 proxy 객체를 만들어 엔티티가 적용시킨다. 그 후 proxy 객체를 호출할 때마다 그때그때 select 쿼리가 실행된다. 위와 같은 연관관계가 지연로딩으로 되어있을 경우 fetch 조인을 사용하여 여러 번의 쿼리를 한번에 해결할 수 있다. @EntityGraph는 Data JPA 에서 fetch 조인을 어노테이션으로 사용할 수 있도록 만들어 준 기능이다. 엔티티들은 서로 연관되어 있는 관계가 보통이며 이 관계는 그래프로 표현이 가능하다. EntityGraph는 JPA가 어떤 엔티티를 불러올 때 이 엔티티와 관계된 엔티티를 불러올 것인지에 대한 정보를 제공한다. Fetc..
필요 없는 검사 예외 사용은 피하라 검사 예외를 싫어하는 자바 프로그래머가 많지만 제대로 활용하면 API와 프로그램의 질을 높일 수 있다. 결과를 코드로 반환하거나 비검사 예외를 던지는 것과 달리, 검사 예외는 발생한 문제를 프로그래머가 처리하여 안정성을 높이게끔 해준다. 물론, 검사 예외를 과하게 사용하면 오히려 쓰기 불편한 API가 된다. 어떤 메서드가 검사 예외를 던질 수 있다고 선언됐다면, 이를 호출하는 코드에서는 catch 블록을 두어 그 예외를 붙잡아 처리하거나 더 바깥으로 던져 문제를 전파해야 한다. 검사 예외 회피 방법 - 1. 비검사 예외 API를 제대로 사용해도 발생할 수 있는 예외이거나, 프로그래머가 의미 있는 조치를 취할 수 있는 경우라면 이 정도 부담쯤은 받아들일 수 있을 것이다...
복구할 수 있는 상황에는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라 자바는 문제 상황을 알리는 타입(throwable)으로 검사 예외, 런타임 예외, 에러, 이렇게 세 가지를 제공한다. 검사 예외 개발자가 명시해야 하는 부분은 검사 예외인 Exception으로 어플리케이션 수행 중 일어날 법한 예외를 검사하고 대비하라는 목적으로 사용된다. 컴파일 단계에서 컴파일러가 체크한다. 이를 처리하지 않으면 컴파일 에러가 발생한다. 과도한 예외 검출은 시스템의 성능을 저하시킬 수 있다. 비검사 예외 Error는 시스템적인 예외를 의미한다. 개발자가 예외를 try-catch 로 잡지 않았을 때 발생한다. 런타임에 컴파일러에게 예외가 걸리지지 않았을 경우 발생한다. 즉, 코드 상의 문제이다. 대표적으로 ..
예외 예외를 제대로 활용한다면 프로그램의 가독성, 신뢰성, 유지보수성이 높아지지만, 잘못 사용하면 반대의 효과만 나타난다. 예외는 진짜 예외 상황에만 사용하라 예외를 사용한 반복문은 코드를 헷갈리게 하고 성능을 떨어뜨린다. // 예외를 완전히 잘못 사용한 예 try{ int i = 0; while(true) range[i++].climb(); } catch (ArrayIndexOutOfBoundsException e){ } 위의 코드는 전혀 직관적이지 않다. 이 코드는 배열의 원소를 순회하는데, 아주 끔찍한 방식으로 하고 있다. 무한루프를 돌다가 배열의 끝에 도달해 ArrayIndexOutOfBoundsException이 발생하면 끝을 내는 것이다. 다음과 같이 표준적인 관용구대로 작성했다면 모든 자바 ..

Controller에서 model.addAttribute(studyGroupList)로 리스트를 넘길 때 만약 null이 넘어간다면, model.addAttribute(studyGroupList) 타임리프에서 size()로 접근하는 경우 다음과 같은 에러와, 에러메시지가 나타난다. Model의 addAttribute 메소드를 찾아보면, 위와 같이 empty일 때 무시하라는 코드를 확인할 수 있다. 타임리프에서 size() 대신 #lists.isEmpty(studyGroupList) 로 접근하면, 오류 없이 사용할 수 있다. 또는, model.addAttirubte의 매개변수로 화면에서 사용할 변수명인 String 값을 같이 넘겨주면 값이 null이어도 빈 객체로 넘어가게 되어 오류 없이 사용할 수 있다...

게시글의 댓글 수정 로직을 구현할 때 bootstrap의 collapse 기능을 사용하였다. https://getbootstrap.com/docs/3.3/javascript/#collapse JavaScript · Bootstrap Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater getbootstra..
최대 부분배열의 합 - 4가지 알고리즘 비어 있지 않은 숫자 배열에서 합이 최대가 되는 연속된 부분 배열 구간의 합을 구하는 방법 4가지가 있다. 완전탐섹(브루트포스 알고리즘) 중복을 제거한 탐색 분할정복(Divide and Conquer) 동적 계획법(Dynamic Programming) 완전탐색(브루트포스 알고리즘) 단순히 모든 부분배열을 비교하여 최대인 배열을 구하는 알고리즘이다. MaxSum은 최종 결과합, ThisSum은 각 부분배열의 합을 저장하는 변수이다. 삼중반복문을 이용하여 i(0,n)~j(i,n)까지의 부분배열을 구한다. 시간복잡도: O(n^3) int MaxSubarray1(int A[], int N){ int MaxSum, ThisSum; int i,j,k; MaxSum = 0; f..