Spring/기본 구성 9

+4. DTO를 record type으로 설정

개념 Record: 불변 객체를 생성할 때 사용하는 클래스이다. 장점 DTO를 Record로 사용하면 아래와 같은 이점이 있음 불변성: 한번 생성된 인스턴스는 수정 불가능 즉, 데이터의 무결성을 유지하는데 도움을 줌 간결한 코드: 다양한 메서드를 자동으로 생성 일반 class 형태로 불변 객체를 생성하려면, 에너테이션이나 메서드를 작성해야함 단점 처음 선언할 때 제약이 존재 final 클래스의 특징을 가짐 상속 불가 abstract 선언 불가 static이 아닌 멤버 변수 선언 불가 정리 DTO가 단순 데이터 전달용으로 사용되는 객체임을 고려할 때, 레코드를 사용하는 것이 단점보다 장점이 더 부각됨 -> 특별한 일이 없다면, DTO는 레코드로 작성하자! 사용법 선언 public record ( 필드1, ..

8. Repository 클래스 with. JDBC, JPQL(JPA), QueryDSL

부족한 점 JPQL의 문법(SQL과 차이점), 3가지 DB접근 방식의 Join 연산 리포지터리 클래스 정의/목적 : DB 테이블에 대한 CRUD 작업을 하기 위한 클래스 특징 : 다양한 DB접근 방법이 존재 JDBC Template JPQL (권장) QueryDSL (권장) JDBC Template 참고 사이트: https://code-lab1.tistory.com/277 [Spring] JdbcTemplate이란? JdbcTemplate 사용법, RowMapper란? JdbcTemplate이란? JdbcTemplate은 JDBC 코어 패키지의 중앙 클래스로 JDBC의 사용을 단순화하고 일반적인 오류를 방지하는데 도움이 된다. 개발자가 JDBC를 직접 사용할 때 발생하는 다음과 같은 반복 작 code-l..

7. Entity 클래스

엔티티 클래스 정의: RDMS 테이블과 매핑되는 클래스 클래스 애너테이션 @Entity 정의/목적: 해당 클래스가 엔티티임을 알리는 애너테이션 사용법: 디폴트 : 클래스 이름과 같은 DB 테이블 매핑 name 속성 : name의 값을 가진 DB 테이블 매핑 ex) @Entity(name = "meber_list") @Entity public class Entity{} Lombok 애너테이션 @NoArgsConstructor 정의: 기본 생성자를 생성해주는 애너테이션 엔티티는 반드시 기본 생성자가 존재해야함 (필수) 특징: 접근 제어자는 public | protected여야만 한다. ( protected가 보안상 안전 ) 예시: @NoArgsConstructor(access = AccessLevel.PRO..

6. ORM 개념 with. Spring Data JPA

ORM 기본 개념 정의 object-relational-mapping : DB를 객체로 매핑하여, DB를 객체 다루듯 사용할 수 있도록 하는 도구 장단점 장점 : 객체지향적으로 DB 접근이 가능 DB 시스템이 추상화 되어있기 때문에, DBMS에 대한 종속성 감소( 교체 쉬움 ) 단점 : 쿼리의 복잡성이 커지면 사용 난이도가 올라가고, 해결 불가능한 쿼리도 존재 JPA & Hibernate 정의 JPA : 자바 애플리케이션에서 RDBMS를 사용하는 방식만을 정의한 표준 "인터페이스" 인터페이스이기에 실제 사용을 위해 ORM 프레임워크를 선정해야함 하이버네이트(Hibernate) : JPA에 대한 구현체( 자바용 ORM 프레임워크 ), 내부적으로 JDBC API를 사용 JPA 용어 엔티티(Entity) : ..

5. Service 클래스

서비스 클래스 정의: 내부 비즈니스 로직을 처리하는 클래스 특징: DB관련 처리: 레파지토리 객체를 가져와 처리 위임 클래스 애너테이션 @Service 정의/목적: 해당 클래스가 서비스 클래스라는 것을 알리는 애너테이션 @Service @RequiredArgsConstructor public class Service { private final Repository repository; ... // 컽트롤러와 연결되는 메서드(로직)을 작성 } 예외처리 메서드? .orElseThrow(() -> new IllegalArgumentException(email));

4. Controller 클래스 with. DTO

컨트롤러 클래스 정의/목적 : HTTP 요청과 메서드를 연결해주는 라우터 역할 클래스 애너테이션 Controller vs RestController @Controller 목적 : View 이름 반환 or 데이터(Json/XML)을 반환하는 용도로 사용 View를 반환 Data를 반환 1. 컨트롤러에서 View 이름을 반환 2. 디스패치 서블릿에서 뷰 리졸버를 통해 View를 반환 1. 컨트롤러에서 객체를 ResponseEntity로 감싸서 반환 p.s) ResponseEntity는 @ResponseBody를 사용 @RestController @Controller에 @ResponseBody가 추가된 것 그렇기에 @Controller에서 @ResponseBody를 붙인 것과 완벽히 동일하게 동작 목적 : J..

3. Spring Boot 구조

스프링 부트3 구조 프레젠테이션, 비즈니스, 퍼시스턴스 계층이 서로 통신하며 프로그램을 구성 프레젠테이션 계층 - Controller : HTTP 요청을 비즈니스 계층으로 전송하는 역할 비즈니스 계층 - Service : 서비스를 만들기 위한 로직을 처리 퍼시스턴스 계층 - Repository : DB관련 로직을 처리 DB에 접근하는 DAO 객체 사용 스프링 부트3 요청-응답 과정 클라이언트에서 요청 스프링 부트 디스패치 서블릿에서 URL 분석 -> 해당 요청을 처리할 수 있는 컨트롤러 찾기 -> 컨트롤러를 찾았으면 디스패치 서블릿이 해당 컨트롤러에게 요청 전달 컨트롤러에서 비지니스, 퍼시스턴스 계층을 통해 필요한 데이터 가져옴 뷰 리졸버가 HTML 문서를 생성 or JSON이나 XML 등의 데이터 생성..

2. Spring Boot 프로젝트 디렉토리 구성

프로젝트 디렉토리 구성 main 디렉토리 'src/main' 디렉토리: 프로젝트 실행에 필요한 코드를 관리하는 곳 main/java 디렉토리 애플리케이션 개발 코드를 관리하는 곳 main/resources 디렉토리 정적 파일들을 저장하는 곳 View 관련 파일을 관리 ex) templates(HTML), static(css, js, imgs) application.yml 파일 관리 : 스프링 부트 설정 파일 DB 설정 정보, 로깅 설정 정보 ... test 디렉토리 'src/test' 디렉토리: 프로젝트 코드를 테스트하는 코드를 관리하는 곳 build.gradle 빌드 프로세스에 필요한 설정을 관리하는 곳 의존성 및 플러그인 같은 빌드 관련 정보가 포함 settings.gradle 빌드할 프로젝트 정보 ..

1. 프로젝트 생성방법 with. InteliJ

Spring initializr 이용 홈페이지 접속 https://start.spring.io/ 설정값 입력 아래의 값들은 디폴트 값으로 특별한 경우가 없다면 해당 값으로 진행 Project: Gradle - Groovy Language: Java Spring Boot: 3.2.0 ( 달라도 문제 없을 듯 ) Packeging: Jar Java: 17 ( 스프링부트3 이상부터 지원) 보통은 Project Metadata에서 아래의 값만 설정 Group: 프로젝트 폴더 패키지 이름 Artifact: 프로젝트 최상위 폴더 이름 의존성 추가 웹 프로젝트를 진행하면 아래 3개의 의존성은 필수적으로 추가하여 생성 Spring Web Lombok Spring Data JPA 프로젝트 생성 [GENERATE] 버튼을..