Spring 16

[Spring JPA] 연관관계 매핑 (4)

연관관계가 필요한 이유 예제 시나리오를 보며 설명을 진행한다. 예제 시나리오회원과 팀이 있다.회원은 하나의 팀에만 소속될 수 있다.회원과 팀은 다대일 관계다. 객체를 테이블에 맞추어 모델링 예제 시나리오에 따라 객체를 테이블에 맞추어 모델링해보면 다음과 같이 나타낼 수 있다.  다음과 같은 모델링 결과를 통해 알 수 있는 점은 객체 간에는 연관관계가 없지만, 테이블 간에는 연관관계가 존재한다는 점이다. 테이블을 자세히 살펴보면, 멤버와 팀이 다대일 관계를 가지고 있고, 이 중, '다'의 관계인 Member가 Foreign Key를 가지고 있는 것을 알 수 있다.   참조 대신에 외래키를 그대로 사용 현재 객체를 테이블에 맞추어 모델링을 진행했으므로 참조 대신에 외래키를 그대로 사용하여 연관관계 매핑을 진..

Spring 2024.05.16

[Spring JPA] 객체와 테이블 매핑 (3)

JPA에서 가장 중요하게 봐야 되는 두 가지는 영속성 컨텍스트와 같이 JPA가 내부적으로 어떤 메커니즘으로 동작하는지에 대한 측면과 객체와 관계형 데이터베이스를 어떻게 매핑하여 쓰는지에 대한 설계적인 측면이 있다. 이번에는 엔티티 매핑에 대해 알아보자.   객체와 테이블 매핑 @Entity@Entity가 붙은 클래스는 JPA가 관리하며, 이를 엔티티라 한다.JPA를 사용해서 테이블과 매핑할 클래스는 @Entity를 반드시 붙여야 한다.주의할 점기본 생성자 필수final 클래스, enum, interface, inner 클래스 사용 불가저장할 필드에 final 사용 불가 @Entity 속성속성: nameJPA에서 사용할 이름을 지정한다기본값: 클래스 이름을 그대로 사용같은 클래스 이름이 없으면 가급적 기본..

Spring 2024.05.13

[Spring JPA] 영속성 컨텍스트 (2)

JPA에서 가장 중요한 두 가지 사항이 있는데, 바로 객체와 관계형 데이터베이스를 매핑하는 것과 영속성 컨텍스트를 이해하는 것이다. 이번에는 영속성 컨텍스트에 대해 알아볼 것인데, 영속성 컨텍스트에 대해 명확히 이해한다면 JPA가 어떻게 동작하는지 정확히 이해할 수 있다.  엔티티 매니저 팩토리와 엔티티 매니저 그 전에 JPA를 사용하기 위해서는 먼저 엔티티 매니저 팩토리와 엔티티 매니저에 대해 이해해야 한다.  다음과 같은 웹 어플리케이션을 개발할 때, 엔티티 매니저 팩토리는 고객의 요청이 올 때마다 엔티티 매니저를 생성하게 된다. 엔티티 매니저는 내부적으로 데이터베이스 커넥션을 사용해서 DB를 사용하게 된다.  영속성 컨텍스트 영속성 컨텍스트란, JPA를 이해하는데 가장 중요한 용어로 "엔티티를 영구..

Spring 2024.05.12

[Spring JPA] JPA 소개 (1)

JPA 우리는 애플리케이션 개발 시 주로 객체 지향 언어와 관계형 데이터베이스를 사용하여 개발한다. 과거에 JPA가 등장하기 전에는 개발자들은 SQL에 의존적인 개발을 피할 수 없었다. 하지만 SQL 중심적인 개발을 하게 되면 다음과 같은 문제가 발생한다.무한 반복, 지루한 코드객체 하나를 보관하고 꺼내고 삭제하려면 계속해서 쿼리를 작성해야 한다. 이러한 문제를 해결하기 위해 JPA가 등장하게 되었다. JPA란 Java Persistence API의 약자로, 자바 진영의 ORM 기술 표준을 말한다. ORM (Object Relational Mapping) ORM은 Object Relational Mapping의 약자로 말 그대로 객체와 관계를 매핑하는 것을 말한다. 즉, Relational은 관계형 DB..

Spring 2024.05.12

[스프링부트] 컨트롤러

