분류 전체보기

🍀Spring/📖toby-spring

[토비의 스프링 Maven] 고립된 단위 테스트

✅ 복잡한 의존관계 속 테스트가장 편하고 좋은 테스트 방법은 가능한 한 작은 단위로 쪼개서 테스트하는 것입니다. 작은 단위의 테스트가 좋은 이유는 테스트가 실패했을 때 그 원인을 찾기 쉽기 때문입니다. UserService는 엔터프라이즈 시스템의 복잡한 모듈과는 비교할 수 없을 만큼 간단한 기능만을 갖고 있습니다. 그럼에도 UserService의 구현 클래스들이 동작하기 위해서는 세 가지 타입의 객체가 필요합니다. UserDao 타입의 객체를 통해 DB와 데이터를 주고받아야 하고, MailSender를 구현한 객체를 이용해 메일을 발송해야 합니다. 마지막으로 트랜잭션 처리를 위해 PlatformTransactionManager와 커뮤니케이션이 필요합니다. UserServiceTest를 테스트하고자 하는 ..

Wating
🍀Spring/📖toby-spring

[토비의 스프링 Maven] 트랜잭션 코드의 분리

💡AOP는 "Aspect-Oriented Programming"의 약어로, 한글로는 "관점 지향 프로그래밍"이라고 불립니다. ✅ 메소드 분리 트랜잭션 경계설정 코드와 비즈니스 로직 코드가 복잡하게 얽혀있는 것처럼 보이지만, 코드 간의 서로 주고 받는 정보가 없이 뚜렷하게 구분되어짐이 보입니다. 성격이 다른 두 코드를 메소드 추출 기법으로 분리해보겠습니다. 💡기존 Policy를 따로 구현해서 DI 받던 코드를 제거하고 제일 깔끔한 코드로 다시 돌아왔습니다. 학습 중에 너무 복잡해져서 되돌아왔기 때문에 이전의 작성된 글들과 코드가 많이 다를 수 있습니다. 자세한 것은 github com.jhcode.spring.ch6 부분을 참고해주시기 바랍니다. UserService//TransactionManger을 외..

🍀Spring/📖toby-spring

[토비의 스프링 Maven] 단일 책임 원칙, 메일 서비스

✅ 수직 수평 계층 구조와 의존 관계 UserService와 UserDao는 애플리케이션의 로직을 담고 있는 애플리케이션 계층입니다. UserDao는 데이터를 어떻게 가져오고 등록할 것인가에 대한 데이터 액세스 로직을 담고 있습니다. UserSerice는 순수하게 사용자 관리의 업무 비즈니스 로직을 담고 있습니다. UserDao와 UserService는 인터페이스와 DI를 통해 연결됨으로써 결합도가 낮아졌습니다. UserDao는 DB를 연결을 생성하는 방법에 대해 DataSource 인터페이스를 활용하여 결합도가 낮아졌습니다. UserService의 트랜잭션 기술도 스프링이 제공하는 PlatformTransactionManager 인터페이스를 통한 추상화를 활용하여 결합도가 낮아졌습니다. 👉 이렇게 스프..

🍀Spring/📖toby-spring

[토비의 스프링 Maven] 트랜잭션 서비스 추상화

모든 사용자에 대해 업그레이드 작업을 진행하다가 중간에 예외가 발생해서 작업이 중단된다면 어떻게 될까요? 이미 변경된 사용자의 레벨은 작업 이전 상태로 돌아갈까요? 아니면 바뀐 채로 남아있을까요? 이를 확인해보기 위해 1초도 안 걸리는 짧은 사용자 레벨 업그레이드 과정에서 네트워크가 끊긴다거나 DB 서버가 다운되거나 하는 상황을 직접 구현하는 것은 어렵습니다. 그렇기 때문에 해당 상황이 발생했을 때의 오류 중 일부를 임의로 던져서 해당 로직을 멈추는 방법으로 재현해보겠습니다. UserService의 기능을 그대로 사용해야 하고, 테스트에 필요한 로직도 더 필요한 상황입니다. UserService의 코드를 복붙하여 새로운 클래스를 만들 수도 있지만 코드 중복도 발생하고, 사용하기도 번거롭기 때문에 User..

Wating
🍀Spring/📖toby-spring

[토비의 스프링 Maven] UserService

