본문 바로가기

전체 글

(276)
Querydsl 적용과 고찰 이번에 진행하고 있는 프로젝트에서 querydsl을 적용해보고 있다. 발생하는 고찰들에 대해서 정리하고자 한다. 1. Query DSL을 통해 불필요한 데이터 제거 및 DB내의 데이터 순환 효율성 처리 로그인 API - 로그인의 기존 로직은 해당 아이디에 맞는 Entity를 찾고 해당 엔터티가 null이면 아이디가 존재하지 않음으로 보고 오류를 발생시킨다. 그리고 기존의 받은 비밀번호와 해당 아이디 엔터티에 해당하는 비밀번호가 일치하지 않으면 또 오류를 발생시킨다. - 고찰 : querydsl의 장점인 가독성 부분에 대해서는 문제가 없어보인다. findByUserId라는 메서드는 충분히 이해가 가능하다. 다만, 필요없는 데이터도 가져온다. 현재 아래에서 필요한 데이터는 비밀번호 데이터 뿐인데, Entit..
REVIEW - 박정국 CTO가 알려주는 ‘서버 성능 측정 방법’ 해당 블로그는 아래 링크의 영상을 참고하여 제작하였습니다. https://www.youtube.com/watch?v=HSNyJnobBws API 서버 성능 이해하기 측정 조건 - 많은 사람들이 사용해도 API 응답 시간이 짧고 안정적이다. - 많은 사람, 응답시간 안정적의 기준은? - 10명이 동시에 호출시 1초안에 모두가 응답받음 vs 100명이 동시에 호출시 10초안에 모두가 응답 받음 측정 지표 -> 제한속도를 높일것이냐 도로를 넓힐 것이냐 - Latency : 요청자의 입장에서 완료까지 걸리는 가, 예시 : 속도가 빠른 차량 - Throughput : 작업자의 입장에서 시간당 얼마나 처리하는 가, 예시 : 넓은 도로 측정 방법 -> 서버에 많은 사람이 접속할 수록 더 느려짐은 상식적으로 참이다 이..
REVIEW - 수십억건에서 QueryDSL 사용하기 이 블로그는 해당 링크의 영상을 참고하여 제작하였습니다. https://www.youtube.com/watch?v=zMAX7g6rO_Y&t=174s 1. BASIC 1-1. extends/implements 사용하지 않기 기본적으로 Query DSL을 사용하기 위해선 다음과 같은 클래스들이 필요하다. Repository : JpaRepository, CustomRepository 상속 RepositoryImpl : Repository를 주입받아 구현 따라서 Query DSL을 사용하기 위해선 하나의 관련 DB 작업에 총 4개의 클래스/인터페이스가 필요하다. 문제 : 많은 클래스/인터페이스 생성 작업을 줄일 필요가 있다. 해결 : JPAQueryFactory 사용 - Config로 JPAQueryFacto..
Programmers - N개의 최소공배수 with JAVA (V) 문제 배열로 숫자 리스트가 주어질 떄, 모든 수의 최소 공배수를 구하라. 로직 - 두 수의 최대 공약수를 구한다. - 두 수의 최소 공배수 = AxB/최대공약수 - 반복 - 또는 아래 다른 공식 활용 a%b==c 일때, b%c가 0이될때까지 반복하는 방식 코드 import java.util.*; class Solution { public int solution(int[] arr) { Arrays.sort(arr); int length = arr.length; int now_value = arr[length-1]; for(int i=length-2; i>=0; i--){ int value = arr[i]; while(true){ if(now_value % value == 0 && arr[i] % value..
Programmers - 예상 대진표 with JAVA (V) 문제 N명의 사람이 대진표를 따라 경기를 진행하는데 A,B는 몇번째 경기에 만날것인지 구하라 로직 만나는 경우는 항상 같다 (1, 2), (3, 4), (5, 6) 과 같이 첫번째 인덱스가 홀수이면서 1차이가 나야한다. 예를 들어, (2, 3)과 같은 경우는 안된다. 또한 위의 경우에 해당하지 않는다면 각각의 인덱스를 2로 나누고 올림처리를 하면 된다. 예를 들어, 인덱스 4라고 가정한다면, 4는 3과 경기를 하고 이기면 2가 되는 방식인 것이다. 코드 class Solution{ public int solution(int n, int a, int b){ int answer = 1; int x = Math.min(a, b); int y = Math.max(a, b); while(true){ if(x%2 ..
Effective JAVA - Item2 : 생성자에 매개변수가 많다면 빌더를 고려하라. 이펙티브 자바 2장. 객체 생성과 파괴 아이템 2 : 생성자에 매개변수가 많다면 빌더를 고려하라. 결론 : "인스턴스를 한번에 생성하기 때문에 유효성 검사도 가능하고 객체의 불변성을 준다면 스레드 안정성을 가져오며 또한 세터 개념을 사용하기에 가독성도 좋다. 따라서 매개변수가 많고 복잡하여 생성자 생성이 복잡하다면 빌더를 고려하자" 점층적 생성자 패턴의 문제 - 점층적 생성자 패턴이란 여러개의 필드 중에 필수필드를 기준으로 설정을 해두고 선택필드에 대해서 점진적으로 늘려 생성자를 만드는 방식이다. - 예를 들어, 총 20개의 필드가 있고 이 중에 필수 필드가 10개라면 나머지 10개의 필드에 대해서 1개를 받는 생성자 10개, 즉, 모든 경우의 수를 고려해 생성자를 만드는 경우이다. - 이는 수많은 생성..
Programmers - 크기가 작은 부분 문자열 with JAVA (V) 문제는 굉장히 간단하나 실수가 하나있어 기록을 한다. 문제에서 문자열의 주어진 범위는 10000이다. 즉, 문자열의 최대 범위는 1000이고 이를 숫자로 변환시 굉장히 숫자가 커진다. 따라서, Integer가 아닌 Long으로 변환을 해야 처리가 가능하다. class Solution { public int solution(String t, String p) { int answer = 0; int p_size = p.length(); for(int i=0; i
Programmers - 짝지어 제거하기 with JAVA 문제 소문자로 이루어진 문자열이 주어지고 같은 글자를 짝지어 삭제하여 모든 문자열을 삭제가능한지를 확인하는 문제이다. 해결 스택을 해결하여 간단히 해결가능하다. 예를들어, baabaa가 있을 때, 처음에는 b를 넣는다. 그 이 후, a를 넣는데, 스택에 마지막 값과 비교해 같으면 넣지 않고 마지막 인덱스를 제거하고 다르면 넣는다 따라서, a는 들어간다. 그 이 후, a가 제거되므로 b만 남는데, 이 후, b가 들어오므로 모두 제거된다. 이런식으로 해결해 결과적으로 스택이 모두 비면 1 아니면 0을 반환한다. 코드 import java.util.*; class Solution{ public int solution(String s){ if(s.length() == 0 | s.length() == 1){ re..