spring/스프링 입문 주차
-
Query Methods 란 무엇일까spring/스프링 입문 주차 2024. 1. 25. 09:47
Query Methods - Spring Data JPA에서는 메서드 이름으로 SQL을 생성할 수 있는 Query Methods 기능을 제공한다. - JpaRepository 인터페이스에서 해당 인터페이스와 매핑되어있는 테이블에 요청하고자 하는 SQL을 메서드 이름을 사용하여 선언할 수 있다. List findAllByOrderByModifiedAtDesc(); - 이런 정해진 규칙으로 메서드 이름을 선언하기만 하면, SimpleJpaRepository 클래스가 생성될 때 위처럼 직접 선언한 JpaRepository 인터페이스의 모든 메서드를 자동으로 구현해준다. - 따라서 우리는 인터페이스에 필요한 SQL에 해당하는 메서드 이름 패턴으로 메서드를 선언하기만 하면 따로 구현하지 않아도 사용할 수 있다. ..
-
SpringBoot의 JPAspring/스프링 입문 주차 2024. 1. 25. 09:42
이전처럼 직접 emf와 em을 생성하지 않아도 스프링 부트가 application.properties 를 바탕으로 자동으로 만들어준다. @PersistenceContext EntityManager em; - @PersistenceContext 애너테이션을 통해 자동으로 생성된 EntityManager를 주입받아 사용할 수 있다. Spring의 트랜잭션 - Spring 프레임워크에서는 DB의 트랜잭션 개념을 애플리케이션에 적용할 수 있도록 트랜잭션 관리자를 제공한다. - @Transactional 애너테이션을 클래스나 메서드에 추가하면 쉽게 트랜잭션 개념을 적용할 수 있다. - 메서드가 호출되면 해당 메서드 내에서 수행되는 모든 DB 연산 내용은 하나의 트랜잭션으로 묶인다. - 이때, 해당 메서드가 정상적..
-
엔티티의 상태spring/스프링 입문 주차 2024. 1. 25. 09:41
비영속과 영속 상태 비영속 상태 : 객체를 persist 하기 전의 객체 영속 상태 : 객체를 persist 한 이후 JPA에게 관리되는 객체 준영속(Detached) 상태 : 영속 상태였다가 분리된 객체 em.contains : Entity객체가 현재 영속성 컨텍스트에 의해 관리되는 객체인지 확인하는 메서드 변경 감지(dirty checking)가 일어나는 것은 영속 상태일 때만 일어난다. 영속 상태에서 준영속 상태로 전환하는 방법 - em.detache() : 해당 객체를 준영속 상태로 전환 - em.clear() : 영속성 컨텍스트를 완전히 초기화하여 모든 Entity를 준영속 상태로 만든다. - 영속성 컨텍스트의 틀은 유지하지만 내용은 비워 새로 만든 것과 같은 상태가 된다. - 따라서 계속해서 ..
-
영속성 컨텍스트의 기능spring/스프링 입문 주차 2024. 1. 25. 09:39
영속성 컨텍스트는 Entity 객체를 효율적으로 쉽게 관리하기 위해 만들어진 공간이다. - 영속성 컨텍스트가 어떻게 Entity 객체를 효율적으로 관리하고 있는지 살펴보자 영속성 컨텍스트는 내부적으로 캐시 저장소를 가지고 있다. - 우리가 저장하는 Entity 객체들이 1차 캐시 즉, 캐시 저장소에 저장된다고 생각하면 된다. - 캐시 저장소는 Map 자료구조 형태로 되어있다. - key에는 @Id로 매핑한 기본 키 즉, 식별자 값을 저장한다. - value에는 해당 Entity 클래스의 객체를 저장한다. - 영속성 컨텍스트는 캐시 저장소 Key에 저장한 식별자 값을 사용하여 Entity 객체를 구분하고 관리한다. 영속성 컨텍스트가 이 캐시 저장소를 어떻게 활용하고 있는지 살펴보자. - em.persist..
-
JPA란 무엇일까spring/스프링 입문 주차 2024. 1. 23. 09:22
직접 DB를 다룬다면 1. DB 테이블 만들기 2. 애플리케이션에서 SQL 작성 3. SQL을 JDBC를 사용해서 직접 실행 4. SQL 결과를 객체로 직접 변환 SQL 의존적이라 변경에 취약하다 만약 데이터에 비밀번호를 추가해야 한다면 어떻게 될까? 1. SQL 을 직접 수정 2. ResponseDto 객체에 값을 넣어주는 부분도 당연히 추가해줘야 한다. 단순히 비밀번호 하나 더 추가했는데 해야하는 일들이 엄청 많이 생겼다. 이처럼 ORM 이 없는 환경에서는 백엔드 개발자가 비즈니스 로직 개발보다, SQL 작성 및 수정에 더 많은 노력을 들어야 했었다. ORM : Object-Relational Mapping Object : '객체'지향 언어 Relational : '관계형' 데이터베이스 (H2, My..
-
제어의 역전, ApplicationContextspring/스프링 입문 주차 2024. 1. 22. 20:59
이전 글에서 DI패턴에 대해서 알아봤다. 외부에서 만들어진 객체를 주입받는 것으로 느슨한 결합 즉, 유연한 코드를 만들 수 있었다. 그런데 '외부'라는 것은 대체 어디일까? IoC Container 와 Bean Bean : 스프링이 관리하는 객체 IoC Container : 관리하는 객체들이 모여있는 컨테이너 @Component 어노테이션을 달아주면 해당 클래스를 스프링 빈에 등록한다. (빈을 등록할 땐 클래스 이름에서 첫글자를 소문자로 변경한 상태 그대로 저장된다.) 앱이 기동할 때 그 클래스들을 모두 객체화 하여 IoC Container 에 저장하고, 그것들이 필요한 위치에 주입한다. 스프링 부트를 사용하지 않았다면, 프로젝트 최상단 폴더 위치에 Config 클래스를 생성하여 @Configuratio..
-
IoC Container 와 Beanspring/스프링 입문 주차 2024. 1. 22. 20:57
IoC, DI 는 객체지향의 SOLID 원칙 그리고 GoF 의 디자인 패턴과 같은 설계 원칙 및 디자인 패턴이다. 이 둘을 더 자세하게 구분해 보자면, IoC는 설계 원칙에 해당하고 DI는 디자인 패턴에 해당한다. 좋은 코드란 무엇일까? - 논리가 간단해야 한다. - 중복을 제거하고 표현을 명확하게 해야한다. - 코드를 처음 보는 사람도 쉽게 이해하고 수정할 수 있어야 한다. - 의존성을 최소화 해야 한다. - 새로운 기능을 추가 하더라도 크게 구조의 변경이 없어야 한다. 이렇듯 좋은 코드를 작성하기 위해서는 신경써야 할 부분이 정말 많다. 따라서 Spring은 개발자가 Java를 사용하여 쉽게 좋은 코드를 작성할 수 있도록 도와주는 역할을 해준다. IoC, DI는 좋은 코드 작성을 위한 Spring의 ..
-
JDBC란 무엇일까?spring/스프링 입문 주차 2024. 1. 18. 17:56
애플리케이션 서버와 데이터베이스는 어떻게 소통할까? 애플리케이션 서버에서 DB에 접근하기 위해서는 여러가지 작업이 필요하다. 1. 우선 DB에 연결하기 위해 커넥션을 연결해야 한다. 2. SQL을 작성한 후 커넥션을 통해 SQL을 요청한다. 3. 요청한 SQL에 대한 결과를 응답 받는다. 기존에 사용하던 MySQL 서버를 PostgreSQL 서버로 변경한다면 무슨일이 발생할까? - MySQL과 PostSQL은 커넥션을 연결하는 방법, SQL을 전달하는 방법, 결과를 응답받는 방법 모두 다를 수 있다. - 따라서 애플리케이션 서버에서 작성했던 DB 연결 로직들을 전부 수정해야 한다. - 이러한 문제를 해결하기 위해 JDBC 표준 인터페이스가 등장했다. - JDBC는 Java Database Connecti..