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개의 댓글

Powered by GraphCDN, the GraphQL CDN