Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
MongoDB의 document의 최대 크기는 16MB이다. 따라서 여러 사진이 저장되는 document는 16MB를 초과하여 저장되지 않는 오류가 발생할 수 있다. 이때는 GridFS를 이용하여 데이터를 분할 저장한다. GridFS는 두가지 종류의 document를 사용해서 저장된다. 이는 위의 그림에서 확인할 수 있듯이 fs.files와 fs.chunks이다. fs.files는 해당 데이터의 정보(크기, 생성 일시, 이름 등)이 저장되어 있고, 원하는 metaData도 삽입할 수 있다. 실질적인 대용량 데이터는 fs.chunks들에 256KB 크기로 분할되어 저장된다. chunk들이 자신의 상위 file의 id값을 가져서 참조하게된다. Configuration 설정 GridFS 파일 저장 이때의 in..
DB의 핵심은 역시 참조 관계의 설정이다. Spring Data MongoDB는 어노테이션을 통한 참조 관계 맵핑을 지원한다. 이전에는 주로 @DBRef 진행하였지만, Spring Data MongoDB 3.3.0부터 지원하는 @DocumentReference 어노테이션으로 설정해보자. Ingredient 문서가 Recipe를 참조하도록 @DocumentReference를 적용하였다. MongoDB의 장점은 다른 SQL DB와 다른게 일대 다 매핑을 위해 @OneToMany와 같은 어노테이션 적용이 필요없다는 점이다. @DocumentReference private List recipes; List로 Recipe를 참조하므로 Ingredient 문서 하나가 여러개의 레시피와 매핑된다. Ingredient..
공식 문서에도 잘 정리되어 있지만, 초심자 입장에서는 알 수 없는 오류를 많이 만나서 정리해본다. 다음 공식 문서를 따라 하면 된다. https://spring.io/guides/gs/accessing-data-mongodb/ Accessing Data with MongoDB this guide is designed to get you productive as quickly as possible and using the latest Spring project releases and techniques as recommended by the Spring team spring.io 일단 몽고 DB를 설치하자. 하진쓰님의 게시글을 따라 하면 쉽다. 본인의 경우에는 6.0 버전을 설치했지만 제대로 설치가 되지 ..
* 김영한님의 스프링 DB 2편 강좌를 수강하며 정리한 글입니다. * 스프링 DB 2편 - 데이터 접근 활용 기술 - 인프런 | 강의 백엔드 개발에 필요한 DB 데이터 접근 기술을 활용하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - 강의 소개 | 인 www.inflearn.com 이전 글에서는 스프링 트랜잭션의 방식에 대해 정리하였다. 이번에는 트랜잭션 간의 복잡한 상황에서 스프링의 대처를 확인해보자. @Test void double_commit(){ log.info("트랜잭션1 시작"); TransactionStatus tx1 = txManager.getTransaction(new DefaultTransactionAt..
* 김영한님의 스프링 DB 2편 강좌를 수강하며 정리한 글입니다. * 스프링 DB 2편 - 데이터 접근 활용 기술 - 인프런 | 강의 백엔드 개발에 필요한 DB 데이터 접근 기술을 활용하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - 강의 소개 | 인 www.inflearn.com 이전 글에서는 Spring JPA Data와 Querydsl을 정리하였다. @Transactional 스프링은 PlatformTransactionManager로 여러 트랜잭션 구현체를 추상화해 두었다. 스프링 부트는 사용 기술에 따라 자동으로 TransactionManager를 등록해준다. 스프링은 선언적 트랜잭션 관리를 사용해, @Transa..
* 김영한님의 스프링 DB 2편 강좌를 수강하며 정리한 글입니다. * 스프링 DB 2편 - 데이터 접근 활용 기술 - 인프런 | 강의 백엔드 개발에 필요한 DB 데이터 접근 기술을 활용하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - 강의 소개 | 인 www.inflearn.com 이전 글에서는 JPA에 대해 정리하였다. Spring Data JPA 관계형 DB만 존재하던 시절에서, 이제는 NoSQL DB도 많이 사용되고 있다. 서로의 패러다임과 구현 기술이 다르더라도 결국의 CRUD 기능은 동일하다. 다양한 DB들을 더 큰 관점에서 추상화한 것이 Spring Data JPA이다. 물론, Spring Data JPA는 J..
* 김영한님의 스프링 DB 2편 강좌를 수강하며 정리한 글입니다. * 스프링 DB 2편 - 데이터 접근 활용 기술 - 인프런 | 강의 백엔드 개발에 필요한 DB 데이터 접근 기술을 활용하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - 강의 소개 | 인 www.inflearn.com 이전 글에서는 MyBatis에 대해 정리하였다. JPA(Java Persistence API) JdbcTemplate와 MyBatis는 SQLMapper로 결국에는 SQL을 작성해야 한다. DB에 맞는 SQL문도 자동으로 작성해 주는 것이 ORM 기술(Obiect-relational mapping)이다. ORM은 객체를 관계형 데이터와 매핑하는..
* 김영한님의 스프링 DB 2편 강좌를 수강하며 정리한 글입니다. * 스프링 DB 2편 - 데이터 접근 활용 기술 - 인프런 | 강의 백엔드 개발에 필요한 DB 데이터 접근 기술을 활용하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - 강의 소개 | 인 www.inflearn.com 이전 글에서는 데이터 베이스의 테스트 세팅 방법에 대해 공부하였다. MyBatis MyBatis는 JdbcTemplate의 기능을 대부분 지원하면서 추가적으로 동적 쿼리도 편하게 작성할 수 있다. 또는 XML문서에 동적 쿼리 SQL을 작성해 놓을 수도 있다. 단, 스프링의 내장 기능이 아니기 때문에 설정이 필요하다. MyBatis는 공식 문서가..
* 김영한님의 스프링 DB 2편 강좌를 수강하며 정리한 글입니다. * 스프링 DB 2편 - 데이터 접근 활용 기술 - 인프런 | 강의 백엔드 개발에 필요한 DB 데이터 접근 기술을 활용하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - 강의 소개 | 인 www.inflearn.com 이전 글에서는 JdbcTemplate의 활용법에 대해서 정리하였다. 테스트 데이터베이스의 분리 @SpringBootTest는 상위 패키지에서 @SpringBootApplication을 찾아서 자동으로 설정 정보를 사용한다. 데이터베이스를 사용해 테스트를 하다 보면 DB에 남은 데이터로 인해 영향을 받을 수 있다. 테스트에는 외부의 변수가 개입하..
* 김영한님의 스프링 DB 2편 강좌를 수강하며 정리한 글입니다. * 스프링 DB 2편 - 데이터 접근 활용 기술 - 인프런 | 강의 백엔드 개발에 필요한 DB 데이터 접근 기술을 활용하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - 강의 소개 | 인 www.inflearn.com 이전 글에서는 프로필 스프링은 로딩 시점에 application.properties의 프로필 속성을 읽어온다. 프로필은 환경마다 다른 설정을 적용해야 할 때 사용한다. 이를 local로 설정하면 스프링은 local 프로필로 동작한다. @Bean @Profile("local") //이벤트도 빈등록해야 호출됨 public TestDataInit t..