본문 바로가기

분류 전체보기

(276)
SELECT + JOIN 개선에 대한 고찰 1. 문제 인식 단계 : 문제가 발생했음을 인식하고 해당 문제를 명확하게 기술한다. 1-1. API 설명 현재, 하나의 API를 제작 중에 있다. API : 가게이름을 받고, 그 가게의 쉬는날을 반환한다. Entity는 아래와 같다. 1. StoreRestDaysEntity (부모 엔터티) - Days Id (Identification) - Store Name - Set - Created At - Updated At 2. StoreRestDaysMapEntity (자식 엔터티) - Day Id (Identification) - StoreRestDayMapEntity - (Days Id (FK)) - Date 위의 엔터티에서 부모 엔터티는 StoreRestDaysEntity이고 자식 엔터티는 StoreRe..
Spring JPA vs Query DSL vs @Query with JPQL vs @Query with Native Query 이번 블로그에서는 Spring JPA vs Query DSL vs @Query with JPQL vs @Query with Native Query에 대해서 적어보고자 한다. 각각의 기본적인 장단점을 정리해보고자 한다. 하지만 기본적인 장단점일 뿐이지 상황별 속도나 해당 로직 사용가능 여부는 차이가 나기 마련이다. 따라서 위의 부분은 Trouble Shooting 파트를 통해 정리해보고자 한다. 1. Spring JPA - Spring에서 제공해주는 ORM이라고 생각하면 간편한다. - 기본적인 메서드들을 제공해주고 메서드 이름을 설정하여 자신만의 메서드를 만들 수 있다. 장점 - 객체 지향적인 접근 방식으로 데이터베이스와의 상호 작용을 쉽게 구현할 수 있다. (ORM의 장점이기도 하여, 상이한 장점이라고 ..
Apache Jmeter 여러 서버 성능 테스터 중 Apache Jmeter에 대해서 정리해보고자 한다. Apache Jmeter 특징 - 서버의 성능 및 부하를 측정 가능하다. - 순수 자바 어플리케이션 오픈 소스 - 다양한 프로토콜/서버를 테스팅 가능하다. (HTTP, SOAP, FTP, DB, MAIL) - CLI를 지원 (CI, CD와 연결시 편리) 주요 기능 - Thread Group : Thread 관련 조정 - Sampler : 유저의 동작 (프로토콜 등 설정) - Listener : 서버의 응답에 대한 동작 (결과 리포트 등) - Configurtion : 서버에 요청을 보내고 응답을 받기 위해 필요한 설정 (JDBC Connection, 쿠키 등) - Assertion : 서버의 응답 결과가 특정 조건이 맞는지 ..
Trouble Shooting 1. 문제 인식 - 문제가 발생했음을 인식하고 해당 문제를 명확하게 기술한다. 2, 현상 분석 - 문제가 발생한 상황을 자세히 분석하고, 문제의 범위와 영향을 확인한다. 3. 원인 파악 - 문제의 원인을 추정하고 가능한 원인을 찾기 위해 검토 및 실행을 진행한다. 4. 해결 방법 - 원인을 바탕으로 가능한 해결 방법을 도출한다. 5. 해결 적용 - 도출된 해결 방법을 적용하여 문제를 해결한다. 6. 결과 확인 - 해결 방법이 문제를 해결했는지 확인하고, 필요한 조치를 취한다.
탑승구 문제 - G개의 공항 게이트 수가 주어진다. - P개의 착륙 예정 비행기 수가 주어진다. - 순차적으로 비행기가 착륙 가능한 탑승구의 범위가 주어진다. - 이때 특정 비행기가 착륙가능한 게이트가 없을시 종료 시킨다. 예시 4, 1, 1 이 주어졌을 때 첫번째 비행기는 1~4 게이트에 착륙 가능하다. 두번째 비행기는 1번 게이트에만 착륙 가능하다. 세번째 비행기는 1번 게이트에만 착륙 가능하지만 두번째 비행기 또한 1번 게이트에만 착륙 가능하므로 종료 된다 결과적으로 최대 2개의 비행기만 착륙 가능하다. 아이디어 - 크루스칼을 "착륙 가능한 범위로 사용한다" 처음 문제를 풀 때, 리스트를 1부터 G까지 1로 설정하였다. 이 후, 예를 들어, 2가 들어오면 2에 위치한 리스트 값을 -1 해주었고 만약 또 2..
커리큘럼 문제 특정 수업을 듣고 싶을 때, 이 과목을 수강하기 위한 선수과목이 존재할 수 있다. 따라서 특정 수업을 듣기 위해서는 해당 선수과목을 수강한 후 수강이 가능하다. 0번 과목부터 N번 과목까지 수강 소요 시간, 선수과목 인덱스가 주어질 때, 모든 과목을 듣는데 각각 필요한 최소시간을 구하라. 로직 예를 들어 데이터가 다음과 같이 주어졌다고 가정하자. data 10 10, 1 4, 1 4, 3, 1 3, 3 즉, 0번과목을 듣기 위해서는 10시간이 필요하고 선수과목은 없다. 또한 1번 과목을 듣기위해서는 0(1-1)번 과목을 선수강해야하고 소요시간은 10시간이 소요된다. 1. 인접행렬을 만든다. - 특정 과목을 듣고 다음에 들을 수 있는 과목을 체크함을 위함.(특정 과목의 인접행렬에 들어간 인덱스는 이 ..
도시 분할 계획 문제 - 도시들이 서로 연결된 간선이 주어진다. - 간선으로 도시들 간 그룹을 만든다. - 그룹을 두개로 나눌 것이다 - 각 그룹은 적어도 하나의 도시로 이루어진다. - 간선 비용을 최소로 하고 싶다. 아이디어 - 그룹 지은 후에 선을 하나 삭제 시 그룹은 두개로 나뉜다. 코드 public class Question2 { public static void main(String[] args){ int[][] data = { {1, 2, 3}, {1, 3, 2}, {3, 2, 1}, {2, 5, 2}, {3, 4, 4}, {7, 3, 6}, {5, 1, 5}, {1, 6, 2}, {6, 4, 1}, {6, 5, 3}, {4, 5, 3}, {6, 7, 4} }; Arrays.sort(data, Comparat..
팀 결성 문제 - 학생들이 0번부터 N번까지 존재한다. 팀 합치기, 같은 팀 여부 확인 연산을 실행하라. - 데이터가 주어질때, 앞자리가 0이면 합치기 연산, 1이면 같은 팀 확인 여부 연산을 실행한다. 구현 - 서로소 집합 알고리즘 - 경로 최적화 코드 public class Question1 { public static void main(String[] args){ int[][] data = { {0, 1, 3}, {1, 1, 7}, {0, 7, 6}, {1, 7, 1}, {0, 3, 7}, {0, 4, 2}, {0, 1, 1}, {1, 1, 1} }; int[] parents = new int[8]; for(int i=0; i parent2) ? parent2 : parent1; parents[parent2..