Spring
-
토비의 스프링[6] AOPSpring 2021. 3. 8. 04:39
서론 AOP는 IoC/DI, 서비스 추상화와 더불어 스프링의 3대 기반기술의 하나이며, 스프링 기술중 가장 난해한 용어 및 개념을 가지고 있어서 이해하기 가장 어렵다. 스프링에서 가장 인기있는 AOP의 적용 대상은 트랜잭션 기능이기에 앞서서 다룬 서비스 추상화를 통해 많은 근본적인 문제를 해결했던 트랜잭션 경계설정 기능을 AOP를 이용해 더욱 세련되고 깔금한 방식으로 바꿔보자. 트랜잭션 코드의 분리 스프링이 제공하는 깔끔한 트랜잭션 인터페이스를 썼음에도 비즈니스 로직이 주인이어야할 메소드 안에는 길고 무시무시하게 생긴 트랜잭션 코드가 더 많은 자리를 차지하고 있다. public void upgradeLevels() throws Exception { // 트랜잭션 로직 PlatformTransactionM..
-
토비의 스프링[5] 서비스 추상화Spring 2021. 2. 25. 04:41
서론 여태 제작한 DAO에 트랜잭션을 적용해보며 스프링이 어떻게 성격이 비슷한 여러 종류의 기술을 추상화하고 일관된 방법으로 사용할 수 있도록 지원하는지 알아보자. 사용자 레벨 관리 기능 추가 지금까지 제작한 UserDao는 User오브젝트에 대한 CRUD를 제외하면 아무 비즈니스 로직도 가지고 있지 않다. 그렇기에 여기에 사용자 활동내역에 따른 레벨을 조정해주는 기능과 사용자 활동내역을 알 수 있도록 몇개의 필드를 추가해보자. package com.example.toby.초난감DAO.user; import lombok.*; @Getter @Setter @ToString @NoArgsConstructor @AllArgsConstructor public class User { private String i..
-
Spring Boot TestSpring 2021. 2. 9. 16:20
스프링부트 테스트 에 대하여 알아보자 참고블로그 brunch.co.kr/@springboot/207 참고 이전포스팅 hodolee246.tistory.com/60 Spring Boot Test Dependency spring-boot-test : 핵심 기능 포함 spring-boot-test-autoconfigure : 테스트를 위한 AutoConfiguration 제공 Spring Test, Spring Boot Test : 스프링 부트를 위한 유틸 및 통합 테스트 지원 AssertJ : 유창한 Assertion library Hamcrest : libarary에 잘 어울리는 오브젝트(constraints or predicates) Mockito : 자바 mocking framework JSONasse..
-
토비의 스프링[4] 예외처리Spring 2021. 1. 27. 06:05
서론 UserDao를 JdbcTemplate로 변경하면서 SQLException이 사라진 이유와 예외처리 및 전환 방법에 대해 알아보자. 예외의 종류와 특징 자바에서 throw를 발생시킬 수 있는 예외는 크게 세 가지가 있다. Error 시스템에 뭔가 비정상적인 상황이 발생했을 경우에 사용된다. 주로 자바 VM에서 발생시키며, 애플리케이션에서 코드로 잡을 수 없으며, 별도로 처리하지 않아도 된다. Exception 과 체크 예외 java.lang.Exception 클래스와 그 서브클래스로 정의되며, 에러와 달리 개발자들이 만든 애플리케이션 코드의 작업중 예외상황이 발생할 경우 사용된다. 체크예외는 throw로 던지던가, catch 로 잡아 주어야 컴파일 에러가 발생하지 않는다. RunTimeExcepti..
-
토비의 스프링[3] 템플릿Spring 2021. 1. 14. 18:31
OCP(OpenClosePrinciple) : 기존의 코드가 변경되지 않으면서 기능을 추가할 수 있도록 설계 리소스의 반환 초난감 DAO에서의 PreparedStatement와 Connection을 사용하는 메소드들은 에러가 발생할 경우 close() 메소드들을 실행을 하여 리소스를 반환을 할 수 없기에 어떤 상황에서도 리소스를 반환할 수 있도록 try/catch/finally 구문을 사용을 권장하고 있다. public int getCount() throws SQLException { Connection c = null; PreparedStatement ps = null; ResultSet rs = null; try { c = dataSource.getConnection(); ps = c.prepareS..
-
토비의 스프링[2] 테스트Spring 2020. 12. 23. 19:11
서론 효율적인 테스트 방법과 기능에 대한 확신을 주는방법에 대해 알아보자. ** 본 예제는 SpringBoot JUnit5로 진행했습니다. ** DAO 테스트 문제점 DAO를 테스트 하기 위하여 JSP 뷰 등 모든 레이어의 기능을 다 만들고 테스트를 할 경우 어디서 문제가 발생 했는지를 찾아내는 수고도 필요하며, 너무 많은 코드를 구성했기에 비효율적이다. 단위 테스트 1. 한 가지 관심에 집중할 수 있는 작은 단위의 테스트다. 2. 크기가 어느정도인지 정확하게 정해진건 아니다. 3. 일반적으로 단위는 작을수록 좋다. 4. 매번 DB의 상태가 달라지고, 테스트를 위해 DB를 특정 상태로 만들 수 없다면 단위 테스트로서 가치가 없어진다. 자동수행 테스트 코드 1. 매번 웹 화면을 통한 테스트를 진행하는것에 ..
-
토비의 스프링[1] 오브젝트와 의존관계Spring 2020. 12. 17. 01:20
서론 관심사 분리하여 DAO를 처리하는 방법과 싱글톤 패턴 및 애플리케이션 컨텍스트에 대해 알아보며, 제어의 역전(IoC)에 대해 알아보자. 관심사 분리 초난감 DAO 처리하기 public class UserDao { public void add(User user) throws SQLException, ClassNotFoundException { Class.forName("com.mysql.cj.jdbc.Driver"); Connection c = DriverManager.getConnection("jdbc:mysql://localhost:3306/sys?serverTimezone=UTC&characterEncoding=UTF-8", "root", "1234"); PreparedStatement ps =..
-
Spring Boot로 알아가는 SwaggerSpring 2020. 4. 7. 18:02
Swagger란? RestAPI를 문서화 시켜주는 프레임 워크이다. ( java 뿐만 아니라 다양한 언어를 모두 지원한다 ) 문서화 뿐만 아니라 기존의 이용하던 Postman의 기능도 지원한다. MAVEN maven repository에서 swagger 찾아서 주입 ( 아래는 gradle ) 더보기 compile group: 'io.springfox', name: 'springfox-swagger2', version: '2.5.0' compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.5.0' 먼저 swagger 기능을 이용하기 위하여 Config파일을 생성을 한다. @Configuration @EnableSwagger2 pub..