@Embeddable을 이용한 PK 테이블 생성 SNS 백엔드 서버의 팔로우 기능을 구현하면서 서로 다른 유저의 관계를 Follow 테이블로 묶어야 하는 일이 발생했다. 저번 프로젝트에서 멘토님이 이런 경우 복합키를 사용하는 것을 추천해주셨는데 이번에 적용해보기로 했다. 복합키는 아래와 같이 PK테이블을 별도로 만들어 사용하면 되는데 @Embeddable을 이용해 구성할 수 있다. 아래와 같이 관계를 엮을 두개의 키를 선언해주면 되고 해당 FollowPK를 이용하는 Follow 테이블은 기존 방식처럼 follow_id를 가지는 것이 아니라 아래처럼 두개의 id를 PK로 가지게 되는 것이다. @Embeddable @EqualsAndHashCode @NoArgsConstructor(access = Acces..
목표 5주차 개인과제로 익명 게시판의 API서버를 개발하는 과제를 받았다. 과제를 제출하고 멘토님께서 앞으로 유지해야할 부분과 개선해야할 부분에 대한 몇 가지 피드백을 주셨고, 과제 코드를 리팩토링한 코드와 과제를 수행하며 느낀점을 회고하고자 글을 작성한다. GitHub - zzzzseong/sparta_todo_app_backend: 내일배움캠프 Spring 3기 5주차 개인과제 스파르타 익명 게시판 내일배움캠프 Spring 3기 5주차 개인과제 스파르타 익명 게시판 서버. Contribute to zzzzseong/sparta_todo_app_backend development by creating an account on GitHub. github.com 과제 피드백 1️⃣ 전체적인 코드가 매우..
목표 Jpa 즉시로딩과 지연로딩의 개념에 대해 알아보자. 즉시로딩과 지연로딩의 개념을 이해하기 위해서는 Jpa Proxy 객체 개념의 이해가 선행되어야 한다. Proxy에 대한 이해가 없다면 JPA Proxy란? 을 먼저 보면 좋을 것 같다. 즉시로딩(EAGER)과 지연로딩(LAZY) 즉시로딩(EAGER Loading) Hibernate는 지연로딩과 즉시로딩, 두 가지 로딩 전략을 제공하는데, 즉시로딩은 연관된 엔티티를 한 번의 쿼리로 함께 로딩하는 방식을 말한다. 즉시로딩을 사용하면, Entity와 연관된 모든 Entity들이 한 번에 로딩되므로, 필요한 데이터를 즉시 사용할 수 있다. 연관관계 annotation 속성에 "fetch = FetchType.EAGER"를 추가하여 사용할 수 있다. 예를 ..
Table간의 합연산 UNION UNION의 개념은 매우 쉽다. Table간의 합연산인데 A테이블과 B테이블의 합집합 테이블인 C테이블을 만드는 것이라고 보면 된다. 또한, UNION은 연산시 중복제거, 정렬 기능을 제공한다. 예제를 보면서 차근차근 이해하는게 훨씬 쉬우니 아래 두개의 테이블을 시작으로 서로 비교해가면서 UNION에 대해 이해해보도록 하자. 아래와 같이 Column이 모두 같은 user1, user2 테이블이 있다. 두 테이블을 합치려면 어떻게 해야할까? 아래와 같이 두개의 테이블에 UNION을 사용하면 된다. user1과 user2의 인스턴스가 모두 합해져 잘 출력되는것을 볼 수 있다. SELECT * FROM USER1 UNION SELECT * FROM USER2; ✅ Column의..
DML(Data Manipulation Language) 데이터 조작어 데이터 조작어로는 SELECT, INSERT, UPDATE, DELETE가 있는데 개발을 하면서 가장 많이 접했던 언어가 DML이지 않을까 싶다. 하나씩 기본적인 형식으로 사용해보면서 개념을 익혀보자. 아래 내용을 쭉 읽으면 DML은 테이블의 인스턴스에 대한 CRUD를 담당하는 문법이라고 생각이 들것이다. ✅ SELECT 먼저 SELECT이다. 테이블 안에서의 데이터를 조회하는 문법인데 모두가 한번쯤 사용해보지 않았을까 싶다. 아래와 같은 형식으로 사용한다. SELECT에 사용할 수 있는 WHERE, JOIN, GROUP BY 등이 있지만 해당 글에서의 설명하려는 내용이 아니기 때문에 생략한다. SELECT [COLUMN] FROM ..
목표 오늘은 알고리즘 스터디와 개인적으로 문제를 풀어보면서 나의 알고리즘 풀이 실력이 많이 모자라다는 것을 느꼈다. 하지만, 알고리즘 문제는 풀면 풀수록 실력이 늘어난다고 하기 때문에 꾸준히, 성실하게 풀다 보면 성장해 있을 것이라고 생각한다. 오늘 푼 문제를 회고하면서 관련 실수를 다시 하지 말자. Programmers Lv. 1 햄버거 https://school.programmers.co.kr/learn/courses/30/lessons/133502 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 개요 해당 문제는 1(빵), 2(야채), 3(고..
목표 팀원분들과 함께 매주 월, 화, 목, 금 2시에 알고리즘 스터디를 진행하기로 하였다. 오늘은 처음 알고리즘 스터디를 진행한 날인데 느낀점이 있어 스터디 회고록을 작성한다. 오늘 작성한 내용을 잊지 않고 다음부터는 꼭 고려해서 알고리즘을 짜는것이 목표이다. Programmers Lv. 1 대충 만든 자판 https://school.programmers.co.kr/learn/courses/30/lessons/160586 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 개요 해당 문제는 자판의 정보를 담고 있는 keymap배열과 만들어야하는 텍스트 ..
개요 알고리즘 문제를 풀면서 대진표를 짜는 문제를 마주한적이 있었는데 무작정 중첩 for문을 돌렸던 기억이 있다. 당연히 코드는 엉망이 되었고 문제도 겨우겨우 풀어서 제출했었는데 이번에 조합을 구하는 문제를 풀어보면서 조합을 구하는 알고리즘을 제대로 정리해야겠다는 생각이 들었다. 재귀를 이용한 조합 알고리즘을 이해하고 언제든 활용할 수 있도록 정리해보도록 하자 Combination 구하기 조합은 nCr에 대한 내용만 이해하고 있다면 재귀를 이용해 손쉽게 구현할 수 있다. 코드상으로 조합의 대상이되는 n의 크기를 가진 배열과 깊이 r의 재귀를 이용해 nCr, n개의 원소 중 r개를 중복없이 선택하는 조합을 만들 수 있다. A, B, C, D, E 5개의 팀이 있다고 할때, 모든 팀이 다른팀과 1번씩..
목표 알고리즘 문제를 풀면서 약수·최대공약수·최소공배수를 구하는 문제를 만났는데 기본적으로 구현을 할 수는 있지만, 관련 공식을 쓰지 않아 매우 비효율적으로 답을 찾고 있다는 것을 깨달았다. 약수·최대공약수·최소공배수를 구하는 경우는 생각보다 자주 보이기때문에 이 기회에 정리해두려고 한다. 해당 문제를 만나면 공식을 쓸 수 있도록 이해하고 코드로 정리해보자. 약수(Divisor) 구하기 12의 약수를 구한다고 할때, 처음 약수를 구할때는 아래와 같이 1부터 12까지 반복문을 돌려서 나머지가 0이되는 숫자를 찾는 식으로 접근했다. 하지만, 이렇게 접근하면 O(n)의 시간복잡도를 가지게 되는데 n이 커지고 문제가 복잡해진다면 분명 매우 큰 시간을 잡아먹을 것이다. List divisor = new Arr..