1. 개발 진행 및 완료 상황
프로젝튼 30프로정도 진행된 상태고 팀장님은 추천공고 부분, 나는 평가하기 부분, 다른 팀원은 커뮤니티 댓글 부분을 맡아 진행중이다. 기존에 더미데이터들은 뤼튼을 사용해서 삽입하였다. 팀원들과 코드 리뷰를 통해 피드백을 주고받으며, 각자 맡은 역할에 대한 협업이 원활하게 진행되고 있다. 특히, 추천 공고 부분과 평가하기 부분 간의 데이터 연동에 대해 논의한 결과, 정보를 공유하는 방향으로 개선 방안을 찾았다.
2.새로 배운 내용
JPA를 수업시간에 배웠지만 JDBC Template을 사용했다. 현장에서는 잘 쓰이지 않는 기법이지만 그냥 경험삼아 공부도 할 겸, 사용법도 단순해서 적용해보았다.
특징 | JPA | JdbcTemplate | MyBatis |
개념 | 객체-관계 매핑(ORM) | JDBC를 간편하게 사용하기 위한 템플릿 | SQL을 XML 또는 어노테이션으로 관리하는 데이터 접근 프레임워크 |
쿼리 작성 방식 | JPQL 또는 Criteria API 사용 | SQL 직접 작성 | XML 또는 어노테이션으로 SQL 정의 |
매핑 방식 | 데이터베이스 테이블과 객체 자동 매핑 | 수동 매핑(RowMapper 사용) | SQL 결과를 객체로 수동 매핑 |
트랜잭션 관리 | 내장된 트랜잭션 관리 지원 | 수동으로 처리 필요 | 수동으로 처리 필요 |
유연성 | 복잡한 도메인 모델에서 유리 | SQL 쿼리에 대한 유연성 제공 | 복잡한 SQL 쿼리 작성에 유리 |
성능 | ORM으로 인한 성능 저하 가능 | 성능이 더 좋을 수 있음 | 성능을 직접 관리할 수 있음 |
사용 사례 | 복잡한 도메인 모델, 객체 지향 접근 | 간단한 CRUD 작업, 성능이 중요한 경우 | SQL 쿼리를 세밀하게 제어해야 하는 경우 |
@GetMapping("/notifications/{noticeIdx}")
public ResponseEntity<Announce> getNoticeDetail(@PathVariable("noticeIdx") Integer noticeIdx) {
Announce announce = noticeService.getAnnouncementDetails(noticeIdx);
return ResponseEntity.ok(announce);
}
public Announce getAnnouncementDetails(Integer noticeIdx) {
// NOTICE 테이블에서 ANNOUNCEMENT_IDX 가져오기
Integer announcementIdx = noticeDao.getAnnouncementIdx(noticeIdx);
if (announcementIdx == null) {
throw new IllegalArgumentException("해당 알림에 대한 공지사항이 존재하지 않습니다.");
}
// ANNOUNCEMENT 테이블에서 상세 데이터 가져오기
return noticeDao.getAnnouncementDetails(announcementIdx);
}
public Announce getAnnouncementDetails(Integer announcementIdx) {
String sql = "SELECT ANNOUNCEMENT_IDX, COMPANY_IDX, USER_IDX, TO_CHAR(SCADULE, 'YYYY-MM-DD HH24:MI') AS SCADULE, LOCATION, INFORMATION, WRITEDATE FROM ANNOUNCEMENT WHERE ANNOUNCEMENT_IDX = ?";
return jdbcTemplate.queryForObject(sql, (rs, rowNum) -> {
Announce announce = new Announce();
announce.setAnnouncementIdx(rs.getInt("ANNOUNCEMENT_IDX"));
announce.setCompanyIdx(rs.getInt("COMPANY_IDX"));
announce.setUserIdx(rs.getInt("USER_IDX"));
announce.setScadule(rs.getString("SCADULE"));
announce.setLocation(rs.getString("LOCATION"));
announce.setInformation(rs.getString("INFORMATION"));
announce.setWritedate(rs.getString("WRITEDATE"));
return announce;
}, announcementIdx);
}
3. 문제 해결 경험
프로젝트 진행 중, 초기 데이터 매핑 과정에서 RowMapper를 사용하여 매핑하는 데 어려움이 있었다. SQL 쿼리 결과와 자바 객체 간의 필드 이름 불일치로 인해 버그가 발생하였고, 이를 해결하기 위해 SQL 쿼리를 수정하고 RowMapper를 재구성하였다.
set으로 수동 매핑해야한다는 단점이 JPA있지만 가독성은 더 좋은 거 같다. 그러나 Entity수가 많아지고 db가 복잡해질수록 사용하기는 힘든 방법이다.
'개발일지 > GreenMiniProject2' 카테고리의 다른 글
9일차(종료) (0) | 2024.12.06 |
---|---|
8일차 (0) | 2024.12.05 |
2일차 (0) | 2024.11.21 |
[project2]1일차 (0) | 2024.11.20 |