본문 바로가기

전체 글454

7.3 동영상을 활용한 DAO 리팩토링 실습 리팩토링 과정에서 어려움 중 하나는 지금까지 서비스하던 기능이 정상적으로 동작하는 상태에서 리팩토링을 진행해야 한다는 것이다. 즉, 소스코드를 리팩토링하는 경우 가능한 컴파일이 되지 않는 상태가 발생하지 않도록 리팩토링을 해야 한다. 만약 컴파일이 되지 않는 상태가 되더라도 최대한 빠른 시간 내에 컴파일 가능한 상태로 만든 후 테스트를 통과해야 한다. 이 같은 과정으로 리팩토링 하려면 리팩토링 전과 후를 연결해 주는 과도기적인 단계가 필요하다. 이는 소스코드 리팩토링 뿐만 아니라 데이터베이스에 대한 리팩토링 또한 같다. 안정적인 리팩토링을 하려면 불필요한 코드나 단계라 생각할 수 있는 과도기적인 단계가 반드시 필요하다. 급한 마음에 이 단계를 생략하고 리팩토링을 진행하는 경우 문제가 발생하는 경우를 종종.. 2025. 7. 13.
7.2.2 요구사항 분리 및 힌트 클래스 다이어그램을 활용해 각 단계별 힌트를 제공하면서 리팩토링을 진행한다. 리팩토링을 시작하는 시점의 UserDao 는 다음과 같이 4개의 메서드로부터 시작한다. 리팩토링 과정은 최대한 세분화해 단계적으로 진행한다. - UserDao 클래스-> insert(User) void-> update(User) void-> findAll() List-> findByUserId(String) User · INSERT, UPDATE 쿼리는 비슷하기 때문에 먼저 INSERT, UPDATE 쿼리는 비슷하기 때문에 먼저 INSERT, UPDATE 쿼리를 가지는 메서드의 중복 제거 작업을 진행한다. HINT먼저 변하는 부분과 변하지 않는 부분을 Extract Method 리팩토링을 통해 분리한다. 리팩토링 결과는 다음과 .. 2025. 7. 9.
7.2.1 요구사항 JDBC에 대한 공통 라이브러리를 만들어 개발자가 SQL 쿼리, 쿼리에 전달할 인자, SELECT 구문의 경우 조회한 데이터를 추출하는 3가지 구현에만 집중한다. 또한 SQLException 을 런타임 Exception 으로 변환해 try/catch 절로 인해 소스코드의 가독성을 해치지 않도록 해야 한다.UserDao 리팩토링 실습은 https://github.com/slipp/jwp-basic 저장소의 step2-user-with-mvc-framework 에서 시작할수 있다. 리팩토링 과정에서 테스트는 src/test/java 에 있는 next.dao.UserDaoTest 클래스를 활용하면 된다. 앞의 JDBC 실습 과정에 있는 회원목록, 개인정보수정 실습을 진행하지 않으면 UserDaoTest 는 .. 2025. 7. 8.
7.2 DAO 리팩토링 실습 JDBC를 사용하는 UserDao 는 많은 중복 코드가 존재한다. 데이터베이스에 쿼리 하나를 실행하기 위해 개발자가 구현해야 할 코드가 너무 많다. 구현할 코드가 각 쿼리마다 다른 부분이라 개발자가 구현할 수밖에 없다면 모르겠지만 대부분의 구현은 매번 반복되는 부분이다. 이와 같이 많은 중복이 있고, 반복적인 부분이 있는 코드는 공통 라이브러리를 만들어 제거할 수 있다. UserDao 의 중복을 제거하는 작업을 통해 공통 라이브러리를 구현하는 과정에 대해 살펴본다. UserDao 중복 코드를 제거하는 과정을 연습해 놓으면 엑셀에서 데이터 읽기와 쓰기, 웹 서버 API와의 통신을 담당하는 HTTP 클라이언트 라이브러리, 중복 코드가 많은 사내 라이브러리 코드 등 다양한 부분에 활용할 수 있다.중복 코드를 .. 2025. 7. 4.
7.1.3 개인정보 수정 실습 UserDao 는 개인정보를 수정할 수 있는 기능을 제공하고 있지 않다. UPDATE SQL문을 활용해 개인정보를 수정할 수 있는 기능을 추가하고 컨트롤러가 추가한 메서드를 사용하도록 리팩토링한다. HINT구글에서 "sql update"로 검색해 UPDATE 구문 문법을 학습 회원 목록과 개인정보 수정에 대한 구현은 다음 단계의 실습은 "DAO 리팩토링 실습"을 위해 반드시 진행한다. 실습을 완료한 것에 대한 확인은 https://github.com/slipp/jwp-basic 저장소의 step2-user-with-mvc-framework 브랜치에 소스코드 중 src/test/java 에 있는 next.dao.UserDaoTest 클래스 테스트가 성공하도록 구현하면 된다.참고도서 : https://roa.. 2025. 7. 4.
7.1.2 회원 목록 실습 UserDao 는 회원 전체 목록을 조회하는 findAll() 메서드를 findByUserId() 를 참고해 구현한다. HINTSELECT userId, password, name, email FROM USERS; 참고도서 : https://roadbook.co.kr/169 [신간안내] 자바 웹 프로그래밍 Next Step● 저자: 박재성 ● 페이지: 480 ● 판형: 사륙배변형(172*225) ● 도수: 1도 ● 정가: 30,000원 ● 발행일: 2016년 9월 19일 ● ISBN: 978-89-97924-24-0 93000 [강컴] [교보] [반디] [알라딘] [예스24] [인터파크] [샘roadbook.co.kr 2025. 7. 3.
7.1.1 실습 코드 리뷰 및 JDBC 복습 step2-user-with-mvc-framework 브랜치 소스코드를 확인해 보면 서버가 시작하는 시점에 회원 정보를 저장할 테이블을 초기화하고 있다. 초기화하는 테이블 생성 스크립트는 src/main/resource 디렉토리 아래 jwp.sql 파일에 다음과 같이 구현되어 있다. - src/main/resource/jwp.sqlDROP TABLE IF EXISTS USERS;CREATE TABLE USERS ( userId varchar(12) NOT NULL , password varchar(12) NOT NULL , name varchar(20) NOT NULL , email varchar(50) , PRIMARY KEY (userId));INSERT I.. 2025. 6. 30.
7.1 회원 데이터를 DB에 저장하기 실습 데이터베이스에 대한 실습을 간소화하기 위해 별도의 데이터베이스를 설치하지 않고 실습이 가능한 상태로 진행한다. 경량 데이터베이스 중의 하나인 H2 데이터베이스(http://www.h2database.com/ H2 데이터베이스는 자바로 구현된 데이터베이스로 jar 파일만 추가하면 별도의 설치 없이 사용 가능하다. 이 책의 모든 실습은 H2의 메모리 데이터베이스 기능만 활용하고 있는데 서버 모드로 실행할 수도 있다)를 사용한다.이 장의 실습은 저장소의이터베이스에 대한 실습을 간소화하기 위해 별도의 데이터베이스를 설치하지 않고 실습이 가능한 상태로 진행한다. 경량 데이터베이스 중의 하나인 H2 데이터베이스(http://www.h2database.com/ H2 데이터베이스는 자바로 구현된 데이터베이스로 jar .. 2025. 6. 29.
7장 DB를 활용해 데이터를 영구적으로 저장하기 HTTP 웹 서버가 가지고 있었던 문제 중의 하나는 "사용자가 입력한 데이터가 서버를 재시작하면 사라진다."는 것이다. 데이터를 영구적으로 저장하고 조회할 필요가 있는데 이 문제에 대한 해결책은 데이터베이스 서버를 도입해 해결할 수 있다.자바 진영은 JDBC라는 표준을 통해 데이터베이스와의 통신을 담당하도록 지원하고 있다. JDK에서 제공하는 java.sql 패키지의 JDBC 소스코드를 열어보면 구현 코드는 거의 없고, 인터페이스만 정의해 제공하고 있다. 즉, JDBC는 데이터베이스 통신을 위한 규약만 정하고 이에 대한 구현체는 데이터베이스를 만들어 서비스하는 회사가 제공하도록 하고 있다. 서블릿 또한 같다. 서블릿 또한 인터페이스만 정의하고 서블릿 컨테이너를 만들어 제공하는 회사 또는 단체가 이 인터페.. 2025. 6. 28.