전체 글 64

[Entity] 지금 나에게 필요한 데이터를 가져오자 - 지연로딩, 즉시로딩 (5)

지연로딩과 즉시로딩을 알아봅시다 위의 사진과 같은 관계를 가진 엔티티가 있다고 하자. 음식과 고객엔티티는 N 대 1 양방향 관계이다. @Testvoid test1() { Food food = foodRepository.findById(2L).orElseThrow(NullPointerException::new); System.out.println("food.getName() = " + food.getName()); System.out.println("food.getPrice() = " + food.getPrice());} 위 코드 처럼 음식에 대한 정보를 얻고 싶을 때, 쿼리를 확인해보면 아래와 같다 내가 조회하고자 하는 값은 음식엔티티인데, 음식엔티티와 매핑된 고객엔티티의 정보..

이분(이진)탐색 알고리즘과 풀이 전략

이번주차는 이분(이진)탐색 문제를 풀었다. 복습한 이분(이진)탐색 알고리즘에 대한 내용과 문제를 풀면서 익힌 이진탐색 풀이 전략에 대해서 정리해보려고 한다. 이분(이진)탐색 - Binary Search 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법 이것을 이진탐색 또는 이분탐색이라고 부른다.영어로는 Binary Search 탐색과정은 아래와 같다. 위의 .gif에서 확인할 수 있듯이, 1. 배열은 반드시 정렬되어 있어야 한다. 2. 시작점 : 0 (인덱스의 시작), 끝점 : 8 (인덱스의 마지막), 중간점 : 4 (소수점 이하 제거) 으로 설정한다.중간점 = (시작점 + 끝점) / 2 3. 내가 찾고자 하는 타겟 값(47) 보다 중간 값이 크다면, 끝..

알고리즘/개념 2025.07.08

[Entity] N 대 M 관계 - (4)

