백엔드 36

[JPA] 연관관계 주인이 필요한 이유

연관관계의 주인이 필요한 이유는 무엇일까요? 객체 지향의 패러다임과 데이터베이스의 패러다임에 차이가 있기 때문입니다. 단방향과 양방향 매핑과 관련해 각 패러다임의 차이를 이해하면 연관관계의 주인이 필요한 이유를 알 수 있습니다. 목차 1. 단방향과 양방향 2. 연관관계의 주인 3. 주의사항 JPA 단방향과 양방향 데이터베이스 테이블은 외래 키 하나로 양쪽 테이블 조인이 가능합니다. 하지만 객체는 참조용 필드가 있는 객체만 다른 객체를 참조하는 것이 가능합니다. 따라서 두 객체 사이에 하나의 객체만 참조용 필드를 갖고 참조하면 단방향, 두 객체 모두가 각각 참조용 필드를 갖고 참조하면 양방향 관계라고 합니다. 실제로 양뱡향 관계라는 것은 두 객체가 단방향 참조를 각각 가져 양방향 관계처럼 사용한다는 의미입..

백엔드/JPA 2022.08.11

[JPA] 영속성 컨텍스트 정리

[JPA] 영속성 컨텍스트 정리 목차 1. 영속성 컨텍스트 개요 2. 영속성 컨텍스트의 장점 3. flush 영속성 컨텍스트 개요 개념 엔티티를 영구 저장하는 환경이라는 뜻으로, 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 1차 캐시 역할을 한다. 엔티티 매니저를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저가 영속성 컨텍스트에서 엔티티를 관리한다. 엔티티 생명주기 1) 비영속(new/transient) 영속성 컨텍스트와 전혀 관계없는 새로운 상태의 엔티티 Member member = new Member(); 2) 영속(managed) 영속성 컨텍스트에서 관리되는 상태 Member member = new Member(); EntityManager em = emf.createEntityManage..

백엔드/JPA 2022.08.05

[Spring] 상품 상세, 등록폼, 등록 처리, 상품 수정

목차 1. 상품 상세 2. 상품 등록 폼 3. 상품 등록 처리(PRG) 4. 상품 수정 폼 5. 상품 수정 도메인 Item.class package spring.mvc.web.domain; import lombok.Data; @Data public class Item { private long id; private String itemName; private Integer price; private Integer quantity; public Item() { } public Item(String itemName, Integer price, Integer quantity) { this.itemName = itemName; this.price = price; this.quantity = quantity; }..

백엔드/Spring 2022.07.28

[Spring] 타임리프 실습

목차 1. 타임리프 문법 2. 관련 클래스 3. html, css 타임리프 문법 1) 타임리프 사용 선언 2) 타임리프 속성 변경 th:href="@{/css/bootstrap.min.css}" // 타임리프 속성 변경 href="../css/bootstrap.min.css" // 기존 타임리프 뷰 템플릿을 거치게 되면 서버렌더링을 통해 원래 값을 th:xxx로 변경하게 된다. 3) URL 링크 표현식 - @{...} th:href="@{/css/bootstrap.min.css}" 타임리프는 URL링크 사용시 @{...}를 사용한다. 이를 링크 표현식이라고 한다. 4) 상품 등록 폼으로 이동 속성 변경 th:onclick onclick="location.href='addForm.html'" // 기존 t..

백엔드/Spring 2022.07.26

[Spring] 스프링 HTTP 응답 하기

목차 1. 응답 - 정적 리소스, 뷰 템플릿 2. 응답 - HTTP API, 바디에 직접 입력 3. HTTP 메시지 컨버터 4. 요청 매핑 핸들러 어댑터 구조 응답 - 정적 리소스, 뷰 템플릿 스프링에서 응답 데이터를 만드는 방법은 총 3가지이다. 1) 정적 리소스 스프링 부트에서는 /static, /publc, /resources, /META-INF/resources 정보를 제공한다. src/main/resources는 리소스를 보관하는 곳이면서, 클래스 패스의 시작경로인 것이다. 따라서 위의 디렉토리에 리소스를 넣어두면 스프링 부트가 정적 리소스로 서비스를 제공하게 된다. 정적 리소스 경로 src/main/resources/static 만약 아래와 같은 경로에 파일이 있다고 하자 src/main/re..

