2024/09 25

단방향, 양방향 매핑

JPA는 객체지향적 접근 방식이다.SQL은 데이터베이스의 테이블 간 관계를 정의하는 언어이다. 테이블과 테이블의 관계는 외래 키를 통해 설정되며, 주로 데이터베이스 관점에서 관리된다.JPA는 객체 간의 관계를 정의하는 자바의 ORM(객체-관계 매핑) 기술이다. JPA에서는 클래스와 객체를 사용해 테이블과 데이터 간의 관계를 표현한다.둘의 중요한 차이점은 SQL은 테이블 간의 관계를 직접 정의하는 반면, JPA는 객체지향적인 관계를 통해 테이블 간의 관계를 간접적으로 정의한다는 점이다. JPA 사용해 보기package com.example.demo.model;import jakarta.persistence.Entity;import jakarta.persistence.GeneratedValue;import ..

Spring boot 2024.09.30

영속성 컨텍스트

영속성 컨텍스트(Persistence Context)엔티티 객체들을 관리하고, 데이터베이스와의 상태를 동기화하는 일종의 저장소.쉽게 말해, 애플리케이션이 실행되는 동안 데이터베이스에서 가져온 엔티티 객체들을 임시로 보관해 두는 메모리 공간이다.이 공간에 있는 객체들은 "영속 상태"로 관리되며, 이 상태에 있는 동안 엔티티 객체의 변화는 자동으로 데이터베이스에 반영된다. 즉, 이것이 있기 때문에 데이터베이스에서 효과적으로 데이터를 가져올 수 있고, 엔티티를 편하게 사용할 수 있다. 핵심 키워드영속성 컨텍스트 : 엔티티 객체들을 관리하고, 데이터베이스와 동기화하는 임시 저장소.영속 상태 : 영속성 컨텍스트에 의해 관리되는 상태로, 데이터베이스와의 동기화가 이루어진다.추가적인 설명을 한다면 영속성 컨텍스트는 ..

Spring boot 2024.09.30

엔티티 매니저

키워드 정리엔티티(Entity) : 데이터베이스 테이블과 매핑되는 자바 클래스엔티티 매니저(Entity Manager) : 엔티티의 생명주기를 관리하며, CRUD 작업을 수행한다.엔티티 매니저 팩토리(Entity Manager Factory) : 엔티티 매니저를 생성하는 팩토리로, 스프링 부트 애플리케이션에서 한 번만 생성된다.코드 상에서의 엔티티 선언 형태@Entitypublic class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String email; // 기본 생성자 public User() {} // ..

Spring boot 2024.09.30

JPA 와 하이버네이트

DBMS에 여러 종류가 있듯이, ORM에도 여러 종류가 있다. 자바에서는 JPA(Java Persistence API)를 표준으로 사용한다. 즉, JPA는 자바 진영에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스이다. 그러나 실제로 DB와 상호작용하려면 이 인터페이스를 구현한 구체적인 도구가 필요하다. 그 대표적인 구현체로는 Hibernate가 많이 사용된다. Hibernate는 JPA 스펙을 구현한 자바용 ORM 프레임워크로, 스프링 부트 프로젝트에서 ORM을 구현할 때 자주 사용되는 도구이다. JPA(Java Persistence API)자바 객체와 관계형 데이터베이스를 연결하여 데이터를 관리하는 표준 API이다. JPA는 객체 지향 도메인 모델과 데이터베이스 간의 중간 역할을 하며, 데..

Spring boot 2024.09.30

스프링 부트 DB 접근 기술 ORM

ORM(object-relational mapping)자바의 객체와 데이터베이스를 연결하는 프로그래밍 기법이다.예를 들어, RDBMS에 name과 grade라는 컬럼에 각각 '고길동'과 '3'이라는 값이 들어있다고 생각해보자. 이 값을 자바 코드에서 사용하려면 JDBC API를 포함한 다양한 설정과 사전 지식이 필요하다. 또한, SQL에 대한 공부도 필수적이다. 하지만 ORM을 사용하면 데이터베이스에 존재하는 값들을 마치 자바 객체처럼 사용할 수 있다. 쉽게 말해, SQL을 전혀 몰라도 자바 언어로만 데이터베이스에 접근하여 값을 받아와 사용할 수 있다. 즉, 객체와 데이터베이스를 자바 언어로만 다룰 수 있게 하는 기술이 바로 ORM이다. 물론 이 기술은 자바뿐만 아니라 다양한 언어에서도 제공된다.ORM ..

Spring boot 2024.09.30

PUT 방식의 이해 및 실습

