Coding 67

Spring Testing Mockito 3/3

Spring Framework 자체적으로도 지원하고 있는 Mocking 라이브러리 Mock 객체를 생성하고, 해당 Mock 객체가 진짜처럼 동작하게 하는 역할 Mockito의 Mocking 기능을 이용해서 테스트하고자 하는 대상에서 다른 영역(다른 계층 또는 외부 통신이 필요한 서비스 등)을 단절시켜 오로지 테스트 대상에만 집중 Stubbing : 테스트를 위해서 Mock 객체가 항상 일정한 동작을 하도록 지정하는 것 다른 영역을 목킹해서 마치 구현한것럼 가정하고 테스트 코드를 짬 슬라이스 Test @MockBean(필드) : Application Context에 등록되어 있는 Bean에 대한 Mockito Mock 객체를 생성하고 주입 given() : Mock 객체가 특정 값을 리턴하는 동작을 지정하..

Spring Testing JUnit 사용 2/3 #Day13-15

JUnit 단위테스트 JUnit5(Spring framework의 버전을 따름 - boot X) 사실상 Java의 표준 테스트 프레임워크 원활한 JUnit 호환을 위해 intelliJ 설정 변경 : Run testing using : IntelliJ IDEA Spring Boot Intializr를 이용해서 프로젝트를 생성하면 기본적으로 testImplementation >'org.springframework.boot:spring-boot-starter-test' 스타터가 포함되며, JUnit도 포함 데이터 전처리 @BeforeEach : 테스트 케이스가 각각 실행될 때마다 테스트 케이스 실행 직전에 먼저 실행되어 초기화 작업진행 @BeforeAll (static 메서드 앞): 테스트 케이스가 실행되기 ..

[Error] JPA 테이블 생성 중 ORDER 테이블 : drop table if exists [*]order CASCADE 오류

Spring 2.7.15 에서 H2 db 사용 중 JPA가 "ORDER"테이블 생성만 실패 spring: h2: console: enabled: true path: /h2 datasource: url: jdbc:h2:mem:test jpa: hibernate: ddl-auto: create # (1) 스키마 자동 생성 show-sql: true # (2) SQL 쿼리 출력 대충 sql에서 drop도 안되고, 나중에 가면 alter도 안되고,, 여튼 테이블 생성부터 문제가 있는 상황 org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "drop table if exists order CASCADE " via JDBC S..

Spring Testing 개념 1/3 #Day13

기능테스트 : (제3자) 사용자 입장에서 전체 기능 테스트 통합테스트(전체테스트) : (개발팀) 클라이언트 측 툴 없이 테스트 코드로 진행하며, controller 부터 db까지 여러 계층이 연관되어 있음. 운영환경과 동일한 조건에서 테스트 @SpringBootTest 슬라이스 테스트(부분통합테스트) : (개발자) 애플리케이션을 특정계층으로 쪼개어 진행, Mock 객체를 사용해서 계층을 끊어서 테스트 범위 좁힐 수 있음 단위테스트(Unit Test) : (개발자) 테스트 해야할 부분만 테스트. 일반적으로 메서드 단위. 최대한 독립적이고, 작은 단위인 것이 좋음 단위테스트 원칙 : F.I.R.S.T Fast(빠르게) Independent(독립적으로, 실행순서 상관없이) Repeatable(반복가능하도록) ..

(review2) Spring 구성하기(Controller - Serivce - Repository) #Day12

spring으로 prj 시작 시 구성 순서 1. 프로젝트 생성 H2는 필요없으면 제거 사용시 application.yml 설정 필요 H2(메모리DB) 웹 콘솔: http://localhost:8080/h2 Mapper 는 필요 시 추가 객체를 JSON 포맷으로 변환 : Gson 뷰 구현 시 타임리프 추가 dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.boot:spring-boot-starter-web' co..

Spring Transaction #Day11

