Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 이미지처리
- expo 아이폰
- jotai
- 랭체인 툴
- langchain react agent
- expo 안드로이드
- 상태관리
- nestjs시큐리티
- langchain tools
- 자바공부
- rnn gnsfus
- vllmmcp
- expo 버전 오류
- react
- 크로마DB
- langchain
- expo go 오류
- 타입스크립트상태관리
- expo 아이폰 오류
- comfyui
- expo 51 버전
- 스프링 공부
- expo 51 오류
- VectorDB
- langgraph mcp
- 네스트시큐리티
- 리액트 네이티브 오류
- 리액트 네이티브
- langgraph
- AI
Archives
- Today
- Total
영리의 테크블로그
[구름톤 유니브] 1. ERD 설계 및 JPA 복습 본문
erd 설계하고 jpa, mybatis 복습하였다.
팀 회의 설계도
요구사항 분석
- 사용자(Users): 로그인·회원 관리
- 공연(Shows): 제목, 시간, 장소 등
- 좌석(Seats): 공연별 구역·행·번호
- 예약(Reservations): 사용자 ↔ 공연 매핑, 상태 관리
- 결제(Payments): 예약 단위 결제 정보
- 매핑 테이블: 예약 ↔ 좌석 (다대다 해소)
개체(Entity) 식별
- Users
- Shows
- Seats
- Reservations
- ReservationSeats
- Payments
관계(Relationship) 정의
- Users 1:N Reservations
- Shows 1:N Seats
- Shows 1:N Reservations
- Reservations 1:N ReservationSeats
- Seats 1:N ReservationSeats
- Reservations 1:1(또는 1:N) Payments
물리 모델링
JPA 정리
- 엔티티 매핑
@Entity @Table(name = "users") public class User { @Id @GeneratedValue private Long id; private String name; private String email; private String passwordHash; private LocalDateTime createdAt; // getter/setter }
- 관계 매핑
- OneToMany / ManyToOne
- ManyToMany는 중간 테이블(ReservationSeat)로 풀어내는 것이 권장됨
- fetch 전략 (LAZY vs EAGER) 설정
- Repository 인터페이스
public interface ReservationRepository extends JpaRepository<Reservation, Long> { List<Reservation> findByUserId(Long userId); }
- JPQL & QueryDSL
- 복잡한 조건이 필요할 땐 @Query로 JPQL 직접 작성
- 타입 안전성을 위해 쿼리DSL 도입 검토
- Q.JPA 와 마이바티스 섞어쓴다 했을때 JPQL 대신 마이바티스 를 쓰는 이유는?
- GPT A. 단순 CRUD 수준이라면 JPA(JPQL)로도 충분하지만,
- 동적·복잡 SQL, DB 특화 기능, 성능 최적화, 레거시 SQL 재사용 등이 필요할 때는 MyBatis를 섞어 쓰는 것이 훨씬 편리하고 효율적입니다.
- 트랜잭션 관리
- @Transactional 어노테이션으로 서비스 계층 트랜잭션 범위 지정
- 예외 발생 시 롤백 전략 확인 (rollbackFor 등)
MyBatis 정리
XML 기반 설정과 SQL 매핑을 선호할 때 사용
- 설정 파일 (mybatis-config.xml)
<?xml version="1.0" encoding="UTF-8" ?> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!-- DB 커넥션 설정 --> </dataSource> </environment> </environments> <mappers> <mapper resource="mappers/UserMapper.xml"/> </mappers> </configuration>
- 매퍼 XML 예시 (UserMapper.xml)
<mapper namespace="com.example.mapper.UserMapper"> <select id="selectUser" resultType="User"> SELECT * FROM users WHERE id = #{id} </select> <insert id="insertUser" useGeneratedKeys="true" keyProperty="id"> INSERT INTO users (name, email, password_hash, created_at) VALUES (#{name}, #{email}, #{passwordHash}, #{createdAt}) </insert> </mapper>
- Mapper 인터페이스
public interface UserMapper { User selectUser(Long id); void insertUser(User user); }
- 장점 vs 단점
- 장점: SQL 제어력 극대화, 복잡도 높은 쿼리 유연
- 단점: XML 관리 부담, 코드↔SQL 분리로 가독성 저하 가능성
결론
JPA Mybatis 섞어야함.
Ibatis 와의 차이점은 뭘까?