반응형

분류 전체보기 210

[SpringBoot] 페치 조인 (Fetch Join)

페치 조인이란? - SQL 조인 종류가 아니다 - JPQL에서 성능 최적화를 위해 제공하는 기능이다 - 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능이다 - join fetch 명령어 사용한다 엔티티 페치 조인 회원을 조회하면서 연관된 팀도 함께 조회한다. 쿼리는 다음과 같다. select m from Member m join fetch m.team (SQL 1번) SQL을 보면 회원 뿐만 아니라 팀도 함께 조회된다. 회원 조회 → 팀 조회로 SQL 2번 나가는 것을 페치 조인을 사용하면 쿼리가 나가는 횟수를 줄일 수 있다. Member의 team에 Lazy 로딩이 설정되어 있어도 페치 조인이 우선시된다. String jpql = "select m from Member m join fetc..

Back-end/Spring 2022.04.06

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

지연 로딩 Member와 Team이 연관 관계를 맺고 있다고 할 때, Member를 조회하면 Team도 함께 조회된다. 단순히 Member 정보만 필요할 경우 Member를 조회할 때 Team도 함께 조회해야 할까? 이것을 해결할 수 있는 것이 '지연 로딩'이고, 지연 로딩 LAZY를 사용해서 프록시로 조회하는 방법으로 해결한다. 다음과 같이 지연 로딩을 적용할 수 있다. 로딩되는 시점에 Lazy 로딩 설정이 되어있는 Team 엔티티는 프록시 객체로 가져온다. 나중에 실제 team 객체를 사용하는 시점에 초기화가 되고, DB에 쿼리가 나간다. getTeam()으로 Team을 조회하면 프록시 객체가 조회가 된다. getTeam().getXXX()으로 Team의 필드에 접근 할 때, 쿼리가 나간다. @Ent..

Back-end/Spring 2022.03.31

[프로그래머스/Python] 경주로 건설

https://programmers.co.kr/learn/courses/30/lessons/67259 코딩테스트 연습 - 경주로 건설 [[0,0,0,0,0,0,0,1],[0,0,0,0,0,0,0,0],[0,0,0,0,0,1,0,0],[0,0,0,0,1,0,0,0],[0,0,0,1,0,0,0,1],[0,0,1,0,0,0,1,0],[0,1,0,0,0,1,0,0],[1,0,0,0,0,0,0,0]] 3800 [[0,0,1,0],[0,0,0,0],[0,1,0,1],[1,0,0,0]] 2100 [[0,0,0,0,0,0],[0,1,1,1,1,0],[0,0,1,0,0,0],[1,0,0,1,0,1],[ programmers.co.kr BFS만 사용하면 마지막 테스트 케이스가 통과되지 않는다! BFS + DP의 조합으로 ..

[백준/Python] 파이프 옮기기 1

https://www.acmicpc.net/problem/17070 17070번: 파이프 옮기기 1 유현이가 새 집으로 이사했다. 새 집의 크기는 N×N의 격자판으로 나타낼 수 있고, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 (r, c)로 나타낼 수 있다. 여기서 r은 행의 번호, c는 열의 www.acmicpc.net 문제에 제시된 그림을 보면, 답을 구할 수 있는 힌트가 있다. 다음과 같이 경우를 나눠볼 수가 있다. 가로로 오는 경우 -> 가로에서 가로로, 대각선에서 가로로 세로로 오는 경우 -> 세로에서 세로로, 대각선에서 세로로 대각선으로 오는 경우 -> 가로에서 대각선으로, 세로에서 대각선으로, 대각선에서 대각선으로 이것을 기반하여 DP를 활용하여 코드를 작성하면 된다. 가로, ..

Algorithm/백준 2022.02.27

[백준/Python] 부분합

https://www.acmicpc.net/problem/1806 1806번: 부분합 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다. www.acmicpc.net 생각보다 어렵지 않은 투포인터 문제여서 자신있게 제출했지만 시간초과...^^ 이유는 sum()을 사용한 것 때문! 부분합 리스트를 저장해두는 방법을 사용하여 해결했다 n, s = map(int, input().split()) nums = list(map(int, input().split())) l, r = 0, 1 # 투 포인터 ans = 1e9 # 최소 길이 sum_n = [0] ..