트랜젝션 : 여러 개의 작업들을 하나의 그룹으로 묶어서 처리하는 처리 단위 전부 성공하든가 전부 실패하든가(All or Nothing) ACID 원칙 원자성(Atomicity) : 더이상 쪼갤 수 없음. 논리적으로 하나의 작업으로 인식해서 둘 다 성공하든가 둘 다 실패하든가**(All or Nothing)** 일관성(Consistency) : 비즈니스 로직에서 의도하는 대로 일관성 있게 동작 격리성(Isolation) : 여러개의 트랜젝션은 각각 독립적으로 실행. 즉 다른 트랜젝션에 영향을 주지 않아야함 지속성(Durability) : 트랜젝션이 완료되면 그 결과는 지속되어야 함 커밋(commit)과 롤백(rollback) 커밋(=반영한다) : 하나의 트랜젝션 종료 롤백 : 트랜젝션 내에서 수행된 작업 ..

Spring Data JPA #Day10

Spring Data JPA JPA : Java 에서 RDB를 사용하기 위해 정해 놓은 표준 스펙(명세) Hibernate ORM : JPA 구현체. 실제 사용하는 API Spring Data JPA : Hibernate ORM을 Spring에서 더 쉽게 사용할 수 있도록 해주는 모듈 java-rdb (ORM) 매핑하기 : @Entity (@Column @Id 등 관계설정) Repository 인터페이스 구현 기본 메서드(CRUD 등)은 Spring data JPA에서 기본으로 제공 extends JpaRepository 커스텀 메서드(쿼리)만 인터페이스 내에 작성 → 쿼리는 jpa에서 변경해줌 JPQL 객체 지향 쿼리 사용 : 엔티티 클래스의 객체를 대상으로 객체를 조회 → 쿼리 처리는 jpa에서 함 ..

Spring Persistence(DataAccess) Layer : JPA 예제(ORM : 엔티티 간 관계) 3/3 #Day9

ORM(Object Relationa Mapping) : 자바와 RDB 간에 매핑을 위해 관계 설정이 필요 1. 객체와 테이블 간의 매핑 2. 기본키 매핑 3. 필드(멤버 변수)와 열 간의 매핑 4. 엔티티 간의 연관 관계 매핑 등 1. 객체(entity)와 테이블(table) 간의 매핑 (필수 class 앞) @Entity : JPA 관리 대상 엔티티 명시 (옵션 class 앞) @Table(name="name") : 엔티티와 매핑할 테이블 설정(default : 클래스이름 = 테이블이름) (필수 field 앞) @Id : 식별자 역할을 하는 필드(멤버 변수) (권고 field 앞) @GeneratedValue(strategy = GenerationType.IDENTITY) : PK 생성 전략 기본 생..

Spring Persistence(DataAccess) Layer : JPA 예제 2/3 #Day9

JPA 사용하기 1. spring 의존성 추가(build.gradle) spring data jpa 추가 메모리 db : h2 추가 dependencies { .. implementation 'org.springframework.boot:spring-boot-starter-data-jpa' runtimeOnly 'com.h2database:h2 } 2. JPA 설정(application.yml) spring: h2: console: enabled: true path: /h2 datasource: url: jdbc:h2:mem:test jpa: hibernate: ddl-auto: create # (1) 스키마 자동 생성 show-sql: true # (2) SQL 쿼리 출력 3. 엔티티 임을 명시 → J..

Spring Persistence(DataAccess) Layer : JPA 개념 1/3 #Day9

spring layer의 마지막 DB와 통신하는 DataAccess Layer. @Controller @Service @Repository : DataAcessLayer(Persistence) - JPA spring에서 권장하는 db통신 기법 JPA(Java Persistence API, Jakarta Persistence) Java진영에서 사용하는 ORM 기술의 표준 사양(java interface) → 구현체는 따로 있음 JPA 구현체 : Hibernate ORM, EclipseLink, DataNucleus 등 ORM : Object(=자바)-relational(=RDBMS) mapping db통신을 할 수 있는 java제공 도구(db통신을 자바스럽게 하게 도움을 줌) db↔ JDBC ↔ (hibe..