본문 바로가기

전체 글94

[Sping/Java] JPQL vs QueryDSL JPQL(Java Persistence Query Language)과 QueryDSL은 둘 다 Java 애플리케이션에서 데이터베이스 쿼리를 작성하는 데 사용되지만, 접근 방식과 사용 용도에서 차이가 있다. 1. JPQL (Java Persistence Query Language) JPA의 일부로, 쿼리를 테이블이 아닌 엔티티 객체를 대상으로 작성하는 정적인 객체지향 쿼리 언어이다.  JPQL은 SQL과 유사한 문법을 사용하지만, 데이터베이스 테이블 대신 Java 엔티티 객체를 다루며, 필드나 속성을 통해 데이터베이스 레코드를 조회하고 조작할 수 있다. 이를 통해 데이터베이스와의 상호작용을 객체지향적으로 처리할 수 있게 해준다.@Entitypublic class Board { @Id @Gener.. 2024. 7. 7.
[Spring/Java] JPQL & Slice 객체(paging)이용하여 특정 조건의 게시물을 특정 방식으로 가져오기 Paging과 Slice 객체에 대해서 궁금하다면 이전 글을 보고오면 좋을 것 같다.https://persi0815.tistory.com/25 [Spring/Java] Paging이란? Page 객체 vs Slice 객체 (+ 코드)1. Paging이란? Paging은 대량의 데이터를 효율적으로 처리하고 사용자에게 필요한 양만큼씩 나누어 제공하는 기법이다. 데이터베이스 쿼리에서 페이징을 구현하면, 전체 데이터 집합을 작은 부분persi0815.tistory.com 1. 북마크한 게시물들을 특정 종류(type)과 정렬 방식(way)에 따라 목록 조회Controller@Operation(summary = "북마크 한 전체 게시판 목록 정보 조회 메서드", description = "북마크 한 게시판 중 ty.. 2024. 7. 7.
[Spring/Java] Paging이란? Page 객체 vs Slice 객체 (+ 코드) 1. Paging이란? Paging은 대량의 데이터를 효율적으로 처리하고 사용자에게 필요한 양만큼씩 나누어 제공하는 기법이다. 데이터베이스 쿼리에서 페이징을 구현하면, 전체 데이터 집합을 작은 부분(페이지)으로 분할하여 한 번에 적은 양의 데이터만을 가져오게 된다. 이렇게 하면 메모리 사용을 줄이고, 네트워크 트래픽을 최소화하며, 사용자에게 더 빠른 응답 시간을 제공할 수 있다.2. Page 객체 vs Slice 객체두 객체 모두 Spring Data JPA에서 사용되고, 페이징 기능을 제공하지만, 약간의 차이가 있다. Page 객체전체 페이지 수, 현재 페이지 번호, 페이지 당 항목 수, 총 항목 수, 현재 페이지에 포함된 데이터 목록 등 페이징 관련 정보를 포함한다.페이지에 대한 추가 정보를 포함한다.. 2024. 7. 7.
[DevOps] 3 Tier Architecture이란? 소개3 Tier Architecture는 소프트웨어 시스템의 설계 패턴 중 하나로, 클라이언트-서버 모델을 확장한 형태이다.이 아키텍처는 세 가지 주요 계층으로 구성되어 있으며, 각각의 계층은 서로 독립적으로 운영될 수 있도록 설계되었다.이를 통해 시스템의 유연성과 확장성을 높이고 유지보수를 용이하게 한다. 3 Tier Architecture의 각 계층은 다음과 같다. 프리젠테이션 계층 (Presentation Tier) - Frontend사용자와 직접 상호작용하는 계층이다.주로 웹 브라우저, 데스크탑 애플리케이션, 모바일 애플리케이션과 같은 클라이언트 인터페이스로 구성된다.사용자 인터페이스(UI)와 사용자 경험(UX)을 관리하며, 사용자의 입력을 받아들여 이를 비즈니스 로직 계층으로 전달하고, 결과를 .. 2024. 7. 6.
[백준/C++] #15686 치킨 배달 (Brute Force) 문제https://www.acmicpc.net/problem/15686 구상처음에는 어떤 치킨집을 폐업시켜야 할까? 라는 고민을 통해 아래 처럼 풀이를 구상했었다. 1. bfs로 각각의 집들에서 가장 가까운 치킨집 방문, 치킨거리 갱신 2. 가장 방문이 많은 치킨집 순으로 최대 m개를 고르고 3. 나머지 치킨집이랑 가까웠던 집들은 다시 거리 계산해야 한다. -> 하지만, 방문이 많은 m개 집 고른다 해도 해당 집들이 최소 도시 치킨 거리를 만든다고 장담할 수 없다. 수정 후 풀이는 다음과 같았다. Brute force! 1. 치킨집 조합 만들기 -> next_permutation 이용!! 2. 각각의 치킨집에 대해 집들의 거리 구하기 3. 거리를 다 합친 도시 치킨 거리들 중 최소값 구하고 출력 next.. 2024. 7. 6.
[백준/C++] #9251 LCS (DP/LCS) 문제https://www.acmicpc.net/problem/9251 구상사실.. 문제 이름 자체가 LCS여서... 바로 LCS 대입해서 풀었다.  알고리즘: LCS (Longest Common Subsequence) 두 수열이나 문자열에서 공통되는 가장 긴 부분수열 혹인 부분 문자열 중요한건, 공통되는 문자열이 연속적일 필요는 없다! LCS는 2차원 DP 배열을 통해 구할 수 있다.  풀이 + 코드if (현재 비교하는 문자가 서로 다르다면) 왼쪽, 위쪽 두 개의 값 중 큰 값 저장else 왼쪽 위 대각선의 값 + 1 저장 #include #include using namespace std;string s1, s2;vector> dp;/*9251 LCS*/int main() { cin >> s1 >> .. 2024. 7. 5.
[C++] resize vs assign vs memset vs fill 요약1. resize는 크기 조절에 중점을 두고, 2. assign은 초기화 및 대체, 3. memset은 바이트 단위 초기화, 4. fill은 범위 내 값 설정 구체적 설명resize벡터의 크기를 지정된 크기로 변경한다. 만약 크기를 늘리면 새 요소들은 기본값으로 초기화된다. 크기를 줄이면 초과된 요소들이 제거된다.- 특징: 크기를 변경하면서 새 요소들을 기본값으로 채우거나, 기존 요소를 유지하는 것이다.- 주로 사용되는 상황: 벡터의 크기를 동적으로 조정해야 할 때 사용된다.#includevector vec; vec.resize(10);#includevector> vec; vec.resize(10, vector(10)); assign벡터의 "크기를 지정된 값"으로 설정하고 모든 요소를 지정된 값으로 .. 2024. 7. 3.
[백준/C++] #2473 세 용액 (Two Pointer) 문제https://www.acmicpc.net/problem/2473 구상세 용액을 혼합하여 특성값이 0에 가장 가까운 용액을 만들어야 하고, 이때의 세 용액을 출력해야 하는 문제였다. 두 용액 일 때는 아래와 같이 두개의 포인터를 이용해서 풀었었다. https://persi0815.tistory.com/entry/%EB%B0%B1%EC%A4%80C-2467-%EC%9A%A9%EC%95%A1-Two-Pointer 세 용액이면 어떡할까? 고민을 해봤는데, 한 용액을 고정한 뒤 나머지 두 용액을 투 포인터로 찾는 방법이 떠올랐다.  알고리즘: two pointer 풀이 + 코드용액 특성값들을 배열에 넣고 투포인터 사용을 위해 정렬을 했다. 그리고, 한 용액을 선택한 뒤, 나머지 두 용액을 결정하자. brut.. 2024. 7. 3.
[백준/C++] #2467 용액 (Two Pointer) 문제https://www.acmicpc.net/problem/2467   알고리즘: two pointer 풀이 + 코드가장 기초적인 투포인터 문제다.(정렬된) 용액 특성들을 배열에 넣고, 두개의 포인터를 이용하여 배열 값들의 합을 구하며 0과 가장 가까운 값이 나타나면 답을 갱신한다.  #include #include #include #include #define MAX 100001#define INF 987654321#define endl "\n"using namespace std;/*2467번 용액산성 용액: 1부터 1,000,000,000, 알칼리성 용액: -1부터 -1,000,000,000같은 양의 두 용액을 혼합한 용액의 특성값은 혼합에 사용된 각 용액의 특성값의 합같은 양의 두 용액을 혼합하여.. 2024. 7. 3.
[백준/C++] #1484 다이어트 (Two Pointer) 문제https://www.acmicpc.net/problem/1484   구상두 제곱수의 차가 G가 되는 경우를 출력하는 문제였다. 제곱수로 이루어진 배열 만들고, 투 포인터로 두 수 찾아서 출력하면 되는 간단한 문제였다.  풀이 + 코드G는 100,000보다 작거나 같은 수이기에 두 제곱수의 차가 100,000보다 큰 최대한 작은 제곱수를 구해보면 대략 51,000 이 나온다. (51,000^2 - 50,999^2 = 101,999) 제곱수로 이루어진 배열 (1^2 ~ 51000^2) 만들고 투 포인터 이용해서 제곱수의 차 구하면 된다.  int형의 크기는 4 byte / -2,147,483,648 ~ 2,147,483,647 인데, 51000^2는 2,601,000,000로 int 범위를 넘어섰다. .. 2024. 7. 3.
[백준/C++] #1644 소수의 연속합 (Two Pointer) 문제https://www.acmicpc.net/problem/1644 구상"연속된" 소수의 합으로 나타낼 수 있는 경우를 구하라길래 바로 two pointer를 사용한 prefix sum 형태의 배열이 떠올랐다. 그러면 소수로 이루어진 배열이 필요한데, 어떻게 소수를 판별해서 소수로만 이루어진 배열을 만들까? 라는 생각이 들었다. 실제로 해당 부분을  오랜 시간 고민했고, 가장 구현이 빡셌다. 소수 판별은 N까지만 되면 되었고, 4부터 판별 시작하면 되었다. 4부터 해당 수에 대한 배수들을 구해서 false로 판별하면 되겠다는 생각이 들었다. 배수는 2의 배수부터 sqrt(N)의 배수까지 확인하면 되었고, 배수라는게 겹치는 건 생각안해도 되기에 제곱수부터 고려하면 되었다.  표로 설명하는게 이해하기 쉬워.. 2024. 7. 3.
[백준/C++] #16946 벽 부수고 이동하기 4 (Flood Fill / BFS) 문제https://www.acmicpc.net/problem/16946알고리즘: Flood Fill / bfs 구상처음에는 단순하게 bfs를 통해 얼마나 많은 칸으로 이동할 수 있는지 구하는 줄 알고, 엥 왜 골드 3이지? 하고 풀었는데, 배열 크기가 최대 1000*1000까지 커질 수 있기에 시간초과가 났다.. 그래서 긴 탐색 시간을 줄여야한다고 생각했다. 하지만, 각각의 벽에서 이동할 수 있는 칸의 개수를 알아내야 했기에 이땐 변함없이 이중 for문이 필요했다. 그래서 떠오른게, 이동할 수 있는 칸들은 뭉텅이로 존재하는데, 뭉텅이의 크기를 파악하면, 벽의 상하좌우에 위치한 뭉텅이들의 크기만 고려할 수 있지 않을까?였다. 즉, 어떤 칸과 연결된 영역을 찾는 알고리즘인 flood fill을 통해 전처리만.. 2024. 7. 3.