본문 바로가기

기록해보기35

Spring Data JPA를 이용해 다양한 쿼리 작성하기 User관련 기능에 생성/ 조회/ 수정 기능을 SQL문을 사용하지 않고 사용되도록 해보았는데 이번에는 삭제 기능을 Spring Data JPA로 변경해보겠다. 저장하거나 업데이트하거나 전체조회를 하거나 기본적인 기능외에 다양한 기능도 만들어 보겠다. 삭제 기능같은 경우에는 User의 이름을 기준으로 삭제를 하기로 했었는데 이 User의 name이 있는지 없는지 조회를 한 후에 삭제를 하기로 했었다. 먼저 함수먼저 작성해보겠다. public void deleteUser(String name){ userRepository.findByName } name으로 찾는다고 하긴 했지만 name으로 찾을 수 있는 방법은 아직까지 없다. SQL로는 SELECT * FROM user WHERE name = ? 이걸 어떻.. 2023. 6. 18.
Spring Data JPA를 이용해 자동으로 쿼리 날리기 Java 객체인 User Class와 MySQL Table에 있는 Column들을 Mapping해보았다. 이번에는 SQL을 작성하지 않고 유저 생성/ 조회/ 업데이트 기능을 리팩토링하는 것을 배워보겠다. 가장 먼저 UserRepository인터페이스를 User 옆에 만들어주는 것 이다. 만들어 둔 UserRepository의 이름을 UseJdbcRepository로 바꿔줘 보겠다. 변수 이름도 바꿔준다! 그 다음으로 main - java - com -group - libraryapp -domain -user에 Java Interface로 새로운 Interface를 만들어준다. 여기에 JpaRepository를 상속 받는다. UserService의 Class이름은 UserServiceV1으로 바꿔주었다. .. 2023. 6. 11.
유저 테이블에 대응되는 Entity Class만들기 jap: hibernate: ddl-auto: none JPA를 이용해 만들어두었던 User Class와 Table을 Mapping해 보겠다. 이전에 만들어 두었던 User객체를 활용할 것이다. 이 User객체를 살펴보면 두가지 필드가 있다. 이름과 나이인데 객체에는 name과 age가 있고 내가 만든 Table에는 id와 name, age가 있다. 이를 Mapping해보겠다. 가장 먼저 해줄 것은 UserClass에 Entity를 어노테이션해주는 것이다. 이 Entity의 쓰임새는 스프링이 User객체와 user테이블을 같은 것으로 바라본다는 의미이다. 또 Entity 단어의 의미는 데이터베이스 쪽에서 저장되고, 관리되어야 하는 데이터를 의미한다. 그 다음으로는 User 테이블에는 있지만 UserCla.. 2023. 6. 11.
문자열 SQL을 직접 사용하는 것이 너무 어렵다!! 이번 시간에는 문자열 SQL을 직접 사용하는 것의 한계를 이해하고 해결책인 JPA, Hibernate, Spring Data JPA가 무엇인지 해하하고 다음으로 Spring Data JPA를 이용해 데이터를 생성, 조회, 수정, 삭제를 하는 방법 그리고 트랜잭션이 왜 필요한지 이해하고 스프링에서 트랜잭션을 제어하는 방법을 익힌다. 그리고 마지막으로 영속성 컨텐스트와 트랜잭션의 관계를 이해하고, 영속성 컨텍스트의 특징을 알아보겠다. 여태까지 Repository에서 SQL을 직접작성하였었다. SQL을 직접작성하게 되면 문자열을 직접 작성하기 때문에 작성자가 실수할 수도 있고, 실수를 인지하는 시점이 느리다. 컴파일 시점에 발견이 되지 않고, 런타임 시점에 발견이된다. 두 번째로 특정 데이터베이스에 종속적이게.. 2023. 6. 11.
3번째 정리! 스프링컨테이너 부분은 의존성을 관리하기 위해 알아보았는데 많이 어려운 부분이기도 해서 여러번 복습하는 것이 좋을 듯하다.. 이번 공부에대해서 배웠던점은 1. 좋은 코드가 왜 중요한지 이해하고, 원래 있던 Controller코드를 보다 좋은 코드로 리팩토링한다. 2. 스프링 컨테이너와 스프링 빈이 무엇인지 이해한다. 3. 스프링 컨테이너가 왜 필요한지, 좋은 코드와 어떻게 연관이 있는지 이해한다. 4. 스프링 빈을 다루는 여러 방법을 이해한다. 위처럼 작성 후에도 추가적으로 개선할 수 있는 방법이 있다. 다음 시간부터는 어떤부분을 어떻게 개선할지 그리고 그 개선에 필요한 방법과 지식을 배워 보겠다. 2023. 6. 11.
스프링 컨테이너를 다루는 방법 이번 수업은 스프링 컨테이너를 다루는 방법!이다. 스프링 컨테이너 스프링 빈이 무엇인지? 배웠었는데 이번 수업은 스프링 빈을 등록하고 가져오는 방법을 배워볼 차례이다. 먼저 빈을 등록하는 방법이다. 빈을 등록하는 방법으로는 @RestController @Service @Repository 외에도 @Configuration과 @Bean 어노테이션이있다 이둘은 셋트인데 먼저 @Configuration 👉 Class에 붙이는 어노테이션 @Bean을 사용할 때 함께 사용해 주어야 한다. @Bean👉 메소드에 붙이는 어노테이션 메소드에서 반환되는 객체를 스프링 빈에 등록한다. 백문이불이여일타 직접 UserRepository에 @Bean을 사용해보겠다. 원래는 @Repository 어노테이션을 통해서 빈으로 등록했.. 2023. 6. 7.
스프링 컨테이너를 왜 사용할까? 스프링 빈이 무엇인지 스프링 컨테이너가 무엇인지 알아보았다. 스프링 컨테이너는 서버가 시작될 때 함께 시작되는 Class를 담는 공간(컨테이너) 스프링 빈은 그 컨테이너에 담긴 Class 하나하나를 스프링 빈이라 불렀다. 이번에는 그런 스프링 컨테이너가 왜 탄생했는지? 왜 사용하는지에 대해 알아보겠다. 그러기 위해 다음 요구사항을 생각해보겠다. 예로 책 이름을 메모리에 저장하는 API를 매우 간단하게 구현하도록하겠다. 이때 Service, Repository는 Spring Bean이 아니어야 한다. 그럼 전체적인 그림은 위처럼 되는데 DB를 사용할 것이 아니기 때문에 BookMemoryRepository라 해두었다. 전체적인 느낌만 잡아보자 repository와 service package안에 user .. 2023. 6. 6.
UserController와 스프링 컨테이너 이번에는 한 함수에서 세가지역할을 하는 것을 Controller Service Repository로 역할에 맞게 나누어봤는데 UserController에는 의아한 점이 있었는데 이 두가지를 정리하자면 첫번째로 static이 아닌 코드를 사용하려면 인스턴스화가 필요 인스턴스화를 하려면 생성자를 호출하게 되는데 (public UserController) 생성자는 만들었지만 인스턴스화를 한적은 없었다. 두번째로 생성자를 호출하는 과정에서 UserController는 JdbcTemplate를 필요로 하고있다. UserController는 JdbcTemplate에 의존하고 있는데 이 의존이라는 것이 UserController는 JdbcTemplate이 없으면 동작하지 않는 다는 의미이다. 하지만 우리는 JdbcC.. 2023. 6. 5.
Controller를 3단 분리하기 -Service와 Repository 왜 코드를 깔끔하게 작성해야하는지에 대해 생각해 봤는데 여지껏 써왔던 Controller의 함수의 역할을 짚어보자 package com.group.libraryapp.controller.user; import com.group.libraryapp.dto.user.request.UserCreateRequest; import com.group.libraryapp.domain.user.User; import com.group.libraryapp.dto.user.request.UserUpdateRequest; import com.group.libraryapp.dto.user.response.UserResponse; import org.springframework.jdbc.core.JdbcTemplate; imp.. 2023. 6. 5.