묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결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는 내부 트랜잭션 중 하나에서 임의로 롤백했을 때바깥쪽에서 이를 감지하는 용도로 사용되는 건가요?
-
해결됨Spring Boot를 활용하여 채팅 플랫폼 만들어보기
실 서비스 환경 문의
채팅 실서비스 환경 관련 문의 드립니다. 웹소켓은 커넥션을 유지하는데 서비스가 인기가 있어 동시접속자가 많아지면 커넥션 고갈이 생길 것 같습니다. 이런 문제를 방지하기 위해 실 운영 환경에서는 어떻게 모니터링하고 대응하는지 궁금합니다.실 운영 환경에선 멀티 서버 멀티 인스턴스로 동작하게 해야 할 것 같은데 이런 경우에도 @SendTo 애노테이션을 활용할 수 있나요? 없을 것 같아 질문드립니다.실 운영환경에선 엔진엑스같은 웹서버를 거쳐 들어올 것 같은데 이럴 때 주의해야할 사항이 있을까요?
-
미해결Practical Testing: 실용적인 테스트 가이드
MSA 환경에서의 Rest Docs 구성 환경 설정에 대한 문의
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요! 모든 강의 수강하였고, 강의 내용을 기반으로 기존 작업한 프로젝트에 리팩토링을 진행하고 있습니다.진행한 프로젝트는 MSA 기반으로, Swagger 를 사용하여 진행하였습니다.서비스가 나눠져 있어, 각 서버별로 독립적인 문서를 가지고 있고, 개발자가 각 서버에 접근을 해야하는 문제가 있었습니다.따라서 기존에는 Getway Server에 Swagger를 띄우고 각 서버를 discovery 서버에서 받아와서 api 호출을 통해 문서를 받아오게 하여 gateway에서 전체 문서를 열람 가능하게 하였습니다. 위와 같은 환경에서 동일하게, 단일 진입점으로 활용할 서버에 docs 설정을 통해 각 서버의 API 문서를 받아올 수 있게 구성하면 될까요? 아니면, 다른 방법이 있을까요? 현업에서 어떻게 구성하시는지 궁금합니다.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
혹시 이 부분은 강의 찍을 때와는 다르게 현재 바뀐 걸까요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.// flush 자동 호출 commit, query int resultCnt = em.createQuery("update Member m set m.age = 20") .executeUpdate(); Member findMember = em.find(Member.class, member1.getId()); System.out.println("findMember.getAge() = " + findMember.getAge()); 이 부분을 보시면 영한님의 12분 코드와 같잖아요?이때 Member findMember = em.find(Member.class, member1.getId()); 의 findember를 출력할 때, 영속성 컨텍스트 때문에 update문의 age가 20인 것이 반영이 안 돼야 하는데 제 환경에서는 반영이 되는 걸로 나옵니다..!정리하면, em.clear() 를 하지 않았을 때는 age가 0이 나와야 하지만, em.clear() 를 하지 않았음에도 불구하고 age가 20이 나옵니다물론 아래처럼 member의 age 초기값을 0으로 지정해줬습니다Member member1 = new Member(); member1.setUsername("회원1"); member1.setAge(0); member1.changeTeam(teamA); em.persist(member1); 이유가 무엇일까요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
값 타입의 필드들에 final
1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]값 타입의 클래스에 setter를 제공하지 않아도 변경 불가능하도록 할 수 있지만, 필드들에 final을 붙이는 것 또한 괜찮지 않을까요?대신 기본생성자도 만들 기 위해서 @NoArgsConstructor 옵션을 사용 할 수 있을 것 같습니다.최종 형태입니다@Embeddable @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED, force = true) @RequiredArgsConstructor public class Address { private final String city; private final String street; private final String zipCode; }이런식으로 만들어도 될까요? 또 force 옵션을 쓰게 되면 리플랙션/프록시 기술에 영향을 주어서 쓰면 안되는 형태일지 궁금합니다
-
미해결실전! 스프링 데이터 JPA
단순 조인과 페치 조인에 대한 추가 질문입니다.
안녕하세요.강의 항상 잘 보고 있습니다. 아래 두 질문 보고 이해가 안 되는 부분이 있어 질문 드립니다. https://www.inflearn.com/community/questions/33719/fetch-join-vs-joinhttps://www.inflearn.com/community/questions/1364411/%EB%8B%A8%EC%88%9C-%EC%A1%B0%EC%9D%B8%EA%B3%BC-%ED%8E%98%EC%B9%98-%EC%A1%B0%EC%9D%B8%EC%97%90-%EB%8C%80%ED%95%B4-%EC%A7%88%EB%AC%B8-%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4아래처럼 페치조인 사용하지 않고 member와 team을 select해서 가져올 경우에는 lazy 쿼리가 발생할 수 있다고 이해했습니다.@Query("select m, t from Member m join m.team t") List<Member> findInnerJoin(); team을 select하면 영속성 컨텍스트에도 team의 모든 pk가 저장되면서 lazy 쿼리가 발생하지 못하는 것은 아닌가요? 첫번째 링크 질문의 "이번 예제가 좀 특수한 경우고, 일반적으로 team이 영속성 컨텍스트에 미리 존재하는 경우는 드물기 때문에" 라는 답변에서 어떻게 team이 미리 존재하지 않는 경우가 생길 수 있는지 궁금합니다...
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품 수정시 기존값이 그대로 유지되어 나타나요
[질문 내용]saveItem에 @Transactional 어노테이션이 선언되어있고, updateItemForm의 Id 값을 hidden으로 설정 되어있는데상품 수정시 기존 값이 그대로 유지되면서 화면에 보여집니다ㅠㅠ뭐가 잘못된걸까요...? 관련 코드도 댓글로 첨부 하겠습니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JPA소개 영상에서 jpa.persist() 관련 질문 있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 강의 잘 듣고있습니다. 강의를 듣던 중 질문이 생겨서 문의드립니다.저는 SI 개발자로 커리어를 시작하여 SI 업체 방식밖에 몰라mybatis만 써보고 JPA를 처음 배우는 입장이라 부족한 질문이 될수 있는점 미리 양해부탁드립니다. 12:26 초에 JPA와 상속 - 부분을 듣던 중 의문이 생겼습니다. item과 album 테이블이 부모 자식 관계가 있을 때jpa.persist( album ); 로 album 객체를 넣어주면 자동적으로 부모 테이블인 item 테이블에 자동으로 넣어준다고 되어 있는데 제 생각에는 FK 를 jpa가 추적해서 넣어주는것 같습니다.그러나 제 짧은 실무경험상에서는 편의상의 이유로 논리 ERD 상에서만 FK를 설정하고 실제로는 FK를 걸지 않고 개발을 진행한 적이 많습니다.그렇다면 혹시 FK를 걸지 않아도 jpa가 찾아서 item 테이블에도 데이터를 넣어주게 되는지 궁금하니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
테스트 코드 createOrderWithStock 로그에 관하여
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요 강사님. 테스트코드의 @Transactional은 마지막에 rollback을 하기 때문에 dirty checking을 하지 않고, 이로 인하여 update쿼리가 전송되지 않을것이라 생각했습니다.하지만 로그에는 update stock set created_date_time=?, modified_date_time=?, product_number=?, quantity=? where id=? Hibernate: update stock set created_date_time=?, modified_date_time=?, product_number=?, quantity=? where id=?이처럼 quantity를 변경한것에 대한 update쿼리가 전송되었습니다.이 부분에 대해서 찾아본 결과 "테스트 코드 마지막에서 stockRepository.findAll() 을 통해 stock을 전체 조회할때, select쿼리가 db에 직접 날라가기 때문에 select쿼리가 수행되기전 flush()로 인하여 update쿼리가 날아갔다." 라고 이해했습니다. 제가 이해한 내용이 맞을까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
애플리케이션 단과 DB단 차이
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]해당 강의에서 설명하는 내용은 JPA를 가지고 Application단에서 연관된 객체들의 생명주기를 관리해주는 것인데 그러면 db단에서 직접 cascade 속성을 걸고 관리해주는것과 어떤 차이가 있나요? 둘다 같이 적용해도 되는건가요? 아님 둘중 하나만 해주면 되나요? app단에서 다 해주면 DBA 가 필요한가?라는 궁금증도 생기네요. 실제 현업에서는 어떤 방법을 더 많이 사용하는지 알려주시면 감사하겠습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Member테이블에 insert가 안돼요
[질문 내용]Create 테이블은 잘 되는데 insert가 안되서요 강의처럼 @Rollback(false) 넣었는데 insert 가 안뜹니다
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Window에서 Vue.js 설정
당연히 구글링 해보셨져? 원하는 결과를 못찾으셨나요? 어떤 검색어를 입력했는지 알려주세문제가 발생한 코드(프로젝트)를 Github에 올리시고 링크를 알려주세요.안녕하세요 호돌맨님 .. 영상 잘보고 있습니다.저는 Window 에서 영상보면서 공부를 하고있습니다. 근데 Vue 부분 부터 영상대로 따라 만들어보려고 우분투 설치 등 GPT 한테도 물어보면서 하려고했지만도저히 못따라할거 같습니다 혹시 Window 로 하는 사람들은 어떤걸 참조하면서 하면 될까요?? 기존의 React 사용을 해봐서 Vue도 한번 따라해보고싶어서 따라 하는중입니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
orderList 페이지 div크기 차이
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.html코드는 같은데 입력창의 배치가 form-inline으로 안 나오는 이유가 있나요?<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head th:replace="fragments/header :: header"/> <body> <div class="container"> <div th:replace="fragments/bodyHeader :: bodyHeader"/> <div> <div> <form th:object="${orderSearch}" class="form-inline"> <div class="form-group mb-2"> <input type="text" th:field="*{memberName}" class="formcontrol" placeholder="회원명"/> </div> <div class="form-group mx-sm-1 mb-2"> <select th:field="*{orderStatus}" class="form-control"> <option value="">주문상태</option> <option th:each= "status : ${T(jpabook.jpashop.domain.OrderStatus).values()}" th:value="${status}" th:text="${status}">option </option> </select> </div> <button type="submit" class="btn btn-primary mb-2">검색</button> </form> </div> <table class="table table-striped"> <thead> <tr> <th>#</th> <th>회원명</th> <th>대표상품 이름</th> <th>대표상품 주문가격</th> <th>대표상품 주문수량</th> <th>상태</th> <th>일시</th> <th></th> </tr> </thead> <tbody> <tr th:each="item : ${orders}"> <td th:text="${item.id}"></td> <td th:text="${item.member.name}"></td> <td th:text="${item.orderItems[0].item.name}"></td> <td th:text="${item.orderItems[0].orderPrice}"></td> <td th:text="${item.orderItems[0].count}"></td> <td th:text="${item.status}"></td> <td th:text="${item.orderDate}"></td> <td> <a th:if="${item.status.name() == 'ORDER'}" href="#" th:href="'javascript:cancel('+${item.id}+')'" class="btn btn-danger">CANCEL</a> </td> </tr> </tbody> </table> </div> <div th:replace="fragments/footer :: footer"/> </div> <!-- /container --> </body> <script> function cancel(id) { var form = document.createElement("form"); form.setAttribute("method", "post"); form.setAttribute("action", "/orders/" + id + "/cancel"); document.body.appendChild(form); form.submit(); } </script> </html>
-
미해결실전! 스프링 데이터 JPA
스프링 데이터 Jpa 공통 인터페이스 기능 getOne(ID)
강의 자료 3. 공통 인터페이스 기능 마지막 주요 메서드 부분 getOne(ID): 엔티티를 프록시로 조회한다. 내부에서 EntityManager.getReference() 호출여기에 적힌 getOne이 스프링 데이터 JPA 2.5 부터 getById로 변경 되었고 스프링 데이터 JPA 2.6 getReferenceById로 변경되어 3.0 부터 getById도 deprecated 되었다고 들었는데 강의 자료에는 변경되어 있지 않는 것 같습니다.