Spring 22

Service 테스트

개념 Service 테스트를 진행할 때, Mockito 프레임워크를 활용해서 진행 정의: Junit에서 가짜 객체인 Mock객체를 생성해주고, 관리 및 검증을 지원하는 프레임워크 Mock 정의: 테스트 대상 클래스에서 사용되는 외부 의존성(객체)에 대한 가짜 사용법 의존성 spring-boot-start-test에서 자동으로 Mockito를 추가해줌 testImplementation 'org.springframework.boot:spring-boot-starter-test' 테스트 코드 파일 생성 테스트 코드 파일을 만들고 싶은 Service 파일 열기 해당 service 이름에 마우스 커서를 올리고, 눌러서 클릭 테스트 코드를 생성하고 싶은 메서드를 클릭하고 Ok 버튼을 누르면 테스크 코드 파일이 자동..

Spring/테스트 2024.03.11

스프링 파일 첨부 요청 처리

배경 스프링 프로젝트를 진행하다보면 텍스트 데이터 뿐만 아니라 아래와 같이 파일도 같이 요청을 받는 경우가 발생한다. 따라서 컨트롤러 클래스에서 파일이 첨부된 API 요청을 받는 방법을 정리하였다. 사용법 컨트롤러에서 요청 받기 @Mapping 애너테이션 속성 추가 consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE} @RequestPart 애터테이션 사용 value: 요청의 key값 required = false: 파일 첨뷰가 없는 경우가 있다면 추가 MultipartFile 객체 사용: 해당 객체를 통해 파일 정보 받기 @PostMapping( value = "/product", consumes = {Med..

Spring 2024.02.07

Postman 파일 첨부 요청 방법

배경 프로젝트를 진행하다, 이미지 파일들과 Json 요청을 동시에 보내야하는 상황이 발생하였다. 따라서, 해당 API를 테스트하기 위해 Postman에서 파일을 첨부해서 요청을 하는 방법에 대해 정리하였다. 사용 방법 파일 첨부 Body > form-data > KEY 텝에 있는 v 버튼을 눌러 File 클릭 이때, 파일을 여러개 선택하면 하나의 key에 여러개의 파일 첨부 가능 Json 데이터 첨부 파일과 함께 Json 데이터를 첨부해서 요청을 해야한다면, form-data 탭에서 아래와 같이 설정을 해야한다 하나의 key에 json 데이터를 모두 첨부 Content type: applicatoin/json 으로 설정 참고자료 https://whyeskang.com/258 Postman을 이용한 Fil..

Spring/테스트 2024.02.07

+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 등의 데이터 생성..