본문 바로가기

코딩 학원(국비지원)

64일차 코딩학원

반응형

●  64일차 코딩학원 수업시간 공부내용정리


1. 프래시맨 뜻 : 신선한 사람. 아직 지성이 없는 상태. 처음에는 '열심히 하겠습니다' 라는 마음으로 시작해야한다. 

장화신고 하수구에 들어가서 청소하는 것부터 시작이다. 그런 것들이 쌓여야 나중에 기회가 올 때 점프할 수 있다. 

 

2.Postgresql은 Database에 해당하는 부분이다. 

3. src/test/java에서 작업 중 

 

4. jUnit은 디버깅과 비슷해보인다. 테스트를 하는 이유는 책을 쓰고 수정하는 과정과 비슷하다. jUnit테스트를 통해 코드의 오류를 찾거나 수정을 통해 효율적인 코드를 만들 수 있다. 

 

5. 단위테스트가 계속되려면 삭제하고 삽입하고, 삭제하고 삽입하는 과정이 반복되어야한다. 

 

6. 예외처리가 계속 나오네? 왜 예외처리를 해줘야만하는 거지? 

 

7. @Test를 하기위해서 객체를 많이 만든다. 쿼리문이 길어진다. 흐름을 따라가고 있다. 완벽히 이해되지는 않지만 따라치고 있다. 

@Test
	public void selectUserTest() throws SQLException {
		deleteAll();
		User user = new User("earth", "0629", "earth", "earth@gmail.com", new Date(), "fb", new Date());
		int rowCnt = insertUser(user);
		User user2 = selectUser("earth");
		
		assertTrue(user.getId().equals("earth"));
	}

	private User selectUser(String id) throws SQLException {
		Connection cn = ds.getConnection();
		String sql = "select * from t_user where id = ?";
		PreparedStatement pstmt = cn.prepareStatement(sql);
		pstmt.setString(1, id);
		
		ResultSet  rs = pstmt.executeQuery();
		if(rs.next()) {
			User user = new User();
			user.setId(rs.getString(1));
			user.setPwd(rs.getString(2));
			user.setName(rs.getString(3));
			user.setEmail(rs.getString(4));
			user.setBirth(new Date(rs.getDate(5).getTime()));
			user.setSns(rs.getString(6));
			user.setReg_date(new Date(rs.getTimestamp(7).getTime()));
			return user;
		}
		return null;
	}
}

 

8. Spring에서 @Test를 진행하면 Postgresql 테이블에 데이터가 추가된다. 각각의 테스트를 하나씩 실행해보면 차이점을 알 수 있다. 

 

package com.earth.tdd;

import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Date;

import javax.sql.DataSource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/**/root-context.xml")
public class DMLTest {
	@Autowired
	DataSource ds;
	
	@Test
	public void springJdbcConnTest() throws SQLException {
		Connection cn = ds.getConnection();
		System.out.println("cn =" + cn);
		assertTrue(cn != null);			// 괄호 안의 조건식이 true면 테스트 성공, 아니면 실패
		
	}
	
	@Test
	public void insertUserTest() throws SQLException {
		User user = new User("earth", "0629", "earth", "earth@naver.com", 
				new Date(), "youtube", new Date());
		deleteAll();
		int rowCnt = insertUser(user);
		
		assertTrue(rowCnt == 1);
	}
	
	// 사용자 정보를 t_user 테이블에 저장하는 메서드 
	private int insertUser(User user) throws SQLException {
		Connection cn = ds.getConnection();
		/*
		 * 인파라미터에는 물음표를 사용함
		 * 정확한 값을 나중에 채워주겠다는 의미임
		 */
		String sql = 
				"INSERT INTO t_user VALUES(?, ?, ?, ?, ?, ?, now())";
		PreparedStatement psmt = cn.prepareStatement(sql);
		/*
		 * 인파라미터 설정시 데이터 타입에 맞는 set메서드를 사용함 
		 * set메서드는 데이터 타입별로 다양하게 준비되어 있음 
		 */
		psmt.setString(1, user.getId());
		psmt.setString(2, user.getPwd());
		psmt.setString(3, user.getName());
		psmt.setString(4, user.getEmail());
		psmt.setDate(5, new java.sql.Date(user.getBirth().getTime()));
		psmt.setString(6, user.getSns());
		
		int rowCnt = psmt.executeUpdate();
		return rowCnt;
	}

