스프링/6. 스프링 DB-2 59

9. 이름지정 파라미터

우리가 sql 할 때 String sql = "update item set item_name = ?, price = ?, quantity = ? where id = ?"; 이렇게 하는데 나중에 뭐 db에 colum이 추가된다던지 하면 저기에다 추가로 넣어야 된다. 근데 그러 한 과정에서 예를들면 저 위에 price랑 quantity 순서가 바뀌거나 등.. 그럼 진짜 큰일난다. 이런 일 없을 거 같지만, 실무에서 막 파라미터 10~20개가 넘어가는 일도 많이 있덴다. 버그 중 가장 고치기 힘든 버그가 DB버그라고 한다. 코드만 고치는 수준이 아니라, DB를 복구해야 하기 때문이다. DB복구하고 데이터 보정하고 넣고.. 들어가야 하는 인적 자원이 어마어마 하다. 코드를 줄이는 것도 중요하지만, 모호함을 제거..

7. Jdbc 템플릿 + h2를 리포지토리 구현체로

먼저 ItemRepository를 상속받아 구현하겠다. public class JdbcTemplateItemRepositoryV1 implements ItemRepository { public JdbcTemplateItemRepositoryV1(DataSource dataSource) { this.template = new JdbcTemplate(dataSource); //커넥션을 얻어오고 그래야 되기 때문에 필요. 어떤 DB인지도 알아야 하고. } private final JdbcTemplate template; @Override public Item save(Item item) { return null; } @Override public void update(Long itemId, ItemUpdate..

6. Jdbc 템플릿

sql 직접 사용 시 Jdbc 템플릿은 아주 좋은 선택지. 저번에도 봤겠지만, 리포지토리에서 반복되는 try catch 부분이랑 커넥션 반환해주는 것 까지 그러 한 어떤 crud 할 때 중복적으로 들어가지는 부분들을 템플릿 하나로 해결했었다. 그냥 템플릿에 sql, 바인딩될값들만 넣어주면 됐었다. select의 경우에는 추가로 Mapper까지. 거기다 자동으로 스프링 런타임 예외로 변환까지 트랜잭션을 다루기 위한 커넥션 동기화 까지 해준다는데.. 이거는 그냥 @Transactional하면 쓰레드로컬에 커넥션 맡겨놨다가, 커넥션을 얻어올 때 JdbcUtils였나 그걸로 얻어오면 그 쓰레드로컬에 있던 커넥션 얻어오는 거 아님? Jdbc템플릿이 그렇게 해준다고 트랜잭션을 다루기 위한 커넥션 동기화까지 해준다고..

5. DB생성

create table item ( id bigint generated by default as identity, item_name varchar(10), price integer, quantity integer, primary key (id) ) item이라는 테이블인데 id는 bigint 큰 int에 gerated by default as identity : id를 제공하지 않을 시 값을 자동 생성하며 값을 제공하면 해당 값을 id 칼럼에 입력. identity는 identity 전략이라고 하는 데, 기본 키 생성을 DB에 위임하는 방법. auto increment 같은 방법임. 자동 값 생성은 기본값은 1부터 1씩 올라가는 듯? 물론 id값을 직접 줄 수도 있는데, 주지 않는 게 좋음. 왜냐하면 내..

3. 간이 프로젝트의 설정부

빈을 등록해 주는 곳이다. @Configuration public class MemoryConfig { @Bean public ItemService itemService() { return new ItemServiceV1(itemRepository()); } @Bean public ItemRepository itemRepository() { return new MemoryItemRepository(); } } 서비스와 리포지토리를 빈으로 등록해 줬다. 요청이 들어오면 서블릿 컨트롤러에서 먼저 받고, 어디를 요청한 것인지 url에서 찾는 등 해서 등록한 컨트롤러를 조회하여 찾고, 그 컨트롤러를 실행한다. 편리하게 갈아끼기 위해 수동으로 등록했다. 컨트롤러는 컴포넌트 스캔이 될 것이다. (다른 것도 사실 @..

1. 데이터 접근 기술들

크게 2가지로 나뉨. SQLMapper, ORM 이거는 우리가 직접 sql문을 짜는 것. 저번에 봤듯이 Jdbc 템플릿은 try catch해서 커넥션 얻어오고 커넥션 닫고 하는 것 등 여러가지 중복을 제거해 줌. ORM은 우리가 직접 sql문을 작성하지 않는다. 마치 리스트나 그런 것에 객체를 넣듯이 넣는 느낌이다. 그럼 알아서 JPA 구현체가 그걸 sql로 바꿔서 jdbc에 전달한다. 결국 두 기술 모두 Jdbc를 쓴다. https://qwefdg3.tistory.com/538?category=1139473 JPA는 인터페이스이다. 그리고 각 구현은 각 회사들이 자기네들 db에 맞게 만들었을듯.. 어 근데 가장 많이 사용하는게 하이버 네이트라고 한다. 그럼 DB회사별로 있는 건 또 아닌가보네? 스프링 ..