inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

스프링과 SOLID 질문

미해결

스프링 핵심 원리 - 기본편

안녕하세요 강사님, 질문 있습니다. 다형성만으로는 OCP, DIP를 위배할 수밖에 없다고 설명하시며 그에 대한 대책으로 스프링이 나온 것이라고 말씀해주셨는데요. 아마 이는 이전 강의에서 진행하셨던 @Configuration, @Bean을 통한 스프링 컨테이너에 객체를 등록하는 방식을 말씀하는 것일 거라고 생각합니다. 다만 의문점이 드는 부분은.. "스프링을 개발한 개발자들 또한 OCP, DIP 위배 문제에 대한 고민을 하였고 그 해답으로 스프링 프레임워크를 만들었다." 라고 함은.. 스프링이 등장하기 전에도 SOLID라는 개념은 존재했다는 것이겠지요? 그런데 OCP, DIP 위반 문제를 해결하기 위해 스프링을 만들었다? 그렇다면 스프링이 등장하기 전에는 어떤 방식으로도 SOLID를 모두 충족시킬 수 없었다는 말인가요? 그렇다면 저 SOLID라는 개념을 처음 제시했을 사람은.. 문제에 대한 해결책도 없이 그냥 객체지향 설계의 이상향만 제시했을 뿐인 건가요? 알쏭달쏭 하네요; 이번 강의도 잘 듣겠습니다. 감사합니다! ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 바로 다음 강의에서 스프링 등장 이전 배경에 대한 설명이 다시 간략하게 나오네요. 스프링이 없이 OCP, DIP를 지켜가며 개발을 하다보니 배보다 배꼽이 커지는 일이 발생했고 그래서 스프링을 만들었다구요. 이로써 첫 질문에 대한 답은 해결이 되었는데.. 음.. 저 스프링 없이 SOLID를 유지하는 코딩 방식에 대한 건 너무 지엽적인 부분이겠죠??ㅠㅠ

  • spring
  • oop
akakakakak 댓글 2 좋아요 2 조회수 246

빌드 오류메시지가 있는데요

미해결

스프링 핵심 원리 - 기본편

start.spring.io에서 프로젝트 생성해서 오픈했는데 바로 오류가 떠서 이것저것 확인해보고 에러메시지 검색해봤는데 잘 못찾겠네요 ㅜ 어떤게 문제일까요??..

  • oop
  • spring
spring 댓글 10 좋아요 2 조회수 1120

TestBean 클래스 관련 질문입니다.

해결됨

스프링 핵심 원리 - 기본편

ApplicationContext ac = new AnnotationConfigApplicationContext(TestBean. class ); 해당 코드를 통해서 TestBean 클래스가 컨테이너에 빈으로 등록이 되었으나, TestBean 클래스 내부의 @Autowired 어노테이션의 warning을 살펴보니 **Autowired members must be defined in valid Spring bean** 라는 경고 문구를 볼 수 있었습니다. 해당 내용은, 자동의존주입을 받기 위해서는 현재 클래스 또한 스프링 빈으로 등록되어 있어야 한다는 의미로 해석했습니다. 결론은, 이러한 경고가 뜨는 이유를 잘 모르겠습니다. ide가 이 시점에 경고를 잡아주지 못하는 것인가요? 한가지 더 질문을 드리자면, TestBean 클래스에 @Configuration 애노테이션을 붙이게 되면, @Autowired public void setNoBean2( @Nullable Member noBean2) { System. out .println( "noBean2 = " + noBean2); } 해당 코드에서 noBean2 부분에 빨간 밑줄이 생깁니다. (Could not autowire. No beans of 'Member' type found.) Member 타입의 빈을 찾을 수 없기 때문에 자동주입을 할 수 없다는 의미인데, 당연히 Member는 빈이 아니지만 왜 @Configuration 애노테이션을 붙였을 때 빨간 밑줄이 뜨는지 이유가 궁금합니다. @Autowired public void setNoBean1(Member noBean1) { System. out .println( "noBean1 = " + noBean1); } 해당 코드 역시 @Configuration 애노테이션이 붙었을 때 noBean1에 빨간 밑줄이 뜹니다.

  • oop
  • spring
