본문 바로가기
관리자

Programming-[Backend]

(394)
[JPA기본] 6. 양방향 연관관계 1. 양방향 연관관계의 필요성 이전 글에서는 Member 객체에 teamId 대신 Team 객체 자체를 넣는 것이 효율적이고, 이렇게 함으로써 단방향 연관관계를 맺을 수 있다는 것을 배웠다. 그리고 이를 이용하여 특정 Member가 속한 Team을 얻어낼 수 있었다. 테이블은 외래키를 통해 이미 양방향 관계가 있는 것과 같은 구조이다 그런데 만약 특정 Team에 해당하는 Member 들을 조회하고 싶다면? 테이블의 연관 관계에서는 그냥 TEAM 테이블과 MEMBER 테이블을 조인하여, TEAM.TEAM_ID = MEMBER.TEAM_ID인 항목을 MEMBER 테이블에서 조회하면 된다. 이전 글에서 살펴본 것처럼 Member가 소속된 Team을 찾는 경우도 이런 방식으로 하면 된다. 다시 말해, 테이블은 ..
[JPA기본] 5. 기본 키 매핑과 연관관계 매핑 기초 1. 기본 키 매핑 @GeneratedValue - 기본 키 생성 전략 기본키를 매핑하는 @Id 어노테이션과 @GeneratedValue 어노테이션에 대해서 알아본다. id값을 직접 매핑한다면 @Id 어노테이션만 있으면 된다. 그런데 수많은 데이터를 처리하므로 보통 기본 키값인 Id값은 자동으로 생성되도록 하는데, 이것을 해주는 것이 @GeneratedValue 어노테이션이다. @GeneratedValue 어노테이션은 자동 생성을 하는 방식을 strategy 속성으로 지정해줄 수 있다. 이 속성의 value는 다음 4가지로 설정이 가능하다. ex) @GeneratedValue(strategy = GenerationType.IDENTITY) GenerationType.AUTO GenerationType.I..
[JPA기본] 4. DDL 자동 생성과 엔티티 매핑 어노테이션 JPA를 잘 사용하기 위해서는 자바 객체인 엔티티와 RDB의 테이블간 매핑을 잘하는 것이 중요하다. 이 내용을 잘 모르면 에러가 발생할 경우가 많아지고 시간을 많이 허비하게 될 수 있다. 1. 데이터베이스 스키마 자동생성 DDL 자동 생성 데이터베이스 스키마 자동생성은 객체에 정의한 정보를 바탕으로 테이블을 만들어주는 기능이다. JPA가 DDL(Data Definition Language, 데이터 베이스의 스키마(테이블명, 열 이름 등)을 만들어주는 SQL문 집합) 을 자동으로 생성해준다. 단순히 생성해주는 것이 아니라, persistence.xml에서 지정한 SQL dialect에 맞는 적절한 DDL을 생성해준다. 예를 들어 String값은 일반적으로 테이블에서는 varchar 타입으로 분류되지만, O..
[JPA기본] 3. 영속성 컨텍스트 - JPA 내부 동작 방식 앞서 객체와 RDB의 상호소통의 가장 기초적인 예제를 살펴보면서 객체와 RDB간 매핑이 중요하다는 것을 간단히 체험해봤다. 이 부분에 대해서는 뒤에서 더 깊게 다루게 된다. 이런 ORM의 구조 외에 가장 중요한 점이 있다면 영속성 컨텍스트 개념이다. JPA가 동작하는 기본 방식으로 이 부분을 잘 이해해야 문제가 생겼을 때 대응을 잘할 수 있다. 1. 영속성 컨텍스트와 엔티티 생명주기 영속성 컨텍스트 영속성 컨텍스트는 엔티티를 영구 저장하는 환경이다. 이전 글에서 살펴본대로 어떤 객체(엔티티)의 값을 저장하기 위해서 persist() 메서드를 쓰는데, 이 경우 객체가 바로 DB로 INSERT 되는 것이 아니라 영속성 컨텍스트에 등록되는 것이다. 아래 도식에서처럼 JPA를 이용하여 어떤 객체를 조회하거나 p..
[JPA기본] 2. 프로젝트 생성, JPA 기본 CRUD 및 트랜잭션 1. 프로젝트 생성 데이터베이스 생성 H2 데이터베이스로 실습한다. 홈페이지에서 다운로드 후, console을 실행하여 아래 사진과 같이 Embedded용 Generic H2를 만든다. 이렇게 만들면 데이터 베이스를 생성하게 된 것이 된다. 이렇게 하면 "C:\Users(사용자)\사용자 계정 이름\" 위치에 JDBC URL의 맨 마지막 글자인 test.mv Data Base File이 생성된 것을 확인할 수 있다. 주의사항 자바가 설치되어 있어야 한다!! H2는 자바를 기반으로한 jar 형태의 executable file을 제공하기 때문에 컴퓨터에 자바가 설치되어 있지 않다면 실행이 불가하다. 이후 이 Data Base File을 기반으로 Generic H2 Server 방식으로 통신을 통해 접근할 수 ..
[JPA기본] 1. JPA 필요성 : 객체와 RDB의 패러다임 불일치 1. JPA란 JPA는 SQL(Structured Query Language) 중심적인 개발을 대체해주는 ORM(Object Relational mapping) 이다. 객체 지향적인 개발 스타일을 유지하면서 데이터 베이스와의 상호작용이 가능하도록 해준다. 객체와 데이터베이스의 관계를 매핑 해주는 것이 ORM이다. 객체 지향적 언어인 자바와 관계형 데이터 베이스(RDB, Relational DataBase)간에는 다음 섹션에서 다룰 패러다임 불일치의 문제가 있는데, 여기서 발생하는 개발에서의 생산성 저하 문제를 해결해주는 도구라고 할 수 있다. 원래 SQL 중심적인 개발에서는 정보를 저장하는 테이블마다 반복적으로 CRUD에 해당하는 SQL 코드를 작성해야만 했다. 객체는 어떤 데이터의 속성과 기능을 갖고 ..
[스프링 웹MVC-2] 21. 업로드, 다운로드 기능 구현 예제 여러 개의 파일을 한 번에 업로드 하는 방법, 업로드 파일을 브라우저 상에서 확인하도록 하는 방법, 다운로드 하는 방법에 대해서 학습해본다. 기존 파일에 도메인 코드를 추가하여 진행한다. 각 메서드나 방법론 보다는 전체적인 파일 전송 방식에 대한 이해가 중요하다. 1. 도메인 생성 Item 클래스의 필드값은 상품의 이름, 다운로드할 수 있는 상품 이미지, 조회했을 때 표시되는 이미지 리스트를 필드값으로 한다. 그리고 업로드된 파일의 이름을 저장할 수 있도록 UploadFile 클래스를 만든다. java/hello/upload/domain/Item.java 1 2 3 4 5 6 7 8 9 @Data public class Item { private Long id; private String itemName..
[스프링 웹MVC-2] 20. 파일 업로드 1. 파일 전송 시 HTTP 작동 방식 보통 파일 업로드를 위해서 HTML Form을 이용한다. 이때, 아래 그림과 같이 단순 text를 보낼때는 x-www-form-urlencoded로 보내지만, text와 binary 데이터를 같이 보내야 하는 경우처럼 여러 타입의 데이터를 함께 보내야 하는 경우, multipart/form-data로 넘어가고 boundary, filename 등 부가적인 정보가 붙어서 HTTP 요청이 생성된다. 뒤에서 다루겠지만, boundary로 나눠진 부분들을 parts로 표현하며, request.getParts()로 각 부분을 얻을 수 있다. 이런 기본적인 내용을 숙지하였으니, 파일 업로드를 실습해보자. 2. 서블릿의 multipart 요청 정보 처리 multipart 요청 ..