묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
7:31초쯤 영속성이 끊긴 멤버 반환
안녕하세요. 많이 찾아봤는데 없는것같기도 하고, 7:31초쯤을 시작으로 영속상태가 끊긴 멤버가 반환이 된다라는 말씀을 듣고 질문드립니다. Service에서 반환이 되는 Controller에서 Entity Manager를 사용하기 위해서 @PersistenceContext 어노테이션을 사용해서 em을 주입받았습니다.# MemberApiController# MemberService# 로그이렇게 됬을때 PK가 1인 Member를 Controller에서 찾아보았는데, 만약에 영속성이 끊긴 Member가 반환이 된다면 로그에 "???"이라는 문구 사이에 Select문을 통해서 PK가 1인 멤버를 가져와야하지 않나요? 영속성컨텍스트에서 관리를 하지 않은 Member를 반환했고, 그 Member를 다시 찾으려고 시도하기때문입니다.# EntityManager.contains 사용영속성 컨텍스트에서 관리되는 Object인지 확실히 확인하기 위해서 EntityManager의 contains 메서드를 통해서 확인해보았을때 로그가 아래와 같이 나왔습니다.결론적으로 memberService.update를 통해서 반환된 Member객체는 영속성이 끊기지 않은 객체이지 않나요??감사합니다 :D
-
미해결스프링 배치
@Autowired 관련 질문입니다.
@Autowired private Job fileJob; @Autowired private Job apiJob;각각 다른 클래스에서 주입받아야하는 Job이 다른데 변수 명으로 스프링이 알아서 알맞은 Job을 주입해주는것인가요?
-
해결됨스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
deleteAccount 테스트 오류
마지막 강을 들으면서 전체 테스트를 돌려보니 deleteAccount 테스트만 오류가 발생했습니다.에러 로그를 확인해보니Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint ["FKDDVHOIEDLDMC0I8PA6JUY4X69: PUBLIC.TRANSACTION_TB FOREIGN KEY(DEPOSIT_ACCOUNT_ID) REFERENCES PUBLIC.ACCOUNT_TB(ID) (CAST(1 AS BIGINT))"; SQL statement:delete from account_tb where id=? [23503-214]]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statementorg.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint ["FKDDVHOIEDLDMC0I8PA6JUY4X69: PUBLIC.TRANSACTION_TB FOREIGN KEY(DEPOSIT_ACCOUNT_ID) REFERENCES PUBLIC.ACCOUNT_TB(ID) (CAST(1 AS BIGINT))"; SQL statement:delete from account_tb where id=? [23503-214]]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statementat app//org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)account의 delete 쿼리가 실행될 때 transaction_tb의 외래키 때문에 무결성 오류가 발생한 것으로 보입니다.Transaction 엔티티에서 @ManyToOne 부분에 cascade 설정을 해줘야 할까요?
-
해결됨토비의 스프링 부트 - 이해와 원리
강사님 테스트 코드에 사용하신 클래스들은 어디서 알게되신건가요..?
스프링 부트 공부하다가 왜 이렇게 되는지 찾아봐도제대로 설명해주는 곳이 없어서 아쉬웟는데강의를 들으면서 정말 만족하면서 듣고 있습니다. 테스트 코드에 사용하는 클래스나, 매서드들은 배우는 입장에서는 강사님께서 알고계신 정보를 주입해주는 방법말고는 스프링 지식이 부족해서 알기가 어렵더라구요 강사님이 강의 진행을 하시면서 사용하시는테스트 코드나 매서드들의 정보는 스프링 doc나 어디를 가야 공식문서처럼 볼수있는 곳이 있을까요?스스로 필요한 테스트 클래스나 매서드들 찾아서 공부해보고 싶어서 문의를 남겨봅니다,
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
맥 빌드 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]현재 맥(m1)에서 프로젝트를 빌드하는 도중에 해당 에러가 발생했습니다.이전 질문에서도 똑같은 에러가 있길래 답변을 확인해봤으나 프로젝트의 sourceCompatibility = '17' 과 java -version의 openjdk version "17.0.6" 2023-01-17를 확인하니 자바 버전은 동일한 것 같습니다. 그런데 왜 해당 오류가 발생하는지 의문입니다.프로젝트를 초기 세팅할 때도 스프링부트 3 버전과 자바 17버전으로 잘 세팅했습니다.에러가 나는 이유를 알 수 있을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
test 시 오류 발생합니다ㅠ_ㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]안녕하세요. test 진행 시 해당 사진 처럼 오류가 발생합니다.Run tests using 도 인텔리제이로 변경해 놓은 상태인데 너무 답답해 죽겠습니다...ㅠㅠ
-
미해결스프링 부트 - 핵심 원리와 활용
com.gorylenko.gradle-git-properties 스프링부트 2 에서 안됨.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의에서는 Springboot 3 + JDK 17 환경인데요.com.gorylenko.gradle-git-properties 플러그인을 build.gradle 에 반영하고, build 하면 강의에서 보여주신 것처럼 git.properties 파일이 정상적으로 생성됩니다.그러나, SpringBoot 2.7 + JDK 11 환경에서 동일하게 작업해보면, git.properties 파일이 생성되지 않습니다.com.gorylenko.gradle-git-properties 플러그인의 버전 호환성 문제일까요?
-
미해결실전! 스프링 데이터 JPA
엔티티에 setter 메소드를 구현하지 않았을 때, PK 값의 저장 과정에 대해 질문드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요. 평소에 생각하지 못했던 부분인데, 강의를 들으면서 좀 궁금한 점이 생겨서 질문드립니다.. 만약 엔티티에 setter 메소드를 구현하지 않았다면,@GeneratedValue를 사용해서 데이터가 DB에 저장될 때 PK값이 생성되도록 했다면, 그 생성된 PK값이 영속성 컨텍스트에서 관리되는 엔티티 객체에 어떻게 저장되는 것인지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
ORDERS와 DELIVERY 관계에 대한 질의입니다.
안녕하세요. 강의 수강 도중 제가 이해를 잘하지 못하여 질문 남기게 되었습니다. 16:28~ 부분에서주문과 배송의 경우 일대일 단방향 관계라고 말씀하셨는데, 회원 엔티티 분석 이미지를 보았을 때Order 에서 delivery: Delivery,Delivery 에서 order: Order 이면단방향이 아니라 양방항 관계인 것 같은데 왜 단방향 관계인지 궁금합니다. ㅜ
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
회원가입에서 insert 쿼리는 뜨는데 h2 db에 저장이 안됩니다.
yml 파일spring: #띄어쓰기 없음 datasource: #띄어쓰기 2칸 url: jdbc:h2:tcp://localhost/~/jpashop username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: # show_sql: true format_sql: true defer-datasource-initialization: true logging: level: org.hibernate.SQL: debug # org.hibernate.type: traceMemberController 파일package jpaproject.jpashop.controller; import jpaproject.jpashop.domain.Address; import jpaproject.jpashop.domain.Member; import jpaproject.jpashop.service.MemberService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import javax.validation.Valid; @Controller @RequiredArgsConstructor public class MemberController { private final MemberService memberService; @GetMapping("/members/new") public String createForm(Model model){ model.addAttribute("memberForm",new MemberForm()); return "members/createMemberForm"; } @PostMapping("/members/new") public String create(@Valid MemberForm memberForm){ Address address = new Address(memberForm.getCity(), memberForm.getStreet(), memberForm.getZipcode()); Member member = new Member(); member.setName(memberForm.getName()); member.setAddress(address); memberService.join(member); return "redirect:/"; } }콘솔창h2 데이터베이스도저히 원인을 모르겠네요 도와주세요
-
미해결스프링 배치
branch Part11 관련질문입니다.
안녕하세요 정수원 선생님 브랜치 Part11에 관해 동작문의가 2개 있습니다.1) SendJobConfiguration에서 apiJob이 제일 먼저 실행이 되는 job이고apiJob에서 apiStep1 (시작로그를 남기는) , apiStep2(끝냈다는 로그를 남기는) 사이에 주입받은 jobStep을 실행시키는데 이 jobStep은 SendChildJobConfiguration에 있는 jobStep 인가요? 2) 이후에 jobStep에서 apiMasterStep을 실행시키고 Partition으로 쪼개서 3개의 스레드에 할당할때는 apiSlaveStep에서 read부터 각 스레드가 담당하는것이 맞나요?
-
미해결실전! 스프링 데이터 JPA
클린 아키텍처에서 JPA
클린 아키텍처 (및 헥사고날) 설계 시 JPA 영속성 계층을 어디에 두어야하는지 궁금합니다.일반적으로 해당 아키텍처에선 영속성 계층을 도메인 계층에서 분리시켜야 한다고 주장하던데 (육각형 안 Entity는 POJO이며, JPA Entity는 바깥의 Adapter에 구현하고 Mapper로 변환하는 형식), 이렇게 되면 JPA가 제공하는 lazy loading이나dirty checking 등의 이점은 포기해야 되는것일까요?도메인 모델에 JPA 코드를 사용하자니 이러한 아키텍트 원칙에 위배되는거 같고, 그렇다고 이걸 분리해놓으면 따로 구현해야될게 많아지니 고민입니다..타협을 한다면 어느 방식으로 하는게 좋을까요? 애초에 이러한 아키텍트 방식과 JPA는 (지향점이 다르기에) 어울리지 않는 것일까요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
초록색 주석문은 뭔가요 .. !
pdf 교안 보면 이런식으로 되어있는 초록색 주석문? 이 있던데그냥 인텔리제이에서는 // 나 /* */ 했을 때 회색으로만 표시되고 저렇게 초록색으로는 안 표시되더라구요 ... 저거는 뭔가요 ?생성 단축키도 알려주시면 감사하겠습니다 ...
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
join과 join fetch 의 차이 ..
OrderQueryRepository 에 findAllByDto_flat 보면다 join 으로 되어있는데 join과 join fetch (페치 조인)의 차이점은 뭔가요 ..?join도 lazy 로 되어있는거 한번에 끌고오는 건 비슷한 거 같은데 .. ㅜ
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Failed to load ApplicationContext 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]package hellospring11.hellospring.service; import hellospring11.hellospring.repository.JdbcMemberRepository; import hellospring11.hellospring.repository.JdbcTemplateMemberRepository; import hellospring11.hellospring.repository.MemberRepository; import hellospring11.hellospring.repository.MemoryMemberRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import hellospring11.hellospring.service.MemberService; import javax.sql.DataSource; // 자바 코드로 스프링 빈 등록 // 실무에서는 이것 보다는 autowired를 사용 하는데 이방법은 리포지토리를 쉽게 변경을 할 계획이라서 일딴 이렇게 사용 @Configuration public class SpringConfig { private final DataSource dataSource; @Autowired public SpringConfig(DataSource dataSource) { this.dataSource = dataSource; } @Bean public MemberService memberService(){ return new MemberService(memberRepository()); } @Bean public MemberRepository memberRepository(){ //return new MemoryMemberRepository(); //return new JdbcMemberRepository(dataSource); return new JdbcTemplateMemberRepository(dataSource); } }package hellospring11.hellospring.repository; import hellospring11.hellospring.domain.Member; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.simple.SimpleJdbcInsert; import javax.sql.DataSource; import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; public class JdbcTemplateMemberRepository implements MemberRepository{ private final JdbcTemplate jdbcTemplate; // 생성자가 하나면 오토와이어드 생량 가능 public JdbcTemplateMemberRepository(DataSource dataSource) { jdbcTemplate = new JdbcTemplate(dataSource); } @Override public Member save(Member member) { SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(jdbcTemplate); jdbcInsert.withTableName("member").usingGeneratedKeyColumns("id"); Map<String, Object> parameters = new HashMap<>(); parameters.put("name", member.getName()); Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(parameters)); member.setId(key.longValue()); return member; } @Override public Optional<Member> findById(Long id) { List<Member> result = jdbcTemplate.query("select * from member where id = ?", memberRowMapper(), id); return result.stream().findAny(); } @Override public Optional<Member> findByName(String name) { List<Member> result = jdbcTemplate.query("select * from member where name = ?", memberRowMapper(), name); return result.stream().findAny(); } @Override public List<Member> findAll() { return jdbcTemplate.query("select * from member", memberRowMapper()); } // 람다 함수로 만듬 private RowMapper<Member> memberRowMapper(){ return (rs, rowNum) -> { Member member = new Member(); member.setId(rs.getLong("id")); member.setName((rs.getString("name"))); return member; }; } }MemberServiceIntegrationTest 테스트 파일에서 코드를 실행하는데 계속 오류가 나옵니다.@WebAppConfiguration, @ContextConfiguration() 어노테이션을 추가 해보았는데도 오류가 발생하고 데이터베이스 서버는 실행되어 있습니다.
-
미해결스프링 시큐리티 OAuth2
소셜로그인 + Jwt 인증 어떻게 하나요?
소셜로그인 성공 이후 JWT 인증하는 방법을 알고 싶어 강의를 수강했습니다.소셜로그인과 JWT 인증을 어떻게 같이 쓰는지 예시를 알려 주실 수 있나요실무에 바로 적용하고 싶은데 강의에서 보여 소셜로그인, JWT 인증 강의만으론 소셜로그인 성공 이후 어떻게 토큰을 발급해 react 또는 모바일 네이티브 앱의 사용자을 로그인, 회원가입시키는지 모르겠네요.샘플 코드를 첨부해주시면 감사하겠습니다.
-
미해결토비의 스프링 부트 - 이해와 원리
강의 초반에 나오는 코드에서 에러가 납니다.
0:05초 부분에서 applicationContext를 익명클래스가 아닌 람다 표현식으로 바뀌어져있는데, 이 부분을 그대로 따라 쳤는데, 에러가 납니다. public static void main(String[] args) { AnnotationConfigWebApplicationContext applicationContext = onRefresh() -> { super.onRefresh(); ServletWebServerFactory serverFactory = this.getBean(ServletWebServerFactory.class); DispatcherServlet dispatcherServlet = this.getBean(DispatcherServlet.class); WebServer webServer = serverFactory.getWebServer(servletContext -> { servletContext.addServlet("dispatcherServlet", dispatcherServlet) .addMapping("/*"); }); webServer.start(); }; applicationContext.register(HellobootApplication.class); // 구성정보가 있는 클래스 등록 applicationContext.refresh(); } } onRefresh() -> {... }이 부분이 이해가 잘 되지 않는데, 어느 부분이 잘못된 건가요?AnnotationConfigWebApplicationContext applicationContext = onRefresh() -> { super.onRefresh();
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
9분 05초 author이랑 isbn
author이랑 isbn이 null로 나와있는데 싱글테이블에서 Album이랑 Movie에 관련된 컬럼은 안나오고 딱 Book이랑만 관련된 author이랑 isbn 만 null로 표시됐는데 이건 JPA가 Book인 걸 알아서 그것만 표시해주는건가요 ?? 어떻게 author이랑 isbn만 표시해주게 되는건지 궁금합니다 ..
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
JPA 강의 - delete 구현시 에러 발생합니다.
안녕하세요.강의 잘 듣고 있습니다.현재 JPA 강의 - delete 부분을 수강 중입니다.그런데, 컨트롤러에 아래 코드 추가 후 response에 403 에러 (foobidden) 이 출력됩니다.security에 아래 코드처럼 설정해 줬는데도 에러가 나니, 이유를 모르겠습니다. ;;;;@Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.authorizeRequests((auth) -> { auth.antMatchers("/jpa/users").permitAll(); }); return http.build(); }@DeleteMapping("/users/{id}") public void deleteUser(@PathVariable int id) { userRepository.deleteById(id); }
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
회원 가입> 등록 후 회원목록 조회가 되지 않습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]회원가입 > 등록 후 회원목록 조회가 되지 않습니다. https://drive.google.com/file/d/1mo2EohoMsgKRpeusyQ-AXlygE1CSSJIV/view?usp=sharing코드 링크입니다. WhiteLabel Error Page 오류가 납니다.