백엔드/Spring 2022.07.22

[Spring] 스프링 HTTP 요청 받기

목차 1.로거 2. 요청 매핑 3. HTTP 요청 - 기본, 헤더 조회 4. HTTP 요청 파라미터 - 쿼리 파라미터, HTML Form 5. HTTP 요청 파라미터 - @RequestParam 6. HTTP 요청 파라미터 - @ModelAttribute 7. HTTP 요청 메시지 - 단순 텍스트 8. HTTP 요청 메시지 - JSON 로거 개요 스프링 부트 라이브러리에는 logging이 포함되어있다. 기본적으로 SLF4J와 Logback 라이브러리를 사용한다. 로그 라이브러리에는 여러가지가 있는데, 이를 통합해 인터페이스로 제공하는 것이 SLF4J 라이브러리이다. 사용법 로그 선언 private Logger log = LoggerFactory.getLogger(getclass()); @Slf4j 롬복 ..

백엔드/Spring 2022.07.22

[Spring] 스프링 MVC - 구조 이해

목차 1. 스프링 구조 2. 컨트롤러 통합하기 3.실용적인 방식 1. 스프링MVC 구조 1) 개요 스프링은 위의 사진처럼 동작한다 . 동작 순서 1.핸들러 조회: 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회한다. 2. 핸들러 어댑터 조회: 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다. 3.핸들러 어댑터 실행 4. 핸들러(컨트롤러) 실행 5. ModelView 반환: 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelView로 변환 후 반환한다. 6. viewResolver호출: 뷰 리졸버를 찾고 실행한다. 7. view 반환: 뷰 리졸버는 뷰의 논리 이름을 물리이름으로 바꾸고, 렌더링 역할을 담당하는 뷰 객체를 반환한다 8. 뷰 렌더링: 뷰를 렌더링한다. 현재의 스프링은 어노테..

백엔드/Spring 2022.07.11

[Spring] MVC 패턴 핸들러, 어댑터

목차 1. 핸들러 2. 어댑터 1. 핸들러 1) 개요 웹 요청을 실제로 처리하는 객체를 핸들러라고 한다. 핸들러에는 여러 종류가 있을 수 있다. 따라서 특정 핸들러를 찾기 위해 핸들러 매핍 정보를 통해 핸들러를 조회하게 된다. 아래의 코드를 보자 private final Map handlerMappingMap = new HashMap(); public FrontControllerServletV5() { //핸들러 맵핑 정보 handlerMappingMap.put("/front-controller/v5/v3/members/new-form", new MemberFormControllerV3()); handlerMappingMap.put("/front-controller/v5/v3/members/save", ..

백엔드/Spring 2022.06.14

[Spring] FrontController로 View분리, Model 추가 등 실습해보기 예제

목차 1. 프론트 컨트롤러 2. View 분리 3. Model 추가 4. 단순하고 실용적인 컨트롤러 구현하기 1. 프론트 컨트롤러 1) 개요 프론트 컨트롤러 도입 전 프론트 컨트롤러 도입 후 프론트 컨트롤러 서블릿 하나로 클라이언트의 요청을 받고, 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출하는 구조이다. 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 된다. 스프링의 DispatcherServlet이 바로 FrontController 패턴으로 구현되어 있다. 2) 도입 구조 2) 코드 예제 먼저 인터페이스로 전송과 저장을하는 컨트롤러를 구현한다. ControllerV1.interface public interface Controller1 { void logic(HttpSer..

백엔드/Spring 2022.06.11

[Spring] 서블릿, MVC 패턴

목차 1. 서블릿으로 회원 관리 앱 만들기 2. MVC 패턴 1. 서블릿으로 회원 관리 앱 만들기 1) 개요 간단히 회원을 저장하고 출력하는 앱을 만들기를 코드를 통해 알아보자. 2) 간단 코드 예제 Member.class @Setter @Getter public class Member { private Long id; private String name; private int age; } MemberRepository.class public class MemberRepository { private static Map database = new HashMap(); private static long sequence = 0L; private static final MemberRepository insta..

백엔드/Spring 2022.06.10
728x90