H2와 JPA를 사용하기 위한 기본 설정 중 PersonRepository가 스프링 빈에 등록되지 않는 에러가 발생. 해결하기 위하여 @EnableJpaRepositories를 통하여 스프링 실행 중 레파지토리를 빈에 등록할 수 있도록 하였지만 같은 에러가 발생하였다. @Repository public interface PersonRepository extends JpaRepository { } *************************** APPLICATION FAILED TO START *************************** Description: Parameter 0 of method init in com.ghrnwjd.httpresponsecode.data.DBinit require..
JPA에서 양방향 매핑 설정 후 유저 정보 조회를 하는 과정에서 무한히 서로를 참조하는 에러가 발생하였다. /service/UserService.java Spring Data JPA를 이용하여 유저정보를 조회하는 코드 작성하였다. public User findUser(String username) { return userRepository.findByUsername(username); } 에러 발생 구글링을 해보니 @JsonIgnore 어노테이션을 사용할 수 도 있지만 DTO를 만드는 것이 효과적이라고 한다. User의 모든 정보를 보기 위해 UserDto는 User의 모든 필드를 포함하도록 작성하였다. ** domain/dto/UserDto.java ** domain/dto/MemoDto.java **..
Response를 할 때 응답코드를 어떻게 보내야 좋은건지 알아보았다. * CommonResponseDto.java @NoArgsConstructor @AllArgsConstructor @Data public class CommonResponseDto { private int statusCode; private String status; private T data; } 보통 statusCode만 리턴하는데, 공부하는 겸 statusCode에 대한 설명을 담은 status 변수를 담아주었다. 그리고 리턴할 데이터를 제네릭 타입으로 설정하여 어떤 데이터에 대해서도 인자로 받을 수 있도록 하였다. * UserAPIController.java @GetMapping("/user/dto") public Common..
url로 쿼리를 전달해서 보낼 때 GET 메소드를 구현하는 방법에 대해서 알아봤다. 1. @RequestParam @GetMapping("/user/query") public String 유저정보출력쿼리(@RequestParam Map params) { StringBuilder sb = new StringBuilder(); params.entrySet().forEach(param-> { sb.append(param.getKey()+ ": " + param.getValue() + "\n"); }); return sb.toString(); } 응답 원래 쿼리스트링으로 몇개가 올지 모른다는 단점 때문에 사용하지 않고 있다가 Map 자료구조를 사용하면 개수에 상관없이 사용할 수 있다는 것이 좋은 것 같다. 2...
스프링 JPA 공부 중 연관관계에 대해 공부하던 중 외래키가 있는 부분을 연관관계의 주인으로 설정해야된다. 이 때 외래키가 있는 부분은 주로 다에 해당된다. 팀과 멤버가 있을 때 멤버가 팀의 FK를 가지 있다면 멤버가 연관관계의 주인이 되고 일에 해당되는 곳은 자바 컬렉션인 Collection, List, Set, Map 중에 하나를 사용한다. 컬렉션 자바에서 컬렉션이란 데이터의 집합, 그룹을 의미하고 자바컬렉션프레임워크(JCF)는 컬렉션과 이를 정의하는 인터페이스를 제공한다. List, Set, Queue는 Collection의 하위 인터페이스로서 상속받고 있다. Map도 크게 보면 Collection을 상속받고 있지 않지만 의 일부로 볼 수 있다. 1. Set Set 인터페이스를 구현하는 클래스로 H..
Entity와 DTO를 분리하는 이유 1. Entity 보호: Entity는 자원의 속성이 무분별하게 변하면 안되기에 Setter 사용을 자제해야 한다. 그에 비해 DTO는 Getter, Setter에 영향이 크지 않다. 2. 필요한 데이터만 선별: 사용자의 경우(id, pw, email, address 등)으로 엔티티가 구성되어 있고 로그인을 한다고 가정을 하면 필요한 데이터는 id, pw의 값을 가지고 있으면 된다. 3. 순환참조 예방: JPA에서 양방향 참조 엔티티를 컨트롤러에서 반환하면 순환참조가 발생하고 스택오버플로우가 발생. 이를 DTO를 통해 예방할 수 있다. DTO (Data Transfer Object) 로직을 가지지 않는 자바 빈이다. MVC간 데이터 교환을 위한 객체이며 Getter,..
https://ghrnwjd.tistory.com/entry/JAVA-JPA-ORM [SPRING] JPA, ORM [ JPA ] JPA ( Java Persistence API )로 자바 진영의 ORM 기술 표준이다. JPA는 인터페이스의 모음이다. (JPA 2.1 기준 HIbernate, EclipseLink, DataNucleus 의 표준 명세를 구현했다.) [ ORM ] ORM (Object-Relational Mapping) 로 ghrnwjd.tistory.com 저번글에 이어서 작성해보려고 합니다. JPA JPA는 자바 진영의 ORM 기술 표준이다. 객체와 테이블의 차이로 책에서 가장 이해가 잘 되었던 구문은 연관관계에 대한 설명이었다. 객체는 참조를 통해 접근하고 참조에 접근하여 연관된 객체..
깃 커밋로그를 통해서 출석할 수 있는 시스템을 만들어 보았습니다. 220.67.124.108/ LAB 426 220.67.124.108 Linux 톰캣 서버로 먼저 만들어서 현재는 html, javascript를 이용해서 만들었습니다. 이를 스프링부트를 사용하여 만들어보려고 합니다. 사용하는 github REST API 1. List repositories for a user 사용자의 레파지토리 정보를 가져옵니다. name이라는 key에 대한 value를 가져와서 저장해두려고 합니다. 2. List commits date라는 key에 대한 value를 가져와 현재 날짜와 비교하려고 합니다. 깃허브 api 의 시간이 한국시간과 달라서 +9시간을 더해줘야 됬습니다. Spring에서 HTTP 요청을 위해 사용..
새로운 프로젝트를 가져올 때 마다 헷갈리는 부분들을 정리해놓으려고 한다. Gradle 프로젝트를 만들었다. 기본 설정 File ➙ Setting ➙ Build, Execution, Deployment ➙ Build Tools ➙ Gradle Java JDK 버전 맞추기 build.gradle을 보면 프로젝트의 자바 버전을 알 수 있다. sourceCompatibility = '17' File ➙ Project Structure ➙ Project Setting ➙ Project 명시된 부분보다 이상 버전의 jdk로 설정한다. 프로젝트 빌드하기 최근 Model repo에서 예전 Model로 불리는 경우가 있었다. Project를 새로 빌드를 해줘야되는 것인데 두가지 방법이 있었다. 1. Build ➙ Bui..
백엔드 개발에서 다른사람의 코드를 이해하고 제가 짠 코드와 합치는 과정을 적어보려고 합니다. 프로젝트 이름은 icelink 입니다. 1번째 다른 사람의 코드를 들고온 뒤 실행했을 때 에러가 발생하였습니다. java.sql.SQLException: Access denied for user 'icelink'@'localhost' (using password: YES) 나의 DB 설정과 달라서 발생한 에러였고 username을 hoyoung으로 바꾸어 해결하였습니다. datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/icelink?serverTimezone=Asia/Seoul # username: ic..