Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
Spring과 MySQL을 연동하기 위해 모든 세팅을 맞추고 실행도 잘 되었다. 하지만, 재부팅만하면 MySQL root 계정 접속 시, 'Access denied for user 'root'@'localhost' (using password: YES)' 라는 오류를 계속 만나게 된다. 문제는 이 오류가 비밀번호가 맞지 않아 발생하는 오류인데, 분명 맞는 번호를 입력해도 'Access denied for user 'root'@'localhost' (using password: YES)' 오류 만이 발생하였다. 몇번을 MySQL을 재설치 하더라도 재부팅만 하면 동일한 현상이 발생한다. 포기하고 이전에 사용하던 MariaDB를 적용해보기 위해 MariaDB를 테스트하던 중 설마 둘이 충돌이 난건 아닐까 생각..
외래키의 위치 일단 데이터베이스의 개념부터 설명하고 들어가자. 두개의 엔티티가 관계(연관)를 가지면 외래키가 두 엔티티중 하나에 들어가야한다. 예를 들어 프로젝트와 프로젝트 매니저 사원의 관계를 생각해보자. 프로젝트에는 단 한명의 매니저가 반드시 존재한다. (프로젝트가 관계에 완전 참여) 따라서 소수의 인원만이 프로젝트 매니저가 된다. (사원은 관계에 부분 참여) 즉, 다음과 같이 표현된다. 일단, 사원 테이블에 자신이 매니저를 맞고있는 컬럼이 있다고 생각해보자. 해당 컬럼은 프로젝트의 기본키를 외래키로 가져오게 된다. 그러나 소수의 사원만 매니저를 담당하므로 대부분의 사원에게는 NULL 값이 삽입되어야 한다. 수 많은 사원들의 해당 필드값이 NULL로 채워진다면, 공간을 낭비하게 된다. 반대로 프로젝트..
MariaDB로 새로 JPA를 공부하다 미칠뻔한 오류를 만나 정리해본다. .... spring.jpa.hibernate.ddl-auto=create-drop Maria DB에서는 application.properties 에 이와 같은 설정을 해두면 Entity 저장시 자동으로 SQL 구문이 생성되어 Table이 새로 만들어진다. 그래서 본인은 일단 두개의 엔티티가 서로를 참조하게 만들었는데, 하나는 테이블이 잘 생성이 되지만 하나는 죽어도 오류가 나면서 spring error: 1146-42s02: table doesn't exist 오류가 발생했다. 이리저리 구글링을 해보며 해결법을 적용을 해보아도 해결이 되지 않았는데 전체 오류를 천천히 읽어보니 Table 생성 sql 구문 다음에 이와 같은 오류를 ..
DTO(Data Transfer Object) 스프링은 크게 아래의 3가지 계층로 나눠진다. 컨트롤러 - 비즈니스 - 데이터 이때 계층 사이에 이동하는 데이터는 항상 같은 클래스를 이용하는 것이 아니다. 실제로 데이터베이스에 저장되는 엔티티 클래스를 모든 계층에서 사용하기 보다는 DTO(Data Transfer Object)로 변환하여 정말 필요한 데이터와 로직만을 담는다. 예를 들어 DTO는 데이터 이동만을 담당하므로 setter와 같은 매서드를 포함시키지 않는 방식이다. 아래의 그림 처럼 데이터베이스와 관련이 있다면 Entity로 다루고, 데이터 쪽에서 멀어질 수록 간단한 DTO로 데이터를 다룬다. 비즈니스 계층과 데이터 계층간의 데이터 이동은 DTO 또는 Entity를 사용한다. 이는 팀별 업무 규..
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..