[Spring Boot] 관계형 DB - 순환 참조 해결 방법 ( DTO활용 방법 등 )
2022. 7. 3. 18:31
Spring Boot/문법 정리
순환 참조 란? 1:1 연관관계 매핑 예제 참고 Author라는 객체와 Book이라는 객체가 있다고 생각해보자 둘은 1:1 관계로 매핑되어 있음 Author은 name, age 정보 포함 Book은 name, price 정보 포함 Book을 저장할 때 책의 저자(Author)도 같이 저장 이 상황에서 아래와 같이 Book을 조회한다면 아래와 같이 출력됨 (StackOverflow Error 발생) @GetMapping("/book/{bookId}") public Book showBook(@PathVariable Long bookId) { return bookRepository.findById(bookId).get(); } 이렇게 출력되는 이유는 1번 Book 조회시 book1에 저장되어 있는 이름, 가격..
[Spring Boot] Entity Manager을 사용한 MySQL CRUD 예제
2022. 7. 1. 17:53
Spring Boot/문법 정리
Entity Manager 란? Entity를 관리하는 역할 CRUD 기능과 같이 Entity와 관련된 모든 일을 처리하는 역할 Entity Manager는 영속성 컨텍스트에 Entity를 보관하고 관리 => Entity의 상태 변화를 감지하고 필요한 쿼리를 자동으로 수행 Entity Manager을 사용한 MySQL CRUD 예제 User 객체를 만들고 DB에 CRUD 하는 예제를 만들어 봄 MySQL에 DB 생성 (testdb) spring-boot-starter-data-jpa, mysql-connector-java 라이브러리 추가 build.gradle에 다음 코드 추가 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' ..
[Spring Boot] JPA 관련 개념 정리
2022. 7. 1. 14:16
Spring Boot/문법 정리
JPA 란? Java Persistence Api의 약자로 자바 진영의 ORM 기술 표준 JPA는 인터페이스이므로 구현체가 필요함 대표적인 라이브러리(구현체) : Hibernate ORM 이란? Object Relational Mapping의 약자로 객체와 관계형 DB를 매핑 SQL Mapper 란? 객체와 SQL의 필드를 매핑하여 데이터를 객체화하는 기술 대표적인 라이브러리 : MyBatis, JdbcTemplate ORM VS SQL Mapper SQL Mapper은 쿼리를 직접 작성해야 하지만 ORM은 직접 작성하지 않아도 됨 SQL Mapper은 DBMS에 종속적이지만 ORM은 DBMS에 종속적이지 않고 객체 중심의 개발 가능 하지만 복잡한 쿼리를 해결할 때는 SQL Mapper가 더 용이하고 O..
[Spring Boot] 파일 업로드
2022. 6. 29. 17:40
Spring Boot/문법 정리
Spring Boot 파일 업로드 예제 [Spring Boot] CRUD 게시판 (DB 사용 X, 회원 기능 X) 이 예제에 파일 업로드, 다운로드 + 이미지 업로드, 미리보기 기능을 추가해보며 파일업로드 기능에 대해 알아보자 Thymeleaf Form을 통해 홈페이지에서 파일과 이미지를 업로드 이 파일과 이미지를 로컬 디렉토리에 저장 다시 이 파일을 다운로드 받거나 이미지를 미리보기 할 수 있게하는 예제 파일은 하나씩만 가능하고 이미지는 여러개 가능 구현 UploadFile 객체 생성 사용자가 이미지나 파일을 업로드하면 이 파일이 로컬 디렉토리에 저장됨 만약 저장할 때 파일 이름을 사용자가 업로드한 그대로 저장한다면 이름의 중복이 생겨 덮어쓰기가 될 수도 있음 이를 해결하기 위해 UploadFile이라..
[Spring Boot] Converter & Formatter
2022. 6. 28. 18:05
Spring Boot/문법 정리
Converter 란? 객체를 다른 객체로 변환하는 기능 문자 숫자와 같은 변환들도 가능하고 객체끼리의 변환도 가능 Formatter 란? Formatter은 Converter와 비슷한 개념이지만 Converter은 객체 -> 객체에 사용된다면 Formatter은 객체 -> 문자, 문자 -> 객체에 특화되있음 ex) 1000 -> "1,000" , LocalDateTime -> "yyyy-MM-dd HH:mm:ss" 같은 변환에 사용하면 유용 현지화 정보 (Locale)를 사용할 수 있음 Converter 예제 URL 파라미터에 들어오는 값은 항상 String 타입인데, 이를 내가 만든 IpPort 타입으로 변환하는 Converter 예제 파라미터로 "127.0.0.1:8080"가 들어오면 ip = "1..
[Spring Boot] Filter & Interceptor
2022. 6. 23. 14:51
Spring Boot/문법 정리
Filter, Interceptor 란? Filter와 Interceptor은 사용자가 특정 URL에 접근, 요청 시 해당 요청에 대한 응답을 하기 전에 요청을 가로채 확인하고 통과 시킬지 말지를 결정할 수 있게 하는 역할 어떤 사용자가 특정 URL에 접근 시 해당 요청에 대한 로그를 남겨야 하는 상황이나 로그인 한 사용자(인증) 혹은 특정 권한이 있는 사용자(인가)만 특정 URL에 접근할 수 있는 상황 등에 사용할 수 있음 Filter와 Interceptor의 차이 Filter와 Interceptor의 사용 목적은 비슷하지만 차이점이 존재 Filter은 JAVA에서 제공하는 기능이지만, Interceptor은 Spring에서 제공하는 기능 Filter은 Spring과 무관하게 전역적으로 처리하는 작업들..
[Spring Boot] Validation, 에러메세지 설정방법
2022. 6. 11. 20:06
Spring Boot/문법 정리
Validation(검증) 이란? 올바르지 않은 데이터(타입에러, 범위에러 등)가 입력되었을 때 걸러내는 작업 validation을 할 때 Client Side 뿐아닌 Server Side에서의 validation도 중요 validation이 없다면 입력을 마친 상품 등록 폼을 Controller에서 전송 받고 이 정보들로 별도의 검증 없이 바로 상품 객체로 만들어 등록 후 다음화면으로 이동시킴 validation이 있다면 입력을 마친 상품 등록 폼이 Controller에 전송 되었을 때 Controller에서 이 입력값들에 대한 validation을 진행함 validation을 통과해야 객체 생성, 등록 후 다음 화면으로 이동 validation을 통과하지 못하면 전에 사용자의 입력 + 에러메세지를 들..