Java/Spring & Spring Boot 20

Spring Data JDBC에서 Offset-Pagination 적용하기

페이지네이션(Pagination) Pagination이란 데이터 베이스에 회원 정보가 100건이 저장되어 있는데 클라이언트 쪽에서 100건의 데이터를 모두 요청하는 것이 아니라 한 페이지에 일정 개수만큼만 나누어서 달라고 요청하는 것을 페이지네이션(Pagination)이라고 한다. Pagination에는 Offset Pagination과 Cursor Pagination이 있다. Offset Pagination 출력되는 모든 결과물을 특정한 개수만큼 나누어 페이지별로 제공하는 형식이다. 일반적인 게시판 형태(검색 엔진 등)이다. Cursor Pagination 정해진 개수만큼의 데이터를 가저와 로드하고 이후 로드된 마지막 데이터부터 다시 정해진 개수만큼의 데이터를 가저와 로드하는 형식이다. SNS에 주로 ..

Spring Data JDBC

Spring Data JDBC Spring Data JDBC는 Spring에서 데이터베이스에 접근하는 다양한 기술들중 하나로 JDBC API 안에서 작동한다. 또한 ORM기술이 적용되어 SQL문을 직접 작성하는 것이 아닌 객체를 통해 데이터베이스에 접근 할수 있는 기술이다. ORM (Object Relational Mapping) 이란 객체 지향 프로그래밍 언어와 SQL문을 맵핑해주는, 즉, 두 언어를 서로 변환시켜 관계형 데이터베이스에 접근 할수 있도록 해주는 기술이다. Spring Data JDBC 사용 라이브러리 추가 dependencies { ... ... implementation 'org.springframework.boot:spring-boot-starter-data-jdbc' //Sprin..

JDBC(Java Database Connectivity)

JDBC(Java Database Connectivity) JDBC란 자바에서 데이터베이스에 접속할 수 있도록 하는 자바API이다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다. - 위키피디아 ( https://ko.wikipedia.org/wiki/JDBC ) JDBC는 자바 애플리케이션에서 데이터베이스에 접근하기 위한 표준 스펙이다. 즉, JDBC를 이용하여 자바코드로 데이터베이스에 접근하여 데이터를 생성, 수정, 삭제 등의 작업이 가능하며 다양한 벤더(Oracle, MS SQL, MySQL 등)의 데이터베이스와 연동할 수 있다. 자바 애플리케이션에서 JDBC API를 통해 JDBC 드라이버를 로딩한 후, 데이터베이스에 접근한다. JDBC 드라이버는 RDBMS의 종류에 따..

Exception, 예외 처리

체크 예외(Checked Exception)와 언체크 예외(Unchecked Exception) 체크 예외(Checked Exception) 체크 예외란 위의 그림에서와 같이 RuntimeException 클래스를 상속받지 않는 예외 클래스들이다. 예를 들면 ClassNotFoundException등이 있으며 catch 혹은 throws 키워드를 사용하여 반드시 해당 예외를 처리해주어야한다. 언체크 예외(Unchecked Exception) 언체크 예외는 RuntimeException 클래스를 상속받는 예외들이다. 체크 예외와 달리 해당 예외를 반드시 처리해 주지 않아도 되며 NullPointerException, ArrayIndexOutOfBoundsException등이 있다. 또한 RuntimeExc..

Entity와 Mapper

Entity Entity는 실제 데이터베이터베이스의 데이터구조와 1:1로 매핑되는 객체이다. 그렇기에 DB의 테이블내에 존재하는 컬럼만을 위한 필드를 가저야한다. Entity 클래스는 상속을 받고나 구현되여서는 안되며 테이블내에 존재하지 않는 컬럼을 가져서도 안된다. Entity와 DTO를 구분한 이유 Entity와 DTO를 살펴보면 사용하는 애너테이션만 조금 다를뿐 구성되는 필드는 거희 비슷하다. 하지만 굳이 이 둘을 분리시킨 가장 큰 이유는 두 객체간의 주 목적이 다르기 때문이다. DTO : 클라이언트의 요청 데이터를 하나의 객체로 받기 위해 혹은 응답으로 주기위해 사용하며 API계층에서 사용 Entity : 비즈니스 로직과 데이터베이스의 작업을 수행하기위해 사용되며 비즈니스계층과 데이터 엑세스계층에..

DTO (Data Transfer Object) 과 Validation

DTO (Data Transfer Object) DTO는 Data Transfer Object의 약자로 마틴 파울러(Martin Fowler)가 ‘Patterns of Enterprise Application Architecture’ 라는 책에서 처음 소개한 엔터프라이즈 애플리케이션 아키텍처 패턴의 하나이다. 이름에서 알수있듯이 데이터의 전송을 위한 '객체'이다. 클라이언트에서 요청을 통해 서버로 JSON 포멧의 데이터를 보내면 DispatcherSerblet의 HandlerAdapter가 받은 JSON 데이터를 지정된 DTO객체로 만들어주게된다. 또한 응답시에도 DTO(객체)를 응답해주게되면 HandlerAdapter는 JSON 포멧으로 데이터를 변환시킨 뒤 클라이언트로 응답을 보내게된다. 이렇게 DT..

Servlet과 JSP 그리고 MVC(Model, View, Controller)

Servlet 서블릿은 클라이언트의 요청을 처리하고 해당 요청의 결과를 클라이언트에게 전송하는 자바 프로그래밍 기술이다. 즉, 웹 어플리케이션을 동적으로 만들어주는 역할을 담당하고 있다. 웹 어플리케이션은 요청과 응답으로 클라이언트와 백엔드 서버간에 소통을 하며 동적서비스를 만드는데 이때 Servlet container가 클라이언트의 요청을 받아 요청에 맞는 로직을 수행할 Servlet 객체를 생성하고 관리한다. (Spring에는 Tomcat이 내장되어있으며 이 Tomcat이 Servlet container 역할을 한다.) Servlet 필수 메서드 init() - 서블릿 생성 service() - 처리 진행 destroy() - 서블릿 삭제 Servlet container의 역할 요청과 응답을 이용하여..

관점 지향 프로그래밍 (Aspect Oriented Programming, AOP)

AOP AOP는 애플리케이션의 구조적 향상을 위해 기존에 자바에서 사용하던 OOP방식을 좀더 보안하여 나온 개념이다. OOP에서는 class를 중점으로 모듈화*를 하였지만 AOP는 관점이라는 추상적인 개념을 중점으로 모듈화를 진행한다. 쉽게 설명하자면 OOP의 class들에서 어떠한 특정한 목적을 위해 공통으로 구현하는 프로세스(공통 관심)들을 또다시 분리하여 코드의 반복을 줄이고 유지보수에 더 용이하게함으로써 더욱 객체지향적 프로그래밍이 되도록 하는 기술이다. (개인적으로 노드JS의 미들웨어정도로 생각하니 이해하기 좀더 수월했다.) (*모듈화: 어떤 시스템의 구성요소가 분리되고 재결합 할 수 있게 만드는 행위) 이러한 AOP의 주 컨샙으로는 8가지가 존재한다. Aspect Join point Advic..

스프링 컨테이너

Spring container 스프링 컨테이너는 내부에 존재하는 애플리케이션 Bean(객체)의 생명주기 즉, 생성, 관리, 제거 등의 역할을 담당한다. 스프링 컨테이너는 XML, 애너테이션 기반의 자바 설정 클래스로 만들 수 있다. 과거에는 개발자가 XML을 통해 모두 설정해줬지만 Spring Boot를 사용하면서 XML설정 없이 사용이 가능해 졌다고 한다. 스프링 컨테이너를 사용하는 이유 스프링 컨테이너를 사용하게 되면서 객체들간의 의존관계를 정리하고 의존성을 낮추며 해당 객체들을 스프링에서 관리하여 개발자들은 비즈니스 로직에만 집중하기 더 쉬워 졌다. 스프링 컨테이너를 사용하기 이전에는 객체를 사용하기 위해 new 생성자를 사용하고 무수히 많은 객체들이 서로 참조하게 되어 의존성이 높아 객체지향프로그..

POJO

위의 그림은 Spring 삼각형 이라는 것으로 POJO라는 것은 Spring에서 사용하는 핵심 개념들인 IoC/DI, AOP, PSA를 통해 달성할 수 있다. POJO를 직역하면 순수한 자바 객체가 되는데 POJO프로그래밍이란 다른 기술이나 규약 혹은 특정 환경에 종속적이지 않고 순수 자바 객체만을 사용하는 프로그래밍이다. 즉, 특정한 다른 기술들을 변경하더라도 비지니스 로직에 영향을 주지 않도록 서로의 역할을 독립적으로 코드를 작성하는 프로그래밍이다. 예를 들면 MariaDB에서 MySQL로 데이터베이스가 바뀌더라도 비지니스 로직을 수정할 일이 없어야한다. 이와 같이 최대한 다른 환경이나 기술에 종속적이지 않도록 하기 위한 POJO 프로그래밍 코드를 작성하기 위해 Spring에서 지원하고 있는 3가지 ..