준돌 댓글 3 좋아요 0 조회수 1359

AnnotationConfigApplicationContext 관련

해결됨

스프링 핵심 원리 - 기본편

AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); 위 부분에서 AnnotationConfigApplicationContext 구현체 타입을 사용한 이유가 있을까요? 보니까 AnnotationConfigApplicationContext 타입에서만 getBeanDefinition 메서드를 사용할 수 있더라구요 그러면 AnnotationConfigApplicationContext이 ApplicationContext이 구현체인데 왜 getBeanDefinition을 못하는지가 궁금합니다. (하지만, ApplicationContext에서는 여러 구현체 중에 AnnotationConfigApplicationContext 있는것은 확인했으나 AnnotationConfigApplicationContext클래스에서는 ApplicationContext가 아닌 AnnotationConfigRegistry 구현체로 서로 다르게 명시 되어 있는 것도 궁금합니다. - 구현체는 하나의 인터페이스(하나의 부모)로만 구현한다고 알고 있습니다.)

  • oop
  • spring
이윤구 댓글 3 좋아요 14 조회수 473

static class TestBean 질문입니다

미해결

스프링 핵심 원리 - 기본편

static inner class로 TestBean을 사용했는데요. static 키워드를 빼면 예외가 발생합니다. 내용을 보니 TestBean.class를 인자로 받아 스프링 컨테이너를 생성하고 인자로 받은 클래스를 빈으로 등록(생성)하는 과정에서 문제가 생기는 걸로 보입니다. 이 상황을 TestBean을 생성하려면 외부클래스(AutowiredTest)의 인스턴스가 필요한데 컨테이너에서 관리하는 정보에 없어서(AutowiredTest가 빈으로 등록되지 않아서) 외부클래스의 인스턴스를 생성할 수가 없고 그로 인해 static이 아닌 내부클래스를 생성(빈으로 등록)하지 못해 발생한 예외라 이해하면 될까요..? static이 붙었을 때는 TestBean을 컨테이너에 등록( 내부적으로 생성자 호출)할 때 외부클래스의 인스턴스 유무는 상관이 없기 때문에 문제없이 동작한다고 이해했고요. 몇 강 전부터 궁금했는데 이제야 질문드립니다. 제가 이해한 내용이 맞을까요? 혹시 잘못 이해한 부분이 있는지 궁금합니다^^ 강의는 정말 재미있게 잘 보고있습니다! 감사합니다^^*

  • spring
  • oop
geunhyeong0421 댓글 3 좋아요 7 조회수 568

안녕하세요

해결됨

스프링 핵심 원리 - 기본편

스프링 입문 스프링 데이터 JPA 강의에서 Spring Data JPA에서 제공하는 Repository를 구현하고 있으면 Spring Data JPA가 자동으로 구현체를 등록 해준다. 이 말씀을 하셨었는데 AppConfig가 생성자 주입으로 전달하듯이 Spring Data JPA가 Repository를 구현하고 있는 인터페이스들을 찾아서 주입 역할을 해주고 있는건가요?? @Autowired public SpringConfig (MemberRepository memberRepository){ this . memberRepository = memberRepository ; } @Bean public MemberService memberService (){ return new MemberService( memberRepository ) ; } 여기에서 SpringDataJpaMemberRepository를 어떻게 찾아가는지 궁금해서 질문 드립니다. (강의 보면서 SI 다니며 묵힌 갈증이 확 풀리는 것 같네요. 강의 감사히 듣고 있습니다. HTTP강의 까지 꼭 완강 하겠습니다!)

  • oop
  • spring
jeongdalma 댓글 1 좋아요 0 조회수 260

