월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
뷰 관련해서 질문이 있습니닷
안녕하세요 태현님 강의 재밌게 보고 있습니다.다름이 아니고뷰를 조금 제가 생각하는 요구사항에 맞게 커스텀을 하고 싶은데 리액트 js 파일이 압축되어서 저장되어 있어서 직접 뷰까지 구성을 하신건지 뭔가 스크립트를 자동으로 구성해주는 툴을 사용하시는 건지 궁금합니다ㅠ
- 미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
안녕하세요
강사님 강의기초 + 도서관 강의 까지보고 개인 프로젝트 중에 막혀서 질문 드립니다.. ㅜㅜ 일단 개인 프로젝트 질문 드려서 죄송합니다.. 아무리 구글링해도 답이 안나오고 코틀린 같은 경우에는 계속 안드로이드 쪽만 레퍼런스가 있어서 답을 못 찾았습니다. 단순이 Entity ->Dto 변환 문제인데 @Enumrated 를 사용하지 않고 Converter를 사용해서 변환하려 하는데 아직 코틀린이 눈에 익숙하지 않아서 그런지 봐도 잘 모르겠습니다 ㅜㅜ이전 개인프로젝트에서 하던 방식과 똑같이 햇는데 안되는 이유도 궁금하고 , 혹시나 더 좋은 방법이 있다면 추천 부탁 드리겠습니다!!
- 해결됨실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
DB 값 질문
안녕하세요 코틀린강의부터 코프링까지 잘 듣고 있습니다.바로 질문 드리자면,!1.saveUserTest2라는 테스트케이스를 한 개 더 만들어서 모든 테스트를 진행 시킨다면, saveUserTest는 통과하지만 saveUserTest2는 DB데이터가 2개가 있어서 통과되지 못 합니다. 이럴 때는 어떻게 해야 독립적으로 DB값을 가지게 할 수 있나요? @Transactional 쓰는 rollback된다고 얼핏 들은 거 같은데 잘 모르겠네요.. 2.실제 h2 DB에는 유저가 2명이 저장이 되어 있는데 테스트환경에서는 0명인 이유는 @SpringBootTest 어노테이션이 실제 실행환경과 완전히 독립된 환경을 만들어 주어서 그런 건가요? 감사드립니다.
- 미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
spring boot3에서 kotlin 사용할때 jdk 버젼 선택
안녕하세요spring boot3에서 kotlin 사용할때 jdk 버젼 선택에 대해 고민인데요jdk8을 쓰는게 나을지 spring boot에서 추천하는 jdk17을 쓰는게 나을지가 고민입니다.어떻게 판단하는게 좋을까요?
- 미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
v1/ v2 v1은 실행이 잘되는데 v2는 실행이 안됩니다!
21강 책의분야 추가하기에서 v1이 아닌 v2에서 사용자등록, 책등록을 실행하려고하면 서버에 여녁ㄹ이 불가능하거나, 네트워크 오류입니다 라는 alert창을 출력하고Itellij내의 오류는 발생하지 않고 v1에서는 문제없이 저장이 잘됩니다,, 그래서 코드에 문제가 있나해서 library-app-complete로 실행해봐도 똑같은 오류가 발생하고console창에는 아무런 오류도 발생하지 않습니다 ,, oracle과 port번호 충돌이 일어나서 port번호를 변경해 줬습니다Application.tmlbuild.gradle
- 미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
library-app-complete 코드 실행방법
library-app-complete 파일을 실행해보고 싶은데요 LibraryAppApplication.kt 에 intelliJ IDEA 로 들어가면 원래 초록색 세모버튼 재생하는게 잇어야되잖아요 ? 그게 없는데 어떻게 하면 실행해볼 수 있을까요..?
- 미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
안녕하세요!
loanBook() 메소드를 보면 userLoanHistories에 값을 추가하기만 하는데 userLoanHistoryRepository에 값이 추가되어있습니다..이건 spring data jpa의 역할인 건가요??
- 미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
자바 Private 관련 문의
자바에서 아래 코드가 private Integer age;코틀린으로 변환하면val age: Int?, // 나이는 null일 수 있지만 불변이라고 하셨는데, 자바에서 private이 불변인가요 ? 클래스 내에서 수정할 수 있다고 알고 있는데 불변인건가요?
- 미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
Book.java 코틀린으로 변경 후 에러
12강 Book.java 코틀린으로 변경 후 BookServiceTest.kt 에서 Test를 실행하면 에러가 납니다 ㅠㅠ 왜그럴까요..? org.jetbrains.kotlin.backend.common.BackendException: Backend Internal error: Exception during IR lowering
- 미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
@BeforeEach method 'public static final void com.group.libraryapp.calculator.JunitTest.beforeAll()' must not be static.
package com.group.libraryapp.calculator import org.junit.jupiter.api.AfterAll import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test class JunitTest { companion object { @BeforeEach @JvmStatic fun beforeAll() { println("모든 테스트 시작 전 ") } @AfterAll @JvmStatic fun afterAll() { println("모든 테스트 시작 후") } } @BeforeEach fun beforeEach() { println("각 테스트 시작 전") } @AfterEach fun afterEach() { println("각 테스트 시작 후 ") } @Test fun test1() { println("테스트 1") } @Test fun test2() { println("테스트 2") } } 이렇게 하고 실행했는대, @BeforeEach method 'public static final void com.group.libraryapp.calculator.JunitTest.beforeAll()' must not be static. 이런 에러가 나와요 ㅠ
- 해결됨실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
JUnit5에서 의존성 주입에 대해 질문드립니다
기존에 프로젝트를 진행할 때 생성자를 통한 의존성 주입을 @Autowired를 생략하여 사용하고 있었습니다. 그런데 JUnit5로 테스트 코드를 작성할 때는 @Autowired를 생략하면 에러가 발생하더라구요. 강의에서와 같이 명시적으로 생성자에 @Autowired를 선언해야 동작하는 것을 확인할 수 있었습니다.(Java, Kotlin 모두) 에러 로그를 확인해보니 생성자의 파라미터에 대한 파라미터 Resolver가 등록되지 않았다고 합니다. 동일한 코드로 생성자를 통한 의존성 주입을 사용하는데, 메인 코드에는 @Autowired를 생략해도 정상적으로 동작하는 반면에 테스트 코드에서는 명시적으로 선언해야 동작하는 이유가 무엇인지 궁금합니다!
- 미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
@BeforeAll 질문입니다
@BeforeAll 사용시, companion object로 감싸라는 컴파일에러가 발생하는데, 강사님은 발생하지 않으셔서 질문을 남깁니다. jvm버전때문에 발생하는 에러일까요?
- 미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
status 필드는 String 값으로 안해줘도 되나요 ??
안녕하세요 강사님 !! 강의 너무 재밌게 잘 듣고있습니다 이번 강의에서 한가지 질문 드릴게 생겼는데요!BookType 을 사용하는 Book 도메인 클래스의 type 필드는 @Enumerated(EnumType.STRING) 로 DB에 String 값이 들어가게 하여 확장성 이나 순서변경에 따른 오류를 최소화 해준걸로 아는데요UserLoanStatus 클래스를 사용하는 UserLoanHistory 의 status 필드에는 값이 두가지 (true , false 개념)여서 확장성을 크게 고려하지 않아 해당 어노테이션을 설정 안해줘도 되는건가요 ..?
- 미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
수업 내용 Fundamental & 파일 관련 질의
안녕하세요 선생님, 또 물어볼 게 생겼어요 ㅠㅠ강의에서 컨트롤러는 테스트를 별도로 작성하지 않았는데 해당 부분을 강의에서 제외하신 이유가 뭔지 궁금합니다.LibraryAppApplicationTest 자바 파일은 코틀린으로 굳이 안바꾸고 Java 빈 폴더를 main에 두고 둘 다 남겨둔 건 서로 호환이 되는 걸 보여주려고 하신 건가요?지난 번에 제가 JPA 단점을 여쭤봤는데 선생님은 JPA를 안 쓰면 안 좋은 점을 알려주신 것 같아 찾아보니 ^^; 잘못 사용하면 데이터 손실이 발생할 수 있고 (persistence context), 성능에 문제 (n+1)가 생길 수 있다고 하네요. 그만큼 다루기 어려운 부분이 있어 복잡하지 않은 시스템에선 피하는 개발자들도 꽤나 있는 거겠죠?BookLoanRequest.kt에는 data class BookLoanRequest( val userName: String, val bookName: String )로 마지막 String 이후에 comma(,)를 안 찍으셨는데, BookRequest.kt에는 data class BookRequest( val name: String, val type: BookType, ) 마지막에 컴마를 찍어주셨어요. 어느게 더 바람직한 practice인가요?ExceptionUtils 파일 안에 fun <T, ID> CrudRepository<T, ID>.findByIdOrThrow(id: ID): T { 라고 T를 계속 넣어주셨는데, 그게 타입을 유연하게 받고 함수 사용을 하고자 하는 제네릭 개념인거죠?cascade = [CascadeType.ALL], orphanRemoval = true 이해하는 게 어려운 것 같아요..MutableList<UserLoanHistory> = mutableListOf() 여기서 MutableList는 가변형으로 읽기 쓰기 둘 다 되고, List는 그 반대로 읽기만 되는 거로 확인했는데 그럼 대부분 데이터 POST/UPDATE/DELETE 등에 적용되면 mutable로 가는 거네요?아직 fundamental를 잡고 있어서 양해 부탁드려요..선생님 설명 기다리겠습니다!
- 해결됨실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
Jpa, Map Syntax, readOnly 에러 관련 질문
안녕하세요! 아주 용감하게.. 선생님의 두 강의를 동시에 듣고 있는 학생입니다 ^^질문이 몇 가지 있는데요,1) 아직 기본적인 부분도 채워가는 중이라 트랜잭션의 기본 정의부터 검색을 여러모로 해보다가 "데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미"한다는 내용을 발견했는데 이와 관련하여 Transactional annotation을 사용하신 게 맞죠? :)2) 선생님이 다른 분에게 답변하신 내용 중에 트랜잭션 처리를 Service의 역할로 본다고 하신 의견을 참고 하고, Jpa 연동된 프로젝트랑 Jdbi를 셋업해둔 프로젝트를 살펴봤는데 Jdbi 기반인 코드의 서비스 레벨에서는 Service나 Transactional annotation을 안쓰더라구요. 그게 딱 Jpa에 한정된 내용인가요?3) 수업 시간에 deleteUser fun을 작성하실 때, 유저를 삭제하는 부분 로직이 들어갔는데요. 만일 제가 delete fun에 여러 테이블의 데이터를 삭제하고자 한 특정 repository의 delete 메소드를 여러 번 호출해서 그 대표 func 안에 두어도 되나요? Jdbi를 사용하는 프로젝트에서는 그렇게 풀어나가는 걸 봤는데 Jpa에서도 @Trasactional 달고 가능한지 궁금합니다. 아님 single responsibility로 fun deleteA, fun deleteB 이렇게 나누는 게 나을지요?4) 수업 시간에 .map { UserResponse(it) } 과 .map(::UserResponse) 보다는 .map { user -> UserResponse(user) } 를 더 선호하신다고 했는데 그 이유가 뭔가요? 가독성 때문인가요? 다른 두 옵션이 좀 더 스마트해보이고 세련된 syntax 같아 보이는 이상한 생각이.. :)5) UserService.kt에서 fun getUsers(): List<UserResponse> 위에 @Transactional(readOnly = true)을 붙여주는데 readOnly가 빨간색이 뜨네요. Cannot find a parameter with this name: readOnly라고 에러 내용 확인이 가능한데 이걸 해결하려고 재빌드에다 dependency확인에 다시 IDEA reboot하고 구글검색도 했는데 해결이 안되서 도움 요청 드립니다. 뭔가 엄청 간단한 걸 빼 먹었을 것 같은데 선생님은 확인이 되실까요?6) 팀 시니어들이 예전에 어떤 프로젝트가 JPA 사용된 걸 보고, 매우 싫어하는 분위기였는데 보아하니 제 팀은 보통 다 Jdbi 사용하네요. 한국에선 JPA 사용이 더 흔한 것 같은데, 혹시 단점을 쉽게 설명해주실 수 있으신가요?질문이 많아서 죄송해요. 한꺼번에 모아두고 물어보는 게 나은 것 같아서.. ^^새해 복 많이 받으시고 두 강의 다 마치고 따뜻한 후기 올릴게요. 선생님의 코틀린 심화편도 고대하고 있습니다. 이 두 강의 곧 마치고 얼른 만나보고 싶은데 강의 준비 화이팅입니다!
- 해결됨실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
getUsersTest()에서 getUsers()로 메소드명을 명시하여 호출하는 이유는 무엇인가요?
강의에서 getUsers()가 get으로 시작하다보니 코틀린에서 프로퍼티처럼 간주한다고 하셨는데, 실제로 인텔리제이의 자동완성에서는 getUsers()가 나타나지 않고 users만 나타나는 것을 볼 수 있었습니다.다만 위와 같이 users를 사용해서 호출해도 테스트가 정상적으로 통과되는것을 확인할 수 있었습니다.그렇다면 get을 생략해서 코드 길이를 줄일 수 있지 않나? 하는 생각이 들었는데 강의에서와 같이 메소드명 전체를 명시하는 이유에 대해서 알고싶습니다!
- 미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
companion
안녕하세요 강의 잘 보고 있습니다 다름이 아니라 4분대에 나오는 생성자를 companion 으로 바꿔주셨는데.. 이게 더 좋다라고 하시는 이유를 제가 짐작이 안가서 그런데 혹시 간략하게 알려 주실수 있으신가요..?
- 미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
plugin
안녕하세요 강의 잘 듣고 있습니다 다름이 아니라 3분 40초쯤에 나오는 플러그인 설치 전에 오류가 뜨지않는데 이런경우도 있나요..?
- 미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
7분 12초
안녕하세요 강의 잘 보고 있습니다다름이 아니라 7분 12초쯤에 private final List 를 코틀린으로 변환 시키는 작업을 하는데 약간 이해가 안돼는 점이..final 이라 List는 불변이여서 val을 썼는데 뒤에는 MutableList 가변 리스트로 받아주니까 상충되는 느낌이 드는데... 이부분이 이해가 잘 되지 않습니다!
- 미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
14분 22초
안녕하세요 강의 잘 보고 있습니다제가 기본 문법같은 경우는 타 강의를 듣고와서 그런데 14분 22초쯤에 val message.message 가 이해가 잘 가지 않아서 그런데.. 혹시 문법중 어느 부분을 봐야할까요?? 이제 막 자바에서 코틀린으로 넘어가서 햇갈리는게 많네요 ㅎㅎ 오히려 스코프 함수를 쓴거는 이해가 갑니다!