
'기억보단 기억을' 블로그를 참고하여 작성하였습니다. 해당 프로젝트는 Java로 작성되어있으나 필자는 Kotlin 방식으로 작성하였습니다. 스프링 배치 메타 데이터 테이블 구조 각 테이블이 어떠한 역할을 하고 어떠한 데이터를 갖고 있는지 설명해본다. 1. BATCH_JOB_INSTANCE 해당 테이블에 쿼리를 보내보면 하나의 로우가 조회된다. JOB_INSTANCE_ID `BATCH_JOB_INSTANCE 테이블`의 PK JOB_NAME 수행한 Batch Job 이름 실제로 방금 실행했던 batchJob의 이름이 들어있다. 이때, BATCH_JOB_INSTANCE 테이블은 Job Parameter에 따라 생성되는 테이블이다. 이 Job Parameter는 생소한 부분인데, Sprint Batch가 실행될..

'기억보단 기억을' 블로그를 참고하여 작성하였습니다. 해당 프로젝트는 Java로 작성되어있으나 필자는 Kotlin 방식으로 작성하였습니다. 1. 프로젝트 생성 start.spring.io를 통해 생성 Kotlin Gradle Spring Boot 2.7.1 Java 17 라이브러리 spring data jpa spring batch h2 DB lombok mysql 이렇게 애플리케이션을 생성하면 아래와 같은 build.gradle 파일이 생성된다. import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id("org.springframework.boot") version "2.7.1" id("io.spring.dependency-manageme..

Paging 페이징은 말그대로 Page화 하는 것이다. 조회 결과가 매우 많은 경우 일정한 크기를 갖는 페이지로 조회 목록을 쪼개는 것이다. 따라서 채팅, 검색 결과 등 조회 결과가 매우 많은 곳에서 유용하게 사용될 수 있다. 이러한 기능을 Spring Data Jpa에서 Pageable이라는 이름으로 제공하고 있다. 페이지 조건을 줄 때는 주로 Size, Page, Sort 3가지 값을 필요로 한다. Size는 Page의 개수를 의미한다. 즉 100개의 목록이 있을 때 size가 9라면 12개의 페이지가 생성되고 마지막 페이지에는 1개의 목록만이 있게 된다. Page는 생성된 페이지를 접근할 때 사용하는 인덱스이다. 0번부터 시작한다. Sort는 페이지를 자르기 전에 먼저 목록을 정렬하고 자를 수 있는..

레포지토리 기본적으로 데이터를 DB에 저장하기 위해서 레포지토리 클래스가 존재한다. 직접 데이터베이스에 CRUD를 하는 계층이다. 다만, JPA를 사용하지 않았을 경우 직접 쿼리도 작성해야하고, 매개변수도 받아줘야 하는 불편함이 존재한다. JPA를 사용하지 않는 경우 레포지토리 @Repository public class BookRepo { @PersistenceContext EntityManager em; public void save(Book book) { em.persist(book); } public Book findByName(String name) { return em.createQuery("select b from Book b where b.name = :name", Book.class) ...

연관관계 매핑 객체와 관계형 데이터베이스 테이블을 서로 매핑하는 것 연관관계를 매핑할 때 생각해야할 3가지가 존재한다. 방향 : 단방향, 양방향 (객체 간의 참조) 다중성 : 일대일, 일대다, 다대일, 다대다 연관관계의 주인 : 양방향일 때 연관관계에서 관리의 주체가 되는 곳 단방향, 양방향 데이터베이스에서 테이블들은 외래키 하나를 가지로 양 쪽 테이블 조인이 가능하다. 따라서 DB에서는 단방향이니 양방향이니 나눌 필요가 없다. 하지만 객체는 참조용 필드가 있는 객체만이 다른 객체를 참조하는 것이 가능하다. 따라서 두객체 사이에 하나의 참조용 필드만을 가지고 참고하게 되면 단방향 관계이고, 두 객체 모두가 참조용 필드를 갖고 참조하면 양방향 관계가 된다. 정확히 말하면 단방향 관계 하나만 가지냐 or 단..
JPA는 앞에서 말했듯이 객체와 DB를 연결해주는 ORM이다. 따라서 객체와 DB에 저장될 테이블간의 연결을 제대로 해주는것이 가장 중요하다. 이때 매핑을 위해 사용되는 것들이 애노테이션이다. 객체와 테이블 매핑 @Entity @Table 기본 키 매핑 @Id 필드와 컬럼 매핑 @Column @GeneratedValue @Enumerated 연관관계 매핑 @OneToOne @OneToMany @ManyToOne @ManyToMany (있긴하지만 사용을 지양해야한다.) 몇가지 더 있지만 대표적인 애노테이션들부터 정리해보겠다. 아래 Member Entity를 생각하며 읽어보자. @Entity @Getter @Builder @NoArgsConstructor @AllArgsConstructor @Table(na..

JPA란? Jpa는 Java Persistence API 의 약자로 자바 영속성 API를 말한다. JDBC를 이용해서 데이터 베이스를 관리하는 인터페이스이고 이를 구현한 구현체로 대표적인것이 HIbernate이다. 자바 ORM 기술의 표준 API 이다. (Object Relational Mapping) Q. 그렇다면 Spring은 왜 JPA를 만들었을까? 과거에는 SQL 쿼리 중심적인 프로그래밍을 해왔었다. 이러한 방식에는 두가지 문제점이 존재했는데 1. SQL에 의존적인 프로그래밍 2. SQL과 객체사이의 패러다임 불일치 문제가 존재했다. 이를 해결하기 위해 등장했다. 예1) 엔티티 객체가 있고 이를 CRUD들을 하는 쿼리들이 여러개 있다고 하자. 이때 객체의 프로퍼티가 추가되거나 삭제되었다고 하면 각..
MVC 패턴 구조 Model, View, Controller로 구성된다. Controller는 HTTP 요청을 받아서 처리하는 역할을 한다. 요청이 오면 서비스 로직을 수행(호출)하고 응답 결과를 Model에 담는다. Controller가 비지니스 로직을 수행하기 위해 Service 단의 로직을 호출하고 응답 결과를 Model에 전달하게 된다. Model은 View에 출력할 데이터를 담아두는 역할을 한다. Controller가 구현 로직을 전담하므로 Model에서는 구현 방법에 대해 몰라도 되고, View는 필요한 데이터를 Model에서 바로 가져다 사용하면 된다. View는 모델에 담겨있는 데이터를 가져다가 화면을 그리는 일에 집중한다. Java 구현 코드를 넣을 필요가 없어지고 HTML에 집중할 수 ..
JSP - Java Server Page Servlet 만을 가지고 HTML 화면을 만들어내는 것이 매우 힘든 작업이므로 (문자열로 타이핑해서 만들어야 한다) HTML 코드에 자바 코드를 넣을 수 있는 방식을 개발한 것이다. HTML 코드의 자동완성 및 디버깅을 용이하게 할 수 있으며 서블릿의 response, request 인자를 그대로 사용할 수 있다. 또한 자바 객체를 import 해서 사용할 수 있으며, 자바 코드를 넣을 수 있다. JSP 확장자 HTML은 맨위에 language="java"를 꼭 넣어줘야 한다. 회원가입 JSP를 이용해서 HTTP Form을 생성한다. Servlet 에서 만들지 않고 HTML 파일 자체로 만들 수 있다. username: age: 전송 회원저장 자바 구현 코드..

Servlet만을 사용해서 회원 관리 구현 요청과 응답을 서블릿을 이용해서 처리할 수 있다. 이를 이용해서 구현해본다. 서블릿으로 요청 메시지, 응답 메시지, 조회 결과 등을 구현한다. 모든 요청/응답 HTTP 메시지의 Header 정보 및 Body 값을 자바 코드로 세팅해줘야 한다. 회원 저장 요청 FORM 서블릿 저장한 회원의 정보를 받는 HTML FORM을 만들어야 한다. 이를 위한 서블릿을 생성한다. HTML로 POST 형식의 Form을 만들 것이므로 ContentType은 text/html 로 하고 인코딩은 utf-8로 한다. Form은 HTML 코드를 문자열로 생성한다. @WebServlet(name = "memberFormServlet", urlPatterns = "/servlet/membe..

서블릿 응답 클라이언트로 부터 온 요청을 담당하는 서블릿이 request를 처리하고 response를 보낸다. 이 response도 HTTP 프로토콜로서 형식을 만들어줘야 한다. 직접 문자열을 만들어서 반환해도 되지만 상상만해도 머리가 아프다. 이거를 서블릿이 필요한 값만 전달해주면 알아서 응답 메시지로 만들어서 반환해 준다. 응답코드, 응답 형식, 인코딩 설정, 캐시 설정 등을 할 수 있다. 응답 헤더 작성 Response Header의 구성요건을 직접 문자열로 작성하는 방법 @WebServlet(name = "responseHeaderServlet", urlPatterns = "/response-header") public class ResponseHeaderServlet extends HttpSer..

Servlet Java는 서블릿을 이용해서 HTTP 요청을 처리하게 된다. 서블릿은 개발자가 HTTP 요청을 쉽게 처리할 수 있도록 만들어진 기술로, 서블릿 대신 직접 문자열 파싱으로 프로토콜과 주어진 매개변수, 인코딩 형식 등 다양한 옵션 및 값을 처리해도된다. 하지만 이것이 너무 힘드니깐 만들어진 존재이다. 서블릿 정리 글 ----> [Web/정리글] - 자바 웹 역사 정리 서블릿 응답 처리 @WebServlet(name = "requestParamServlet", urlPatterns = "/request-param") public class RequestParamServlet extends HttpServlet { @Override protected void service(HttpServletRe..
- Total
- Today
- Yesterday