묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Section2 - 회원등록 API
안녕하세요. 실전! 스프링 부트와 JPA 활용 1편 강의를 수강하면서 작성한 코드에서 api라는 개념이 나와서 조금 헷갈려서 질문드립니다. 1) postman 사용은 단위 테스트처럼 사용하는건가요?개발한 코드에서 입력값을 넣고 함수가 잘 동작하는지 확인하는 용도인지 궁금합니다. 2) 외부 api를 다른 팀으로 제공을 한다고 말씀주셨는데 팀 간의 관계가 궁금합니다.1편에서는 html로 작성해서 데이터를 localhost에서 입력해서 받아온 후에 Controller에서 처리를 했었는데,2편시작에서는 controller api는 1편의 Controller의 차이점을 잘 모르겠습니다. 감사합니다.
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
테스트에서 주입과 생성
안녕하세요 좋은 강의 잘 듣고 있습니다. 사소한 질문이지만요..! <테스트 추가하기:mockmvc 를 이용한 controlelr 테스트 강의>의 13:00 에서요 ObjectMapper 를 @Autowired 로 주입받아서 쓰지 않고 생성하셔서 쓰는 이유가 있을까요? 각각은 어떻게 다르고 장단이 있나요. 미리 감사합니다.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
병합(merge)과 변경감지
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]JPA 활용 1편을 듣고 jpa기본편을 책과 함께 수강중입니다.JPA 활용 1편에서 merge를 사용하면 모든 값을 다 바꾸어서 파라미터로 지정해 주지 않으면 null값이 할당되어 데이터에 문제가 생길 확률이 높다고 배웠습니다. 따라서 이것이 merge의 특성인 거로 생각하고 있었는데,jpa기본편 책 105페이지에 jpa기본 전략은 엔티티의 모든 필드를 업데이트 한다 라고 되어있었습니다. 그래서 약간 혼란이 왔었는데 이내 다시 정리해볼 수 있었습니다.그래서 내려본 결론은 변경 감지를 통하여도 모든 필드가 업데이트 되는 것은 맞는데, 스냅샷을 통해서 변경 없는 필드의 정합성은 유지하고, 변경되는 부분만 안전하게 변경할 수 있다. JPA 활용 1편에서 한 merge예제는 준 영속인 엔티티 객체를 만들어 버렸기 때문에 필드 값을 할당할 때에 누락되면 기존 데이터가 반영이 안된다 (스냅샷 같은 것이 없기 때문) 으로 정리할 수 있을까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
ALL_SEQUENCES 테이블을 만들라고 하셨는데
강의에서는 ALL_SEQUENCES를 만들지를 않았는데어떻게 Oracle 버전에서 실행 하셨나요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
H2 database 테이블이 생성되지 않습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. users/dlwns 에 test3.mv.db 를 만들고터미널에 입력을 하여 연결을 했습니다.spring: datasource: url: jdbc:h2:tcp://localhost/~/test3 username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: show_sql: true format_sql: true logging: level: org.hibernate.SQL: debug그리고 Test를 진행했을 때,h2 database에 접근하면table이 생성되지 않습니다. 어떤 점이 문제인지 알고 싶습니다.감사합니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
질문있습니다
스프링을 이용해서 플로터로 만든 안드로이드에 mysql정보를 넘길 수 있는 서버를 만들고 싶은데 가능 할까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JPQL 질문
JPQL 모든 쿼리가 다음의 순서를 지키는 것인지 궁금합니다.(조회만인지?), 일단 다음의 순서를 전체조회 JPQL이라고 가정하겠습니다. flush -> flush로 인한 변경감지 update 쿼리문 적용 -> 이때동안 모은 쓰기지연 저장소 sql 쿼리 적용 1차로 DB 우선 조회2차로 영속성 컨텍스트 서치해서 DB와 겹칠 경우 영속성 컨텍스트의 엔티티로 대체 (Q&A 찾아보다가 얻게된 결론입니다.)1.의 제가 서술한 과정이 맞다면 이해가 안되는 것이 마지막 과정인 영속성 컨텍스트 서치 부분입니다. 이미 flush로 변경감지 등을 모두 적용했으니 영속성 컨텍스트를 다시 서치해서 얻을 이점이 있을까요? 단순 조회일 경우에 2차로 영속성 컨텍스트를 서치하는 것이 어떠한 이점도 없는 것 같아서요.
-
미해결실전! 스프링 데이터 JPA
테스트 코드에서 em.flush를 해줘야 dirtyChecking이 일어나는 이유가 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 4:30 쯤에 dirtyChecking이 일어나게 하기 위해서, em.flush();를 꼭 해줘야하는 이유가 있을까요? 선생님 다른 강의에서는 find로 찾아온 객체를 setter를 통해 변경 후 따로 em.flush(); 를 하지 않았어도 transaction 끝나는 시점에 자동으로 update쿼리가 나갔던 것으로 기억하는데요. 혹시 junit을 이용한 테스트코드이어서 동작 방식이 다른걸까요? 감사합니다~
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
application.yml에 default_batch_fetch_size 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 아니오3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요. 관련내용의 질문들이 있으나, 제 케이스는 다른 것 같아서 질문 올립니다.아래와 같이 작성하였으나, 적용이 되지 않습니다.jpa: hibernate: ddl-auto: create properties: hibernate: default_batch_fetch_size: 100위치를 옮겨봤는데요, properties.default_batch_fetch_size 위치에서 적용이 되는 것으로 보입니다. 다만, 실제 실행해보면 적용되지 않습니다.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
준영속 상태 질문
준영속상태에 대한 설명에서영속성 컨텍스트에서 이전에 존재했지만 지금은 detach된 엔티티가 아니라영속성 컨텍스트에서 이전에 존재 + 적어도 한번은 flush()되어 DB에 엔티티가 존재하는 경우 아닌가요?즉 이전에 컨텍스트에서 존재 + flush로 인한 DB에 반영되었던 엔티티
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
질문 em.find(), JPQL 조회 및 이해 확인 질문
같은 조회이지만 JPQL은 무조건 플러시한다는 개념을 알게되었습니다 반면 find()는 그렇지 않은것으로 아는데 find()또한 1차 캐시에서 가져오지 못할 경우 플러시 후 가져와야하지 않나요? 이 두 방식은 결국 "플러시"라는 차이가 있어보이는데 이유에 대해 이해가 가지 않네요.영속성 컨텍스트에서 관리되는 엔티티 객체에 대해 수정을 할 경우 커밋시도시 먼저 엔티티의 최종적 모습을 확인해서 Update쿼리문을 만든다고 생각(쓰기지연저장소에 저장)했습니다. 반면 persist() 곧바로 쿼리문이 쓰기지연 저장소에 insert문으로 저장된다고 인지중입니다. 그렇다면 persist()후에 해당 엔티티를 수정을 가한다면 최종적으로 커밋시에 insert + update 두 쿼리문이 수행되는 걸까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
일대일 관계
자기소개서와 관련된 서비스를 구축하던 중에 관계 매핑에 의문점이 생겨서 질문 드립니다.회원 테이블, 카테고리 테이블, 제목 테이블이 존재하는데회원은 자기소개서에 대한 카테고리와 제목을 각각 하나씩만 지정하여 자기소개서에 대한 첨삭을 받을 수 있습니다.그런데, 서비스를 다시 사용하여 카테고리, 제목을 다른 것으로 지정하여 또 다른 자기소개서에 대한 첨삭을 받을 수 있습니다.이렇게 되면 두개의 자기소개서가 생기고, 이 내용들을 마이페이지에서 확인할 수 있도록 설계를 하려고 합니다.이런 구조라면, 회원-카테고리 / 회원 - 제목은 각각 1:1로 매핑이 되는 것이 맞는건지, 각각에 대한 history가 저장되어야 할 필요가 있을 것 같아 중간에 테이블이 필요하다는 생각이 들었습니다.어떠한 연관관계 매핑이 필요한지 감이 잘 안옵니다 ㅠ
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Lazy 강제 초기화 오류
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (아니오)[질문 내용]Lazy 강제 초기화 시, order.getMember().getName() 는@GetMapping("/api/v1/orders") public List<Order> listV1() { List<Order> orders = orderRepository.findAll(new OrderSearch()); for (Order order : orders) { order.getMember().getName(); ... } return orders; }다음과 같은 결과를 기대합니다.{ "id": 1, "member":{ "name": "memberA", }, ... }하지만 order.getMember() 까지만 초기화 되어, 다음과 같은 결과가 나옵니다. { "id": 1, "member":{ "id": 1, "name": "memberA", "address":{ "city": "주소", "street": "거리", "zipcode": "우편번호" } }, ... }Intelij 에서도 'Member. getName()'의 결과가 무시되었습니다 라고 에러가 뜨는데 그 이유가 궁금합니다.
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
프로젝트 코드는 제공해주시지 않는건가요?
안녕하세요? 강의 잘 듣고 있습니다강의보면서 코드를 따라치고 싶은데, 코드는 따로 제공되지 않는건가요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
게이트웨이의 부하 관련 질문
게이트웨이 서버 로그를 확인하던 중에 문득 이러한 생각이 들었습니다.만약 이 프로젝트가 유저가 굉장히 많은 서비스라면 게이트웨이 자체에 부하가 생길 수 있을 것 같습니다.요청의 수가 굉장히 많아 질 것 같은데, 이러한 경우에 부하분산을 어떻게 해야할까? 게이트웨이 하나에 모든 요청(각 서비스, 모니터링등등)이 많아지면 게이트웨이 서버에 문제가 생기지 않을까? 라는 생각이 들었습니다.스케일업, 스케일아웃 이전에 부하분산할 수 있는 방법을 혹시 제시해주실 수 있으실까요? 현업에서는 어떻게 처리하는지 궁급합니다.또 게이트웨이 서버를 하나 더 띄웠을때 시스템이 더 복잡해질 것 같은데, 어떤 방법들을 사용하고 어떤 점들이 고려되는지도 궁금합니다.
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
update가 반환하는 Member의 엔티티 여부
JPA 기본편 강의 내용을 까먹어서 질문드립니다.MemberService의 update()에서 반환 타입을 void가 아닌 Member로 한 경우, controller에서 해당 Member를 반환받았을 때 이 Member는 영속성 컨텍스트가 관리하는 엔티티가 아닌건가요? 아니면 service와는 다른 영속성 컨텍스트에서 관리되는 엔티티인건가요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
검증 오류 시 api 전송
MemberApiController의 saveMemberV2()에서 @Valid에 의해 검증 오류가 발생한 경우에도 오류에 대한 api를 내려줘야 하잖아요. 이때에도 오류가 없는 경우와 마찬가지로 CreateMemberResponse를 반환해야 하는 건가요?검증 오류가 발생했을 때 api를 어떻게 전달해야하는지를 잘 모르겠습니다.
-
해결됨PZM기반 실무중심 백엔드 부트캠프(프리트레이닝)
rest api json 객체 한글 깨짐 현상
안녕하세요~ 선생님 강의 정말 재미있게 듣고 있습니다. 49강 강의를 듣는 중에 restful api json 객체 한글 깨짐 현상이 있습니다. 혹시 chrome 문제였나 싶어 postman 으로도 띄워봤지만 여전합니다.ㅠㅠㅠ 구글 찾아가며 해결해보려고 했지만 잘 해결되지 않습니다. // http://localhost:8081/myweb/rest @RequestMapping("/rest" ) public List<String> rest(HttpServletResponse response){ response.setCharacterEncoding("UTF-8"); List<String> list=new ArrayList<>(); list.add("스프링 프레임워크"); list.add("잘 하면"); list.add("된다"); System.out.println("Returning list: " + list); return list; // rest.jsp <-- 뷰를 만들면 된다.(X) : JSON -> [{ key:value, , ,}.{ },{ }] }System.out.println("Returning list: " + list);이 부분 콘솔에 찍힌 값도 Returning list: [�뒪�봽留� �봽�젅�엫�썙�겕, �옒 �븯硫�, �맂�떎]이렇게 나옵니다. 수정:// http://localhost:8081/myweb/rest @RequestMapping("/rest" ) public List<String> rest(){ List<String> list=new ArrayList<>(); list.add("스프링 프레임워크"); list.add("잘 하면"); list.add("된다"); System.out.println("Returning list: " + list); System.out.println("안녕"); return list; // rest.jsp <-- 뷰를 만들면 된다.(X) : JSON -> [{ key:value, , ,}.{ },{ }] }System.out.println("안녕");이 부분도 깨져서 나와용. ㅠㅠㅠㅠㅠ감사합니다~package com.example.controller;import com.example.entity.Book;import com.example.repository.BookMapper;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.*;import java.util.ArrayList;import java.util.List;@RestControllerpublic class SpringRestController { // http://localhost:8081/myweb/rest@RequestMapping("/rest")public List<String> rest(){List<String> list=new ArrayList<>();list.add("스프링 프레임워크");list.add("잘 하면");list.add("된다");return list; // rest.jsp <-- 뷰를 만들면 된다.(X) : JSON -> [{ key:value, , ,}.{ },{ }]} }
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
api 개발 시 회원가입 폼 요청
타임리프를 사용했을 때는 회원가입 시에 @GetMapping을 사용하고 뷰 템플릿을 반환하도록 했는데요. api로 개발 시에는 회원가입 폼을 요청하는 url을 따로 만들지 않아도 되는 건가요? 이 경우에는 어떻게 처리되나요..?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
5:14 rollbackOnly에 대해서
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]강의 5:14분 내용에 대한 질문입니다. ‘rollbackOnly를 참고하지 않는다’는 말은,가장 바깥쪽에 있는 트랜잭션 AOP 프록시 객체(MemberService의 트랜잭션 AOP 프록시 객체)가 런타임 에러를 만나면어차피 트랜잭션 매니저에게 롤백 요청을 하기 때문에 rollbackOnly를 따로 참고하지 않아도 된다는 뜻인가요? 그렇다면, 만약 런타임 예외가 발생하지 않는 경우 rollbackOnly는 내부 트랜잭션 중 하나에서 임의로 롤백했을 때바깥쪽에서 이를 감지하는 용도로 사용되는 건가요?