월 26,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
JPA에 관련해서 현업 관련 질문이 있습니다.
간혹 유튜브 영상이나 ORM과 관련된 담론이 있는 글들을 보면 JPA의 속도 문제를 문제점으로 삼는 분들을 보았습니다. 그리고 JPA로는 한계가 오는 점들은 네이티브 쿼리를 사용해서 해결을 할 수 있다는 점, 그리고 태현님께서도 특정 상황에서는 JdbcTemplate을 사용해서 문제를 해결할 수 있다는 점을 강의에서 말씀 해주셨는데요. 하지만 그 '특정 상황'의 예시가 잘 떠오르지가 않는데 어떤 것이 있을까요? 배민의 영상에서도 동욱님은 JPA와 QueryDSL을 사용해서 몇 억건의 데이터도 잘 처리하셨고, 영한님께서도 책을 개정판을 내지 않는 이유로 이미 많이 성숙한 기술이라서 극적인 변화가 없는 기술이라고 하셨으며 어떤 유튜버분도 말씀하시길 'JPA라는 기술이 문제 자체를 일으킨다기 보단 개발자가 JPA에 대한 이해가 부족해서 문제가 발생한다.' 라고 하셔서 더 미궁속으로 빠집니다. 혹시 태현님께서도 이런 상황을 겪으신 적이 있으신지, 있다면 어떻게 해결하셨는지 궁금합니다!
- 미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
13강 yml 파일에서
yml파일 작성할 때 driver-class-name이 Cannot resolve class 가 cj부터 Driver까지 뜨네요.build.gradle의 의존성은 다음과 같구요, 아래 질문들 보고 Ctrl Shift N 해봤을 때 Driver.java 파일도 잘 있는데 이것 때문에 서버 실행이 안됩니다.dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-jdbc' testImplementation 'org.springframework.boot:spring-boot-starter-test' runtimeOnly 'mysql:mysql-connector-java:8.3.0' }
- 해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
34강 orphanRemoval 관련 질문입니다!
orphanRemoval 을 걸지 않았을 경우책6을 삭제했으나, userLoanHistories를조회해보면 여전히 책6이 존재한다.orphanRemoval = true 을 걸었을 경우클린 코드를 삭제했더니조회시 사라졌다어째서 orphanRemoval을 걸어주지 않으면데이터베이스에 반영이 되지 않는건가요? @Transactional어노테이션으로 인해 트랜잭션이 시작될 때,영속성 컨텍스트가 시작되고,영속성 컨텍스트의 4대 특징 중 하나인생성/수정 감지로 인해user 객체의 userLoanHistories 의 값에변경사항(removeOneHistory)이 발생하여자동저장이 될거라고 생각했는데 말이죠.. 실제 데이터베이스상에선 userLoanHistories 는user테이블의 필드가 아니기 때문에,영속성 컨텍스트가 관리하는 field 에 포함이 되지않는데orphanRemoval = true 를 걸어주면비로소 자신이 관리하는 field로 인식하는걸까요?원리가 너무 궁금해요.. 내용추가1)바로 다음 강의인 책 대출 리팩토링에선orphanRemoval 같은 옵션을 주지 않고도new userLoanHistory를 add한 내용대로 저장이 되는데,어째서 userLoanHistory를 remove하는것은orphanRemoval 옵션이 없으면데이터의 변경이 일어나지않는지 궁금합니다.. 제 생각에는 User에서 userLoanHistories.add를 하든 userLoanHistories.remove 를 하든둘 다 User와 UserLoanHistory 와의 연관관계를 이용한데이터를 변경하기위한 접근같은데 ..add는 되는데 remove는 안되는게 살짝 이해하기 어렵습니다 ㅠ 내용추가2)returnBook과 loanBook , removeOneHistory의 차이점이 뭘까 고민해봤는데returnBook 과 loanBook 은UserLoanHistory라는 Entity에 접근하는 과정(loanBook은 Entity객체생성, returnBook은 Entity의 property 수정)이 존재하고, removeOneHistory는 Entity에 직접 접근하는게 아니라 단순히 List에 대한 변경일뿐이고, Entity에 대한 직접적인수정이나 생성이 이뤄진것이 아니므로 데이터베이스의 변경이 일어나지 않았다.이렇게 이해했는데 제가 이해한 내용이 맞을까요?생각을 정리하다보니 질문이 길어진 점 죄송합니다 ㅠ
- 미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
내장 톰캣에 대해 궁금한게 있습니다.
스프링부트에부터는 내장 톰캣을 사용하는거엔 익숙해져 있는데,과거에는 RedHat JBoss와 같은 외장 WAS들을 사용했다고 하던데 이로 인해 발생하는 단점 같은 것은 없을까요? 예를 들어 기술 지원을 더이상 받지 못한다던가.. 외장 WAS들이 가지고 있는 장점이 사라진다거나 성능의 차이같은 것은 없는지 궁금합니다. 검색을 해보았을 땐 내장 톰캣이 아파치 톰캣 개발자들도 내장 톰캣의 사용에 문제가 없다라고 했다던지, 성능 차이가 크지 않다는 자료들은 찾았는데 아직 여전히 스프링부트를 사용하지 않는 회사들이 많다고 알고 있습니다. 강의 내용처럼 이렇게 편리하다면 스프링부트의 버전업은 몰라도 스프링'만' 쓰는 회사들이 시스템을 스프링부트로 업그레이드 하지 않을 이유는 없을 것 같아서요! 친절한 강의 감사드립니다. 태현님!
- 미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
수정이라는 작업을 할 때 PUT을 더 사용하는 이유가 있을까요?
HTTP 메서드에 처음 공부할 때 수정의 경우에는 PUT과 PATCH를 사용한다고 배웠는데요. PUT의 경우에는 통째로 갈아끼우는 방식의 갱신이고PATCH의 경우에는 부분 수정이 가능하다고 배웠습니다.이 강의에서는 USER의 정보중에 이름만받고 있어서(PUT은 전체 필드를 명시해주어야 한다고 배웠습니다.) PATCH가 더 적당한 방식이 아닌가라는 생각이 들었습니다. PATCH가 아닌 PUTMapping을 사용하신 이유가 있으실까요? 그리고 이와 관련된 블로그 글들이 많은데 저마다 내리는 결론이 달라서 조금 혼란스럽습니다. 강사님의 생각을 듣고 싶습니다.좋은 강의 만들어주신 태현님을 존중하고 존경하며 이만 글 줄이겠습니다!
- 해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
26강 삭제 기능관련 질문입니다..!!
UpdateUser 사용시deleteUser 사용시2024-02-10 21:46:30.786 ERROR 10012 --- [nio-8080-exec-9] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.IncorrectResultSizeDataAccessException: query did not return a unique result: 2; nested exception is javax.persistence.NonUniqueResultException: query did not return a unique result: 2] with root cause오류코드를 보니 updateUser는 findById의 결과값이 고유하므로 문제가 일어나지않는데, deleteUser는 findByName으로 유저를 찾기때문에 같은 이름이 존재하면 결과값이 고유하지않으므로 오류가 발생하는거 같은데, (엄준식이 2명존재) 처음부터 Id 값을 받아오거나 생성시에 같은 이름을 못만들게 막는거 말고는해결할 방법이 없을까요?
- 해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
User 클래스에 @Getter사용시 컴파일 오류
User클래스의 getter들을 정리하고싶어서Lombok의 @Getter 어노테이션을 사용해봤는데컴파일 에러가 나요 ㅠㅠUser 클래스를 @Getter로 만든사진UserResponse 클래스가 getId/getName/getAge 메소드를찾지 못했다는 에러가 발생합니다.User 클래스에 Getter를 직접 만들어준 모습정상작동하는모습롬복은 컴파일 시점보다 빠르게 getter을 만들어주는게 맞는데,제가 모르는 JPA관련 체킹로직이 롬복이 getter을만들기전에 동작해서 오류가 발생하는걸까요?다른 class들은 @Getter관련 문제가 없었거든요..제 나름대로 왜 이럴까 + 해결방법을 고민해봤는데잘모르겠어서 질문남깁니다...질문입니다!! @Entity가 붙은 class 에는 @Getter 어노테이션을 사용할 수 없나요:? +추가)생성자 관련 어노테이션도 안되는것 같습니다.2024-02-10 20:44:49.142 ERROR 15448 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: No default constructor for entity: : com.group.libraryapp.domain.User; nested exception is org.hibernate.InstantiationException: No default constructor for entity: : com.group.libraryapp.domain.User] with root cause ///// @NoArgsConstructor(access=AccessLevel.PROTECTED) ///////////////////////////////////////// protected User() {}에러메세지에 No default construtor라는데 둘이 같지 않나요? 이거도 역시 직접 생성자를 만들어주니 문제없이 작동하네요.. 롬복이 문제인걸까요?
- 미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
Override Methods가 존재하지 않는다고 뜨는데...
저번에 한번 질문을 드렸을 때, 해주신 답 덕분에 인텔리제이는 유료(정확힌 학생 버전으로)로 바꾸어서 해결했었는데...이번에는 여기서 안되는데... 이유가 뭘까요?
- 미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
DTO 관련 질문있습니다.
안녕하세요 ~자바 개발자 경력자인데요.먼저 그냥 코딩을 이때까지 해왔지만 이렇게 기초부터 차근차근 비유해주시면서 설명해주시니 다시 개념확립이 되는것같아 감사드립니다.일단 제가 궁금한점이 SI 이나 이떄까지 회사 프로젝트를 다녀본결과 .. 예를들어 쿼리결과를 저장하고 , API 사용시 (요청 /결과)모두 이때까지 VO 라는 클래스를 만들어 사용하고 보았는데요.이전부터 DTO , VO 두개의 차이점의 개념은 알고 공부하고 알고는 있었느나 , 항상 이때까지 모든 프로젝트에서는 모든 클래스를 뒤에 UserVO , DetailVO ... 이렇게 사용하곤했는데요.아직까지도 아직경험을 못해서그런지 VO vs DTO 개념이 확립이안되네요;앞으로 프로젝트참여시 VO 를 DTO 라고 명칭만 바꿔서 사용하면될까요?
- 미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
제가 이해한 것이 맞느지 확인 부탁드립니당
이번에 만든 조회하는 api는 리스트로 반환해야 하기 때문ㅇ JSON이어야 하고그렇기에 함수 반환 값이 List<UserResponse>인건가요?그리고 등록 api에서 만든 users리스트 수만큼 for문 돌려서 진정한 결과 리스트(id도 포함되어있는) reponses를 만들어낸건가요..?
- 해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
수업을 들으면서 이해한 것이 맞는지 확인해주세요 ㅠㅠ
전체적인 흐름: postman(클라이언트)에서 body형식으로 보내준 user정보를 저장하는 api를 만들기. 다만 null값 허용x 1) dto역할의 UserCreateRequest.javapostman에서 body형식으로 보내준 user정보를 여기를 통하여 controller로 전달한다. 2) UserController.javauser관련된 api들이 정의되어 있는 곳. user 클래스에서 "예외 처리"를 거친 후에 들어온 값들을 add하면서 리스트에 추가한다. 3) domain의 User.java얘도 postman에서 body형식으로 보내준 user정보를 여기를 통하여 controller로 전달한다(?) 만약 name이 null값이면 거르고 아니면 저장한다. 뭔가 UserController.java랑 User.java 얘네들끼리만 서로 지지고볶는 것 같은데 왜 dto가 따로 있나 어려워요dto 없어도 domain에서 postman이랑 컨텍이 되는 거 아닌가요?
- 미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
13강 질문입니다.
application.yml 작성시driver-class-name : 에서사용할 sql불러오는 코드com.mysql.cj.jdbc.Driver라는 걸쓰는데 아무것도 불러와지질않네요다른분들은 오류라도 뜨는데 저는 오류도안떠서 다음 진행이 안되고있는데 어떻게 해야 할까요? 다른분께 말씀하신 gradle에 들어가서 의존성도 확인하고 새로고침도 확인 했습니다.
- 미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
IntelliJ Ultimate 사용한 MySQL접근 관련
선생님 안녕하세요? 강의 잘듣고 있습니다.다름이 아니라 10강에서 MySQL 접근 방법1를 따라하려고 하는데 Datebase이 없더라고요...버전이 달라서 그런건가 싶어서 따로 찾아보니까view-Tool Windows안에서 보통 선택할 수 있다는걸 발견했는데여기에도 없더라고요... 이런 경우에는 다시 설치하는 것 말고는 방법이 없는거겠죠...?
- 미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
아마존 리눅스 2023 el9 버전 mysql 설치 중 KEY 오류
아마존 리눅스 2023으로 인스턴스를 사용했을 때 지면님과 강사님께서 알려준 el9 버전 레포지토리를 사용하는 명령어sudo dnf install <https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm> sudo dnf install mysql-community-server 이렇게 하여도 저는 계속 sudo dnf install mysql-community-server 해당 명령어를 통해 설치하려고 하면The GPG keys listed for the "MySQL 8.0 Community Server" repository are already installed but they are not correct for this package.이런 오류가 발생하였습니다.계속 키가 옳지 않다는 오류가 생겼고 챗지피티랑 구글링을 통해 이것저것 해보다가sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 sudo yum update 위의 두 명령어를 실행하고sudo dnf install mysql-community-server해당 명령어로 재설치 해주니 제대로 설치가 되었습니다!제 추측으로는 KEY를 다시 받아오고 yum update 하는 과정이 필요했던 것 같습니다! 저와 같은 오류를 가지는 분들에게 도움이 되었으면 좋겠네요...!!!
- 미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
8강 재질문입니다 (코드포함) (해결)
코드를 다시 찬찬히 살펴봐도 틀린게 뭔지 모르겠어요...시간나시면 검토 가능 하실까요? 아니면 처음부터 다시 코딩을 해봐야겠네요////package com.group.libraryapp.UserController; import com.group.libraryapp.domain.user.User; import com.group.libraryapp.dto.calculator.request.user.response.UserResponse; import com.group.libraryapp.user.request.UserCreateRequest; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import java.util.*; @RestController public class UserController { private final List<User> users = new ArrayList<>(); @PostMapping("/user") // POST /user public void saveUser(@RequestBody UserCreateRequest request){ users.add(new User(request.getName(), request.getAge())); } @GetMapping("/user") public List<UserResponse> getUsers(){ List<UserResponse> responses = new ArrayList<>(); for(int i=0; i<users.size(); i++){ responses.add(new UserResponse(i + 1, users.get(i))); }//users에 저장한 유져들을 for문으로 userResponse형태로 바꾸어 결과 list에 추가 return responses; } } package com.group.libraryapp.dto.calculator.request.user.response; import com.group.libraryapp.domain.user.User; public class UserResponse { private long id; private String name; private Integer age; public UserResponse(long id, User user) { this.id = id; this.name = user.getName(); this.age = user.getAge(); } public long getId() { return id; } public String getName() { return name; } public Integer getAge() { return age; } } package com.group.libraryapp.domain.user; public class User { private String name; private Integer age; public String getName() { return name; } public Integer getAge() { return age; } public User(String name, Integer age) { if(name == null || name.isBlank()){ throw new IllegalArgumentException(String.format("잘못된 name(%s)이 들어왔습니다.", name)); } this.name = name; this.age = age; } } // 해결했습니다.강사님께서 화면공유 방법으로 해결해주셨고 말씀해주신 해결방법은인텔리제이에서 run 후 오류내역에서 com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.group.libraryapp.user.request.UserCreateRequest` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator) at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2]확인하셨고UserCreateRequest클래스에서 기본생성자를 추가하여 해결하였습니다.매개변수가있는 생성자를 사용하면 추가로 기본생성자를 만드는 습관을 들이겠습니당
- 미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
배포 부분 질문드려요!
안녕하세요. 강사님 항상 좋은 강의 감사하게 잘 듣고 있습니다! ec2 프리티어로 강의에서 배포하는 방식으로 실 서비스에서도 바로 사용할 수 있을까요? 해당 강의를 통해 토이 프로젝트를 만들고 실제로 서비스를 하려는 방식으로 사용할 때 강의에서 보여주신 설정이랑 배포방식으로 가능한지 궁금합니다!
- 해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
1강 질문입니다.
섹션3까지 듣고 만든 유저를 바탕으로 게시판 API만들어보려고 spring.io로 프로젝트를 아예 새로 만들었는데요다른 건 선생님께서 주신 library-app과 유사한데, external libraries에 java11 추가하고 싶은데 추가 하는 방법을 모르겠습니다.또 new해서 새로 만들기 하면 파일, 스크래치 파일, 디렉토리만 있고 class같은 건 없어요..사실 spring.io말고 그냥 intellij에서 new project하면 처음에 설정하는 이 부분에서 generators도 다른 사람은 엄청 많고 여기서 하던데 저는 4개밖에 없는데 왜일까요..?
- 미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
8강 서버 내부오류 어떻게 해결하죠..?
sql서버도 껏다가 다시 시작도 해보고포스트맨도 창 전부 지웠다 다시 하고 오류 없이 200ok나온것 확인도 하구인텔리제이 코드도 컴파일 잘 되는거 확인 했습니다..http://localhost:8080/v1/index.html 들어가서 이름 나이 입력하면 서버내부오류라고 나오네요답변해주시면 갑사합니다.그림 첨부하고싶어도 사진클릭이나 저장이 불가능하네요
- 해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
api응답을 어떤 식으로 하면 좋을까요?
강의를 보고 혼자서 api를 만들어보고 있습니다.강의 회원 가입 예제api는 void로 별도의 응답을 하지 않았는데 보통은 어떤 식으로 하나요?[{"success" : "true"}]이런 식으로 나마 응답 값을 주는게 맞을까요?
- 해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
혹시 섹션 3까지만 듣고 게시판 API를 만들어도 될까요?
(강의를 중단한다는 것은 아니고) 친구들끼리 게시판 API를 만들기로 했는데 지금까지 한 유저 API를 토대로 게시판 API를 만들어보고 싶은데 많이 다를까요?