묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Repository 관련 질문 드립니다!
안녕하세요 김영한 선생님! 강의 항상 잘 듣고 있습니다ㅎㅎ MVC 패턴 그림을 보다가 문득 궁금한 점이 생겼는데요, 아직 많은 곳에서 (제가 다니는 회사 포함) DB에 직접 접근하여 데이터를 처리하는 객체를 DAO 라는 용어로 사용하고 있는데, 이게 특정 시점부터 Repository 라는 용어를 사용하는 것으로 권장이 된건지, 아니면 ORM을 어떤걸 사용하느냐에 따라 달라지는건지 궁금합니다!
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
private final을 사용하신 이유가 있으신가요?
안녕하세요 영한님! 좋은 강의 잘 듣고 있습니다. 지금까지는 FrontController에서 private final 을 사용하지 않으셨는데 v5에서부터는 private final Map<String, Object> handlerMappingMap = new HashMap<>(); private final List<MyHandlerAdapter> handlerAdapters = new ArrayList<>(); 위와 같이 private final을 사용하신것을 볼 수 있었습니다. 이유가 무엇인지 알려주시면 감사하겠습니다!
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Spring Security 관련 질문입니다.
안녕하세요! 로드맵대로 강의를 마치고 이제 실제로 토이 프로젝트를 구현해보고 있습니다. Authorization 헤더에 JWT토큰을 태워서 보내는 형태로 인증을 구현하려고 하는데요. 보통 Spring Security를 사용한다고 나와있어서 해당 라이브러리를 같이 설치한다음 작업하고 있습니다. 관련해서 검색하면서 살펴보고 있는데 제공하는 기능들이 너무나도 많아서 실무에서는 어떤걸 많이 사용하는지 정말 헷갈리네요. 찾아보니 @Secured, @PreAuthorize, @RolesAllowed 라는 3가지의 방법이 존재하는 것 같은데, 실무에서는 어떠한 방법을 사용하나요? (물론 요구사항에 따라 다르겠지만 일반적으로 사용하는걸 알려주시면 제가 검색해서 찾아보겠습니다ㅎㅎ개인적으로는 @PreAuthorize를 사용해서 엔드포인트마다 권한을 세분화하는게 좋다고 생각합니다.)
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Batch fetch size 의 원리
Batch fetch size 가 어떻게 적용되는지 블랙박스인 느낌이 드네요. 관련된 원리를 알 수 있을까요? stream().map 을 통해서 루프를 돌면서 Lazy Loading을 할 텐데 각 루프를 실행 할 때 쿼리를 날리지않고 다돌고난후 알아서 in 절에 채워넣어주는건 Hibernate가 알아서 해주는 건가요? 어떻게 가능한지 감이 안오네요
-
미해결스프링 핵심 원리 - 기본편
이전 강의부터 궁금했던것 질문입니다.
뒤로가면 나오겠지 하고 계속넘어갔는데 나오지 않아서 추가 질문합니다. 설계와 구현에 나뉘어 인터페이스 / 구현체인 클래스로 나누고 실제 클라이언트 코드에서 코드 수정 없이 AppConfig파일만 바꾸면 코드의 교체를 할 수 있도록 예제가 구성이 되었는데요. 예를들어서 자동차 라는 인터페이스가 있고 전기차 , 석유차 라는 클래스가 있다고 했을 경우 스프링 코드를 사용하지 않고 자바로 했을때 자동차 car = new 석유차(); -> 자동차 car = new 전기차(); 이렇게 하면 코드가 바뀌게 되잖아요? 근데 타입이 자식클래스가 아닌 부모 인터페이스 일 경우 자동차 (부모) 인터페이스에 공통으로 있는 기능을 사용 할 수 있지만 전기차(자식) 클래스에만 있는 기능은 "car"를 통해 사용하지 못하는 것 아닌가요? 그럼에도 불구하고 자료형을 부모타입으로 하는 이유가 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Controller DTO리턴 질문
안녕하세요. 영한님의 강좌에서는 컨트롤러에서 DTO를 리턴하는 방식을 사용하고 있더라구요. 그런데 인터넷을 찾아보니 ResponseEntity로 한번 감싸서 리턴하는 방식도 종종 사용하는 것 같습니다. (ResponseEntity를 사용하면 응답코드, 헤더등과 함께 좀 더 세밀하게 리턴값을 조절할 수 있기 때문인 것 같네요) 실무에서는 DTO를 그대로 반환하는 방식과 ResponseEntity로 감싸서 반환하는 방식 중 어떤 방식을 사용하나요? 감사합니다 :)
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
DTO의 위치에 관하여
Version 4 까지의 최적화를 하면서 Dto의 위치가 repository 까지 갔는데 DTO의 위치는 상황에 맞게 자유롭게 두는게 괜찮을까요?
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
메이븐말고 그래들로 만들어서하고싶은데
그래들로 만들어서 뷰를 그대로 넣고 따라하며 듣고있는데, 화면이 깨집니다. 기본 html은 나와서 사용이 가능한데, 흰화면에 html 밖에 안나오는데 해결방법이 없을까요??
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
13:09 store.clear() 에서 store에 빨간줄이 뜹니다 왜이런가요?
13:09 store.clear() 에서 store에 빨간줄이 뜹니다 왜이런가요? java: cannot find symbol symbol: method clearStore() location: variable repository of type hello.hellospring.repository.MemoryMemberRepository
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
validateDuplicatedName() 관련 질문 드립니다. - 자답 추가!!
회원가입 시 이름 중복 확인하는 메소드 안에서 IllegalAccessException 을 try/catch 문 쓰지 않고 작성을 하셨는데 하신 것을 보고 따라서 try/catch문 쓰지 않고 throw new IllegalAccessException을 하니 error: unreported exception IllegalAccessException; must be caught or declared to be thrown 이라는 에러가 발생합니다. 혹시 어떠한 원인인지 아실까요? 자바 버전은 오라클에서 다운받은 11입니다. ----------------------------------- 자답 추가합니다 ㅠㅠ IllegalAccessException 가 아니고 IllegalStateException으로 적었어야 했네요 ㅠㅠ 하.... 덕분에 강의안을 처음부터 천천히 복습하고 좋았습니다 ^^ ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ 다들 화이팅!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Unit Test가 더 좋다고했는데...
강의 중 통합 테스트도 좋지만 단위테스트가 더좋다고 하셨는데 Service에 대한 테스트 케이스를 작성할 때, 의존성이 있는 각각의 Repository 도 MockRepository를 생성해서 Service 자체만 테스트 하는게 더 좋은 방향일까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
요청에 응답이 오래걸려서 그 사이에 새로고침을 하면 어떻게 될까요?
안녕하세요. PRG 패턴에 대해 듣다가 생긴 의문점인데, PRG 패턴으로 POST 재요청을 막을수 있다는 점에 대해서는 이해를 햇는데 POST요청자체가 응답이 늦어져서 기다리는 상황에서 새로고침을 반복하면서 POST 요청이 반복해서 가는것은 PRG 패턴으로 해결이 안 될 것 같은데 방법이 있을까요?
-
미해결실전! 스프링 데이터 JPA
페이징 관련 질문입니다.
안녕하세요! 16:39초 정도까지 강의를 듣다보면 DTO로 변환해서 넘기는 모습을 볼 수 있습니다. 그런데 응답값을 확인해보면 totalElements, last, size, number, sort, first, empty 등 페이징에 관련한 모든 필드들이 나가더라구요. 그냥 클라이언트에서 필요한 부분만 정제해서 내보내야할 것 같은데 실무에서는 어떠한 방법을 사용하나요?
-
미해결실전! 스프링 데이터 JPA
slice 관련 질문입니다
slice 의 경우 size 3으로 요청하면 limit 가 4로 나가는데요, 이렇게 하면 실제로 쿼리를 돌려보면 결과가 4개가 나옵니다. 그런데 content.size() 가 3이 나오는 이유는 뭔가요? 스프링데이터 JPA 에서 알아서 마지막 결과는 날려버리는 건가요?
-
미해결실전! 스프링 데이터 JPA
CQRS 리포지토리 질문
안녕하세요. 이전부터 말씀해주신 CQRS에 관해서 간단한 질문이 있습니다. 예를 들어 Member엔티티에 관해 아래처럼 2개의 레포지토리로 쪼갠다고 가정할게요. - MemberQueryRepository(읽기) - MemberCommandRepository(쓰기) 저희가 JPA Data의 이점을 살리려면 JpaRepository를 상속받아서 사용한다고 강의에서 배웠는데요. 읽기 관련 쿼리가 들어있는 Query와 쓰기 관련 쿼리가 들어있는 Command 2개의 레포 모두 JpaRepository를 상속받아서 사용하나요? JpaRepository에는 단순 find~로 시작하는 읽기 메소드뿐만 아니라 delete, save등 쓰기에 관한 메소드도 같이 들어가있어서 읽기/쓰기 레포에서 모두 상속받아서 사용한다면 나중에 작업을 할 때 단순 조회/저장/삭제 등을 어떤 레포에서 사용해야할 지 혼란이 올 것 같습니다. CQRS에 대해서는 이론만 알고있었지 실제로 적용해본적이 없어서 많이 혼란스럽네요. 감사합니다 :)
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
스프링 빈의 자원공유 관련 질문드립니다
이번에 회사에서 Spring Security로 동적 ACL을 개발하다가 사용자 별로 독립적인 권한을 주고, 이 권한에 따라 사이드메뉴에 보이는 항목들을 다르게 해주었는데요. 이때 모든 쓰레드가 각 권한별로 갖고있는 리소스 접근권한 정보에 대해 알게하고 싶어(사이드 메뉴를 렌더링해야 하므로) 스프링 빈을 하나 만들고 이 빈에 해당 정보를 공유자원으로 등록했습니다. 자료구조는 ConcurrentHashMap을 썼습니다. 모든 쓰레드가 공유해야 할 자원이라 스프링 빈을 썼고 이로 인해 어떤 문제가 발생할 수 있을지 곰곰히 고민해봤는데 대략적으로 어떤 문제들이 발생 할 수 있는지 잘 모르겠습니다. 대부분의 스프링 책과 강의들에선 스프링 빈은 모든 쓰레드에서 상태를 공유하므로 사용에 주의를 기울여야 한다라거나 불변해야 한다는 이야기를 많이하지만, 자원을 공유하기 위해 스프링 빈을 쓰라는 얘기는 못봤었거든요. 왜 공유해야만 하느냐면 이렇게 하지 않으면 유저별로 로그인할때마다 데이터베이스에서 자신이 갖고있는 리소스 접근권한을 모두 검색해서 가져와야만 하는데, URL의 개수가 너무 많았기 때문입니다. 혹시 어떤 문제가 발생할 수 있을지, 더 좋은 방법은 없었는지에 대해 의견을 구합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
스프링 빈의 역할이 무엇인가요?
안녕하세요! 스프링 빈의 역할이 무엇인지 잘 모르겠습니다..! 빈 자체의 개념이 이해가 안가서 서치를 좀 해보니" 매번 클라이언트에서 요청이 올 때마다 각 로직을 담당하는 오브젝트를 새로 만들어서 사용한다고 생각해보자 요청 한 번에 5개의 오브젝트가 새로 만들어지고 초당 500개의 요청이 들어오면, 초당 2500개의 새로운 오브젝트가 생성된다. 서버가 감당하기 힘들다."그래서 빈이 필요하다 라는 말을 봤는데 그 필요성은 알겠으나 정확하게 빈이 무엇인지 모르겠습니다 또한 왜 new로 선언하면 빈이 되지 못하는건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
양방향 연관관계에서의 편의 메서드
강의중, 연관관계 편의 메서드는 연관관계의 주인으로 설정된 엔티티에서 형성하는 것이 좋다고 하셨는데 Order 엔티티에 //연관관계 메서드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);} 이렇게 메서드를 구성했습니다. 그러나 Order - OrderItem 두 엔티티가 갖는 연관관계에서 주인은 OrderItem입니다. 그렇다면 Order에 .addOrderItem()을 없애고 OrderItem 엔티티에 public void setOrder(Order order){ this.order = order; order.getOrderItems().add(this);} 위와 같은 편의 메소드를 추가하는것이 맞지 않을까 질문합니다!
-
미해결스프링 핵심 원리 - 기본편
NoSuchBeanDefinitionException 질문드립니다.
안녕하세요 강사님! MemberService memberService = ac.getBean(MemberService.class); 에서 다음과 같은 오류가 발생합니다. org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'hello.core.member.service.MemberService' available 그래서 @Component와 @Autowired 를 잘못 넣었나 해서 찾아봤는데요. 다음과 같이 작성하였고, 어떻게 해결해야 할지 조언 부탁드려도 될까요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
개인 프로젝트를 위해 도움 요청합니다!
안녕하세요. 비전공자로써 국비지원 학원을 수료한 취준생입니다. 학원에서 만들었던 프로젝트가 포트폴리오로 내세우기에는 너무나도 부족해서 선생님의 강의를 들으며 프로젝트를 새로 만들 계획입니다. 프로젝트를 만드는 과정에서 무척 궁금한 부분이 생겼는데 바로 '이미지 첨부'에 관한 것입니다. 학원에서 프로젝트를 만들 때는 모르는 부분이 있으면 구글링하고 이것저것 헤딩해보면서 하다보니 그때 사용했던 방법은 Multipart를 통해 이미지를 프로젝트 파일 내에 있는 폴더에 저장하는 방식을 사용했습니다. 하지만 돌이켜 생각해보니 이미지를 많이 사용하는 사이트를 만든다고 했을 때, '프로젝트 파일의 용량이 너무 불어나면 안 좋지 않을까?' 하는 생각이 들었고, 또한, 기왕에 프로젝트 제대로 만들어 볼 거 AWS Free tier를 활용해서 배포까지 해야 취업에 유리하지 않을까 싶어서 배포단계까지 가는 것을 목표로 하고 있는데요. 그렇다고 했을 때, 배포 중인 애플리케이션의 이미지 첨부 기능에 에러사항이 있지는 않을까, 하는 걱정이 앞섭니다. (아직 애플리케션을 배포해 본 경험은 없습니다...) 사실, 구글 클라우드 스토리지라는 것이 있다기에 연동은 해봤지만 제대로 활용해보지는 못했습니다. 필요하다고 하면 다시 제대로 배워 볼 생각입니다. 이하 각설하고 제 질문은, 1. 실무에서 이미지 첨부 기능을 주로 어떤 스토리지 방식에 의존하는지 2. 작은 규모의 프로젝트이지만 이미지가 약 100장(+이미지 첨부 게시판) 정도일 때 어떤 스토리지 방식을 채택하는 것이 좋을지 입니다. 이게 참... 강의 주제에 벗어나는 질문이지만 너무 궁금한 부분이고, 비전공자이다보니 주변에 실무 종사자 분들이 없어서 실례를 무릅쓰고 이런 질문을 올려보게 되었습니다. 혹시라도 다른 실무 종사자 분들의 조언이 또 있다면 감사히 받겠습니다.