묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
v3, v4 회원 목록이 뜨지 않습니다.
[질문 내용]여기에 질문 내용을 남겨주세요.https://drive.google.com/file/d/1ojrNCJdVDq3UfLzfVTR1B3IU7A4ATK0L/view?usp=sharinglocalhost:8080에서 v3, v4, v5의 회원 목록으로 들어가면 저장한 회원이 안 뜹니다. v4와 v5는 v3을 바탕으로 수정한 거라 v3에서 오류가 해결되면 어떻게든 될 것 같긴 합니다. v2나 v1으로 회원 목록을 확인하면 제대로 떠서 저장은 제대로 된 것 같습니다. 화면 문젠가 해서 MemberListControllerV3.java나 ModelView.java, MyView.java 는 자료 코드 복붙도 해봤는데 해결이 안 됐습니다. 어디가 잘못된 건지 알려주시면 감사하겠습니다.
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
단위 테스트시, 스프링 컨테이너에 등록된 Bean 사용 방법
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 스프링 강의 듣는 도중 질문 사항이 생겨서 문의 드립니다.보통 단위테스트를 진행할 때, 테스트에 필요한 객체들을 주입해서 사용하는 것이 아니라, 객체를 따로 생성해서 테스트를 하는데, 그런게 아니고 직접 의존 관계를 주입해서 바로 테스트할 수는 없는건가요?예를들면,public class DbConTest { DBConnection dbConnection; @Test void dbConTest() throws SQLException { HikariDataSource dataSource = new HikariDataSource(); dataSource.setJdbcUrl("jdbc:mariadb://localhost:9898/dddddd"); dataSource.setUsername("root"); dataSource.setPassword("root"); dbConnection = new DBConnectionImpl(dataSource); dbConnection.dbconnection(); } }이렇게가 아닌,public class DbConTest { private final DBConnection dbConnection; private final DataSource dataSource; public DbConTest(DBConnection dbConnection, DataSource dataSource) { this.dbConnection = dbConnection; this.dataSource = dataSource; } @Test void dbConTest() throws SQLException { dbConnection.dbconnection(); } }이렇게요!!
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
31강 질문
사진과 같이 대출기능을 실행할 때 java.sql.SQLSyntaxErrorException: Unknown column 'userloanhi0_.bookname' in 'where clause' 라는 오류가 발생하여 진도가 안 나갑니다 ㅠㅠ... 테이블, 컬럼명도 똑같이 만들고, 선생님 코드랑 똑같은데 왜 안될까요 ...... 혼자서 해결해보려고 몇 시간을 헤매었지만 너무 힘드네요 ㅠㅠ 도와주세요 선생님.......
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
JSP로 변환시 private MemberRepository
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]강의에서 JSP로 변환중 <% %>사이에 MemberRepository memberRepository = MemberRepository.getInstance(); 코드에서private을 제외하게 된게 <% %> 사이 코드는 서블릿의 service 메서드 내부로 들어가기 때문인가요? 만약 그렇다면 앞 강의의 서블릿 코드와 같게 설정하고자 한다면이렇게 사용하는게 맞나요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
MemberFormServlet에서 MemberRepository
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]강의의 MemberFormServlet에서 MemberRepository가 사용되지 않은 것 같은데 선언한 이유가 궁금합니다!
-
미해결스프링 핵심 원리 - 고급편
쓰레드 로컬과 쓰레드 스택의 차이
동시성 문제를 해결하기 위해서 쓰레드 로컬이 각 쓰레드별 전용 저장공간을 만들어 데이터를 저장한다고 하셨는데 JVM의 메모리영역중에서 힙과 메소드영역은 모든 쓰레드가 공유하지만 각 쓰레드별로 스택공간이 할당된다고 알고 있습니다.그렇다면 쓰레드 로컬을 통해 데이터를 저장하면 각 쓰레드의 스택영역에 데이터가 저장되는 것인가요?만약 아니라면 쓰레드 로컬과 각 쓰레드의 스택영역에 저장되는 데이터들은 어떤 차이가 있는 것인지 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@ResponseBody를 붙여주는 이유가 궁금합니다.
@ResponseStatus(HttpStatus.OK) @ResponseBody @GetMapping("/response-body-json-v2") public HelloData responseBodyJsonV2() { HelloData helloData = new HelloData(); helloData.setUsername("userA"); helloData.setAge(20); return helloData; } 위에 코드에서는 객체를 리턴하는데 기본값, String이 아니라 뷰 리졸버가 작동하지 않을거 같습니다. 그런데 @ResponseBody를 붙여주는 이유가 궁금합니다.
-
미해결실전! 스프링 데이터 JPA
질문 join
@Entity public class board { @Id @GeneratedValue @Column(name = "bno") private Long id; private String filename; }file에서 board를 join했습니다. @Query("select f from file f join fetch f.board on f.board =: bno") List<file> findByBno(@Param("bno") int bno); }이부분에서 int로 board.getId 로 넘겨서 위와같이 join을 하고 싶은데 안됩니다board의 pk값을 file에서 where을 걸었는데 안됩니다.오류 :Caused by: java.lang.IllegalArgumentException
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@RequestBody의 동작과정이 궁금합니다..!
@RequestBody의 동작과정이 궁금합니다..!HttpEntity를 통해 요청을 받아와서 거기서 .getBody()를 통해 갖고오는게 맞을까요?내부과정을 직접 확인하고 싶은데.. 어떻게 확인해야할지도 알려주시면 감사하겠습니다
-
해결됨토비의 스프링 부트 - 이해와 원리
테스트에서의 @Transactional 사용에 대해 질문이 있습니다.
안녕하세요 토비 선생님!강의 너무 재밌게 잘 듣고 있습니다. 이제 몇개 남지 않아서 많이 아쉽네요. 다름이 아니라 테스트 코드 작성시 `@Transactional` 어노테이션의 사용에 대해 질문이 있습니다. 저는 롤백테스트 작성을 위해 @Transactional 을 애용해왔는데요,,얼마전 업무를 보다가 이상하게 테스트 코드는 잘만 통과를 하는데 같은 코드가 서버에 띄웠을때는 의도대로 동작을 안하더라고요. 한참을 씨름하다 알고보니 엔티티를 변경하고 JPA 변경감지로 변경하도록 의도한 코드인데 트랜잭션 경계 밖에서 변경을 하고 있었더라고요.이후로는 찾아보니 테스트 코드에서 @Transactional을 사용하지 말라는 이야기가 많아 안쓰려고 노력을 해보는데 테스트 후 전부 롤백시키는게 만만치가 않더라고요. @AfterEach로 리포지터리를 다 불러와서 하나씩 돌려놓는것도 일이고..개인적으로는 @Transactional 대신에 단순히 전체 테스트에 대해 DB 롤백을 해주는 어노테이션이 별개로 있었으면 더 좋지 않았을까 하는 아쉬움도 있더라고요.스프링에서 굳이 서로 다른 용도의 기능을 하나의 어노테이션으로 공유하는 이유가 있을까요? 트랜잭션 경계라는 점에서는 공통점이 있다지만 각각의 기능으로 분리되었어도 되지 않았을까요?AfterEach 넣어서 리포지터리 하나하나 불러와 일일히 초기화 해 주는 대신 @Transactional 만큼 코드가 깔끔해지면서 테스트코드에 @Transactional을 쓰면 생기게 되는 문제를 해결하는 방법이 있을까요? 혹은 사실 알고보면 테스트에 @Transactional을 쓰는게 좋은건데 제가 잘못 오해하고 있었을까요? 요즘 테스트 코드를 작성할때마다 고민이 많았는데 제가 한동안 검색한 결과로는 쉽게 결론을 내기가 힘들었습니다.더 나은 코드작성에 꼭 도움이 필요해서 실례를 무릅쓰고 질문글을 올려봅니다.감사합니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
인텔리제이 무료->유료 버전 변경 시
처음 시작할 때 커뮤니티 무료 버전을 사용했는데요,대학생 계정 인증으로 유료 버전을 사용할 수 있다고 하더라고요만약에 유료 버전을 사용할 수 있게 되면 기존에 있던 인텔리제이 프로그램을 삭제하고유료버전을 새로 설치해서 다시 처음부터 초기설정하고 강의를 다시 따라가야 할까요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
offset 과 limit 값을 서버쪽으로 보내는 방식
안녕하세요강의에서는 페이징에 필요한 offset과 limit 값을 @RequestParam을 통해서 넘겨주는 것을 보았습니다. 그런데, 저는 현재 @RequestBody OrderSearchDto를 파라미터로 받아와 내부 필드인 멤버명이나 주문 상태를 검색조건으로 활용하고 있었습니다.이런 경우에는 그냥 @RequestParam을 사용하지 않고, DTO에 offset과 limit 필드를 추가해서 검색과 페이징에 필요한 데이터를 OrderSearchDto 안에 한번에 받는것은 어떤지 궁금합니다.보통 실무에서는 페이징에 필요한 값은 @RequestParam으로 받는 편인가요? 아니면 저의 발상처럼 OrderSearchDto 같은 DTO를 통해 @RequestBody로 받기도 하나요? 일반적인 관점에서 best practice가 따로 있는지 궁금합니다.
-
미해결실전! 스프링 데이터 JPA
강의 들으면서 응용해서 테스트를 작성하고 있는데 자꾸 null인 상태라고 해서 질문드립니다.
강의를 들으면서 간단한 테스트 문을 작성해봤습니다. 근데 계속 NullPointerException이 발생해서 여러가지 테스트를 하면서 오류를 분석해보니answerList에 아무 값도 들어가지 않아서 자꾸 null이라고 뜨는데 대체 왜 그런지 모르겠어서 질문드립니다.아래에는 오류 화면이고 Question, Answer 엔티티와 함께테스트 코드도 같이 첨부하겠습니다.@Entity @Getter @Setter public class Question { @Id @GeneratedValue @Column(name = "question_id") private Long id; @Column(unique = true, length = 200) private String subject; @Column(unique = true, columnDefinition = "TEXT") private String content; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; @OneToMany(mappedBy = "question", cascade = CascadeType.REMOVE) private List<Answer> answerList; private LocalDateTime createDate; }@Entity @Getter @Setter public class Answer { @Id @GeneratedValue @Column(name = "answer_id") private Long id; @Column(columnDefinition = "TEXT") private String content; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "question_id") private Question question; private LocalDateTime createDate; }@SpringBootTest @Transactional class AnswerRepositoryTest { @Autowired private QuestionRepository questionRepository; @Autowired private AnswerRepository answerRepository; @Test public void 답변조회() throws Exception{ //given Question question = new Question(); question.setSubject("제목입니다."); question.setContent("본문입니다."); questionRepository.save(q); Question findQuestion = questionRepository.findById(question.getId()).get(); Answer answer = new Answer(); answer.setContent("답변입니다."); answer.setQuestion(findQuestion); answer.setCreateDate(LocalDateTime.now()); answerRepository.save(answer); //when List<Answer> answerList = findQuestion.getAnswerList(); //then assertEquals("답변입니다.",answerList.get(0).getContent()); } }테스트 코드에서 findQuestion.getSubject/ findQuestion.getContent까지 다 잘 찾아지는데딱 getAnswerList()만 하면 null이라고 뜹니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
window bulid설치관련
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]window이고 여기까지 했는데 libs파일이 없어요ㅠ어떻게 해야하나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
회원 서비스 테스트 관련하여 질문드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)yes2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) yes3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)yes[질문 내용]잘배우고있습니다. 2~3년전 강의여서 그런지 혹시 refactoring 된건가요? 강사님 IllegalStateException 확인하는 부분 아래와 같이 refactoring해서 검증했는데 테스트는 완료했고, 강사님께서 알려주시는 대로 코딩했을때는 method자체가 검색되지 않았습니다.@Test public void 중복_회원_예외() { Member member1 = new Member(); member1.setName("hi"); memberService.join(member1); Member member2 = new Member(); member2.setName("hi"); Assertions.assertThatIllegalStateException().isThrownBy(()->memberService.join(member2)); /* try { memberService.join(member2); fail(); } catch (IllegalStateException e) { Assertions.assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); }*/ }
-
미해결스프링 핵심 원리 - 기본편
이해안되는 곳이 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.의존관계 주입 방법에서 오더서비스 의존관계 주입을 하였습니다.그러고 난 다음 확인 하기 위해 오더서비스임플 생성자에 sout문장을 넣은거 같습니다.근데 오토앱컨피트테스트는 빈에서 멤버서비스를 가지고 오는것으로 보이는데 실행을 하니 오더 서비스에 생성자에 추가한 sout문장들이 출력이 되었습니다 저는 오더서비스의 생성자에 추가한 문장들이 나오지 않습니다. 원래 멤버서비스 객체를 받아온거 아닌가요? 왜 오더서비스 sout문장이 나오는지 잘 모르겠습니다 ㅜ
-
미해결실전! 스프링 데이터 JPA
페이징 질문입니다!!
영환님 항상 강의를 듣다가 궁금증이 있어 질문을 드립니다.페이징 부분에서 Pageable를 파라미터와 응답값으로 그대로 사용하는 부분이 있습니다.응답으로 Pageable를 그대로 사용하게 되면 Pageable객체와 last, totalPages 등이 전부 응답값으로 설정되게 되는데, 보통 실무에서나 프로젝트에서도 그대로 사용하나요?! 응답 값에서 필요한 부분만 추출해서 사용하는게 좋지 않나요? ("Page를 1부터 시작하기" 말고)
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
application.yml url설정
url: jdbc:h2:tcp://localhost/~/jpashop요 부분에서 jpashop이 그냥 h2콘솔에서 설정한 이름이랑 서로 맞기만하면 되는건가요?아니면 처음 프로젝트를 생성할때 설정한 groupid나 artifactid랑 맞춰야 하는건가요?
-
미해결실전! 스프링 데이터 JPA
안녕하세요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 복습 중 궁금한 부분이 있어 질문 드립니다. H2 데이터베이스를 실행하지 않더라도 스프링 내부 DB 에서 테스트가 가능하다고 하셨는데 스프링 내부적으로 H2 DB 를 사용하는 건가요? 그 데이터들은 어느 위치에 보관이 되고 있는지 휘발성인지도 궁금합니다 감사합니다.
-
해결됨토비의 스프링 부트 - 이해와 원리
ApplicationContextRunner
ApplicationContextRunner를 사용하는 부분에서assertThat(context).hasSingleBean이랑 asserThat(context).doesNotHaveBean 사용이 안되네요hasSingleBean이랑 doesNotHaveBean이 없어요버전 문제일까요 지금까지 다 잘 따라왔는데 뭔가 문제인지 모르겠네요