전체 글 98

JPA 프록시와 JOIN 과 JOIN FETCH 차이

JPA를 공부하다 보면 꼭 마주치는 개념이 있다. 바로 프록시(Proxy) 와 지연 로딩(Lazy Loading), 그리고 JOIN과 JOIN FETCH의 차이이다.이 개념들을 비유와 실제 코드로 정리해봤다.✅ 프록시(Proxy)란 무엇인가?JPA에서는 엔티티를 바로 불러오지 않고, 프록시 객체를 먼저 생성해두고, 실제 데이터가 필요할 때 DB에서 값을 가져오는 방식으로 지연 로딩을 구현한다.💡 비유하자면?넷플릭스에서 영화를 클릭하면 바로 재생되는 것이 아니라 썸네일만 먼저 보여주고,진짜 영화는 네트워크 연결이 될 때 로드되는 구조와 유사하다.💡 실제 코드 예시@OneToMany(mappedBy = "countryEntity", fetch = FetchType.LAZY)private List city..

[Spring] BaseTimeEntity와 사용되는 어노테이션의 기능

프로젝트를 위해 등록일과 수정일 데이터를 넣어주기 위해 BaseTime 클래스를 생성했다.각 요소들의 특징을 자세히 알아보았다!  코드는 다음과 같이 작성했다😊 @Getter@MappedSuperclass@EntityListeners(AuditingEntityListener.class)public abstract class BaseTimeEntity { @Column(updatable = false, nullable = false) @CreatedDate private LocalDateTime createdAt; // 등록일 @Column @LastModifiedDate private LocalDateTime modifiedAt; // 수정일}  사용한 어노테이션의 역할..

[git] GitHub에 올린 파일 삭제하기 with 히스토리

항상 깃헙에 파일을 잘못 올려서 깃헙 레파지토리를 삭제하고 다시 생성하고 올렸었다.물론 위의 경우는 일단 이미 완성된 프로젝트를 올려두는데 목적이 있는 경우였다. 하지만 매번 이런 식으로 프로젝트를 올릴 순 없었다. git이 생소해서 야매로 어영부영 넘겼지만 이젠 익숙해져야 할 필요가 있다.  👀문제 상황완성된 프로젝트를 gitHub에 올려두었다. 하지만 중요한 정보가 있는 application.properies 혹은 yml 파일이 그대로 push가 되는 바람에 삭제를 하고 싶은데, gitHub 삭제를 하게 되면 history가 남게 된다. 그렇담 노출되지 않길 원하는 정보들이 그대로 '나 삭제되었어요~'하고 알리는 꼴이다. 그렇기 때문에 파일과 history 모두 삭제될 수 있도록 해보자..! 🤓해..

개발 공부 2024.11.15

[Java]Enum과 final상수

ErrorCode를 관리하기 위해 Enum을 사용하는 방법은 가독성과 유지보수성을 높이는 좋은 방법이다.그래서 예외처리 구현을 위해 ErrorCode를 작성하는 중 fianl 상수가 먼저 선언되면 에러가 발생하는 것을 볼 수 있었다. 그래서 enum과 final 상수의 역할과 기능에 대해 찾아보게 되었다. 👀문제 상황다음과 같이 ErrorCode를 작성했다. @Getter@RequiredArgsConstructorpublic enum ErrorCode { ALREADY_REGISTERED_USER(HttpStatus.BAD_REQUEST, "이미 가입된 회원입니다."), NOT_FOUND_ACCOUNT(HttpStatus.BAD_REQUEST, "찾을 수 없는 계정입니다."); priv..

[git] origin/main refusing to merge unrelated histories 에러 발생

IntelliJ에서 git을 연동하여 pull 작업을 하는 도중 에러 창이 뜨면서 Pull failed되었다.  정확히는 아래와 같은 에러가 발생 하였다. * branch main -> FETCH_HEAD = [up to date] main -> origin/main refusing to merge unrelated histories 현재 로컬 브랜치와 깃허브 원격 브랜치 간에 서로 관련이 없는 커밋 히스토리가 있어서 Pull refusing이 되었다.   * branch main -> FETCH_HEAD = [up to date] main -> origin/mainfatal: refusing to merge unrelated histories 콘솔창을 ..

개발 공부 2024.11.15

99클럽 코테 스터디 14일차 TIL - 스택/큐

문제백준 10845 [큐]문제 링크:  https://www.acmicpc.net/problem/10845 해결 방법LinkedList로 큐를 생성 각 입력 값에 일치하는 연산 구현코드import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.IOException;import java.util.LinkedList;import java.util.Queue;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(Sys..

카테고리 없음 2024.11.11

99클럽 코테 스터디 13일차 TIL - 스택/큐

문제백준 12605 [단어순서 뒤집기]문제 링크:  https://www.acmicpc.net/problem/12605 해결 방법split()으로 공백 기준으로 단어를 분리Collections.reverse() 메서드로 분리된 단어의 순서를 뒤집기String.join()로 단어들을 이어 붙임코드import java.util.*;public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int N = Integer.parseInt(scanner.nextLine()); // 테스트 케이스 개수 for (int i..

카테고리 없음 2024.11.09

99클럽 코테 스터디 12일차 TIL - 스택

문제백준 10828 [스택]문제 링크:  https://www.acmicpc.net/problem/10828 해결 방법push, pop 메소드를 제공하는 Deque 사용switch-case문을 사용하여 스택 명령어 처리push X: 스택에 값을 추가pop: 스택에서 최상위 값을 제거하고 출력 / 스택이 비어있으면 -1을 출력size: 스택의 크기를 출력empty: 스택이 비어있는지 여부를 1(비어있음) 또는 0(비어있지 않음)으로 출력top: 스택의 최상위 값을 출력 / 스택이 비어있으면 -1을 출력코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayDe..

99클럽 코테 스터디 11일차 TIL - 해시

문제프로그래머스 [완주하지 못한 선수]문제 링크:  https://school.programmers.co.kr/learn/courses/30/lessons/42576해결 방법Arrays.sort를 통해 두 배열을 정렬이름이 순서대로 정렬되므로 같은 이름이 같은 위치에 놓이게 됩니다.for 문을 사용하여 참가자 배열과 완주자 배열을 하나씩 비교하고 비교 중 다른 이름이 그 이름을 반환만약 completion 배열과 모두 일치한다면, participant 배열의 마지막 사람을 반환코드import java.util.Arrays;class Solution { public String solution(String[] participant, String[] completion) { // 1. 참가..

99클럽 코테 스터디 10일차 TIL - 해시

문제프로그래머스 [포켓몬]문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/1845 해결 방법HashSet을 사용하여 nums 배열에 있는 모든 폰켓몬 번호를 중복 없이 저장한다.maxSelect 변수에 N/2 값을 저장한다. -> 선택 가능한 폰켓몬 수의 최대치이다.Math.min(set.size(), maxSelect)를 사용하여 선택 가능한 폰켓몬 종류의 최대 개수를 계산한다.종류 수가 선택 가능한 수를 초과하는 경우,  작은 값을 반환한다.코드import java.util.HashSet;class Solution { public int solution(int[] nums) { // 1. 중복 없는 폰켓몬 종류의 개..