개발/spring1(28)
-
26강(AOP 적용)
Aspect Oriented Programming, 공통 관심 사항과 핵심 관심 사항 분리. 원하는 곳에 공통 관심 사항 적용 TImeTraceAop(시간 측정 로직)을 만들고 컨트롤러, 서비스, 리포지토리 원하는 곳에 공통 관심 사항이 적용 가능하다. 요기에 파일 하나 만들어주자. 이걸 하나 적어줘야 Aop로 쓸 수 있다. 이제 메뉴얼 보고 따라하자. 인라인으로 합체 깔끔 이렇게 TimeTraceAop 완성이다. 이걸 이제 스프링 빈에 등록하자. 근데 강의에선 그냥 @Component로 한단다. @Around를 사용해서 타게팅을 해준다. 문법이 있는데 매뉴얼 보고하면 어렵지 않다고 한다.. 이제 이 패키지명 뭐 그 밑에 있는 클래스 명, 파라미터 타입 등등 원하는 조건을 넣을 수 있음. 이거는 이제 패..
2022.12.18 -
25강(AOP가 필요한 상황)
얘는 처음 이론적으로 공부하면 멘붕에 빠지기 쉽다. 그런데 사실 AOP는 언제 어떻게 쓰는지 알면 별로 어려운 게 아니다. 모든 메소드의 호출 시간을 측정하고 싶다면? 시작과 끝에 메소드 호출 시간을 다 집어 넣어야 함. 근데 갑자기 상사가 나타나서 초단위로 찍어논걸 밀리세컨드로 수정해달라고함. 1000개가 넘는데 그걸 다 바꿔야함 뭐 이렇게 복잡스럽게 일일이 하나씩 join하는데 걸리는 시간을 ms로 표시하게 해야한다. 1000개 중에 이제 하나 했슴.. 회원가입, 회원 조회에 시간을 측정하는 기능은 핵심 관심 사항이 아니다. 시간을 측정하는 로직은 공통 관심 사항이다. 시간을 측정하는 로직과 핵심 비즈니스의 로직이 섞여서 유지보수가 어렵다. 시간을 측정하는 로직을 별도의 공통 로직으로 만들기 매우 어..
2022.12.16 -
24강(스프링 데이터 JPA)
스프링 부트와 JPA만 사용해도 개발 생산성이 정말 많이 증가한다. 개발해야 할 코드도 확 줄어든다. 그런데 여기에 스프링 데이터 JPA를 사용하면 '이것까진 안 되겠지' 라는 한계를 넘어서 마법처럼 인터페이스만으로 개발을 완료할 수 있게 된다. 반복적으로 개발해온 CRUD 기능도 스프링 데이터 JPA가 제공을 해준다. 스프링부트와 JPA라는 기반 위에 스프링 데이터 JPA라는 환상적인 프레임워크가 더하면 개발이 정말 즐거워진다(?). 지금까지 조금이라도 단순하고 반복이라고 생각했던 코드들이 확 줄어든다. 따라서 개발자는 핵심 비즈니스 로직을 개발하는데 집중 할 수 있다. 실무에서 관계형 데이터베이스를 사용한다면 스프링 데이터 JPA는 선택이 아니라 필수다. 주의할 사항: 스프링 데이터 JPA는 JPA를..
2022.12.15 -
23강(JPA)
Jdbc에서 JdbcTemplate로 바꿔보니 개발 해야하는 반복적인 코드가 확 줄었지만 SQL은 개발자가 직접 작성해야한다. 하지만 JPA를 사용하면 SQL 쿼리도 JPA가 자동으로 처리해준다..ㄷㄷ 단순히 SQL을 만들어주는걸 넘어서서 SQL보다는 객체 중심의 설계로 패러다임을 전환할 수 있다. 개발 생산성을 크게 높일 수 있다. 스프링 프레임워크가 엄청 큰 기술이라 처음 배우면 망망대해에 떠있는 돛단배 같은 기분이 들 텐데, JPA도 장난이 아니다. 스피링만큼 넓이와 깊이가 있는 기술이 JPA다. 뭐가 좋은지는 코드를 통해 알아보자. Build.gradle에 저 코드를 추가해주고 코끼리 모양 gradle refresh를 해준다. 여기에 JPA와 관련된 설정을 추가해줘야한다. JPA라는 것은 인터페이..
2022.12.14 -
22강(스프링 JdbcTemplate)
순수 Jdbc와 동일한 환경설정을 하면 된다. 스프링 JdbcTemplate과 MyBatis 같은 라이브러리는 JDBC API에서 본 반복 코드를 대부분 제거해준다. 하지만 SQL은 직접 작성해야한다. JdbcTemplate은 실무에서도 많이 쓴다. 얘를 만들어준다. MemberRepository를 implements해주자. 여기서 JdbcTemplate를 쓰면 된다. 데이터 소스를 인잭션 받고 이 JdbcTemplate에 new JdbcTemplate에 dataSource를 넣어주면 된다. 이러면 스프링이 자동으로 인잭션 해준다. 그리고 생성하자 하나뿐인 경우에는 @Autowired 어노테이션을 생략할 수 있다. 아이디를 조회하는 쿼리다. 결과가 나오는걸 RowMapper로 맵핑을 해줘야한다. 이렇게 ..
2022.12.14 -
21강(스프링 통합 테스트)
테스트도 db까지 연결해서 동작하는 통합 테스트를 해보자. MemberServiceTest 내용을 복붙해서 MemberServiceIntegrationTest라는 파일을 만들자. @SpringBootTest, @Transactional을 추가해주고 @BeforeEach 단락을 지워주자. 직접 객체를 생성해서 넣었는데, 이제는 스프링 컨테이너한테 MemberService, MemberRepository를 내놓으라고 해야한다. 근데 테스트는 제일 끝단에 있는거기 때문에 테스트 코드를 만들 때는 제일 편한 방법을 사용하면 된다. 테스트를 다른데서 갖다 쓸게 아니기 때문에 테스트 코드는 필드 기반으로 @AutoWired로 받는게 되게 편함 메모리멤버리포지토리가 아닌 멤버리포지토리로 바꿔주자. 이렇게 하면 구현체..
2022.12.13