안녕하세요! 스프링 관련해서 질문 드립니다.

미해결

스프링 핵심 원리 - 기본편

안녕하세요 영한님, 항상 좋은 강의 감사드립니다. 수업을 듣던 중 의문점이 생겨서 질문 드립니다. 결국 스프링을 사용하는 목적은 애플리케이션 개발에 필요한 기본 뼈대가 되는 기능들은 제공해 줄테니 개발자들은 비즈니스 로직에 집중하여 생산성을 높이는데 집중하자는 것이 목적이라는 생각이 드는데요. 혹시, 예를들어, 파이썬의 장고나 nodejs는 사용목적이 생산성을 높이기 위해 사용하는 프레임워크가 아닌건가요? 만약, 다른 프레임워크들도 결국 생산성을 높여준다는 것이 목적이라면, 다른 프레임워크들과 비교해서 자바의 스프링이 차별성을 갖는 점은 무엇이길래 메이저 it 기업에서 그토록 많이 사용되는 것인지 궁금합니다.

  • oop
  • spring
웨이드 댓글 1 좋아요 11 조회수 377

AppConfig에서 MemberRepository 객체 생성에 관하여 질문있습니다.

해결됨

스프링 핵심 원리 - 기본편

현재 AppConfig에선는 MemberService, OrderService 둘 다 memberRepository()를 통해 MemoryMemberRepository 객체를 주입 받고 있습니다. 하지만 memberRepository()를 호출할 때마다 MemoryMemberRepository 객체가 새로 생성됩니다. 따라서 MemberService와 OrderService는 서로 다른 Repository를 참조하고 있습니다. 이렇게 서로 다른 MemoryMemberRepository를 참조해도 되는지 여쭤보고 싶습니다. 아니면 저장소인 store를 static으로 선언했기 때문에 서비스간 참조하는 객체는 다르지만 store는 공유하고 있기 때문에 상관없을까요? 아니면 추후에 서비스들이 하나의 MemberRepository만 참조하도록 하는게 나을까요?

  • spring
  • oop
한정용 댓글 4 좋아요 1 조회수 337

싱글톤 DIP 위반에 관한 질문입니다.

미해결

스프링 핵심 원리 - 기본편

이전 강의와, 이번 강의 내에서, 싱글톤 패턴을 사용하는 경우 DIP 위반이라고 말씀하셔서 질문 드립니다. 과거 강의에서 작성한 AppConfig 클래스 내부에 public MemberRepository memberRepository() { return MemoryMemberRepository.getInstance(); } 이런식으로 작성한다면, 예전에 말하셨던 Configuration(구성?) 하는 부분만 변경될 뿐, 사용하는 부분에서는 new AppConfig().memberRepository 를 하면 되는데 왜 DIP 위반이라고 하시는지 궁금해서 질문드립니다. ^_^

  • oop
  • spring
이희수 댓글 1 좋아요 4 조회수 220

싱글톤 주의할점 강의에 대하여 궁금한 점이 있어 질문드립니다~!!

미해결

스프링 핵심 원리 - 기본편

선생님~! 해당 싱글톤 주의할점에서 싱글톤은 무상태로 유지해야한다고 하셨습니다. 때문에 강의에서 지역변수 userAprice 와 userBprice를 만들어서 처음에 입력된 userAprice에 입력된 값이 출력되도록 변경하셨는데, 이게 현재 user가 2명이어서 괜찮았지만 만약에 정말 1초마다 5만명씩 유저가 가격을 입력한다면, 지역변수를 순간적으로 5만개씩 만들어서 처리하는 건지, 아니면 다른 방법으로 해당 사항을 해결하는 건지 궁금합니다 !! (공유객체의 참조와 지역변수의 관계에 대하여 조금이해가 않되서 질문드립니다. ㅠㅠ)

  • oop
  • spring
Js Sound 댓글 3 좋아요 1 조회수 253

