728x90

Programming 275

Spring - 데이터 접근 기술 - 활용 방안

- 스프링 데이터 JPA 예제와 트레이드 오프 - 중간에서 JpaItemRepositoryV2 가 어댑터 역할을 해준 덕분에 ItemService 가 사용하는 ItemRepository 인터페이스를 그대로 유지할 수 있고 클라이언트인 ItemService 의 코드를 변경하지 않아도 되는 장점이 있다. - 선택지 1 1. 구조를 맞추기 위해서, 중간에 어댑터가 들어가면서 전체 구조가 너무 복잡해지고 사용하는 클래스도 많아지는 단점이 생겼다. 2. 실제 이 코드를 구현해야하는 개발자 입장에서 보면 중간에 어댑터도 만들고, 실제 코드까지 만들어야 하는 불편함이 생긴다. 3. 유지보수 관점에서 ItemService 를 변경하지 않고, ItemRepository 의 구현체를 변경할 수 있는 장점이 있다. 그러니까..

Programming/Spring 2023.07.07

Spring - 데이터 접근 기술 - 스프링 데이터 JPA

- 스프링 데이터 JPA 주요 기능 - 스프링 데이터 JPA는 JPA를 편리하게 사용할 수 있도록 도와주는 라이브러리이다. 수많은 편리한 기능을 제공하지만 가장 대표적인 기능은 다음과 같다. 1. 공통 인터페이스 기능 2. 쿼리 메서드 기능 - 공통 인터페이스 기능 1. JpaRepository 인터페이스를 통해서 기본적인 CRUD 기능 제공한다. 2. 공통화 가능한 기능이 거의 모두 포함되어 있다. 3. CrudRepository 에서 fineOne() findById() 로 변경되었다. - JpaRepository 사용법 public interface ItemRepository extends JpaRepository { } 1. JpaRepository 인터페이스를 인터페이스 상속 받고, 제네릭에 관..

Programming/Spring 2023.07.07

Spring - 데이터 접근 기술 - JPA

- JPA 설정 - build.gradle 에 다음 의존 관계를 추가한다. //JPA, 스프링 데이터 JPA 추가 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' - main - application.properties / test - application.properties 내용 추가 #JPA log logging.level.org.hibernate.SQL=DEBUG logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE - JPA 적용1 - 개발 - Item - ORM 매핑 @Data @Entity public class Item { @Id @GeneratedV..

Programming/Spring 2023.07.04

Spring - 데이터 접근 기술 - MYBatis

- JdbcTemplate과 비교해서 MyBatis의 장은 SQL을 XML에 편리하게 작성할 수 있고 또 동적 쿼리를 편리하게 작성할 수 있다. - JdbcTemplate - SQL 여러줄 String sql = "update item " + "set item_name=:itemName, price=:price, quantity=:quantity " + "where id=:id"; - MyBatis - SQL 여러줄 update item set item_name=#{itemName}, price=#{price}, quantity=#{quantity} where id = #{id} - MyBatis 설정 - build.gradle에 의존 관계를 추가한다. implementation 'org.mybatis...

Programming/Spring 2023.07.04

Spring - 데이터 접근 기술 - 테스트

- 테스트 - 데이터베이스 연동 - main - application.properties src/main/resources/application.properties spring.profiles.active=local spring.datasource.url=jdbc:h2:tcp://localhost/~/test spring.datasource.username=sa logging.level.org.springframework.jdbc=debug - test - application.properties test - application.properties spring.profiles.active=test - 테스트 케이스의 경우 src/test에 있는 application.properties 파일이 우선순위를..

Programming/Spring 2023.07.03

Spring - 예외 처리, 반복

- 체크 예외와 인터페이스 - 서비스가 처리할 수 없는 SQLException에 대한 의존을 제거하려면 SQLException 체크 예외를 런타임 예외로 전환해서 던지면 된다. 이렇게 하면 서비스 계층이 해당 예외를 무시할 수 있기 때문에, 특정 구현 기술에 의존하는 부분을 제거하고, 서비스 계층을 순수하게 유지할 수 있다. 1. 이렇게 인터페이스를 도입하면 MemberService는 MemberRepository 인터페이스만 의존하면 된다. 2. 이제 구현 기술을 변경하고 싶으면 DI를 사용해서 MemberService 코드의 변경 없이 구현 기술을 변경할 수 있다. - MemberRepository 인터페이스 public interface MemberRepository { Member save(Mem..

Programming/Spring 2023.07.03

Spring - 자바 예외 이해

- 예외 계층 1. Object : 예외도 객체이다. 모든 객체의 최상위 부모는 Object 이므로 예외의 최상위 부모도 Object 이다. 2. Throwable : 최상위 예외이다. 하위에 Exception 과 Error가 있다. 3. Error : 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외이다. 애플리케이션 개발자는 이 예외를 잡으려고 해서는 안된다. 3.1. 상위 예외를 catch 로 잡으면 그 하위 예외까지 함께 잡는다. 따라서 애플리케이션 로직에서는 Throwable 예외도 잡으면 안되는데, 앞서 이야기한 Error 예외도 함께 잡을 수 있기 때문이다. 애 플리케이션 로직은 이런 이유로 Exception 부터 필요한 예외로 생각하고 잡으면 된다. 3...

Programming/Spring 2023.07.02

Spring - 스프링과 문제 해결 - 트랜잭션 (2)

- 트랜잭션 문제 해결 - 트랜잭션 템플릿 - 트랜잭션 사용 코드 //트랜잭션 시작 TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition()); try { //비즈니스 로직 bizLogic(fromId, toId, money); transactionManager.commit(status); //성공시 커밋 } catch (Exception e) { transactionManager.rollback(status); //실패시 롤백 throw new IllegalStateException(e); } 1. 트랜잭션을 시작하고, 비즈니스 로직을 실행하고, 성공하면 커밋하고, 예외가 발생해서 실패하면..

Programming/Spring 2023.06.30

Spring - 스프링과 문제 해결 - 트랜잭션 (1)

- 애플리케이션 구조 - 프레젠테이션 계층 1. UI와 관련된 처리 담당 2. 웹 요청과 응답 3. 사용자 요청을 검증 주 사용 기술: 서블릿과 HTTP 같은 웹 기술, 스프링 MVC - 서비스 계층 1. 비즈니스 로직을 담당 2. 주 사용 기술: 가급적 특정 기술에 의존하지 않고, 순수 자바 코드로 작성 - 데이터 접근 계층 1. 실제 데이터베이스에 접근하는 코드 2. 주 사용 기술: JDBC, JPA, File, Redis, Mongo ... - MemberServiceV1 @RequiredArgsConstructor public class MemberServiceV1 { private final MemberRepositoryV1 memberRepositoryV1; // 현재 MemberReposit..

Programming/Spring 2023.06.30
728x90