Dev 129

[Spring] 의존성 주입(DI) 에 대해 알아보자 - 1 / 개요, Bean 정의

의존성 주입(DI)이 필요하게 된 배경 . 앤터프라이즈 애플리케이션 개발 시, 하나의 처리를 수행하기 위해 여러 개의 컴포넌트를 조합해서 개발하는 경우가 일반적이다. . '공통으로 사용되는 기능을 따로 분리한 컴포넌트', 'DB 접근을 위한 컴포넌트', '외부 시스템에 접속하기 위한 컴포넌트' 등이 있다. . 하나의 처리를 구현하기 위해 여러 컴포넌트를 통합할 때 의존성 주입이 필요하다. . 예를 들어, UserService의 Save 기능을 구현하기 위해서는 UserRepository나 PasswordEncoder클래스를 이용해서 구현해야 한다. 클래스 간 결합도가 높다 . 위에서 말했듯 UserServiceImpl 클래스를 개발하는 단계에서는 이미 UserRepository나 PasswordEncod..

Dev 2022.02.28

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