묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 메서드
왜 연관관계 메서드에서 어떤 건 set이라고 하고 어떤 건 add라고 하나요??ex. setMember() / addOrderItem() //== 연관관계 메서드 ==// public void setMember(Member member) { this.member = member; member.getOrders().add(this); } public void addOrderItem(OrderItem orderItem) { orderItems.add(orderItem); orderItem.setOrder(this); } public void setDelivery(Delivery delivery) { this.delivery = delivery; delivery.setOrder(this); }setMember는 member.getOrders()라고 하고 setDelivery()는 setOrders()로 다른 이유는 무엇인가요?? 여기서 this는 order를 의미하는 걸까요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
클래스 내부에서 getter/setter 메서드 사용
안녕하세요. 영한님과 서포터님들 덕분에 즐겁게 공부하고 있습니다.주문, 주문상품 엔티티 개발 강의를 듣던 중 궁금한 것이 생겼습니다. 강의에서 보시면 클래스 내부에서 생성 메서드 혹은 비즈니스 로직 메서드를 구현하시면서 getter/setter 메서드를 사용하시는데요.이렇게 클래스 내부에서 사용할 때도 필드에 직접 접근하는 것보다는 getter/setter 메서드를 사용하는 것이 권장되는가요?단순히 생각했을 때는 불필요한 메서드 호출만 일어나는 것 아닌가해서 질문드립니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
질문이 있습니다.
private List<OrderItemQueryDto> findOrderItems(Long orderId) { return em.createQuery( "select new jpabook.jpashop.repository.query.OrderItemQueryDto(oi.order.id, i.name, oi.orderPrice, oi.count)" + " from OrderItem oi" + " join oi.item i" + //이걸 왜 하는거지 => 실 객체바꿀라고? " where oi.order.id = :orderId", OrderItemQueryDto.class ).setParameter("orderId", orderId).getResultList(); }위 코드에서 "join oi.item" 하는 이유가 궁금합니다.OrderItem엔 Item이 있으니 i.name 대신 oi.item.name하여도 될 것 같은데 굳이 Item도 조인하는 이유가 있을까요? 제가 생각한 결과로는 Item을 조인하여 i.name할 때 Item이 프록시에서 실 객체로 바뀌니 이것을 위해 조인하였을 것 같은데 맞을까요?
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
분산락 관련 질문입니다.
안녕하세요 좋은 강의 감사드립니다.이전까지 알아보았던 락들은 분산락이 아닌 것인가요?만약 아닌 것이라면 다중 서버 환경에서 동시성 문제를 해결하기 위해서는 위의 방법들이 아닌 분산락을 사용하여야 하는 것인지 궁금합니다. 추가로 동시성 관련 질문이 하나 있습니다.다중 서버 환경에서 게시판 등에서 조회수 기능을 동시성 문제 없이 해결하고 싶으며, 다음과 같이 구현하고자 합니다.(조회수라 어느정도 누락되어도 상관 없다고 하실 수 있겠지만, 목표는 하나도 누락되지 않게 하는 것입니다!)조회 요청이 들어오면 레디스에 조회수 증가분을 올린 이후, 특정 시간마다 배치처리를 통해 반영하고자 합니다.이때 다음 두 의문점이 있습니다.먼저 다중 서버 환경에서 레디스 증가분을 올리는 경우, 이 경우에도 동시성 문제가 발생할 수 있을 것 같습니다. 이를 해결하기 위해서는 이곳에도 분산락을 걸거나 increment()를 사용하여 동기적으로 처리해야 할 거 같은데 저의 생각이 맞는 것인지, 맞다면 다른 방법은 없는지 궁금합니다.두번째는 레디스 조회수 증가분을 배치처리를 통해 반영시키는 경우, 해당 작업 사이에 조회수 증가가 되어버리면 해당 증가분은 누락될 것 같습니다. 이를 해결하기 위해서는 배치처리를 할 때 레디스에 Lock을 걸어야 할 것 같습니다. 그런데 그렇게 된다면, 배치처리가 진행되는 그 순간동안은 레디스가 블로킹되어 있기에 게시글 조회가 이루어지지 않을 것 같습니다. 이정도는 감수하고 사용하거나, 혹은 카프카 등을 활용하여 이벤트로 처리하는 방법도 있을 것 같은데, 이러한 방법이 모두 사용 가능한 것인지, 더 나은 방법은 없는지 궁금합니다. 너무 많은 질문을 하는 것 같아 죄송합니다. 좋은 강의 정말 감사합니다.
-
미해결스프링 시큐리티
invalidSessionUrl
현재 부트 5.7버전을 사용하면서 SecurityFilterChain을 빈으로 등록하면서 기본 API들을 구현하고 있는데 sessionManagement() 부분에서 invalidSessionUrl 메소드 자체가 없어진거 같은데 5.7 이후부터는 이 메소드를 활용하지 못하는건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
dto 설계시 궁금증
위와같이 Form의 필드가 4개라고 했을 때각각을 입력하거나 입력하지 않는 경우 총 2^4 = 16개입니다.그렇다고 하면 dto에 입력 경우의 수에 따른 변경감지 로직을 총 16개 작성해 두어야하는건가요? 어떻게 설게를 해야하는지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
createMember, createItem 메서드
테스트 클레스에createMember, createBook 메서드를 만들었는데이걸 domian에 생성하고기본 생성자를 protect로 만들어놓으면OrderItem에서 했던 방식처럼더 나은 방식인건가요??
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
/orders에서 화이트라벨페이지가 뜹니다..
짧은 지식으로 추측컨데,html파일에 문제가 있는것으로 판단해 몇차례 확인 후 복붙을 시도해보았습니다매핑을 잘못한것인가 컨트롤러도 수차례 확인하였고...혹시 관련된 비지니스로직에서 데이터를 잘못 불러오는것인지,,데이터를 백업해두고,강의 초반에 있는 소스코드를 통해java 부분과 templates을 통채로 복사해보았음에도, 해결이 되지 않습니다.최대한 혼자서 해결하려 했으나... 도저히 해결방안이 떠오르지 않아서 질문드립니다.어째서 이러한 문제가 발생하는것일까요...?ㅜㅜ하단에 구글드라이브 링크 첨부해두었습니다. 도와주세요...ㅠㅠ야생형 코스로 활용 -> 기본 -> 활용 단계로 복습하는 시점이라..(1회차에선 멀쩡히 넘겼던 부분을 2회차때 도저히 못고치는 기현상...... ㅜㅜ)아티펙트, 그룹명이 jpabook2 , jpashop2 로 설정되어 있습니다. 이점 양해 부탁드립니다..https://drive.google.com/file/d/1gY3cQKM2yq8SsObwAMAbk3gKOScsx6Jp/view?usp=sharing
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
양방향이 왜그렇게 안좋은건가요?
유저객체에서 List<Order>를 가지는게 왜 안좋나요?유저 주문 목록을 가지고 있으면 성능면에서 더 이득이 크지 않나요?주문목록을 유저가 가지고 있다면 해당 주문ID를 바로 검색해서 더 빠르게 조회할 수 있지 않나요?하지만 유저가 List를 갖고있지 않다면 모든 주문목록에서 유저ID로 하나하나 검색해나가면서 불러오는게 상대적으로 많이 느리지 않나요?양방향이 될 수 있으면 없는게 좋다고 하셨는데, 실제로 통계를 만들때나 각종 상황에서 서로가 서로를 참조하는 일이 많지 않나요?판매자 입장에서 판매하는 아이템의 구매자의 주소를 아는 것은 중요할 것이고, 팀 입장에서도 팀에 어느 선수들이 있는지 아는게 중요하지 않나요?
-
해결됨실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
User Entity 생성 관련 질문입니다.
안녕하세요.강의 덕분에 코틀린을 잘 배우고 있는 수강생 입니다.다름이 아니라, 예저 소스에서 User Entity로 DB에 테이블을 생성하고 있는데,제가 별도로 만든 프로젝트에서는 동일하게 User로 Entity 어노테이션을 붙이고 애플리케이션을 시작하면 에러가 발생하길래 에러 내용으로 찾아봤더니, User Entity를 user라는 이름으로 테이블을 생성하려고 하는데, user는 사용할 수 없는 이름이라는 것 같습니다(예약어)예제 소스와 동일하게 설정을 했는데 제가 놓치고 있는 부분이 있는 걸까요?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
JPA에 Index 힌트 적용 질문드립니다.
최근에는 실무에서 JPA위주로 쿼리를 짜다보니, 성능이 안나오는 쿼리에 대해서는 index 힌트를 줘야 하는 상황이 종종 생기고 있는데요, 혹시 이럴땐 어떻게 하시나요? 마이바티스로 하기에는 특정쿼리만 빼기에는 일관성이 없는거 같고..JPQL로 짜자니 인덱스 힌트 지원이 안되는걸로 알고있구요..@natvieQuery로 생짜 쿼리 짜서 인덱스 힌트 주는 방법 밖에 없을까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
애플리케이션 안에서 Sequence 관리 질문
안녕하세요! 수강생입니다. 항상 감사하며 공부하고 있습니다.DB Sequence 관리에 대해서 질문이 있습니다.Sequence 를 확보하고 사용하는 것의 관리 범위는 영속성 컨텍스트가 아닌, 애플리케이션 범위인가요?예를 들어 한 애플리케이션 안에서 두 개의 트랜잭션 A, B가 병렬적으로 엔티티를 영속화 한다고 치면 A.Entity.id = 1B.Entity.id = 2A.Entity.id = 3...이런식으로 애플리케이션 단위로 공유되는 것인지 궁금합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
일대일 optional 여부에 따른 UNIQUE 제약
안녕하세요! 강의를 너무나 잘 듣고 있습니다. 일대일 강의를 들으면서 이것저것 만져보다가 @OneToOne(optional=true) 인 경우에는 UNIQUE 제약이 걸리지 않고 반대로 false인 경우에는 UNIQUE 제약이 걸리는 것을 알게 되었습니다.혹시 이렇게 구현된 이유가 무엇인지 알 수 있을까요?
-
미해결스프링 시큐리티
스프링 신버전 : 유저 생성 코드 공유합니다
@Bean public UserDetailsManager users() { UserDetails user = User.builder() .username("user") .password("{noop}1111") .roles("USER") .build(); UserDetails sys = User.builder() .username("sys") .password("{noop}1111") .roles("SYS") .build(); UserDetails admin = User.builder() .username("admin") .password("{noop}1111") .roles("ADMIN", "SYS", "USER") .build(); return new InMemoryUserDetailsManager( user, sys, admin ); }
-
해결됨실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
멀티 모듈에 대한 질문이 있습니다!!
안녕하세요 !! 자바 개발자가 되기 위해 학습하다가 코틀린을 새로 배우는 과정에서 이 강의를 듣게 된 학생입니다!!먼저 좋은 강의 제공해주셔서 정말 감사합니다!!멀티 모듈에서 Repository를 각각 api 모듈에 맞게 구현하고, Spring Data JPA Repository를 코어 모듈에 둔다고 하셨는데. 이런 경우에는 api 모듈에서 core와 관련된 그래들 설정(Querydsl or db 등)이 들어가겠구나 라는 생각이 들었습니다. 멀티 모듈의 장점 중 하나가 모듈의 역할에 맞게 의존성을 관리하는 것도 있다고 생각하는데, 이런 경우 이 장점을 잃지는 않을까 우려됩니다.그래서 저는 멀티모듈을 사용할 때, core 모듈에 Repository와 관련한 코드를 놓고, 사용하는 모듈에서 인터페이스, 혹은 Repository를 참조하는 구현체를 만들어 해당 클래스만 사용하게끔 유지하는 게 좋지 않을까 생각하는 편인데요. 혹시 강사님의 의견은 어떠신지 궁금합니다!!(적고 보니 강의 내용과는 조금 다른 질문인 것 같아 조금 죄송스럽네요 ㅠㅠ)
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
결과창에 test results라고 안뜨는 이유..?
테스트 결과를 보기 위해 run을 하면 강의 화면에서는 Test Result라고 뜨고, 그 아래에 어떤 메소드를 실행했는지 뜨는데 저는 좀 다르게 떠서요,, 이게 제가 뭘 잘못한건지 아니면 별로 신경 쓰지 않아도 되는 문제인지 잘 모르겠어서 질문 남깁니다..! 문제가 없더라도 강의 화면과 다르게 떠서 은근히 거슬리는데 혹시 Test Result가 뜨도록 하려면 어떻게 해야하나요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
assertThat, assertXXXX
영한님 영상을 보면 어떤 때는 assertThat을 사용하시고 어떤 때는 assertTrue를 사용하시더라구요.궁금해서 인터넷에 검색을 해봤는데 "asserThat으로 사용하는 게 좋지않을까?" 라는 글이 몇개 있더라구요.질문 : 테스트작성을 앞으로 해야할때 Junit4와 junit5중 어느 것으로 작성을 연습하는게 좋을까요?assertXXXX와 assertThat 어느 것을 선호하시나요?
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
질문입니다.
안녕하세요. 영상 마지막에 open 키워드에 대해서 추상 멤버가 아니면 기본적으로 오버라이드가 불가능하다. open 키워드를 사용해주어야 한다. 라고 말씀해주셨는데요! 추상 멤버는 open 키워드 사용 없이 오버라이드가 가능하다는 말씀인 것 같은데요. 추상 멤버라고 한다면, 구체적으로 어디까지가 추상 멤버일까요? 예를 들어 인터페이스 Swimable의 val swimAblity는 추상 멤버이기 때문에 open 키워드를 사용하지 않았고, 인터페이스를 구현하는 Penguin 클래스에서 override 할 수 있게 된건가요? 그런데 추상 클래스 Animal에서는 legCount에 open을 붙여주었는데 추상 클래스의 프로퍼티니까 추상 멤버인 줄 알았는데 아닌건가요? 감사합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
else 사용
강의하는 영상보며 항상 배우고 있습니다.요즘 알고리즘 문제도 공부하면서 항상 고민인 부분인데요.if-else문에서 else를 써야하는가 입니다.강의7:16초에서 영한님은 else를 사용하지 않으시더라구요.그래서 궁금해서 웹에 검색을 하니 camelcase급으로 표준화된 방식이다. 아니다 케이스 바이 케이스다. eslint라는 곳에서는 if 다음에 return이 있으면 else쓰지마라 라고도 하더라구요.질문 : 현업에서는 else를 지양하는 편인가요?
-
미해결더 자바, 코드를 조작하는 다양한 방법
JIT 컴파일러와 인터프리터
안녕하세요, 백기선님.기존에 저는 JVM 내에서 JIT이 컴파일러와 인터프리터의 역할을 동시에 수행한다고 이해하고 있었는데요.자료(p.4)에서는 [실행엔진 : 인터프리터, JIT Compiler, GC ] 로 구성되어 있어서 질문드립니다.인터프리터와 JIT 컴파일러는 서로 분리되어 역할을 수행하는 것이 맞고,바이트 코드를 실행할 때, JIT 컴파일러가 전체를 싹 훑고, 반복되는 코드에 대해 메모리에 캐싱을 진행한 후, 인터프리터가 처음부터 순차적으로 읽어 나가다가, 반복되는 해당 지점에서 JIT Compiler가 다시 개입하여 캐싱된 코드를 꺼내오는 형태일까요? 이 부분이 조금 헷갈리기도 하고, 궁금하기도 합니다.혹은 어떤 문서를 보면 공부해볼 수 있을까요?(한국어 블로그에는 대부분 인터프리터와 JIT이 같다고 적어둔 경향이 많은 것 같고, 기선님께서 참고에 올려주신 글이나 해외 블로그에서는 둘을 분리해서 말하는 경향이 있는 것 같아서 더 헷갈리는 것 같습니다.)감사합니다!* 아래 질문과 비슷한 내용이지만, 답변 달아주신 링크에 접속이 안되서 부득이하게 다시 질문 드립니다ㅠhttps://www.inflearn.com/questions/99765