	private void deleteAll() throws SQLException {
		Connection cn = ds.getConnection();
		String sql = "delete from t_user";
		PreparedStatement pstmt = cn.prepareStatement(sql);
		pstmt.executeUpdate();
	}
	
	@Test
	public void selectUserTest() throws SQLException {
		deleteAll();
		User user = new User("earth", "0629", "earth", "earth@gmail.com", new Date(), "fb", new Date());
		int rowCnt = insertUser(user);
		User user2 = selectUser("earth");
		
		assertTrue(user2.getId().equals("earth"));
	}

	private User selectUser(String id) throws SQLException {
		Connection cn = ds.getConnection();
		String sql = "select * from t_user where id = ?";
		PreparedStatement pstmt = cn.prepareStatement(sql);
		pstmt.setString(1, id);
		
		ResultSet  rs = pstmt.executeQuery();
		if(rs.next()) {
			User user = new User();
			user.setId(rs.getString(1));
			user.setPwd(rs.getString(2));
			user.setName(rs.getString(3));
			user.setEmail(rs.getString(4));
			user.setBirth(new Date(rs.getDate(5).getTime()));
			user.setSns(rs.getString(6));
			user.setReg_date(new Date(rs.getTimestamp(7).getTime()));
			return user;
		}
		return null;
	}
	
	@Test
	public void deleteUserTest() throws SQLException {
		deleteAll();
		
		int rowCnt = deleteUser("earth");
		assertTrue(rowCnt == 0);
		
		User user =
				new User("earth", "0629", "earth", "earth@gmail.com", new Date(), "fb", new Date());
		rowCnt = insertUser(user); 
		assertTrue(rowCnt == 1);
		
		rowCnt = deleteUser(user.getId());
		assertTrue(selectUser(user.getId()) == null);
		
	}

	private int deleteUser(String id) throws SQLException {
		Connection cn = ds.getConnection();
		
		String sql = "delete from t_user where id = ?";
		PreparedStatement pstmt = cn.prepareStatement(sql);
		pstmt.setString(1, id);
		
//		int rowCont = pstmt.executeUpdate();
//		return rowCont;
		
		return pstmt.executeUpdate();
		
	}
	
	@Test
	public void updateUserTest() throws SQLException {
		deleteAll();
		
		//사용자 추가
		User user = 
				new User("earth", "0269", "earth", "earth@naver.com", new Date(), "naver", new Date());
		int rowCnt = insertUser(user);
		assertTrue(rowCnt == 1);
		
		//업데이트 내용. 사용자 정보 수정
		user.setPwd("1234");
		user.setName("JSH");
		user.setEmail("jsh@gmail.com");
	    assertTrue(rowCnt == 1);
	}
	
	private int updateUser(User user) throws SQLException {
		Connection cn = ds.getConnection();
		String sql = "update t_user "
				+ "set pwd = ?, name = ?, email = ?, birth = ?, sns=?, reg_date = ? "
				+ "where id = ? ";
		PreparedStatement pstmt = cn.prepareStatement(sql);
	    pstmt.setString(1, user.getPwd());
	    pstmt.setString(2, user.getName());
	    pstmt.setString(3, user.getEmail());
	    pstmt.setDate(4, new java.sql.Date(user.getBirth().getTime()));
	    pstmt.setString(5, user.getSns());
	    pstmt.setDate(6, new java.sql.Date(user.getReg_date().getTime()));
	    pstmt.setString(7, user.getId());	
	    int rowCnt = pstmt.executeUpdate();
	    
	    return rowCnt;
	}
}

 

반응형

'코딩 학원(국비지원)' 카테고리의 다른 글

66일차 코딩학원  (0) 2023.04.24
65일차 코딩학원  (1) 2023.04.21
63일차 코딩학원  (1) 2023.04.19
62일차 코딩학원  (1) 2023.04.18
61일차 코딩학원  (1) 2023.04.17