PUT 방식은 HTTP 메서드 중 하나로, 리소스를 생성하거나 업데이트할 때 사용된다. 주로 RESTful API에서 특정 리소스를 완전히 대체하거나 수정할 때 사용된다. 주요 특징전체 업데이트PUT 요청은 클라이언트가 서버에 특정 리소스의 전체 데이터를 보내 해당 리소스를 완전히 대체하거나 새로 생성하는 요청이다. 즉, 리소스의 일부가 아닌 전체 데이터를 전송하여 갱신한다.멱등성PUT 요청은 멱등성을 가진다. 즉, 동일한 요청을 여러 번 보내도 결과가 동일하다. 예를 들어, 동일한 데이터를 PUT 요청으로 여러 번 보내도 리소스 상태는 변하지 않는다.리소스 식별PUT 요청은 URL을 통해 업데이트할 리소스를 명확히 식별한다. 예를 들어, /users/1 URL로 PUT 요청을 보내면, ID가 1인 사용..

Spring boot 2024.09.27

GET 방식과 URL 주소 설계

멱등성(Idempotency)이란 같은 작업을 여러 번 수행해도 결과가 달라지지 않는 성질을 의미한다. 이 개념은 특히 HTTP 메서드나 데이터베이스 연산에서 자주 사용된다.멱등성을 가짐 (GET, PUT, DELETE)비 멱등성을 가짐 (POST)멱등성의 의미- 안정성 : 멱등성을 가진 연산은 중복 요청에 대해 안전하다. 네트워크 문제로 인해 동일한 요청이 여러 번 전달되더라도, 최종 결과는 변하지 않으므로 안전하게 처리할 수 있다.- 데이터 일관성 : 멱등성은 시스템이 일관된 상태를 유지하도록 도와준다. 특히, 분산 시스템에서 동일한 작업이 여러 번 실행될 가능성이 있을 때, 멱등성은 데이터 무결성을 보장한다. 쿼리 스트링(Query String)과 경로 매개변수(Path parameter)는 모두 ..

Java 2024.09.27

스프링 부트의 간단한 요청과 응답 동작 방식

그림으로 요약한 요청과 응답의 흐름클라이언트 측에서 /user로 GET 요청을 한다. 이 요청은 톰캣을 거쳐 스프링 부트 애플리케이션으로 전달된다.이때, 스프링 부트의 디스패처 서블릿(DispatcherServlet)이 요청을 받는다. 디스패처 서블릿은 요청된 URL을 분석하고, 이를 처리할 수 있는 컨트롤러와 해당 메서드를 찾는다.컨트롤러에서 비즈니스 로직이 필요한 경우, 비즈니스 계층(Service) 및 퍼시스턴스 계층(Repository)을 통해 데이터를 처리한다.응답 과정에서 MIME 타입(예: JSON, HTML, XML 등)에 따라 다음과 같이 응답 방식이 달라진다.JSON, XML 등 데이터 포맷으로 응답해야 하는 경우, 메시지 컨버터가 작동한다. 예를 들어, @RespponseBody가 붙..

Spring boot 2024.09.27

스프링 부트의 웹 애플리케이션 구조

1. MVC 패턴MVC 패턴은 애플리케이션의 기능을 세 가지 역할로 분리하는 구조이다.Model(모델) : 데이터와 비즈니스 로직을 관리한다.View(뷰) : 사용자에게 데이터를 시각적으로 보여준다.Controller(컨트롤러) : 사용자의 요청을 받아 모델을 처리하고, 결과를 뷰에 전달한다.이 패턴은 애플리케이션의 UI 로직과 데이터 처리 로직을 분리하여 코드의 가독성을 높이고, 유지보수를 쉽게 한다. 2. 레이어드 아키텍처(계층 구조)레이어드 아키텍처는 애플리케이션을 세 가지 주요 계층으로 나누어 각각의 책임을 명확히 하는 구조를 말한다. 1. 프레젠테이션 계층(Presentaion Layer)역할 : 사용자와 상호작용하는 계층으로, HTTP 요청을 받아 이를 비즈니스 계층으로 전달하고, 비즈니스 계..

Spring boot 2024.09.27

전략 패턴

사전 기반 지식인터페이스와 다형성 : 인터페이스를 사용하여 서로 다른 구현체를 동일하게 처리하는 개념을 이해해야 한다.메서드 오버라이딩 : 상위 클래스나 인터페이스에서 정의된 메서드를 하위 클래스에서 재정의하여 사용하는 방법을 알고 있어야 한다.전략 패턴(Strategy Pattern)동작 방식을 캡슐화하여, 동적으로 전략을 변경할 수 있도록 하는 디자인 패턴.특정 기능을 수행할 여러 방법이 있을 때, 그 방법들을 전략(클래스)으로 정의하고, 필요에 따라 적절한 전략을 선택하여 사용할 수 있다.package strategy;import java.util.Base64;public class StrategyTest { public static void main(String[] args) { ..

Java 2024.09.27