분류 전체보기

spring, jpa

[JPA] 복합키

@Embeddable을 이용한 PK 테이블 생성 SNS 백엔드 서버의 팔로우 기능을 구현하면서 서로 다른 유저의 관계를 Follow 테이블로 묶어야 하는 일이 발생했다. 저번 프로젝트에서 멘토님이 이런 경우 복합키를 사용하는 것을 추천해주셨는데 이번에 적용해보기로 했다. 복합키는 아래와 같이 PK테이블을 별도로 만들어 사용하면 되는데 @Embeddable을 이용해 구성할 수 있다. 아래와 같이 관계를 엮을 두개의 키를 선언해주면 되고 해당 FollowPK를 이용하는 Follow 테이블은 기존 방식처럼 follow_id를 가지는 것이 아니라 아래처럼 두개의 id를 PK로 가지게 되는 것이다. @Embeddable @EqualsAndHashCode @NoArgsConstructor(access = Acces..

spring, jpa

[JPA] 즉시로딩과 지연로딩

목표 Jpa 즉시로딩과 지연로딩의 개념에 대해 알아보자. 즉시로딩과 지연로딩의 개념을 이해하기 위해서는 Jpa Proxy 객체 개념의 이해가 선행되어야 한다. Proxy에 대한 이해가 없다면 JPA Proxy란? 을 먼저 보면 좋을 것 같다. 즉시로딩(EAGER)과 지연로딩(LAZY) 즉시로딩(EAGER Loading) Hibernate는 지연로딩과 즉시로딩, 두 가지 로딩 전략을 제공하는데, 즉시로딩은 연관된 엔티티를 한 번의 쿼리로 함께 로딩하는 방식을 말한다. 즉시로딩을 사용하면, Entity와 연관된 모든 Entity들이 한 번에 로딩되므로, 필요한 데이터를 즉시 사용할 수 있다. 연관관계 annotation 속성에 "fetch = FetchType.EAGER"를 추가하여 사용할 수 있다. 예를 ..

database

[SQL] UNION과 UNION ALL

Table간의 합연산 UNION UNION의 개념은 매우 쉽다. Table간의 합연산인데 A테이블과 B테이블의 합집합 테이블인 C테이블을 만드는 것이라고 보면 된다. 또한, UNION은 연산시 중복제거, 정렬 기능을 제공한다. 예제를 보면서 차근차근 이해하는게 훨씬 쉬우니 아래 두개의 테이블을 시작으로 서로 비교해가면서 UNION에 대해 이해해보도록 하자. 아래와 같이 Column이 모두 같은 user1, user2 테이블이 있다. 두 테이블을 합치려면 어떻게 해야할까? 아래와 같이 두개의 테이블에 UNION을 사용하면 된다. user1과 user2의 인스턴스가 모두 합해져 잘 출력되는것을 볼 수 있다. SELECT * FROM USER1 UNION SELECT * FROM USER2; ✅ Column의..

database

[SQL] SQL의 종류

DML(Data Manipulation Language) 데이터 조작어 데이터 조작어로는 SELECT, INSERT, UPDATE, DELETE가 있는데 개발을 하면서 가장 많이 접했던 언어가 DML이지 않을까 싶다. 하나씩 기본적인 형식으로 사용해보면서 개념을 익혀보자. 아래 내용을 쭉 읽으면 DML은 테이블의 인스턴스에 대한 CRUD를 담당하는 문법이라고 생각이 들것이다. ✅ SELECT 먼저 SELECT이다. 테이블 안에서의 데이터를 조회하는 문법인데 모두가 한번쯤 사용해보지 않았을까 싶다. 아래와 같은 형식으로 사용한다. SELECT에 사용할 수 있는 WHERE, JOIN, GROUP BY 등이 있지만 해당 글에서의 설명하려는 내용이 아니기 때문에 생략한다. SELECT [COLUMN] FROM ..

algorithm

[Algorithm] Combination - 조합

개요 알고리즘 문제를 풀면서 대진표를 짜는 문제를 마주한적이 있었는데 무작정 중첩 for문을 돌렸던 기억이 있다. 당연히 코드는 엉망이 되었고 문제도 겨우겨우 풀어서 제출했었는데 이번에 조합을 구하는 문제를 풀어보면서 조합을 구하는 알고리즘을 제대로 정리해야겠다는 생각이 들었다. 재귀를 이용한 조합 알고리즘을 이해하고 언제든 활용할 수 있도록 정리해보도록 하자 Combination 구하기 조합은 nCr에 대한 내용만 이해하고 있다면 재귀를 이용해 손쉽게 구현할 수 있다. 코드상으로 조합의 대상이되는 n의 크기를 가진 배열과 깊이 r의 재귀를 이용해 nCr, n개의 원소 중 r개를 중복없이 선택하는 조합을 만들 수 있다. A, B, C, D, E 5개의 팀이 있다고 할때, 모든 팀이 다른팀과 1번씩..

algorithm

[Algorithm] 약수·최대공약수·최소공배수

목표 알고리즘 문제를 풀면서 약수·최대공약수·최소공배수를 구하는 문제를 만났는데 기본적으로 구현을 할 수는 있지만, 관련 공식을 쓰지 않아 매우 비효율적으로 답을 찾고 있다는 것을 깨달았다. 약수·최대공약수·최소공배수를 구하는 경우는 생각보다 자주 보이기때문에 이 기회에 정리해두려고 한다. 해당 문제를 만나면 공식을 쓸 수 있도록 이해하고 코드로 정리해보자. 약수(Divisor) 구하기 12의 약수를 구한다고 할때, 처음 약수를 구할때는 아래와 같이 1부터 12까지 반복문을 돌려서 나머지가 0이되는 숫자를 찾는 식으로 접근했다. 하지만, 이렇게 접근하면 O(n)의 시간복잡도를 가지게 되는데 n이 커지고 문제가 복잡해진다면 분명 매우 큰 시간을 잡아먹을 것이다. List divisor = new Arr..

database

[SQL] Join

목표 Spring을 이용하면서 SQL 최적화를 위해 Join을 꽤 사용했지만, 어떤 원리로 동작하는지는 제대로 이해하지않고 그냥 이렇게 하면 Join이 된다. 라는 안일한 생각으로 SQL을 작성했던 것 같아 이번 기회에 Join에 대해 정리해보고자 한다. 여러 Join 전략 중 가장 많이 사용하는 4가지 Join 전략에 대해 이해해보자. SQL Join이란 두 개 이상의 테이블을 서로 연결하여 데이터를 검색할 때 사용하는 방법이다. 분리되어 있는 여러 테이블을 사용자가 원하는 형식으로 조합해야할때 SQL Join문을 이용해 해결할 수 있다. Join은 아래와 같이 7개의 형식으로 사용할 수 있다. Join의 종류와 활용 방법 오늘은 위 7개 형식의 Join 중 대부분의 Join에서 사용되는 아래 4가지 ..

spring, jpa

[Spring] Redis 사용하기(2)

https://zzzzseong.tistory.com/5 [Spring] Redis 사용하기(1) 목표 Redis가 무엇이고 언제 사용하는 것인지 알아보자 Docker로 Redis를 실행해보자 Redis란 무엇이고 언제, 어떻게 사용하는것일까? Redis(Remote Dictionary Server) Redis는 오픈소스기반 NoSQL의 Key-Value Store, zzzzseong.tistory.com 해당 글은 위 포스트와 이어지는 글입니다. Redis개념과 Docker를 이용한 Redis 사용방법을 보려면 위 포스트를 참고해주세요. 목표 이전 포스트에서 Redis의 기본적인 개념과 작동방식을 알아보았다. 이번 포스트에서는 Redis를 Spring에서 사용하는 방법에 대해 알아보자. Redis 사용..

spring, jpa

[Spring] DispatcherServlet

목표 Spring을 공부하면서 DispatcherServlet이라는 단어는 정말 많이 접했지만, 단순히 클라이언트의 요청에 따라 알맞은 Controller로 안내하는 녀석으로만 알고있었지 정확히 어떤 방식으로 어떤 일을 하는지 이해하보려고 하지 않았던 것 같다. DispatcherServlet이 어떤 일을 하는지, 어떤 과정을 거치는지 등을 글로 정리하면서 이해하고 학습해보자. DispatcherServlet DispatcherServlet은 모든 HTTP 요청을 가장 먼저 받아 적합한 Controller로 전달하는 역할은 한다. Spring에서 HTTP 요청 및 응답을 처리하는 핵심 기술이라고 할 수 있다. DispatcherServlet은 FrontController라고도 불리는데 GRASP Pat..

Jisung Jung
'분류 전체보기' 카테고리의 글 목록 (5 Page)