본문 바로가기

김영한17

[JPA] 고급 매핑 상속관계 매핑 · 관계형 데이터베이스는 상속 관계 X · 슈퍼타입, 서브타입 관계라는 모델링 기법이 객체 상속과 유사 · 상속관계 매핑: 객체의 상속과 구조와 DB의 슈퍼타입, 서브타입 관계를 매핑 · 슈퍼타입, 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 - 각각 테이블로 변환 → 조인 전략 - 통합 테이블로 변환 → 단일 테이블 전략 - 서브타입 테이블로 변환 → 구현 클래스마다 테이블 전략 주요 어노테이션 · @Inheritance(strategy = InheritanceType.XXX) - JOINED: 조인전략 - SINGLE_TABLE: 단일 테이블 전략 - TABLE_PER_CLASS: 구현 클래스마다 테이블 전략 · @DiscriminatorColumn(name = "DTYPE").. 2023. 10. 31.
[DataBase] JPA / Spring Data JPA JPA란? - Java Persistence API - 자바 진영의 ORM 표준 기술 - JPA는 인터페이스 모음 - Hibernate, EclipseLink, DataNucleus 3가지 구현체 사용 JPA를 사용해야 하는 이유 - SQL 중심적인 개발에서 객체 중심으로 개발 - 생산성, 유지보수 편리함 / 성능 최적화 기능 1. 1차 캐시와 동일성(identity) 보장 2. 트랜잭션을 지원하는 쓰기 지연 3. 지연 로징(Lazy Loading) - 패러다임 불일치 해결 JPA - CRUD - Create(저장): jpa.persist(. . .) - Read(조회): jpa.find(. . .) - Update(수정): member.setName(". . .") - Delete(삭제): jpa.re.. 2023. 10. 3.
[DataBase] 데이터 접근 기술 - 테스트 테스트 - 데이터베이스 분리 로컬에서 사용하는 애플리케이션 서버와 테스트에서 같은 데이터베이스를 사용하면 테스트에서 문제가 발생한다. 이를 해결하기 웨해 테스트를 다른 환경과 철저하게 분리해야 한다. 가장 간단한 방법으로는 테스트 전용 데이터베이스를 별도로 운영하는 것이다. 테스트에서 매우 중요한 원칙 1. 테스트는 다른 테스트와 격리해야 한다. 2. 테스트는 반복해서 실행할 수 있어야 한다. 테스트가 끝날 때마다 추가한 데이터에 DELETE SQL을 사용해도 되지만, 가장 좋은 방법은 트랜잭션, 롤백이다. 테스트 - 데이터 롤백 테스트가 끝나고 트랜잭션을 강제로 롤백해버리면 데이터가 제거된다. 테스트를 하면서 데이터를 이미 저장했는데, 중간에 테스트가 실패해 롤백을 호출하지 못해도 트랜잭션을 커밋하지 .. 2023. 9. 25.
[DataBase] 트랜잭션 (Transaction)2 애플리케이션 구조 애플리케이션은 3가지 계층으로 나눌 수 있다. Controller, Service, Repository 프레젠테이션 계층 (Controller) - UI와 관련된 처리 담당 - 웹 요청과 응답 - 사용자 요청을 검증 - 사용 기술: Servlet, HTTP 같은 웹 기술, 스프링 MVC 서비스 계층 (Service) - 비즈니스 로직 담당 - 사용 기술: 특정 기술에 의존하지 않고, 순수 자바 코드로 작성 데이터 접근 계층(Repository) - 실제 데이터베이스에 접근하는 코드 - 사용 기술: JDBC, JPA, File, Redis, Mongo ... 이 중 가장 중요한 곳은 서비스 계층이다. 서비스 계층은 시간이 흘러 UI(웹)와 관련된 부분이 변하고, 데이터 저장 기술이 다른 .. 2023. 9. 19.
[DataBase] JDBC란? JDBC 이해 JDBC 등장 이유 애플리케이션을 개발할 때 중요한 데이터는 대부분 데이터베이스에 보관한다. 클라이언트가 애플리케이션 서버를 통해 데이터를 저장하거나 조회하면, 애플리케이션 서버는 다음 과정을 통해 데이터베이스를 사용한다. 1. 커넥션 연결: 주로 TCP/IP를 사용해서 커넥션을 연결한다. 2. SQL 전달: 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달한다. 3. 결과 응답: DB는 전달된 SQL을 수행하고 그 결과를 응답한다. 애플리케이션 서버는 응답 결과를 활용한다. 각각의 데이터베이스마다 커넥션을 연결하는 방법, SQL을 전달하는 방법, 그리고 결과를 응답 받는 방법이 모두 다르다. 1. 데이터베이스를 다른 종류의 데이터베이스로 변경하면 애플리.. 2023. 9. 13.
[MVC 패턴] 로그인 처리1 - 쿠키, 세션 로그인 처리하기 - 쿠키 사용 로그인 상태를 유지하기 위한 방법에는 쿼리 파라미터를 계속 유지하면서 보내는 방법이 있다. 하지만 이 방법은 매우 어렵고 번거로운 작업이기 때문에 쿠키를 사용한다. 서버에서 로그인에 성공하면 HTTP 응답에 쿠키를 담아서 브라우저에 전달 후 브라우저는 해당 쿠키를 지속해서 보내준다. 쿠키 종류 쿠키에는 영속 쿠키와 세션 쿠키가 존재한다. 영속 쿠키: 만료 날짜를 입력하면 해당 날짜까지 유지 세션 쿠키: 만료 날짜를 생략하면 브라우저 종료시 까지만 유지 브라우저 종료시 로그아웃 되길 원하므로, 세션 쿠키가 필요하다. 쿠키 생성 로직 //쿠키에 시간 정보를 주지 않으면 세션 쿠키(브라우저 종료시 모두 종료) Cookie idCookie = new Cookie("memberId".. 2023. 8. 29.
[MVC 패턴] 타임리프 (Thymeleaf) 타임리프 (Thymeleaf) 타임리프는 컨트롤러가 전달하는 데이터를 이용해 동적으로 화면을 만들어주는 역할을 하는 뷰 템플릿 엔진이다. 타임리프 특징 서버 사이드 HTML 렌더링 (SSR) - 타임리프는 백엔드 서버에서 HTML을 동적으로 렌더링하는 용도로 사용된다. 내츄럴 템플릿 - 타임리프는 순수 HTML을 최대한 유지하려는 특징이 있다. - 순수 HTML을 그대로 유지하면서 뷰 템플릿도 사용할 수 있는 타임리프의 특징을 의미한다. 스프링 통합 지원 - 타임리프는 스프링과 자연스럽게 통합되고, 스프링의 다양한 기능을 편리하게 사용할 수 있게 지원한다. 타임리프 기본 기능 타임리프 사용 선언 기본 표현식 간단한 표현: 변수 표현식: ${. . .} 선택 변수 표현식: *{. . .} 메시지 표현식: .. 2023. 8. 16.
[MVC 패턴] MVC 프레임워크 만들기 프론트 컨트롤러 (Front Controller) 프론트 컨트롤러 패턴 특징 - 프론트 컨트롤러 서블릿 하나로 클라이언트의 요청을 받음 - 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출 - 입구가 하나, 공통 처리 가능 - 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 됨 - DispatcherServlet이 Front Controller 패턴으로 구현되어 있음 뷰 리졸버 (View Resolver) - MyView view = viewResolver(viewName): 컨트롤러가 반환한 논리 뷰 이름을 실제 물리 뷰 경로로 변경한다. 실제 물리 경로가 있는 MyView 객체를 반환한다. - 뷰 객체를 통해 HTML 화면을 렌더링 한다. - 뷰 객체의 render()는 모델 .. 2023. 8. 12.
[MVC 패턴] JSP / MVC 패턴 JSP - 자바의 import 문과 같다 - 이 부분에는 자바 코드를 입력할 수 있다. - 이 부분에는 자바 코드를 출력할 수 있다. [MVC 패턴] 서블릿 (Servlet) @ServletComponentScan @SpringBootApplication public class ServletApplication{ public static void main(String[] args){ SpringApplication.run(ServletApplication.class, args); } } 스프링 부트는 서블릿을 직접 등록해서 사용할 수 있도록 @S wodlszz.tistory.com 이 전에 정리한 서블릿 (Servlet)과 JSP는 몇가지 한계점을 가지고 있다. 서블릿으로 개발할 때는 뷰(view)화면을.. 2023. 8. 9.
[MVC 패턴] 서블릿 (Servlet) @ServletComponentScan @SpringBootApplication public class ServletApplication{ public static void main(String[] args){ SpringApplication.run(ServletApplication.class, args); } } 스프링 부트는 서블릿을 직접 등록해서 사용할 수 있도록 @ServletComponentScan을 지원한다. package hello.servlet.basic; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import jav.. 2023. 8. 8.