mybatis 와 jpa
해결됨
자바 ORM 표준 JPA 프로그래밍 - 기본편
영한님 mybatis 와 jpa 의 개념을 둘다 모르고있는데 어떤것을 먼저 공부하는것이 좋을까요?
- JPA
- java
172만명의 커뮤니티!! 함께 토론해봐요.
해결됨
자바 ORM 표준 JPA 프로그래밍 - 기본편
영한님 mybatis 와 jpa 의 개념을 둘다 모르고있는데 어떤것을 먼저 공부하는것이 좋을까요?
해결됨
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
19:00 쯤 Player를 찾고 로그를 남기는 테스트에서 chatPacket.chat를 로그로 남긴 후에 GameObject를 Find할 때 메인 쓰레드에서 사용하라는 예외가 발생합니다. 혹시 제가 잘못 작업했나 해서 올려두신 자료를 받아서 해보아도 똑같이 try catch에서 넘어가질 못하네요 유니티 버전 2021.1.0b1에서 안되서 2019.4.17f1까지 낮춰봤는데도 안됩니다. 무언가를 빠트린거 같은데 찾기가 힘드네요 혹시 조언좀 해주실 수 있을까요
미해결
모든 개발자를 위한 HTTP 웹 기본 지식
안녕하세요 질문 드립니다. field name은 대소문자를 구분하지 않는다고 하셨는데 field value는 대소문자를 구분한다고 봐야 할까요? 실제로 GOOGLE.com으로 입력해도 google.com으로 열어주는데 브라우저의 기능일까요? 확인 부탁드려요~
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
alt+Insert 하면 getter and setter를 생성 할 수 있습니다,
해결됨
자바 ORM 표준 JPA 프로그래밍 - 기본편
조인중, 세타조인과 연관관계가 없는 엔티티 조인은 같다 라고 생각해도 되나요? 예) select m from Member m, Team t where m.name = t.name 이라는 세타 조인과, select m from Member m join Team t on m.name = t.name 의 연관관계가 없는 엔티티 조인은 같은 건가요 ? ?
미해결
실전! Querydsl
안녕하세요, 강의 잘 보고있습니다. 평소에 가지고 있던 궁금증인데 age를 업데이트하는 부분을 보고 문득 떠올라 질문남깁니다. 기존 레거시 테이블들을 보면 이미 레코드에 포함하고 있는 계산성 데이터들을 많이 저장하고 있는 테이블들을 많이 보았습니다. 해당 강의 차수에서 말하는 age나 또는 팀-멤버간(fk) 조인되어 있는 테이블에서 팀 테이블의 전체 회원 수 같은 칼럼들이요. 저는 기본적으로 이런 데이터들을 테이블에 넣는것을 반대하고있습니다. 나이를 넣는 것 보다 생년월일을 넣어야되고 팀의 전체 회원수가 필요하면 필요 시 쿼리에서 count를 하거나 애플리케이션에서 항상 동적으로 구하는 방식을요. 제 경험상으로 이러한 계산성 데이터를 넣어버리면 변경점이 계속 생기는 것 같습니다. 예를들어 1년이 지날 경우 벌크로 나이를 +1씩 더해야 되는 상황들이요. 또한 팀 멤버가 추가될경우 실수로 팀 테이블의 총원 테이블을 업데이트 하지 않는 경우도 생길수도 있을 것 같습니다. 하지만 단점으로는 데이터 용량을 많이 조회할 경우에 계산을 해야하는 시간등도 있을 것 같습니다. 대용량 서비스 관점에서 위 의견에 대해 어떻게 생각하시는지, 어떤 방법을 선호하시는지, 제가 놓친 부분은 없는지 궁금합니다. 감사합니다.
미해결
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
@Controller public class HelloController { @GetMapping("hello") public String hello(Model model) { model.addAttribute("data", "hello!!"); return "hello"; } } 위를 복사하여 실행할때, cannot find symbol class Model라고 오류가 발생합니다!ㅠ
미해결
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
DDD 자료를 찾아보면 강의 자료와 같이 Domain이 전체 레이어를 아우르고, Controller에서 Repository를 접근 하도록 설계되어 있습니다. 기초 강의에서는 Entity를 Controller에 넘기지 말라고 말씀 하셨고 그 이유도 충분히 이해 했었습니다. 지금 예제에서는 Controller가 Repository를 호출하게 된다면 Entity가 넘어가게 될텐데... 강의상 편의를 위해서 하신건가요? 실무에서도 빈번하게 사용하는 구조인가요? 추가적으로 DTO를 사용한다면, 아래 예제 계층에서 오고가는 DTO에 대한 표현(naming rule, suffix, package 등등)을 어떻게 하시는지 궁금합니다. - web <-> controller - service <-> repository
미해결
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요. 좋은 강의 항상 감사드립니다. 단위 테스트의 중요성을 강조해주셨는데 제가 아직 초보라서 잘 이해가 가지 않습니다. 제 수준으로 테스트를 이해한 것을 말씀드리자면, 만약 수량이 2개가 추가되면, 그것이 데이타베이스에 2개가 추가 됐는지를 확인하고, 그것이 화면으로 제대로 출력되는 것을 확인하는 것이 가장 최소한의 테스트라고 생각하기 때문입니다. 그런데 DB를 거치지 않고 한다는 것이 어떤 의미인지 사실 잘 모르겠습니다. 지금 in memory를 DB로서 사용하고 있는데, 이것조차 사용하지 않게 되는건가요? 혹시 가능하시다면 지금의 예제에서 단위테스트를 한다면 예시를 짧게라도 한 줄 부탁드려도 될까요? 그런 측면에서 제가 테스트에 대하여 이해도가 너무 낮은 것이 아닌가 싶습니다. junit이란 것도 선생님 수업 들으면서 이번에 처음 알게 됐거든요. 그래서 혹시 가능하다면 테스트와 관련하여 참고할만한 책이나 자료가 있으면 추천 부탁드려도 될까요? 감사합니다.
미해결
모든 개발자를 위한 HTTP 웹 기본 지식
이런 수업이 다른 곳에 없다보니 질문이 많게 되네요 ;; 저같은 경우 게시글 추가 API, 회원가입API 같은 경우 post method로 클라이언트에서 서버로 요청하고 서버는 그 요청에 성공적으로 응답할 때 200 상태코드와 함께 post_id나 user_id를 리턴하도록 하였습니다. 만약 헤더내의 location을 이용한다면 user_id, post_id까지 사용하지 않게 될테니 204로 리턴해도 되겠네요. 그런데 201 스펙처럼 클라에서 요청한 데이터값을 서버가 다시 리턴하는 이유가 있을까요? 왜냐하면 게시글추가라던지, 회원가입이라던지 어차피 클라이언트에서 보낸 데이터라 클라이언트에서 쿠키에 저장하면 될 것 같거든요. 불필요하게 서버에서 클라이언트에게 '클라이언트가 보낸 데이터'를 보낼 필요가 있는가에 대한 의문이 들어서 질문하게 되었습니다.
미해결
모든 개발자를 위한 HTTP 웹 기본 지식
회원정보수정할 때 "patch를 사용할까?"라는 궁금증이 생겨서 질문하게 되었습니다. 왜냐하면 회원정보 수정시 patch개념을 이용하여 수정하게 되면 서버 로직에서 유저 정보 데이터 유무에 따라 분기하여 db에 update하게 되어 중복되는 코드가 많아진다고 생각했습니다. // 회원정보수정 API에서 nickname, email 바디값을 받는다고 했을 때 // 아래 코드와 같이 구현해야한다고 생각했습니다. if(nickname){ update user set nickname = 'inflearn' where id = 1 } else if (email){ update user set email = 'inflearn@gmail.com' where id = 1 } // 왜냐하면 만약에 회원정보수정 API에서 클라이언트에서 nickname은 보내고 email은 안보내는 상황에 // if문같은 분기가 없으면 아래 코드와 같이 email에 null값이 들어갈 것으로 예상되었기 때문입니다. update user set nickname = 'inflearn', email = null where id =1 그래서 저같은 경우는 회원정보수정API는 put메서드를 사용하고 유저정보를 다 보내도록 했습니다. 그리고 회원정보수정API에 모든 회원정보 데이터를 보내도록 하고 아래 코드와 같이 회원정보수정API 로직이 시작하는 부분에 모든 예외상황을 생각해서 바디값이 왔는지 유무를 체크하여 예외처리하는 식으로 구현했습니다. if (!profile_nickname) return res.status(400).json({ code: 'invalid_profile_nickname' }) 그러다보니 클라이언트에서는 회원정보 수정데이터가 10개중에 하나만 바뀌어도 모든 데이터를 회원정보수정API에 보내는 비효율적인 문제가 생기더라고요. 저도 제가 구현한 방식이 비효율적인 걸 알고 있는데 어떻게 구현하는게 맞는지 생각이 나지않아 질문하게 되었습니다. 어떻게 하면 patch를 잘 이용할 수 있을까요? 현재 저 같은 경우는 수정과 관련된 API이면 put만 사용하고 예외적으로 patch를 사용하는 경우는 비밀번호 변경일 때만 사용했는데요. 왜냐하면 user테이블의 비밀번호 부분만 변경을 하는거니까 patch를 사용하는게 맞다고 생각했습니다.
미해결
모든 개발자를 위한 HTTP 웹 기본 지식
안녕하세요:) 결제 API에서 클라이언트와 서버 통신 예외처리에 대해 질문이 있습니다. 6분 34초경에 "클라이언트에서 유저가 페이지 리로드할 경우가 있어서 동일 주문이 서버에 요청이 될 수 있기 때문에 서버에서도 예외처리해놔야한다"고 하셨습니다. 제가 영한님의 말씀을 듣고 처음 생각난 방식은 클라이언트에서 주문번호를 난수로 만들어준 다음 쿠키에 저장하여서 동일한 주문번호를 서버에 요청했을 때 서버에서 거절하면 된다고 생각했은데, 클라이언트에서 주문번호를 자리수가 짧은 난수로 만들었을 때 중복되는 값이 발생할 것으로 생각이 드네요. 그래서 이 방법은 또 다른 이슈를 발생시킬 것 같아 좋은 방법은 아닌 것 같고... 2 번째로는 처음 생각한 방법을 응용한건데 난수를 유저테이블의 index와 구분자 그리고 현재 유닉스시간까지 숫자를 합쳐서 만들면 중복될 가능성이 낮아질 것 같다는 생각을 했습니다. 예) 12/1609305240 혹시 더 나은 방법이 있을까요? 8분30초 경에 말씀해주시는 주문 중복을 피하는 방법에 대해서는 이해했습니다!
미해결
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요 강사님! 이번 강의에서는 Item.class에 다음과 같이 해당 변수에 대한 접근은 해당 entity에서 작성하여 주셨는데요, /* * 재고 수량 증가 */ public void addStock ( int quantity){ this . stockQuantity += quantity ; } /* 재고 수량 감소 */ public void removeStock ( int quantity){ int restStock = this . stockQuantity - quantity ; if (restStock < 0 ){ throw new NotEnoughStockException( "need more stock" ) ; } this . stockQuantity = restStock ; } 1. 그렇다면 만약 회원의 주소를 변경하는 로직을 만든다고 하면 이 또한 memberRepository.class가 아닌 member.class에서 변경하여 주는 것이 맞을까요?? 2. 또 비슷한 맥락으로 service 구현과 entity에서의 로직 구현의 차이는 객체의 맴버변수에 접근하는지/ 맴버 자체에 접근하는지의 차이로 이해하면 될까요?? 감사합니다^^!
미해결
모든 개발자를 위한 HTTP 웹 기본 지식
put이 지칭한 서버의 리소스를 새로 덮어씌우기 때문에 멱등한것은 알겠습니다. 그런데 patch도 지정된 리소스의 부분만을 접근해서 변경하는 행위를 반복하는건데 왜 멱등하지 않은지 궁금합니다. 어짜피 외부의 변경은 고려하지 않는다면 항상 같은 결과가 나올것이라고 보장할 수 있는거 아닌가요?
미해결
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
updateItem 메소드에서 Book이 DB에 저장된적이 있어서 식별자가 존재하여 영속성 컨텍스트에서 관리하지 않는다고 하셨는데요. 1. 그러면 Book을 new Book()으로 생성하고 setId에서 임의로 현재 DB에 존재하지 않는 id를 입력하면 어떻게 될까요?? 2. 준영속 엔티티가 된 이유가 id가 존재해서 라기 보다는 Book 객체의 생성시 영속성컨텍스트를 거치지 않고 생성자를 거쳤기 때문에 준영속 엔티티가 된건 아닌가요??
해결됨
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
안녕하세요! 강의 정말정말 잘 듣고있습니다! 예제에서는 모두 MemberRepository의 인터페이스를 통해 의존성 주입을 받도록 되어있는데, 그렇다면 스프링 데이터 JPA에서 제공하는 여러 기능들을 이용하기 위해서는 memberRepository에 사용할 기능을 추가해야 하는 건가요~? 새해복 많이받으세요!
미해결
자바 ORM 표준 JPA 프로그래밍 - 기본편
강의 중에 json 데이터를 말아넣는다.? json 데이터를 저장한다.? 하셨는데 처음에 이 부분이 이해가 안되서 질문게시판을 찾아보니 역시 앞선 선배님들이 질문을 남겨 놓으셨더군요. 그 글들을 참고해 보니 예) class Item{ String model; } 여기에 model 필드에 단순히 key-value 형태의 json 데이터를 저장 하는 방식이라는 거는 알았는데, 상속 관계를 표현하기 위한 상속관계 매핑(x) 상속 관계를 표현하기 위한 복잡한 물리적 데이터베이스 생성(x) 이란 점에서는 장점인거는 알겠으나, 앞선 질문 글 내용을 보면 json을 활용할때는 검색이 불가하다. 라는 단점이 너무 크게 오는데, 실무에서는 어떻게 이 문제를 해결하고 넘어 가는건가요.? 전체 데이터를 전부 조회해서 서비스단에서 json 파싱을 하는거는 아닐테고 Item 테이블에 별도 구분 필드를 만들고 검색시 구분 필드를 통해 select 를 하고 서비스단에서 json 를 파싱하는 형태인가요......? 실무에서는 어떻게 하신지 궁금합니다...
미해결
실전! Querydsl
function('regexp_replace' ~~~ 라고 적어주셔야 되고 application.yml 파일에서 dialect : org.hibernate.dialect.MySQL8Dialect 라고 적어주셔야 합니다
해결됨
실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
안녕하세요! JPA를 활용하여 여러가지 조회테스트를 해보고 있는데 @lob 컬럼이 존재하는 경우 select시 쿼리가 매우 느린현상을 발견했습니다. @lob 컬럼이 존재하는 경우에 쿼리를 빠르게 수행할 수 있는 방법이 있을까요?
미해결
실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
안녕하세요 팀장님 프로그래밍 강의를 재미있게 듣기는 처음입니다. ^^ findAllWithMemberDelivery()과 달리 findOrderDtos()에서는 fetch join을 사용하면 에러가 발생합니다. return em.createQuery( "select new jpabook.jpashop.api.dto.OrderSimpleQueryDto(o.id, m.name, o.orderDate, o.status, d.address) " + " from Order o" + " join o.member m " + " join o.delivery d ", OrderSimpleQueryDto.class ).getResultList(); <자바 ORM 표준 JPA 프로그래밍>에서는 SELECT m FROM Member m JOIN FETCH m.team 은 다음 SQL문과 같고 SELECT M.*, T.* FROM MEMBER M INNER JOIN TEAM T ON M.TEAM_ID=T.ID 일반 JOIN인 경우 SELECT m FROM Member m JOIN m.team t 다음 SQL과 같다 하셨는데 SELECT M.* FROM MEMBER M INNER JOIN TEAM T ON M.TEAM_ID=T.ID 위에서는 join만 사용했는데 어떻게 member나 delivery를 별도 query로 참조하지 않고 가져왔는지 궁금합니다. 답변하신 내용중 https://www.inflearn.com/questions/23847를 참고하면 "fetch join을 사용하는 이유는 엔티티 상태에서 엔티티 그래프를 참조하기 위해서 사용하는 것입니다. 따라서 당연히 엔티티가 아닌 DTO 상태로 조회하는 것은 불가능합니다. 이 경우 fetch join을 사용하지 마시고, 그냥 순수한 join을 사용하시면 원하는 결과를 얻을 수 있습니다" 라 하셨는데 만약 위의 jpql에 fetch가 있었다면 엔티티 상태이기 때문에 에러가 나지 않고 추후 new를 통해 DTO로 변환해야 하는 것 아닌지요?