Dev 127

JPA 사용해서 무한 계층 댓글 구현해보기 - 02

이전 포스팅 JPA 사용해서 무한 계층 댓글 구현해보기 (infinite depth) - 01 페이스북에서 보던 무한댓글(댓글의 댓글의 댓글의...) 은 어떻게 구현되는지 궁굼해서 이것저것 알아보다가 우연히 좋은 포스팅을 발견해서, 공부하고 응용해보는 작업을 해보려 한다. 1. 요구 dkyou.tistory.com 이전 포스팅에 이어 엔티티 개발을 시작해보자 3. 엔티티 개발 JPA를 까먹고 추가안했어서 추가해주었다. import lombok.*; import javax.persistence.*; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @Entity @Getter @Setter @EqualsAnd..

Dev/SpringBoot 2022.01.20

JPA 사용해서 무한 계층 댓글 구현해보기 - 01

페이스북에서 보던 무한댓글(댓글의 댓글의 댓글의...) 은 어떻게 구현되는지 궁굼해서 이것저것 알아보다가 우연히 좋은 포스팅을 발견해서, 공부하고 응용해보는 작업을 해보려 한다. 1. 요구조건 및 개발 사항 정리 1. 엔티티 개발 하나의 테이블만 이용하여 구현 예정 self join 사용하여 무한 뎁스 구현 level 필드를 구현하여 depth에 따라 level별 분류하도록 구현 2. 리포지토리 개발 JpaRepository 사용하여 구현 3. DTO 개발 Entity는 순수하게 DB를 생성하고 DB하고만 소통하게 하기 위해 DTO구현 DTO는 비지니스 로직에서 사용하기 위해 구현 Entity에서 list로 담은 children을 DTO로 변환 구현 (stream, Collectors 사용) 4. 서비스..

Dev/SpringBoot 2022.01.20

34. [JPA] 02. JPA 시작

계속 이어서 강의 듣는 중입니다. 내용 JPA 실습 환경 구성 jpa를 실습하기 위한 환경을 구성하는 파트입니다. 강의에서는 다음과 같은 구성환경을 따르도록 권고하였습니다. h2 설치 메이븐 자바8 이상 persistence.xml 설정 저는 따로 persistence.xml을 설정해주지 않았습니다. 자바 스프링 부트에서는 starter-data-jpa를 로드하면 별도의 persistence.xml을 사용할 필요가 없기 때문입니다. 출처: https://wedul.site/511 [wedul] 데이터베이스 방언 JPA는 특정 데이터베이스에 종속되지 않습니다. 방언을 설정해주면, 그 방언을 기본으로 만들어서 SQL을 생성하는 방식입니다. application.properties에 설정해주면 됩니다. dri..

Dev/SpringBoot 2021.11.07

33. [JPA] 01. JPA 소개

김영한님의 JPA 강의를 듣고 정리해보는 시간을 가졌습니다. 내용 객체를 자바 컬렉션에 저장하듯이 DB에 저장할 수는 없을까? 고민하다가 나온 것이 JPA라고 합니다. JPA(Java Persistence API) ORM 기술의 표준이라고 합니다. 인터페이스의 모음입니다. (하이버네이트, EclipseLink, DataNucleus 등) ORM(Object Relational Mapping) 객체 관계 매핑입니다. 객체 - ORM - DB 사이에서 매핑해주는 기술입니다. 패러다임 불일치를 해결해준다고 합니다. 왜 JPA를 써야하는가? 객체 중심의 개발 생산성 CRUD가 쉽다. 유지보수 JPA에서는 필드만 추가하면 SQL은 JPA가 알아서 생성 후 처리한다. 패러다임 불일치 문제 해결 성능최적화 1차 캐시..

Dev/SpringBoot 2021.11.07

75. [TIL] 오늘의 배움일지 ( 21-09-17 )

1. 냅색 문제 https://www.acmicpc.net/problem/12865 12865번: 평범한 배낭 첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000) www.acmicpc.net 풀이를 먼저 이해하고, 다시 내가 짜보는 방식을 써봤더니 이해도 되고, 풀이도 되었다. 장기기억으로 넘어갈지는 아직 모르겠다. 2. 회의실 배정 https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www..

Dev/Algorithm 2021.09.17

15. [알고리즘] 정다면체

내 생각 defaultdict를 사용하는게 핵심. 해시를 생각했다. 구현 import collections n,m = map(int,input().split()) di = collections.defaultdict(int) for i in range(1,n+1): for j in range(1,m+1): di[i+j] += 1 max_value = max(di.values()) res = [] for d in di.items(): if d[1] == max_value: res.append(d[0]) res = list(map(str,res)) print(" ".join(res))다른사람 생각 리스트를 사용했다. 배열 크기를 잘 정하는게 핵심인듯 구현 n,m = map(int,input().split())..

Dev/Algorithm 2021.05.02

14. [알고리즘] K번째 큰 수

내 생각 콤비네이션을 이용해야겠다고 생각했음 리스트의 3개 뽑은 콤비네이션을 구함 합을 계산해서 다른 리스트에 넣음 ~번째 == idx-1 구현 #K번째 큰 수 from itertools import combinations n,k = map(int,input().split()) arr = list(map(int,input().split())) combi = combinations(arr,3) ar = [] for c in combi: ar.append(sum(c)) ar.sort(reverse=True) print(ar) ar = list(set(ar)) # 간과했던 부분 ar.sort(reverse=True) print(ar) print(ar[k-1]) 다른사람 생각 삼중포문을 사용할 생각을 했음 여기..

Dev/Algorithm 2021.04.29

12. [알고리즘] K번째 약수

내 생각 1. 약수의 리스트를 구함 2. 정렬 3. k-1 번째 수를 리턴해준다. 구현 # K번째 약수 def solution(a,b): def sol1(n): li = list() for i in range(1,n): if n % i == 0: li.append(i) return li def sol2(li,b): if len(li) < b: return -1 li.sort() return li[b-1] li = sol1(a) answer = sol2(li,b) return answer print(solution(6,3)) print(solution(25,5)) print(solution(100,5)) print(solution(100,7)) print(solution(1000,12)) 다른사람 생각 c..

Dev/Algorithm 2021.04.29

13. 기술면접 전 보고가면 좋은 내용 공유 2

1. 자바를 쓰는 이유가 뭘까요 자바를 구성하는 5가지 장점으로 인해 자바를 사용한다고 생각합니다. 자바는 객체지향형이고, 쉽고, 단순합니다. 다형성 및 캡슐화 등 객체지향적으로 구성되어있습니다. 자바는 분산환경에서 사용되도록 디자인되어 보안상 안전하게 설계되어있습니다. 자바는 javac를 이용해 OS에 영향받지 않는 중립적인 코드를 생성하기 때문에 아키텍쳐 관계없이 사용가능하므로, 호환성 문제가 발생하지 않습니다. JIT나 GC 등 자바 최적화를 위한 기법들이 존재합니다. 멀티스레드 환경을 지원하여 동시에 여러 작업이 진행가능하도록 지원해줍니다. 2. JIT가 뭘까요? 어떤 메서드의 일부, 혹은 전체 코드를 네이티브 코드로 변환하여 JVM에서 번역하지 않도록 함으로서 보다 빠른 성능을 제공하는 기술입니..

Dev 2021.04.19