JPA 개요

양성빈·2022년 3월 27일
1

참고

JPA가 무엇인가?

  • 순수 JDBC 등록
    과거에는 객체를 DB에 저장하려면 아래처럼 복잡한 JDBC API와 SQL을 한땀한땀 작성해야한다.
//글쓰기 메소드
	public int write(String title, String userID, String content) {
		String sql = "insert into board values(?, ?, ?, ?, ?, ?)";
		try {
			PreparedStatement pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, getNext());
			pstmt.setString(2, title);
			pstmt.setString(3, userID);
			pstmt.setString(4, getDate());
			pstmt.setString(5, content);
			pstmt.setInt(6, 1); //글의 유효번호
			return pstmt.executeUpdate();
		}catch (Exception e) {
			e.printStackTrace();
		}
		return -1; //데이터베이스 오류
	}
  • JDBC Template, MyBatis
    그 후에 위의 코드의 복잡성을 줄이고자 SQL Mapper라는것이 나옴으로 개발코드는 줄었다.
    하지만 SQL을 문자열로 type safe하지 않게 일일이 적어야했다.
@Repository
public class BoardDao {
	private final String LIST_BOARDS = "select seq, title, left(regdate,16) regdate, id, writer, cnt from board order by seq desc limit ?, ?";
	private final String SEARCH_BOARDS = "select seq, title, left(regdate,16) regdate, id, writer, cnt from board "
			+ "where match(title) against(:keyword) or match(content) against(:keyword) order by seq desc limit :offset, :count";

/**
	 * 게시글 목록 조회
	 * 
	 * @param page  페이지
	 * @param count 갯수
*/
public List<Board> listBoards(Search search) {
		return jdbcTemplate.query(LIST_BOARDS, BOARD_ROW_MAPPER,
				search.getOffset(), search.getCount());
	}
}
  • JPA
  1. JPA가 나옴으로 개발생산성 향상 및 개발 속도 및 유지 보수 측면에서 많이 뛰어났다.
  2. JPA가 나온 이후 SQL문 조차도 작성할 필요가 없어졌다.
  3. 단, 학습곡선이 너무 높다.
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
public class Board {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id; // PK

    private String title; // 제목

    private String content; // 내용

    private String writer; // 작성자

    private int hits; // 조회 수
}
  • JPA 실무에서 어려운 이유?
  1. 객체와 테이블을 딱 올바르게 매팡하고 설계하는 방법을 잘 모른다.
  2. 예제와 달리 실무에서는 수십개의 복잡한 객체와 테이블로 구성되어 있다.
  3. JPA의 내부 동작 방식을 이해하지 못하고 사용
  4. JPA가 어떤 SQL을 만들어내고 언제 만들어내는지를 이해가 힘듬

마무리

첫 강의를 듣고나서 많이 깨달은 점들이 있었다. 현재, 나는 JPA가 뭔지는 알지만 정확하게
어떻게 동작하는지를 파악을 못하였다. 그 점에 대한 반성을 하면서 이번 강의를 통해 어떻게
JPA가 동작하는지를 알고 상태관리등 많은것을 학습하고 내것으로 해야겠다는 다짐을 하게된
계기가 되었다.

profile
모든 것을 즐길줄 아는 개발자입니다!

0개의 댓글

관련 채용 정보