이번 강의가 아닌 앞으로의 개발에 관해 문의 드립니다.

해결됨

스프링 핵심 원리 - 기본편

안녕하세요 강의 정말 잘 보고 있습니다. 다름이 아니고 아직 강의를 다 보지는 못했지만 강의 완료 후 추후 어떻게 공부 혹은 새로운 지식을 습득해야할지에 대해 궁금해 글올립니다. Spring강의를 통해 Spring을 알게되어 좋은 한편 강의를 다 듣고 추후 새로운 버전의 Spring이 혹은 그 Spring을 뛰어넘는 새로운 프레임워크나 툴들이 나왔을때 어떻게 정보를 알고 공부를 해야할지 궁금해서요 언제까지나 강의가 나오기만을 기다릴수는 없는거고 매뉴얼은 중간중간 찾아볼수는 있으나 기초부터 매뉴얼만 보고 공부하는건 무리인듯 싶어서요 몇가지 질문을 요약드리자면.. 1. Spring에 대해 처음 접하실때 혹은 다른 새로운 기술들을 접하실때 어떻게 공부하시는지 궁금합니다.(원서?, 국내도서?, 매뉴얼?) 2. 혹시 개발동향이나 최신 정보를 얻기위해 주로 가시는 웹사이트가 있다면 추천해 주실수 있으실까요? 아직 마지막영상까지 보지를 않고 질문을 드려 남은 영상에서 답변을 주실수도 있을텐데 너무 궁금한 마음에 문의드립니다 아, 그리고 HTTP 관련 강의 먼저 올려주신다고 하셨는데 기대하고 있습니다 감사합니다!!

  • spring
  • oop
ALAN KIM 댓글 2 좋아요 2 조회수 409

개발부터 배포 프로세스

미해결

스프링 핵심 원리 - 기본편

안녕하세요, 좋은 강의 만들어주셔서 감사합니다. 현업에서는 개발, 배포 프로세스가 어떻게 진행되는지 궁금합니다 제가 지금까진 spring mvc쪽 만 해봤는데요, 뷰까지 통합해서 띄우기 때문에 하나의 프로젝트에서 모두 개발되었습니다. 하지만 요즘은 보통 프론트엔드 vue,react 백엔드은 spring으로 개발을 진행되자나요? 이렇게 개발될때 어떻게 진행되는지 전체적으로 궁금합니다. 1. 프론트쪽에서 빌드한뒤에 spring boot에 static쪽에 넣고 배포하나요? 2. 그리고 만약 프론트서버, 백엔드서버 따로 구축되어있으면 백엔드쪽 api를 호출하려면 프론트쪽에서 백엔드 ip를 알아야 api호출이 가능하자나요, 그럼 프론트쪽에 api ip가 다 공개되는건가요...? 보안상으로 안좋지않나요..? 백엔드하시는분인데 프론트쪽도 함께 질문하는게 아이러니합니다만 현업에서 어떻게 개발부터 배포까지 진행되는지 궁금하네요ㅜ 감사합니다.

  • spring
  • oop
변지수23 댓글 1 좋아요 0 조회수 299

질문 있습니다~!

해결됨

스프링 핵심 원리 - 기본편

안녕하세요. 영한님, 항상 좋은 강의 감사드립니다 :) 수업을 듣다가 몇가지 궁금한 점이 생겨 질문 드립니다. 1. 스프링 애플리케이션을 실행하면 스프링 컨테이너가 생성되고 bean이 생성될텐데, 스프링 컨테이너랑 bean은 모두 JVM의 heap 영역에 생성되는 건가요?? 2. heap 영역에 생성된다면, GC의 대상이 될 수도 있는건가요??

  • spring
  • oop
웨이드 댓글 1 좋아요 22 조회수 669

변수 만드는 단축키 뭐였나요??

미해결

스프링 핵심 원리 - 기본편

