공부/Spring59 [chap3] 스프링 DI 3. 스프링 DI 3-1. 의존 DI(Dependency Injection) : 의존 주입 의존 : 객체간의 의존을 의미 (Service클래스가 Dao클래스에 의존한다) 1-1. MemberService가 memberDao에 의존하는 코드 의존하는 객체를 직접 생성하는 방식 public class MemberService { private MemberDao memberDao = new MemberDao(); } 1-2. 문제점 // 의존하는 MemberDao의 객체도 함께 생성된다. MemberService memberService = new MemberService(); 2-1. DI를 통한 의존 처리 의존하는 객체를 전달받아 사용하는 방식 public class MemberService { priva.. 2022. 5. 20. [chap2] 스프링 2-1. 스프링 프로젝트 시작하기 메이븐과 그래들 차이점 프로젝트를 생성하는 과정에서pom.xml 파일 대신 build.gradle 을 작성한단 것. 작성방식의 차이 (사용자입장) 어노테이션 @Configuration : 해당 클래스를 스프링 설정 클래스로 지정 @Bean: 해당 객체가 스프링이 관리하게 됨 @Configuration public class AppContext { @Bean public Greeter greeter() { Greeter g = new Greeter(); g.setFormat("%s, 안녕하세요!"); return g; } } public class Greeter { private String format; public String greet(String guest) { r.. 2022. 5. 20. JdbcTemplate를 사용하는 이유 결론 JbdcTemplate 장점 코드 중복 감소 및 재사용성 증가 추가 및 확장이 쉬움 1. 기존 JDBC의 사용 드라이버로딩 → DB연결 → SQL 작성/전송 → 자원해제 Connection 연결 쿼리 작성 후 PreparedStatement 실행 결과 처리 (resultSet) Connection 닫기 2. JdbcTemplate 사용 JdbcTemplate에 드라이버 로딩, DB연결, 자원해제 기능을 맡긴다 → 개발자는 SQL작성/전송에 집중할 수 있다! jdbcTemplate.query(인자, 인자); jdbcTemplate.query(인자, 인자) jdbcTemplate의 빈 등록 3. DataSource란? JDBC 명세의 일부분이며 일반화된 연결 팩토리 DB와 관계된 Connection정보.. 2022. 5. 8. [Spring] DTO의 사용 범위 DTO란 계층간 데이터 교환을 위해 사용하는 객체 God Class에 대한 용어 정리 크기가 커야 god class인 것은 아니다. 여러 Layer에 걸쳐 사용되거나, 2개 이상의 책임을 가진다면 이는 god class이다. 1. Domain과 DTO를 분리해야 하는 이유 하나의 거대한 범용 class를 여러 Layer에 걸쳐 사용하게 된다. 특정 상황에서 특정 값만이 존재하는 필드 member 정보를 가져오지 않고 card 정보만 가져요는 쿼리가 별도로 존재한다. 하지만, member 필드까지 참고해야 한다. 시스템에 항상 완벽하게 초기화 된 상태의 객체만 존재하기 어렵다. 초기화되는 시점과 사용되는 시점이 필드군마다 제각각이기에 유지보수가 어렵다. 다른 도메인 책임까지 넘보게 된다. 2. 해결책) g.. 2022. 5. 7. [Java] @Transaction(readOnly=true)을 사용하면 성능이 향상되는 이유 결론 엔티티를 읽기 전용으로 조회하면, 변경감지를 위한 스냅샷을 유지하지 않아도 되고, 영속성 컨텍스트를 플러시하지 않아도 돼 성능을 최적화 할 수 있다. 사용방법 트랜잭션을 읽기 전용 모드로 설정할 수 있다 @Transaction(readOnly=true) 성능 향상 이유 1. 스칼라 타입(단일데이터)으로 조회 (엔티티로 조회하지 않음) 영속성 컨텍스트가 결과를 관리하지 않는다. 엔티티로 조회한다면? 영속성 컨텍스트에 관리됨 영속성 컨텍스트 : 엔티티를 영구 저장하는 환경. 어플리케이션과 DB 사이에서 객체를 보관하는 가상의 DB역할. 영속성 컨텍스트는 변경 감지를 위해서 스냅샷 인스턴스를 보관한다. (많은 메모리 사용) 2. 읽기 전용 쿼리 힌트 사용 org.hibernate.readOnly 사용 읽.. 2022. 5. 7. [Spring] @Transactional 1. 트랜잭션이란? (ACID) 하나의 논리적 작업 단위로 수행되는 일련의 작업 일련의 작업이 모두 하나의 논리적 작업으로 취급되기 때문에 논리적 작업을 취소하면, 그 내부에 포함된 일련의 작업들이 모두 취소된다. 2. 테스트코드에서의 @Transactional 사용 역할 : DB와 관련된 테스트코드를 작성하면 테스트메서드에 @Transactional을 사용하여 테스트 메서드가 종료될 때 생성된 DB 커밋을 rollback한다. @Transactional 을 사용하지 않고 @Service테스트를 실행하면? 테스트 메서드 내부에서 사용했던 데이터들이 남게되어 실제 서비스에 영향을 미칠 수 있어 지워야할 필요가 있다. DB에 반영하고 싶다면 @Rollback(false) auto_increment나 sequ.. 2022. 4. 29. 이전 1 ··· 5 6 7 8 9 10 다음