반응형

spring 15

[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

[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] 10주차 스터디(AOP, 트랜잭션)

1. AOP (Aspect Oriented Programming) - AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 따라서 AOP를 통해 부가 기능을 모듈화할 수 있다. AOP를 사용하면 핵심 기능과 분리하여 부가 기능 중심으로 설계, 구현이 가능해진다. - 스프링에서 부가기능은 "어드바이스", 부가기능을 적용할 위치를 "포인트컷" 이라고 한다. 다음은 AOP를 통해 부가기능을 모듈화한 코드이다. 여기서 부가 기능은 사용자의 API 수행 시간을 측정하는 것이다. 부가 기능은 excute 메서드에 구현되어있다. @Arou..

Back-end/Spring 2021.10.23

[SpringBoot] 9주차 스터디 (페이징, JPA 연관관계)

1. 페이징(Paging) - 페이징은 모든 데이터를 무한 스크롤하여 보는 것이 아니라 페이지로 나눠서 데이터를 나눠서 볼 수 있는 것이다. 다음 사진처럼 데이터가 페이지마다 나눠져서 볼 수 있는 방식이다. 나만의 셀렉샵에서 페이징 처리하는 부분을 추가해보겠다. ProcductController 에서 "페이지 번호, 각 페이지의 상품 수, 정렬 방식, 오름차순 여부, 회원 정보" 를 입력받아 요쳥에 맞는 상품들을 ProductService 를 통해 조회한다. Pageable 은 쉽게 페이징 처리를 할 수 있도록 도와준다. @RestController // JSON으로 데이터를 주고받음을 선언합니다. public class ProductController { // 멤버 변수 선언 private final ..

Back-end/Spring 2021.10.17

[SpringBoot] 8주차 스터디 (단위테스트, 통합테스트)

1. 단위 테스트 - 단위 테스트는 프로그램을 작은 단위로 쪼개서 각 단위가 정확하게 동작하는지 검사하는 것이다. 이를 통해 문제 발생 시 정확하게 어느 부분이 잘못되었는지를 재빨리 확인할 수 있다. - JUnit을 사용하여 단위 테스트를 할 수 있다. 다음은 Product 클래스가 잘 동작하는지 확인하기 위한 단위 테스트 코드이다. 상품이 잘 저장되는지 확인할 수 있다. given 에 저장할 정보를 입력하고, when 에서 상품을 저장한다. then 에서 상품이 잘 저장이 됐는지 확인한다. class ProductTest { @Test @DisplayName("정상 케이스") void createProduct_Normal() { // given Long userId = 100L; String title..

Back-end/Spring 2021.10.07

[SpringBoot] 7주차 스터디 ② (OAuth, 카카오 로그인)

https://soohyun6879.tistory.com/211 [SpringBoot] 7주차 스터디 ① (스프링 시큐리티) 스프링 시큐리티란? - '스프링 시큐리티' 프레임워크는 스프링 서버에 필요한 인증 및 인가를 위해 많은 기능을 제공해 줌으로써 개발의 수고를 덜어준다. - 인증: 사용자 신원을 확인하는 행위 e soohyun6879.tistory.com 이전 포스팅에 이어서 카카오 로그인을 구현해보겠습니다! OAuth OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 접근 위임을 위한 개방형 표준이다. 사용자가 애플리케이션에게 모든 권한을 넘기지 않고 사용자 대신 서비스를 이용할..

Back-end/Spring 2021.10.02

[SpringBoot] 7주차 스터디 ① (스프링 시큐리티)

스프링 시큐리티란? - '스프링 시큐리티' 프레임워크는 스프링 서버에 필요한 인증 및 인가를 위해 많은 기능을 제공해 줌으로써 개발의 수고를 덜어준다. - 인증: 사용자 신원을 확인하는 행위 ex) 로그인 통해 본인 확인 - 인가: 사용자의 권한을 사용하는 행위 ex) 역할에 따른 사용 권한 관리 (회원과 관리자) 이전에 만들어두었던 나만의 셀렉샵에 회원 가입 기능과 관리자 권한을 추가해보겠습니다. 1. 회원 가입 구현 사용자의 정보를 저장해야 하므로 User 테이블을 다음과 같이 생성한다. 사용자 역할을 구분할 수 있는 UserRole 도 생성한다. @Setter @Getter // get 함수를 일괄적으로 만들어줍니다. @NoArgsConstructor // 기본 생성자를 만들어줍니다. @Entity..

Back-end/Spring 2021.10.02

[SpringBoot] 6주차 스터디(객체 지향, DI)

1. 절차적 프로그래밍 VS 객체 지향 프로그래밍 ● 절차적 프로그래밍 - Service, Repository 를 따로 두지 않고 Controller 하나로 모든 것을 해결하는 방식이다. 각 API의 처리 내용을 쭉 나열해놓는 코딩 방식을 의미한다. - 하지만 이런 방식은 문제가 있다! 테이블의 필드명을 바꾸거나 DB의 id와 pw 를 바꾸는 등의 경우 바꿔야 할 코드가 많다. 따라서 실수로 변경되지 않은 코드가 생길 수 있고 유지보수 하기 힘들어진다. ● 객체 지향 프로그래밍 - 서버에서의 처리 과정을 Controller, Service, Repository 로 분류하는 방식이다 ① Controller - 클라이언트의 요청과 응답을 처리한다. 요청에 대한 처리는 Service에게 전담한다. ② Serv..

Back-end/Spring 2021.09.23

[SpringBoot] 5주차 스터디 (AWS RDS, EC2)

이전에 만들었던 프로젝트를 AWS 와 연결하여 배포해보았다. 1. AWS RDS ① RDS 를 구매한다. 다음과 같은 설정으로 데이터베이스를 생성한다. ② RDS 포트를 열어준다. 생성한 데이터베이스에서 보안그룹을 클릭하면 두번째 사진과 같은 화면이 나온다. 그 화면에서 인바운드 규칙을 수정해주면 된다. ③ 스프링부트 프로젝트와 RDS 를 연결한다. 우측에 [Database] - [+] - [Data Source] - [MySQL] 를 선택한다. 선택하면 이런 화면이 뜨는데 RDS에서 설정한 것들의 값을 넣으면 된다. Host 는 RDS 데이터베이스의 엔드포인트이다. User와 Password 는 데이터베이스를 만들 때 설정한 마스터 이름과 마스터 비밀번호이다. Database는 데이터베이스를 만들 때 ..

Back-end/Spring 2021.09.16
반응형