안녕하세요 강의 너무 잘보고 있습니다 너무 짱짱이에요 제가 궁굼한건 new Member(,,,); 을 쓰고 어떤 단축키를 누르니 Member member = new Member(...); 로 만들어주는 단축키가 궁굼합니다 앞에 강의에서 설명해주셨던거 같은데 못찾겠네요 ㅠㅠ

  • spring
  • oop
josh 댓글 2 좋아요 1 조회수 451

orderServiceImpl에서 repository와 service

미해결

스프링 핵심 원리 - 기본편

안녕하세요 강사님 강의 잘 보고 있습니다. 다름이 아니라 OrderServiceImpl에서 MemberRepository가 아닌 MemberServiceImpl을 써도 같은 결과가 나올 텐데요 왜 repository를 쓰셨는지 궁금합니다! 😊 단지 많은 접근으로 인한 메모리 낭비 문제인가요? 아니면 다른 이유가 있을까요??

  • oop
  • spring
ms-seo 댓글 2 좋아요 5 조회수 395

provider 관련 궁금증이 있습니다.

미해결

스프링 핵심 원리 - 기본편

logic() 메서드 호출 시 그때 마다 프로토타입 빈이 생성되어 사용이 되는데 해당 코드를 보면 provider.get() 입니다. 이 경우에는 new PrototypeBean(); 을 호출하는 것과 다른 점이 있을까요? ObjectProvider 같은 경우에는 이외 많은 기능이 있어 사용 하는것이 수긍이 가나 단순히 빈을 해당 라인에서 생성하는 것은 생성자를 호출하는것과 동일한데 provider.get() 코드와 new PrototypeBean(); 코드가 다른점이 있을까요?

  • oop
  • spring
안병찬 댓글 1 좋아요 7 조회수 348

안녕하세요, 선생님. 몇 가지 질문 여쭙겠습니다.

미해결

스프링 핵심 원리 - 기본편

안녕하세요, 김영한 선생님? 강의 내용 중 궁금한 부분이 생겨 질문 드립니다. 첫 째로, DiscountService 라는 static class에서, ` private final Map<String , DiscountPolicy> policyMap ;` 의 Autowired가 동작하는 방식이 Map<String, DiscountPolicy> 라는 데이터 타입을 보고, 스프링이 "아, Map이니까 이에 걸맞게 넣어줘야 하는구나" 라고 인식해서 주입해주는 것인가요? 바꿔 말하면, List, Map 이외에 다른 컬렉션에서도 모두 사용될 수 있나요? 혹은 더 나아가서, 커스텀 클래스에도 사용할 수 있나요? 그 범위가 어디까지인지, 동작 방식이 궁금합니다. 두 번째로, pdf 강의자료 중, "로직 분석" 의, 'discount() 메서드는 discountCode 로..' 부분에서, rateDiscountPolicy가 넘어오면 fixDiscountPolicy 스프링 빈을 찾아서 실행한다고 작성되어 있는데, 이는 rateDiscountPolicy의 오타인가요? 마지막으로, 조금 다른 이야기인데, 11월 중에 출시하실 스프링 웹 MVC의 구체적인 날짜를 혹시 알 수 있을까요? 너무 기대되는 강의라 하루 빨리 듣고싶습니다. :) 항상 강의 잘 보고 있습니다. 감사합니다.

  • oop
  • spring
댓글 1 좋아요 7 조회수 263

Spring의 Bean주입 관련 질문입니다

해결됨

스프링 핵심 원리 - 기본편