컨트롤러란, MVC 디자인 패턴에서 C에 해당한다. 컨트롤러는 사용자의 요청을 처리하는데 사용된다. 스프링부트에서 컨트롤러를 사용하는 방법에 대해 간단히 알아보도록 하자. 그 전에, 스프링부트 서버를 띄우고, 브라우저에 http://localhost:8080 URL로 페이지를 요청하면, 다음과 같은 오류가 발생한다. 다음과 같이 Not Found (404)라는 오류가 발생하는데, 404는 HTTP 오류 코드 중 하나로 브라우저가 요청한 페이지를 찾을 수 없을 경우에 발생한다. 이는 요청한 URL(http://localhost:8080)을 스프링부트 서버가 해석할 수 없기 때문이다. 오류를 해결하기 위해서는 컨트롤러를 작성하고 URL에 대한 매핑을 추가해야 한다. 컨트롤러 "HelloController.j..

Spring 2023.11.05

[스프링부트] 스프링부트 프로젝트의 구조

스프링부트 프로젝트의 구조 스프링부트를 사용하여 프로젝트를 만들기 위해서는 프로젝트 구조를 잘 이해해야 한다. 스프링부트 프로젝트의 구조와 파일들에 대해 간단히 알아보자. src/main/java 디렉터리 src/main/java 디렉터리의 하위 패키지는 자바 파일을 작성하는 공간이다. 자바 파일로는 스프링 부트의 컨트롤러, 폼과 DTO, 데이터베이스 처리를 위한 엔티티, 서비스 파일 등이 있다. 프로젝트명 + Application.java 파일 모든 프로그램은 시작을 담당하는 파일이 있는데, 스프링부트 애플리케이션도 마찬가지이다. 스프링부트 애플리케이션에서는 "프로젝트명 + Application.java" 파일이 시작을 담당한다. 만약 스프링부트 프로젝트를 생성할 때 "Hello"라는 이름을 사용하면 ..

Spring 2023.10.19

[스프링부트] 스프링부트란 무엇인가

스프링부트란? 스프링부트(Spring Boot)는 자바의 웹 프레임워크로 기존 스프링 프레임워크(Spring Framework)에 톰캣 서버를 내장하고, 여러 편의 기능들을 추가하여 꾸준한 인기를 누리고 있는 프레임워크이다. 웹 프로그램을 쉽고 빠르게 만들어주는 프레임워크 스프링 부트는 웹 프로그램을 쉽고 빠르게 만들 수 있도록 도와주는 프레임워크이다. 웹 프레임워크 웹 프로그램을 만들기 위해서 웹 프레임워크가 없다면, 웹 프로그램을 위해 만들어야 할 기능이 정말 많다. 하지만, 웹 프레임워크를 사용하면 그런 기능들이 이미 만들어져 있기 때문에 웹 프레임워크에 있는 기능을 익혀서 사용하기만 하면 된다. 웹 프레임워크는 웹 프로그램을 만들기 위한 스타터 키트라고 생각하면 된다. 자바로 만들어진 웹 프레임워..

Spring 2023.09.28

[스프링] 스프링 핵심 원리 기본편 정리: 9. 빈 스코프

빈 스코프 빈 스코프란? 빈 스코프란, 빈이 존재할 수 있는 범위를 뜻한다. 여태까지 우리는 스프링 빈이 컨테이너의 시작과 함께 생성되어서 컨테이너가 종료될 때까지 유지된다고 학습했는데, 이는 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이다. 스프링은 싱글톤 스코프 이외에도 다양한 스코프를 지원하는데, 이는 다음과 같다. 싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고, 더는 관리하지 않는 매우 짧은 범위의 스코프 웹 관련 스코프 request: 웹 요청이 들어오고, 나갈 때까지 유지되는 스코프 session: 웹 세션이 생성되고, 종료될 때까지 유지되는 스코프 appli..

Spring 2023.09.13

[스프링] 스프링 핵심 원리 기본편 정리: 8. 빈 생명주기 콜백

빈 생명주기 콜백 빈 생명주기 콜백 시작 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다. 스프링을 통해 객체의 초기화 작업과 종료 작업을 어떻게 진행하는지 예제로 알아보자. 간단하게 외부 네트워크에 미리 연결하는 객체를 하나 생성한다고 가정하자. 실제로 네트워크에 연결하는 것은 아니고, 단순히 문자만 출력하도록 한다. 예제 코드 package hello.core.lifecycle; public class NetworkClient { private String url; public NetworkClient() { System.out.println("생성자 호출, url = " + url); connect();..

Spring 2023.09.08

[스프링] 스프링 핵심 원리 기본편 정리: 7. 의존관계 자동 주입

의존관계 자동 주입 다양한 의존관계 주입 방법 의존관계 주입에는 다음과 같은 4가지 방법이 있다. 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 생성자 주입은 생성자를 통해 의존관계를 주입받는 방법을 말하는데, 여태까지 우리가 진행했던 방법을 말한다. 특징 생성자 호출시점에 딱 한 번만 호출되는 것이 보장된다. 불변, 필수 의존관계에 사용한다. @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public Ord..

Spring 2023.09.04