JPA는 어디에 저장되나? Do it! 알고리즘 입문: 자바 편 (4)[책리뷰 & Book review]
JPA를 사용하여 데이터를 저장하는 과정을 간단한 코드와 함께 설명하겠습니다.
java
// 엔티티 매니저 팩토리 생성
EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistence-unit-name");
// 엔티티 매니저 생성
EntityManager em = emf.createEntityManager();
// 트랜잭션 시작
em.getTransaction().begin();
// 객체 생성 및 값 설정
Member member = new Member();
member.setId("member1");
member.setUsername("회원1");
// 객체 저장
em.persist(member);
// 트랜잭션 커밋
em.getTransaction().commit();
// 엔티티 매니저, 팩토리 종료
em.close();
emf.close();
위의 코드에서 em.persist(member);를 실행하면 이때 '회원 1'이라는 데이터가 영속성 콘텍스트에 저장됩니다.
이제 JPA의 작동 방식을 도식화하여 설명하겠습니다.
persist() 메소드를 호출하면, JPA는 우선 영속성 콘텍스트(Persistence Context)라는 임시 저장소에 자바 객체를 저장합니다.
트랜잭션이 커밋되는 시점에 영속성 컨텍스트에 있는 객체들을 분석하여 적절한 SQL 문을 생성합니다.
생성된 SQL 문은 데이터베이스에 전송되어 실행되고, 이에 따라 데이터베이스에 데이터가 저장됩니다.
이러한 방식으로 JPA는 자바 객체와 데이터베이스 간의 차이를 중간에서 해소해 주며,
개발자는 SQL 대신 자바 코드로 데이터를 다룰 수 있게 해줍니다.
이는 개발의 편리성을 증대시키며, 데이터베이스 종류에 따른 SQL 작성의 번거로움을 줄여줍니다.
스프링은 오픈소스이다?
스프링(Spring)은 Pivotal Software에 의해 개발되고 지속적으로 유지 관리되고 있는 오픈 소스 프레임워크입니다.
이는 자바 플랫폼을 위한 포괄적인 프레임워크로, 엔터프라이즈 애플리케이션 개발에 필요한 모든 기능을 제공합니다.
스프링의 핵심 코드는 아래와 같습니다:
java
// 스프링 애플리케이션 컨텍스트 생성
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// 빈 가져오기
MyBean myBean = context.getBean(MyBean.class);
// 빈의 메소드 실행
myBean.doSomething();
스프링 애플리케이션은 먼저 ApplicationContext라는 것을 생성합니다.
이것은 스프링 컨테이너로, 스프링 빈(스프링에서 관리하는 객체)의 생성과 관리를 담당합니다.
context.getBean(MyBean.class); 코드를 통해 스프링 컨테이너에게 MyBean 객체를 요청합니다.
MyBean은 이전에 applicationContext.xml 설정 파일에 의해 스프링 컨테이너에 등록되었습니다.
스프링 컨테이너는 요청받은 MyBean 객체를 반환합니다.
반환받은 MyBean 객체의 doSomething() 메소드를 실행합니다.
스프링은 이처럼 애플리케이션의 객체 생성과
생명주기를 관리하는 IoC(Inversion of Control) 컨테이너를 제공합니다.
이는 개발자가 직접 객체를 생성하고 연결하는 것이 아니라 스프링이 대신 관리하도록 하는 원칙입니다. 이를 통해 개발자는 비즈니스 로직에 집중할 수 있게 됩니다.
스프링 왜 MVC 패턴이란?
스프링 MVC는 웹 애플리케이션을 개발할 때 사용되는 디자인 패턴인 Model-View-Controller 패턴을 기반으로 합니다.
이 패턴은 애플리케이션의 로직을 Model, View, Controller 세 가지 컴포넌트로 분리하여 관리함으로써 코드의 재사용성과 유지보수성을 높이는 데 도움을 줍니다.
다음은 간단한 스프링 MVC 애플리케이션의 예입니다:
java
@Controller
public class HelloWorldController {
@RequestMapping("/hello")
public String hello(Model model) {
model.addAttribute("message", "Hello World!");
return "hello";
}
}
위 코드는 "/hello" URL로 요청이 들어오면 "Hello World!" 메시지를 모델에 추가하고
"hello"라는 이름의 뷰를 반환하는 컨트롤러입니다.
이 코드를 스프링 MVC의 동작 원리와 매칭하여 설명하면 다음과 같습니다:
클라이언트로부터 "/hello" URL로 요청이 들어옵니다.
스프링 MVC의 DispatcherServlet이 이 요청을 인터셉트하고, 요청 URL에 맞는 적절한 컨트롤러를 찾습니다.
이 경우 "HelloWorldController"의 "hello" 메서드가 선택됩니다.
"hello" 메소드에서는 Model 객체에 "message"라는 이름으로 "Hello World!" 문자열을 추가합니다.
"hello" 메소드는 이후 "hello"라는 이름의 뷰를 반환합니다.
DispatcherServlet은 ViewResolver를 사용하여 "hello"라는 뷰 이름을 실제 뷰로 매핑합니다.
일반적으로 이는 JSP 파일이나 Thymeleaf 템플릿 등이 될 수 있습니다.
최종적으로 뷰는 모델 데이터를 사용하여 HTML을 생성하고 클라이언트에게 응답합니다.
jpa에서 fetch와 join는 무엇인가?
JPA에서 Fetch와 Join은 엔티티 간 관계를 처리하는 방법에 대해 설명하는 용어입니다.
Fetch: JPA에서는 엔티티 간에 관계가 있을 때, 한 엔티티를 조회할 때 관련된 엔티티를 어떻게 가져올지(Fetch) 정의할 수 있습니다.
이는 @ManyToOne, @OneToMany, @OneToOne, @ManyToMany 어노테이션에 fetch 속성을 사용하여 설정할 수 있습니다.
Fetch 전략에는 EAGER(즉시 로딩)와 LAZY(지연 로딩)가 있습니다.
java
@Entity
public class Order {
@Id
@GeneratedValue
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "MEMBER_ID")
private Member member;
//...
}
위의 코드에서 FetchType.LAZY는 주문(Order)을 조회할 때 회원(Member) 정보를 바로 로딩하지 않고,
회원 객체가 실제로 사용될 때 로딩하겠다는 의미입니다.
Join: JPA의 JPQL에서는 SQL과 유사하게 Join 연산을 지원합니다. 이를 통해 관련된 엔티티를 함께 조회할 수 있습니다.
java
String jpql = "select o from Order o join o.member m";
List<Order> resultList = em.createQuery(jpql, Order.class).getResultList();
위의 코드에서 join o.member m는 Order와 Member를 조인하여 조회하겠다는 의미입니다.
따라서, JPA에서 Fetch와 Join은 엔티티 간의 관계를 처리하는 데 있어 중요한 역할을 합니다.
Fetch 전략은 성능 최적화에 중요한 역할을 하며, Join은 필요한 데이터를 효과적으로 조회하기 위해 사용됩니다.
이 두 개념을 적절하게 활용하면 JPA를 통한 데이터 처리가 보다 효율적이게 됩니다.
계열사와 자회사는 무엇인가?
계열사와 자회사는 모두 어떤 회사가 다른 회사에 대해 경영 지배력을 가지고 있는 관계를 나타내는 용어입니다. 그러나 두 용어는 경영 지배력의 정도와 범위에 따라 다르게 사용됩니다.
자회사: 어떤 회사(A 회사)가 다른 회사(B 회사)의 주식의 과반수를 소유하고 있어 B 회사의 경영에 대해 지배력을 행사할 수 있는 경우, B 회사를 A 회사의 '자회사'라고 합니다. 예를 들어, 삼성전자는 하림의 주식 52.73%를 소유하고 있으므로 하림은 삼성전자의 자회사입니다.
계열사: 계열사는 특정 회사가 직접적으로 또는 간접적으로 경영에 관여하고 있는 회사를 의미합니다.
즉, 특정 회사와 자회사 관계에 있거나,
특정 회사와 같은 모기업 아래 있는 회사를 '계열사'라고 부릅니다.
예를 들어, 삼성전자와 삼성 SDS는 모두 삼성물산이라는 동일한 모기업 아래에 있으므로 서로 계열사 관계에 있습니다.
즉, 자회사는 보다 명확한 지배 관계를 나타내는 반면, 계열사는 경영에 대한 영향력이 있는 회사 전반을 포괄하는 용어라고 볼 수 있습니다.
'컴퓨터공부 > 책리뷰 & book review' 카테고리의 다른 글
Do it! 알고리즘 입문: 자바 편 (6)[책리뷰 & Book review] (1) | 2024.01.30 |
---|---|
Do it! 알고리즘 입문: 자바 편 (5)[책리뷰 & Book review] (1) | 2024.01.30 |
Do it! 알고리즘 입문: 자바 편 (3)[책리뷰 & Book review] (1) | 2024.01.29 |
Do it! 알고리즘 입문: 자바 편 (2)[책리뷰 & Book review] (0) | 2024.01.29 |
댓글