목록Spring/Spring tutorial - 코드로 배우는 스프링 (김영한) (25)
개발일기

AOP : Aspect Oriented Programming - AOP는 공통 관심사항(cross-cutting concern) vs 핵심 관심사항(core concern)분리 시간 측정 로직을 한 곳에다가 다 모으고 내가 원하는 곳에 적용하는 것이다. 이것을 가능하게 하는 것이 AOP이다. package hello.hellospring.aop; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Aspect; @Aspect public class TimeTraceAop { public Object execute(ProceedingJoinPoint joinPoint) throws Throwable{ long sta..

사실 AOP는 이걸 언제 쓰는지 알면 정말 쉽다. 디테일 한 부분은 천천히 배우자. 공통 관심사항이라고 말한다. 시간을 측정하는 로직과 핵심 비지니스 로직이 섞여서 유지보수가 어렵다. 시간을 측정하는 로직을 별도의 공통 로직으로 만들기가 매우 어려움 전체적인 로직으로 메소드 뽑는게 어렵다. 공통 관심 사항, 핵심 관심 사항으로 나눌 수 있다.

CRUD 기능도 스프링 데이터 JPA가 모두 제공한다. 스프링부트와 JPA라는 기반 위에, 스프링 데이터 JPA라는 환상적인 프레임워크를 더하면 개발이 정말 즐거워진다. 실무에서 관계형 데이터베이스를 쓰면 Spring Data JPA는 선택이 아니라 필수이다. 주의:) 처음부터 스프링 데이터 JPA를 배우는 경우가 있는데 이것은 큰일 날 수도 있음. SpringDataJPA는 JPA를 편리하게 사용하도록 도와주는 기술이다. 따라서 JPA를 먼저 학습한 후에 스프링 JPA를 학습해야 한다. package hello.hellospring.repository; import hello.hellospring.domain.Member; import org.springframework.data.jpa.reposito..
우리는 지금 jdbc -> jdbcTemplate으로 바꾸고 나서 반복해서 개발해야 하는 코드가 확줄았다. 그런데 아직도 해결하지 못하는 것이 하나 있다. 아직도 sql은 개발자가 직접 작성해야 된다는 것이다. 그런데 이제 우리가 JPA라는 기술을 사용하면 SQL쿼리도 자동으로 처리해준다. 이러한 점때문에 개발 생산성을 크게 높일 수 있다. MemoryMemberRepository과 비슷하다. 마치 객체를 메모리에 넣듯이 JPA가 중간에서 DB의 SQL을 날리고 데이터를 DB를 통해서 가져오는 것은 JPA가 다 처리해준다. 단순히 SQL을 만들어 주는 것을 넘어서서 JPA를 사용하면 우리가 이제 SQL문법보다는 객체중심으로 조금 더 많이 고민할 수 있다. SQL과 데이터베이스 중심의 설계에서 객체 중심의..

- 스프링 JdbcTemplate과 MyBatis 같은 라이브러리는 JDBC API에서 본 반복 코드를 대부분 제거해준다. 하지만 SQL은 직접 작성 해주어야 한다. { Member member = new Member(); member.setId(rs.getLong("id")); member.setName(rs.getString("name")); return member; }; } } @Autowired를 생성자가 앞에 하나만 있으면 해당 생성자가 자동으로 SpringBean으로 등록되서 @Autowired를 생략이 가능해진다. 생성자가 딱 하나여서 생략이 가능한 것이다. 이렇게 해주면 spring이 자동으로 dataSource를 injection해준다. SimpleJdbcInsert라는 것이 있는데 J..

repository는 지금 DB까지 연결이 된다. 그러면 테스트도 DB까지 다 연결해서 동작하는 통합 테스트를 살펴보자. 우리가 이전에 했던 테스트들은 전혀 Spring과 관련이 없는 테스트이다. 즉, 순수 자바로 테스트코드를 작성하였다. 우리는 현재 순수한 자바코드로 테스트를 돌릴 수 없다. 왜냐면 데이터베이스 정보를 스프링이 가지고 있기 때문이다. 그래서 이제부터는 테스트를 스프링이랑 엮어서 테스트 해보자. package hello.hellospring.service; import hello.hellospring.domain.Member; import hello.hellospring.repository.MemberRepository; import hello.hellospring.repository.M..

이번 시간에는 진짜 애플리케이션에서 DB에 연동을 해가지고 애플리케이션에서 저장하는게 기존에 처럼 메모리에 저장되어 프로그램을 내렸다 올리면 데이터들이 사라지는 것이 아닌 데이터베이스에 저장이 되어서 데이터가 남도록 만들어줄 것이다. Selet Query, Insert Query를 통해서 데이터베이스에 데이터를 넣고 빼는 방식을 한번 해볼 것이다. 지금부터 내가 작성하는 글은 걍 옛날에 이런식으로 프로그래밍 했다 정도만 알도록 하자. 필요하면 필요할 때 찾아보면서 하도록 하자. 가장 먼저 해야 할 일은 JDBC build.gradle 파일에 jdbc, h2 데이터베이스 관련 라이브러리를 추가하자. implementation 'org.springframework.boot:spring-boot-starter..

실무에서는 데이터를 메모리에 저장한다면 프로그램을 다시 실행하면 모든 데이터가 다 날라가기 때문에 데이터베이스를 이용하여 저장한다. 아주 가볍고 심플한 H2 데이터베이스를 설치하여 데이터베이스를 연동해 볼 것이다. 다음 글에서는 DB가 연결되어 있으니 데이터베이스를 SQL을 가지고 데이터베이스 서버랑 연결할 것이다. 연결할 때 필요한게 바로 JDBC라는 기술이다. 이 강의에서는 20년전 개발자들이 순수한 JDBC로 어떻게 개발하였는지 경험할 수 있도록 만들어주신다고 했다. 순수한 JDBC로는 개발하기 너무 어려우니깐 스프링 중복을 막 다 제거해서 스프링이 이제 JDBC Template이라는 기술을 제공한다. 이거를 가지고 어플리케이션에서 데이터베이스로 SQL을 좀 더 편리하게 나를 수가 있다. 여기서 더..