Back-end
[Spring] 리팩토링 해보기 (feat. 객체지향적인 관점)
💡 리팩토링이란? 리팩터링(refactoring)은 소프트웨어 공학에서 '결과의 변경 없이 코드의 구조를 재조정함'을 뜻한다. 주로 가독성을 높이고 유지보수를 편하게 한다. 버그를 없애거나 새로운 기능을 추가하는 행위는 아니다. 사용자가 보는 외부 화면은 그대로 두면서 내부 논리나 구조를 바꾸고 개선하는 유지보수 행위이다. ✏️ 리팩토링 전 코드 점검 항목 코드에 중복된 부분은 없는가? 코드가 무엇을 하는 것인지 이해하기 불편하지 않은가? 코드가 자신이 있어야 할 자리에 있는가? 앞으로 변경이 일어난다면 어떤 것이 있을 수 있고, 그 변화에 쉽게 대응할 수 있게 작성되어 있는가? ✏️ UserService를 리팩토링 해보자 각 User마다 갖고 있는 level을 login, recommend를 검사해 기..
DataAccessException이란? (What is DataAccessException?)
🧐 DataAccessException이란? 참고 : https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/dao/DataAccessException.html DataAccessException (Spring Framework 5.2.8.RELEASE API) Root of the hierarchy of data access exceptions discussed in Expert One-On-One J2EE Design and Development. Please see Chapter 9 of this book for detailed discussion of the motivation for this package. This ..
[Spring] JdbcTemplate 사용법 - update(), queryForInt(), queryForObject(), query()
💡 update() JdbcTemplate는 DAO객체에서 DB와 연동하기 위해 SQL 연산들을 수행 할 수 있도록 도와주는 기술인데, update()는 SQL 연산을 통해 데이터베이스를 갱신시켜줄 때(INSERT, DELETE, UPDATE) 사용하는 메소드이다. ✏️ INSERT 치환자(?)를 가진 SQL로 PreparedStatement를 만들고 함께 제공하는 파라미터를 순서대로 바인딩해주는 기능을 가진 update() 메소드를 사용할 수 있다. SQL과 함께 가변인자로 선언된 파라미터를 제공해주면 된다. this.jdbcTemplate.update("insert into users(id, name, password) values(?,?,?)", user.getId(), user.getName(),..
[Spring] JdbcTemplate이란?
💡 JdbcTemplate이란? All SQL operations performed by this class are logged at debug level, using "org.springframework.jdbc.core.JdbcTemplate" as log category. 위 spring 사전에 나온 설명을 보면 알 수 있듯이, 스프링에서 제공하는 SQL 연산들을 수행 할 수 있도록 해주는 JDBC 코드용 기본 템플릿을 말한다. 즉, 스프링은 JDBC를 이용하는 DAO에서 사용할 수 있도록 다양한 템플릿과 콜백을 제공하는데 JdbcTemplate은 그 중 하나이다. 참고: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/sp..
[Spring] 템플릿 콜백 패턴
💡 템플릿 콜백 패턴이란? 전략 패턴의 기본 구조에 인터페이스를 상속하는 클래스를 만들지 않고 익명 내부 클래스를 활용하는 방식 이런 방식을 스프링에서는 템플릿 콜백 패턴이라고 한다. 전략 패턴의 컨텍스트를 템플릿이라 부르고, 익명 내부 클래스로 만들어지는 오브젝트를 콜백이라 한다. 전략 패턴과 DI의 장점을 익명 내부 클래스 사용 전략과 결합해 독특하게 활용 주로 try/catch/finally 블록을 사용하는 코드에 사용된다. 💡 템플릿 콜백의 동작원리 콜백은 보통 단일 메소드 인터페이스를 사용한다. 또한 하나의 템플릿에서 여러 가지 종류의 전략을 사용해야 한다면 하나 이상의 콜백 오브젝트를 사용 할 수 있다. 콜백은 일반적으로 하나의 메소드를 가진 인터페이스를 구현한 익명 내부 클래스로 만들어진다...
[Spring] 예외처리 기능 갖추기
🤨 지금까지 만들어왔던 DAO 객체에는 심각한 문제인 예외 상황에 대한 처리 문제가 있다. 정상적인 JDBC코드의 흐름을 따르지 않고 중간에 어떤 이유로든 예외가 발생했을 경우 리소스를 반환하지 않으면, 시스템에 심각한 문제를 일으킬 수 있다. 이를 위해 예외 상황에 대한 처리를 해줘야한다. ✏️ 예를 들어, DAO 객체의 deleteAll()을 보자. public void deleteAll() throws SQLException { Connection c = dataSource.getConnection(); PreparedStatement ps = c.prepareStatement("delete from users"); ps.executeUpdate(); ps.close(); c.close(); } d..