N 대 M 관계는 @ManyToMany 어노테이션으로 관계를 맺어줄 수 있다. 음식 Entity와 고객 Entity가 N 대 M 관계라 가정하겠다. 단방향 관계 여기서 이전에 못보던 주문테이블이 하나 생겼다. N 대 M 관계를 맺어주기 위해서는 중간 테이블이 필요한데 주문테이블을 중간테이블로 만들었다 아래 코드와 같이 작성하면 중간테이블인 주문테이블은 자동으로 생성된다. @JoinTable 어노테이션을 통해서 중간테이블을 생성할 수 있다. 음식@Entity@Table(name = "food")public class Food { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; priva..

[Entity] 1 대 N 관계 - (3)

이번에는 1 대 N 관계에 대해서 포스팅 하려고 한다. 1 대 N 관계는 @OneToMany 어노테이션을 사용해서 관계를 맺을 수 있다. 음식 엔티티와 고객 엔티티가 1 대 N 관계를 맺고,외래키의 주인은 음식엔티티라고 가정하겠다. 단방향 관계 그림을 보면 이상한 점을 발견할 수 있다. 우리는 N의 관계에 있는 엔티티가 외래키의 주인이 된다는 것을 알고있다. (바로 직전 포스팅에서 확인 가능) 그런데 우리는 외래키의 주인은 음식엔티티로 설정했는데 고객엔티티가 외래키를 갖고 있는 것이다. 이 경우에는, N의 관계에 있는 엔티티가 외래키를 가질 수 있으니,N의 관계인 고객엔티티가 외래키를 가지고 외래키의 주인인 음식엔티티을 통해 외래키를 관리한다. 외래키의 주인은 음식엔티티로 설정하여 음식엔티..

[Entity] N 대 1 관계 - (2)

이번에는 N 대 1 관계에 대해서 포스팅 해보려고 한다. Entity에서 외래 키의 주인은 일반적으로 N(다)의 관계인 Entity 이다. 그 이유는 여러가지가 있는데, 그냥 직관적으로 그렇게 아는 것이 좋다. 이유는 아래와 같다. 더보기1. 데이터 무결성 보장1:N 관계에서 N쪽 Entity가 외래 키를 가지는 것은 참조 무결성(Referential Integrity)을 유지하기 위한 핵심적인 설계 방식입니다. N쪽 Entity가 1쪽 Entity의 기본 키(Primary Key)를 외래 키로 참조하면, 1쪽의 데이터가 존재하지 않는 경우 N쪽 데이터가 추가될 수 없도록 데이터베이스가 제약을 걸 수 있습니다.반대로, 1쪽 Entity에 N쪽 Entity를 참조하는 외래 키를 두는 것은 비효율적이며,..

[Entity] 1 대 1 관계 - (1)

1 대 1 관계에 대해서 알아보고자 한다. 1 대 1 관계를 맺어주기 위해서 @OneToOne 어노테이션을 사용한다. 고객엔티티와 음식엔티티가 1대1 관계를 가진다는 것을 가정하고 설명하겠다. 단방향, 양방향 기준으로 작성할 예정인데,방향 개념이 기억이 잘 나지 않는다면 아래 글을 보고 오자엔티티 방향개념이 잘 기억나지 않는다면! 단방향 관계 아래와 같이 단방향 관계를 갖는 엔티티가 있다고 해보자. Entity에서 외래 키의 주인은 일반적으로 N(다)의 관계인 Entity 이지만1 대 1 관계에서는 외래 키의 주인을 직접 지정해야 한다. 외래 키 주인만이 외래 키 를 등록, 수정, 삭제할 수 있으며, 주인이 아닌 쪽은 오직 외래 키를 읽기만 가능하다. 위의 그림에서는 외래키의 주인으로 음식엔..

다익스트라(Dijkstra) 알고리즘과 풀이 전략

다익스트라(dijkstra) 알고리즘은 최단경로를 구하는 알고리즘이다. 최단경로를 구하는 알고리즘 중에서는 벨만-포드, 플로이드 워셜, bfs, 다익스트라 등이 있는데, 이 알고리즘들은 최단 경로를 구하는 알고리즘 문제에 사용되긴 하지만 각각 구현 측면에서 차이가 있기 때문에 상황마다 사용되는 알고리즘이 다르다. 다익스트라(dijkstra) 알고리즘 한 정점에서 모든정점 까지의 최단경로를 각각 구하는 알고리즘이다. 문제를 해결할 수 있는 방법은 다양하지만, 시간복잡도와 공간복잡도를 고려하여 우선순위 큐를 사용하는 것이 보편적이다. 최단 경로 알고리즘 풀이 전략 최단경로 알고리즘을 사용해야 하는 문제를 마주했을 때,어떤 알고리즘을 써야할까라는 고민이 든적이 있을 것이다. bfs, 플로이드 워셜, ..

알고리즘/개념 2025.06.19

[Entity] 테이블 간의 연관관계와 Entity간의 연관관계에서의 방향 개념 - (0)

DB 테이블간의 연관관계와 Entity간의 연관관계에서, 방향관계의 의미는 다르다고 볼 수 있다. 결론부터 말하자면, DB 테이블 사이의 연관관계는 FK로 맺을 수 있고,서로 방향 상관없이 조회 가능하다. 하지만, Entity에서는 상대 Entity를 참조해야 연관관계를 맺을 수 있고,그렇지 않다면, Entity를 조회할 수 있는 방법이 없다.그래서 방향이 존재한다. 연관 관계 고객 테이블idname1Robbie2Robbert 음식 테이블idnameprice1후라이드 치킨150002양념 치킨200003고구마 피자300004아보카도 피자50000 두 테이블의 관계를 보자. 예를 들어, 고객 1명은 음식 N개를 주문 할 수 있다. 라고 가정한다면, 고객 : 음식 = 1 : N 관계라고 ..

프로그래머스 - 체육복

https://school.programmers.co.kr/learn/challenges 코딩테스트 연습 | 프로그래머스 스쿨개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!school.programmers.co.kr import java.util.*;class Solution { public int solution(int n, int[] lost, int[] reserve) { Arrays.sort(lost); Arrays.sort(reserve); boolean[] lost_visited = new boolean[lo..

Back-End/TIL 2025.04.28

프로그래머스 - 타겟넘버

https://school.programmers.co.kr/learn/challenges 코딩테스트 연습 | 프로그래머스 스쿨개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!school.programmers.co.kr class Solution { public int solution(int[] numbers, int target) { return dfs(numbers, target, 0,0); } private int dfs(int[] numbers, int target, int index, int sum) { // 모든 숫자를 사용한 경우 ..

Back-End/TIL 2025.04.28
728x90