안녕하세요 영한님 이번 강의를 듣고 궁금증이 생겨 이렇게 질문드립니다. 1. 첫번째 질문입니다. 평소에 의존성 주입을 할때 의존성을 주입할 객체를 private final로 선언한후에 Lombok의 @RequiredArgsConstructor를 사용하거나 final로 선언된 객체를 생성자를 통하여 받아 주입을 하였습니다. 근데 강의를 듣다보니 영한님같은 경우는 @Autowired를 생성자에 사용하고 계신데 로그상으로 봣을때는 @Autowired가 있고 없고가 차이가 없어 보입니다. 혹시 @Autowired의 사용 유무에 따라서 내부적으로 차이점이 있는건가요? 2. 두번째 질문은 14:40 구간에 스프링 빈저장소 그림을 보다가 문득 생각났는데요 Bean객체가 빈 저장소에 등록되는 순서가 존재하는 걸까요? MemberService의 경우는 MemberRepository의 의존성을 주입 받아야하는데 MemberService가 먼저 빈저장소에 등록되고 이후에 MemberRepository에 등록되는 경우는 MemberService가 생성될때 MemberRepository의 빈정보는 빈 저장소에 없는 상태인데 이럴경우는 어떻게 해당 객체를 생성자를 통하여 주입후 MemberService가 생성되는지 궁금해졌습니다. 그래서 제가 스스로 생각해본 내용은 전체의 빈을 먼저 스캔한후 주입받을 내용이없는 빈을 먼저 빈저장소에 등록후 이후에 주입받을 빈이 있는 객체를 생성하여 빈저장소에 저장한다. 라고 생각도 해보았는데 로그상으로 보면 Creating shared instance of singleton bean 'AClass' Creating shared instance of singleton bean 'BClass' Autowiring by type from bean name 'AClass' via constructor to bean named 'BClass' 이 순서대로 빈이 생성되어 주입되는듯하네요 그래서 또 다른 생각은 SpringMVC같은 경우는 컨트롤러에서 요청된 내용을 reflection을 통하여 해당하는 요청의 메소드를 invoke시키는 것으로 배웠는데 그렇다면 빈들을 먼저 빈 저장소에 저장후에 그 이후에 저장된 빈에서 주입이 안된 객체를 찾아 꺼내고 reflection을 통하여 생성자의 파라미터에 주어진 객체를 저장해줄까 라는 생각도 해보았습니다. 스프링에서는 내부적으로 빈이 어떻게 주입이 되는지가 궁금합니다. ㅎㅎ!

  • spring
  • oop
형짱 댓글 3 좋아요 3 조회수 552

도메인에 대해서..

해결됨

스프링 핵심 원리 - 기본편

"도메인", "도메인모델"이라는 "뜻"과 "설명"이 저에게 아직 와 닫지 않아서 질문드릴게 있는데요!! 제가 이해한 도메인은... 예를들어 회원가입 이라는 소프트웨어를 만든다고 하면 가입, 수정, 탈퇴 등 단위적인 부분들을 도메인이라 부르고, 도메인 모델은... 가입, 수정, 탈퇴 등 기능과 데이터를 함꼐 보여주는 클래스 다이어그램으로 표현하는 부분들이 도메인 모델이라 부르나요? 자세한 설명 부탁드립니다.

  • oop
  • spring
이승환 댓글 1 좋아요 4 조회수 2961

영상 초반에 OrderApp 및 테스트 부분에서 질문 있습니다.

미해결

스프링 핵심 원리 - 기본편

초반에 OrderApp (및 테스트) 에서 궁금한게 있습니다. 1) MemberService의 구현체인 MemberServiceImpl 안의 MemberRepository 2) OrderService의 구현체인 OrderServiceImpl 안의 MemberRepository 1),2) 각각 다른 인스턴스의 MemberRepository를 가지는게 아닌가요? (new 연산으로 인해) memberService.join(member)는 1)의 MemberRepository에 save되는 거고, orderService.createOrder.createOrder()는 2)의 MemberRepository에서 member를 꺼내오는건데, member가 없으므로 npe가 나야하는게 아닌가 싶어서요! (제가 강의 중간에 놓친게 있는건가요 ㅠㅠ)

  • spring
  • oop
kts327 댓글 6 좋아요 9 조회수 593

인기 태그

인프런 TOP Writers

주간 인기글