✅ UserService.add()처음 가입하는 사용자는 기본적으로 BASIC 레벨이어야 한다는 로직을 어디에 담아야 할까요? UserDaoJdbc는 주어진 User 오브젝트를 DB에 정보를 넣고 읽는 방법에만 관심을 가져야지, 비즈니스적인 의미를 지닌 정보를 설정하는 책임을 지는 것은 바람직 하지 않아 보입니다. 비즈니스 로직을 담당하고 있는 UserSerivce에 add() 메소드를 만들고 이를 통해 User 오브젝트를 받아 처음 가입하는 사용자의 레벨을 BASIC으로 설정하고 DB에 저장하는 로직이 가장 바람직해 보입니다. TDD 방식으로 테스트 코드를 먼저 생성한 후 관련 로직을 만들어 보겠습니다. UserServiceTest, add()@Test public void add() { userDao..

🍀Spring/📖toby-spring

[토비의 스프링 Maven] 사용자 레벨 관리 기능 추가

💡 PSA(Portable Service Abstractions) 서비스 추상화 지금까지 만들었던 UserDao는 User 오브젝트에 담겨 있는 사용자 정보를 등록, 조, 수정, 삭제하는 CRUD라고 불리는 가장 기초적인 작업만 가능합니다. 여기에 사용자 레벨을 관리할 수 있는 다음과 같은 비즈니스 로직을 추가해보겠습니다. 사용자의 레벨은 BASIC, SILVER, GOLD 세 가지 중 하나입니다.사용자가 처음 가입하면 BASIC 레벨이 되며, 이후 활동에 따라 다음 조건에 맞추어 한 단계씩 업그레이드될 수 있습니다.가입 후 50회 이상 로그인하면 SILVER 회원이 됩니다.SILVER 레벨인 상태에서 추천을 30번 이상 받으면 GOLD 회원이 됩니다.사용자 레벨의 변경 작업은 주기를 가지고 일괄적으로 ..

Wating
🍀Spring/📖toby-spring

[토비의 스프링 Maven] 기술에 독립적인 UserDao 만들기

✅ 인터페이스 적용지금까지 만들어서 써왔던 userDao 클래스를 이제 인터페이스와 구현으로 분리해보자. 인터페이스의 이름은 가장 단순하게 하고, 구현 클래스는 각각의 특징을 따르는 이름을 붙이는 경우로 만들어 보자. UserDao interfacepackage com.jhcode.spring.ch4.user.dao; import java.util.List; import java.util.Optional; import com.jhcode.spring.ch4.user.domain.User; public interface UserDao { void add(User user); Optional get(String id); List getAll(); void deleteAll(); int getCount(); ..

Wating
🍀Spring/📖toby-spring

[토비의 스프링 Maven] 사라진 SQLException

🔥모든 예외는 적절하게 복구되든지 아니면 작업을 중단시키고 운영자 또는 개발자에게 분명하게 통보돼야 한다. ✅ 초난감 예외처리UserDao, deleteAll()//== 테이블 전체 데이터 삭제 ==// public void deleteAll() { String sql = "DELETE FROM users"; //콜백 객체 생성을 내장 함수가 담당한다. this.jdbcTemplate.update(sql); } deleteAll() 메소드를 보면 기존의 throws SQLException 키워드가 사라진 것을 볼 수 있다. catch로 잡은 예외는 어디로 가는 것일까? 예외가 발생하면 그것을 catch 블록을 써서 잡아내는 것까지는 좋은데 그리고 아무것도 하지 않고 넘어가 버리는 건 정말 위험한 일이다...

🍀Spring/📖toby-spring

[토비의 스프링 Maven] 테스트 보완과 최종 UserDao

✅ 테스트 보완(Negative Test)🔥현명한 개발자가 되려면, 긍정적인 결과만 테스트하는 것이 아니라 부정적인 결과로써의 테스트도 반드시 해보아야 한다. Spring에서 네거티브 테스트는 소프트웨어 개발 중에 발생할 수 있는 예외 상황이나 오류에 대해 테스트하는 절차이다. 이러한 테스트는 코드의 일부분이 의도한 대로 작동하지 않거나 예상치 못한 결과를 초래할 수 있는 부분을 식별하고 수정하기 위해 사용된다. ➡️ 네거티브 테스트는 보통 다음과 같은 시나리오에서 사용된다.예외 처리 테스트메서드 또는 함수에서 발생할 수 있는 예외 상황을 확인하는 테스트이다. 예를 들어, 유효하지 않은 입력이 주어졌을 때 적절한 예외가 발생하는지 확인하는 등의 테스트를 포함한다. 경계 조건 테스트입력 값의 경계 조건에 ..

🍀Spring/📖toby-spring

[토비의 스프링 Maven] Jdbc Template

💡지금까지 템플릿/콜백 패턴을 만드는 방법, 동작 원리 등을 알아봤다. 이제 스프링이 제공하는 JDBC 템플릿/콜백 기술을 알아보자. ✅ JdbcTemplate앞에서 만들었던 JdbcContext와 유사하지만 훨씬 강력하고 편리한 기능을 제공해준다. JdbcTemplate은 스프링 프레임워크에서 제공하는 데이터베이스 연동을 위한 도구이다.SQL 쿼리 실행과 결과 처리를 단순화하는 간결한 API를 제공한다.데이터베이스 연결 및 트랜잭션 관리를 자동으로 처리하여 개발자가 별도로 구현할 필요가 없다.JDBC(Java Database Connectivity)를 기반으로 동작하며, 데이터베이스 종류에 상관없이 사용할 수 있다.PreparedStatement를 활용하여 SQL 쿼리의 매개변수화와 자동 리소스 관리를..

jhcode33
'분류 전체보기' 카테고리의 글 목록 (5 Page)