Algorithm/백준 2022.02.16

[SpringBoot] 엔티티 매핑, 연관관계 매핑

엔티티 매핑 1. 객체 매핑 @Entity - JPA가 관리하는 엔티티라는 의미 @Table - 엔티티와 매핑할 테이블을 지정, name에 테이블명을 지정하면 된다 @Entity @Table(name = "orders") public class Order { } 2. 컬럼 매핑 @Id - 기본키 매핑 @GeneratedValue - 기본키 자동 생성 @Column - 컬럼 매핑, name은 컬럼명 @Enumerated - enum 타입 매핑, EnumType.STRING( = enum 이름을 DB에 저장한다는 의미)을 권장 @Temporal - 날짜 타입 매핑, LocalDate or LocalDateTime을 사용할 때는 생략 가능 @Lob - BLOB, CLOB 매핑 @Transient - 특정 필드..

Back-end/Spring 2022.02.06

[Spring] 영속성 컨텍스트

영속성 컨텍스트란? - 엔티티를 영구 저장하는 환경 - 엔티티 매니저를 통해서 영속성 컨텍스트에 접근할 수 있다 엔티티의 생명주기 1. 비영속 - 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 엔티티를 생성하기만 했으므로 영속성 컨텍스트에서 관리하는 상태가 아니다 Member member = new Member(); member.setId(1L); member.setName("HelloA"); 2. 영속 - 영속성 컨텍스트에 관리되는 상태 em.persist(member); // 엔티티를 영속성 컨텍스트에 저장 3. 준영속 - 영속성 컨텍스트에 저장되었다가 분리된 상태 em.detach(member); // 엔티티를 영속성 컨텍스트에서 분리 4. 삭제 - 영속성 컨텍스트에서 삭제된 상태 em.remov..

Back-end/Spring 2022.01.26

[SpringBoot] 컴포넌트 스캔과 의존관계 자동 주입 (@Component, @Autowired, @RequiredArgsConstructor)

이전에 @Configuration, @Bean을 사용해 DI를 했던 것을 더 간단하게 줄여보겠다. 컴포넌트 스캔 - 설정 정보가 없어도 자동으로 스프링 빈으로 등록하는 기능 다음과 같이 설정 정보에 @ComponentScan을 붙이면 컴포넌트 스캔을 사용할 수 있다. 컴포넌트 스캔은 @Component가 붙은 클래스를 스프링 빈으로 등록해준다. 이전처럼 설정정보에 @Bean을 붙여주지 않아도 되므로 간단해진다! 스프링 빈으로 등록할 클래스에 모두 @Component를 붙여주면 컴포넌트 스캔의 대상이 된다. @Configuration @ComponentScan // @Component가 붙은 클래스를 스프링 빈으로 등록해준다 public class AutoAppConfig { } @Component // ..

Back-end/Spring 2022.01.16

[SpringBoot] 스프링 컨테이너와 싱글톤 패턴

이전 포스팅에서 직접 객체를 생성하고 DI를 적용한 것을 스프링으로 전환해보았다. 스프링 컨테이너 스프링 컨테이너는 @Configuration이 붙은 AppConfig를 설정 정보로 사용한다. 여기서 @Bean 이라 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다. 이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 한다. 이제부터는 스프링 컨테이너를 통해서 스프링 빈을 찾으면 된다. @Configuration // 여기에 설정을 구성한다는 의미 public class AppConfig { @Bean // 스프링 컨테이너에 스프링 빈으로 등록 public MemberService memberService(){ System.out.println("call AppConfig.memb..

카테고리 없음 2022.01.13

SOLID 적용하여 리팩토링하기

public class OrderServiceImpl implements OrderService{ // 구현 클래스에 의존한다 -> DIP 위반 // 1번 private final MemberRepository memberRepository = new MemoryMemberRepository(); // 2번 private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); // 기능을 확장하여 변경하려면 클라이언트에 영향을 준다 -> OCP 위반 // 3번 private final DiscountPolicy discountPolicy = new RateDiscountPolicy(); } 이 코드를 보면 SOLID 원칙을 위반한 것을 볼 수 있다..

Back-end/Spring 2022.01.10
반응형