묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Interface와 Abstract class 의 차이점
안녕하세요, 강의 잘 듣고 있습니다. 강의에서 이끌어 주시는대로 따라가다가 생각을 해봤습니다. - ControllerV1 은 추상적 형태이고, MemberFormControllerV1. MemberSaveControllerV1, MemberListControllerV1 는 구체적 형태이다. - 추상적 형태를 나타내는 방법에는 Interface와 Abstract class 가 존재한다. 아래와 같은 의문이 들었습니다. - 현재 상황에서 Abstract class 를 사용하지 않고 Interface 를 사용한 이유가 뭔가요? - 만약 Interface 를 사용한 특별한 이유가 있다면, 어떤 상황에서 Abstract class 또는 Interface 를 선택하는게 옳을까, 판단하는 근거를 간략하게나마 말씀해주시면 감사하겠습니다. 좋은 하루 되세요 !
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
부트스트랩 적용 후 회색영역이 안 뜰 때 해결방법
그 회색 창 html을 보시면 class="jumbotron"으로 되어 있을텐데 부트스트랩4까지 지원해주던 클래스입니다. 부트스트랩5로 올라가면서 빠졌다고 합니다. 현재 부트스트랩 가장 최신 버전이 5.0.1이기 때문에 저처럼 최신 버전 받았다가 엥 왜 얘만 안되지 하시는 분이 있으실까봐 관련 정보를 남깁니다. 부트스트랩 4를 이용하시면 문제 없고 어차피 디자인적인 요소라 크게 신경 안쓰고 넘어가셔도 될 것 같습니다. - 부트스트랩5 점보트론 변경 정보 https://getbootstrap.com/docs/5.0/migration/#jumbotron - 부트스트랩4 다운로드 링크 https://getbootstrap.com/docs/4.6/getting-started/download/ - 다운로드 없이 cdn으로 적용하기 https://www.inflearn.com/questions/151764
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
orderItem LAZY 로딩 질문
안녕하세요. orderItems.stream().forEach(o -> o.getItem().getName()); orderItem 반복문 돌 때 getName을 하거나 getprice, getstockQuantity를 넣어도 모든 필드가 로딩이 되는데 왜 그런건지 이해가 잘 안가는데 간단한 설명 부탁드려도 될까요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
MemberConroller에서 생성자를 통한 의존성 주입시 멤버 변수에 final 키워드를 사용하는 이유에 대한 질문입니다.
안녕하세요. 김영한 팀장님. '컴포넌트 스캔과 자동 의존관계 설정' 강의 02:35 쯤 'MemberConroller' 클래스의 멤버변수로 'MemberService' 타입의 멤버변수를 선언할 때 final 키워드를 설정한 이유에 대한 질문입니다. Java에서 final 키워드가 붙은 멤버변수는 쉽게 말해 '변할 수 없다.' 라는 의미를 가지게 됩니다. 저는 스프링에서 다루는 Bean은 '특별한 설정 설정(Scope)'이 없는 경우 싱글톤 형태로 스프링 컨테이너에 등록되어 상황에 따라 다른 클래스의 의존 주입 객체로 사용할 수 있는 것으로 이해하고 있습니다. 이러한 이유로 현재 MemberController에서는 Setter 메소드도 선언되지 않았으니 생성자를 통한 의존 주입 이후에는 MemberService 타입의 멤버변수가 변경될 가능성이 없다고 보아 final 키워드를 사용하지 않아도 되지 않을까? 하는 의문이 들었습니다. 그럼에도 불구하고 final 키워드를 사용한 이유가 궁금합니다! 미리 답변 감사드립니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
index.html문의
무료강의인 스프링 입문강의를 들었을때, 강사님께서 매핑되는 html화면이 없을경우에는 resource -> static -> index.html을 자동으로 찾아서 화면에 띄어준다고 하셨는데요 꼭 resource -> static 안에 없어도 되는건가요? 이번 강의에서는 main -> webapp -> index.html경로에 있는데 welcome페이지로 index.html이 동작하길레요
-
해결됨실전! 스프링 데이터 JPA
Entity 사용에 대한 질문
안녕하세요. 강사님 먼저 항상 좋은 강의를 해주셔서 감사합니다. 제가 실무에서는 Mybatis만 사용하다, 강사님 강의를 통해서 처음 JPA를 접하고, 개인 프로젝트에서 처음 JPA를 사용하고 있습니다. 강의에서 Entity를 직접 반환을 하면 안된다고 하신걸로 기억을 하는데, API 개발 시 리턴을 할 때만 직접 Entity로만 반환을 하면 안되지는 일반 MVC 형태의 개발을 할 때는 직접 Entity를 반환하는 방식을 실무에서 사용을 하시는지 궁금합니다. 저는 평소 Controller에서 파라미터를 받을 때 @ModelAttribute를 이용해 DTO를 통해 파라미터를 받는 방식을 주로 이용하는데, JPA 사용 시 @ModelAttribute를 이용하여 직접 Entity를 받는 방식은 좋은 방식인지 궁금하여 질문 드립니다. 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
getBean이 class를 받아야 하는 이유?
안녕하세요. 명강의 듣다보니 궁금증이 생겨 질문 남깁니다. getBean은 왜 인자로 클래스를 받는가? 입니다. getBean의 역할은 객체를 넘겨주는 것이고 AppConfig에서 @Bean을 통해 constructor를 알려주었을 때 객체 생성을 위한 정보는 모두 받았다고 판단됩니다. 또한 getBean 앞뒤로 sout 찍어보니 실제로 getBean 이전에 모든 객체생성 로그가 찍히기에 궁금증이 더해졌습니다. getBean의 역할을 수행하는데는 name만 가지고도 가능할텐데 왜 class를 인자로 받는걸까요?? 워낙 명강의라 뒤에 나오는 내용을 궁금해하는중일지 모르겠습니다.ㅎㅎ
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
v2 api의 delivery 쿼리 조회문
안녕하세요 영한님! 간단한 주문 조회v2 질문이 있습니다. @GetMapping("/api/v2/simple-orders")public Result ordersV2() { List<Order> orders = orderService.findAll(new OrderSearch());//프록시가 들어있는 orde 객체 List<SimpleOrderDto> collect = orders.stream().map(o -> new SimpleOrderDto(o.getId(), o.getMember().getName(), o.getOrderDate(), o.getStatus(), o.getDelivery().getAddress())). collect(Collectors.toList()); return new Result(collect);} 위의 v2 api를 실행하면 문제없이 5개의 쿼리문이 나가는 것을 확인했습니다. name을 조회하는 쿼리는 예상했던데로 단순 조회 쿼리인 select member0_.member_id as member_i1_5_0_, member0_.city as city2_5_0_, member0_.street as street3_5_0_, member0_.zipcode as zipcode4_5_0_, member0_.name as name5_5_0_ from member member0_ where member0_.member_id=? 와 같이 나가지만. delivery 엔티티에 접근할때 select delivery0_.delivery_id as delivery1_2_0_, delivery0_.city as city2_2_0_, delivery0_.street as street3_2_0_, delivery0_.zipcode as zipcode4_2_0_, delivery0_.status as status5_2_0_, order1_.orders_id as orders_i1_6_1_, order1_.delivery_id as delivery4_6_1_, order1_.member_id as member_i5_6_1_, order1_.order_date as order_da2_6_1_, order1_.status as status3_6_1_ from delivery delivery0_ left outer join orders order1_ on delivery0_.delivery_id=order1_.delivery_id where delivery0_.delivery_id=? 위와 같이 외부 조인문이 나가는 것을 확인했습니다. 마치 패치조인을 한거 같은 전혀 예상치 못한 쿼리문이여서 질문을 드립니다. 또한 모두 lazy로 설정을 했습니다. 혹시 데이터베이스의 방언차이 때문일까요? mysql 사용중입니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
쓰레드 풀 질문드립니다.
실제 HTTP요청에 의해 많은 트래픽이 발생할 경우 쓰레드풀의 있는 쓰레드의 숫자를 상황에 맞추어서 증가시켜주면 된다고 강의해주셨는데요 제가 아직 그런부분을 다뤄본 경험이 없어서 질문드립니다. 인터넷을 찾아보니 쓰레드풀의 최대갯수를 늘리는 방법이 ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); taskExecutor.setMaxPoolSize(10); taskExecutor.setQueueCapacity(10); 이렇게 나오던데 실무에서도 이런식으로 setMaxPoolSize를 통해서 쓰레드의 수를 증가 시키고 setQueueCapacity를 통해 대기하는 쓰레드의 수를 정하나요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
jdk 1.8로 하면 문제가 없는데
안녕하세요 매번 격는 문제여서 질문합니다. 다른 project에서 jdk1.8로 사용을 하고 있고 JAVA_HOME도 1.8로 설정을 했을 경우 인텔리제이에 설정은 jdk11모두 설정을 했는데 ㅜ jdk11을 사용하는데 이러한 에러가 나와요 Execution failed for task ':compileJava'. > invalid source release: 11 jdk를 여러 버전을 각각의 프로젝트 마다 달리 사용할려면 설정을 어떻게 해야 하는지요
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
getTotalPrice같은 조회함수가 왜 필요한지 모르겠씀니다=_=
totalPrice라는 변수를 만들어서 처음 주문 들어왔을떄 계산해서 넣어두고, 주문 취소라던지 하는 변경이 일어나면 그때 상황에 맞게 업데이트 해주는게 맞는거 아닌가요?? 일반적으로 변경보다는 조회가 빈번하니까 변경되었을때 미리 계산해두고 조회할떄는 가져다 쓰기만 하는게 더 맞지않나 싶어서요=_=
-
미해결스프링 핵심 원리 - 기본편
강의자료 질문입니다
PPT슬라이드 제목: 스프링과 객체지향 "제어의 역전(IoC), 의존관계 주입(DI)은 다형성을 활용해서 역할과 구현을 편리하게 다룰 수 있도록 지원한다." 위와같은 문장이 있는데, IoC와 DI가 어떻게 다형성을 활용하는지 이해가 가질 않아 질문을 하게 되었습니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
p6spy 성능 질문 드립니다.
안녕하세요. 강의를 듣고 사이드 프로젝트를 하면서 `p6spy` 를 잘 활용하고 있는데요. 강의 내용 중에 prod 에서는 성능 관련을 확인 후 사용해야 된다는 내용을 보고 궁금해졌습니다. 처음에는 그냥 `build.gradle` 에서 prod 설정에만 안뜨게 하면 되겠지 (dev, test 에서는 되는 것을 의도) 라고 생각했는데, profile 에 따라 `build.gradle` 이 동적으로 움직이는 건 application.xml 이랑은 다르게 좀 어렵더라구요; 그래서 질문은 2개 입니다. 1. profile 에 따라 `build.gradle` 의 설정 (특히 dependency) 이 동적으로 움직이게 하는 것을 어떻게 하면 좋을까요? 2. `p6spy` 와 같은 외부 라이브러리의 성능 검증은 어떻게 하는 것이 좋을까요?
-
미해결스프링 핵심 원리 - 기본편
AppConfig에서 중복이라는 개념이 궁금한데요
AppConfig가 DIP와 OCP를 해결하기 위하여 MemberServiceImpl 과 OrderServiceImpl에 'new MemoryMemberRepository' 를 주입하는 역할을 하잖아요? 근데 리팩토링 하기전에는 orderService() 와 memberService() 에서 'new MemoryMemberRepository' 를 각각 따로 생성하는걸 중복이라고 보고 이를 해결하기 위해서 리팩토링하여 memberRpository() 를 만들어 한번만 생성하도록 하여 중복을 막으신거라고 이해해도 괜찮은가요??
-
미해결[NarP Series] MVC 프레임워크는 내 손에 [나프2탄]
질문을 모르고 삭제해버렸는데 혹시 답글을 해주셨을까요??
답글 확인을 못하고 삭제를 눌러서ㅠㅠ,,,
-
미해결[NarP Series] MVC 프레임워크는 내 손에 [나프2탄]
나프 2강의부터 듣는데 mvc05 war가 실행되지 않습니다
삭제된 글입니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
OrderController에 대해서 궁금한게 생겼어요
안녕하세요!! 컨트롤러를 보다가 단순 호기심이 생겨서요 MemberController와 ItemController에서는 회원가입을 하거나 상품을 등록할때, MemberForm클래스나 ItemForm클래스를 만들어서 파라미터값으로 넘겨주셨습니다. 그런데 OrderController에서는 주문을 할 때 OrderForm을 만들지 않고, 하나하나 @RequestParam으로 넘겨준 특별한 이유가 궁금해서 질문드렸어요 별다른 이유가 없으면 OrderForm을 만들어서 넘겨도 되는거죠??
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
map<Long,Member>를 넣은 이유가 궁금합니다!
Member class에는 long id, String name을 가지고 있어서 id값에 Long을 주는건 이해가 되는데 name값을 넣어주려면 Member가 아니라 String이 들어가야되는게 아닌가요?? 잘 이해가 안되서 설명 부탁드리겠습니다!
-
미해결스프링 핵심 원리 - 기본편
안녕하세요 영한님. 질문이 있습니다.
안녕하세요좋은강의 항상 감사드립니다. 질문이 있습니다.저는 현재 작은회사에서 Java Spring Boot로 Back-End개발일을 하고있습니다.저같은 경우는 규모가 작아서인지 설계를 제대로하지 않은채 빠르게 개발하는것에만 집중한다는 느낌을 많이 받습니다.강의중에 도메인 협력관계, 클래스 다이어그램, 객체 다이어그램등을 설계하시고 구현하시는데, 영한님의 회사에서는 어느정도 선까지 설계를 해놓고 구현하는지 궁금합니다.또, 영한님께서 설계하실때 사용하시는 툴도 어떤것을 사용하는지 궁금합니다.항상 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
강사님 프로그램 시작시 질문있습니다
제가 야생형 코스를 따라가고 있어서 아직까지 이해가 잘 가지 않고 그냥 따라치기 바쁘네요 ㅎㅎ 다름이 아니라 JPA를 사용하면 어플리케이션 실행 할때마다 테이블을 계속해서 만들고 시작하나요 ?? 그리고 제가 디비가 약해서 디비 관계에대해 잘 이해 못하는 부분들이 조금씩 있고 각 어노테이션들의 기능들을 기본편을 보지않고 와서 그런지 모르고 가고 있는데 계속해서 진도 진행해도 될까요?