묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
Car 인터페이스에 대해 질문이 있습니다
안녕하세요 선생님 귀중한 강의 너무 잘 듣고있습니다 감사합니다. 한 가지 궁금한 점은 예시에서 설명해주신 자동차를 인터페이스로 구현하면 엑셀, 브레이크 등 자동차의 기능적인 측면의 것들이 선언될 것이라고 생각합니다. 기능이 아닌 자동차의 상태적인 측면(색깔, 경유차/휘발유차/전기차, 4륜/후륜 등)을 생각했을 때, 공통적인 속성들을 상속하는 구조가 좋을 것으로 생각하는데 그럼 실제 코드로 구현한다고 하면 Car라는 공통 속성들이 정의된 부모클래스에 엑셀, 브레이크 등이 선언된 인터페이스, 그 외에 다양한 기능들이 정의된 또 다른 인터페이스들이 implements 되고 Car 클래스를 K3, Avante 등의 클래스에서 extends 해서 엑셀, 브레이크 등의 메서드를 오버라이딩 한다고 생각해야 하는건가요 ?? 그런식이라면 애초에 Car를 추상클래스로 선언해야하는건가요 ?? 헷갈리네요. 즉, 인터페이스로 역할을 정의할 때, 속성에 관련된 측면들은 어떻게 처리되어야하는지 궁금합니다. 감사합니다
-
미해결스프링 핵심 원리 - 기본편
운영 환경에 올리려면 어떤 환경을 구성해야 되나요?
개발 환경 이후 실제 운영 웹서버에 올리고 실행하려면 어떤 환경을 구성해야 되는지요?
-
미해결스프링 핵심 원리 - 기본편
디자인패턴강의 응원합니다. @@
😄😄😄😄😄
-
해결됨스프링 핵심 원리 - 기본편
@PostConstruct , @PreDestroy
안녕하세요~ 강의내용 중 궁금한점이 있습니다. MyLogger가 http request가 있을때만 생성이되기 때문에, @Component@Scope(value = "request")public class MyLogger Provider 로 먼저 생성시 매핑해준다는 내용은 이해했습니다. 그럼 맨처음 스프링 의존관계 주입이 일어날때도, @PostConstruct init() , @PreoDestroy close() 가 동작해야 될거같은데, 웹에서 요청보내기 전 빌드만 했을때는 해당 로그가 찍히지 않아서요. 해당부분이 궁금합니다~ 항상 감사합니다!
-
해결됨스프링 핵심 원리 - 기본편
인텔리제이 커뮤니티에서 콘솔 색상 입히는 방법
커뮤니티 버전에서도 콘솔에 색상 입히는 방법입니다. 며칠 전에 어떤 수강생 분이 질문하셔서 얼티메이트vs커뮤니티 비교해서 답변 달았었는데 삭제 됐네요 ^^; 공부하다 알게되서 공유합니다 ~ ------------------------------------ application.properties spring.output.ansi.enabled=always ------------------------------------
-
해결됨스프링 핵심 원리 - 기본편
강의 로드맵 관련해서 궁금합니다.
스프링을 처음 시작하는거라 스프링 입문강의를 다 보고나서 <스프링 핵심원리-기본편> 강의를 들으려고 하는중인데 얼마 전에 스프링MVC 1편-백엔드 강의가 오픈되었더라구요. 새로 나온 강의는 이 강의를 듣고 난 후에 수강하면 좋은 강의인가요??
-
해결됨스프링 핵심 원리 - 기본편
DI 활용한 시뮬레이션 관해 질문드립니다.
안녕하세요. 좋은 강의 열심히 듣고 있는 수강생입니다. 현직에서 절차지향 베이스 프로그램에 개발을 맡고있으며, 스프링 및 객체지향에도 관심이 있어 수강 중입니다. 강의를 수강하며 나름대로 C → Java Spring Framwork 로의 번역(?) 작업을 하는 걸로 독학하고 있습니다. 강의와 약간 동떨어져 보여질 수 있지만 질문 드립니다. Business 1) 잔액 충전 → 구매 → 잔액 조회 위와 같은 비즈니스가 있을 때, 각각의 서비스에서는 각각 그 DB값을 바라보게 설계되어 있습니다. 충전에서는 잔액을 Update 하고 종료. 구매에서는 잔액을 감액, Update 하고 종료. 최종 남은 잔액 조회. Business 2) (잔액에 100원 더 충전했다 치고) → 구매하면 → 잔액 조회 시뮬레이션 위와 같은 가상의 확인 작업이 필요하다고 할 때, 실제 DB값을 Update 할 수 없기에 휘발성 메모리 값으로 처리가 필요해보입니다. 배운 내용을 종합적으로 대입해봤을 때, Business 2 에서의 시뮬레이션에서는 ① 운영DB의 잔액을 메모리로 카피 한다음 ② 카피한 객체를 ( MemoryRepository 같은 느낌으로 ) DI 해주는 것으로 기존 서비스 로직에 수정없이 진행할 수 있을 것 같은데요. 1. 위와 같은 해결방법이 흔히 사용하는 방법인지? 2. 카피해야 하는 운영DB의 잔액 테이블이 다수일 경우, ( 충전의 경우 100개의 테이블이 변경 되며, 최종 잔액 조회시 모두의 값이 필요하다.) <Business 2>를 위해 100개의 테이블 값을 휘발성 메모리로 띄워 주입하는 방법뿐일지? 질문 드립니다. 장황하고 강의와 동떨어져 보여 죄송합니다. 좋은 강의 진심으로 깊은 감사드립니다.
-
미해결스프링 핵심 원리 - 기본편
의존관계 자동 주입 - 조회한 빈이 모두 필요할 때, List, Map
안녕하세요 영한님 제목에 있는 강의를 듣던 도중 궁금 한 것이 생겨 질문 남깁니다. 다름이아니라 아래와 같이 코드를 구성하였을 때 DiscountService는 AnnotationConfigApplicationContext에 넣어줌으로써 Bean으로 등록 된다는 것은 이해가 됩니다. 하지만 DiscountService 클래스에 있는 policyMap 과policyList는 제 생각으로는 아무것도 등록이 안되어있는 것이 맞을 텐데 어떻게 FixDiscountpolicy와 RateDiscountPolicy가 들어가는지 이해가 잘 되지 않습니다. 이 필드들은 각각 Map과 List이고 제네릭(?)만 DiscountPolicy 인데 스프링 컨테이너가 "음 Map 과 List 가 DiscountPolicy로 표현이 되었네? 그럼 내가 DiscountPolicy 타입으로 된 Bean이 있나? 아 ! AutoAppConfig에서 ComponentScan으로 해보니까 FixDiscountpolicy, RateDiscountPolicy가 있네? 그럼 그냥 이거 넣어야 겠다." 이런 메커니즘으로 동작하는 것인가요?
-
미해결스프링 핵심 원리 - 기본편
좋은강의 감사드립니다 . 질문이 있습니다 !
현재는 스프링 부트를 사용하지 않아서 AutoAppConfig를 따로 만들고 @ComponentScan @Configuration를 해준건가요 ? 실무로 들어간다면 스프링 부트를 활용하고 AutoAppConfig는 따로 만들어주지 않고 싱글톤유지는 다른방법으로 해결하고 개발 하게 되나요 ?? 항상 좋은강의 감사드립니다 !
-
미해결스프링 핵심 원리 - 기본편
@autowired 필드명, @qualifier 강의에서 OCP를 위반하는 것이 아닌지에 대해 질문이 있습니다
안녕하세요. 좋은 강의 감사드립니다. 다름이 아니라 @Autowired 필드명, @Qualifier, @Primary 강의에서 조회 된 빈이 2개 이상일 때 @Autowired 필드명 이나 @Qualifier, @Primary 등을 사용하여 해결한다고 배웠습니다. 궁금한 점을 먼저 써보면, 위와 같은 해결 방법을 사용 시에 기존 구현체 클래스에 직접적인 수정이 일어나는 것에 대해서 1.OCP를 위반하게 되는 것일까요? 2.만약 위반이 아니라면 왜 위반이 아닌지 궁금합니다. 3.위반이라면 또 다른 해결책이 있는지 궁금합니다. 자세한 상황은 이렇습니다. 강의에서 OrderServiceImpl.class 에서 생성자 주입을 통해 discountPolicy에 두 개의 빈이 찾아져버리므로, 특정 빈을 찾을 수 있도록 인자의 파라미터 이름을 수정해야했습니다. (@Autowired 필드명 방식) @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; } <OrderServiceImpl.class 수정 전> @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy rateDiscountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = rateDiscountPolicy; } <OrderServiceImpl.class 수정 후> 이것이 개방-폐쇠 원칙을 못지킨 것이 아닌가 하는 의문이 들었습니다. 이전에 같은 문제로 Component Scan 을 사용하지 않고 AppConfig.class에서 직접 수동으로 Bean을 생성하여 등록하는 과정에선 겹치는 빈이 있을 경우 AppConfig.class 내에서 해결 할 수 있었습니다.. 코드로 보자면 다음과 같습니다. (애초에 수동으로 빈을 등록하므로 애초에 두 개의 빈이 올라오지 않도록 빈을 안올려도 되며, 만약 두 개의 빈을 둘 다 올린다해도 아래와 같이 작성하면 의존성 주입 시 두 개의 빈 찾아져 오류가 생기는 일은 없을 것 같다고 생각합니다.) @Bean public DiscountPolicy discountPolicy() { //return new FixDiscountPolicy(); return new RateDiscountPolicy(); } 하지만 Component Scan, Component, Autowired를 사용할 땐 AppConfig.class에서 하던 것처럼 할 수는 없고, 직접 Impl 클래스에 변경을 해야하거나 @Quilifier 혹은 @Primary 어노테이션을 붙이기 위해 구현체의 클래스를 찾아가서 수정해줘야하는 것 같습니다. 바로 이 부분에 대해서, OCP를 위반하는 것인지 궁금합니다. 또한 만약 위반이 아니라면 왜 위반이 아닌지, 위반이라면 또 다른 해결책이 있는지 궁금합니다. 항상 좋은 강의, 명쾌한 강의, 속이 시원한 강의 해주셔서 너무나 감사드립니다. 강의 들으면서 속이 정말 뻥 뚫리는 느낌을 많이 받았습니다.
-
미해결스프링 핵심 원리 - 기본편
@ComponentScan 시 Singleton방식
안녕하세요! 강사님 다름이아니라 라이브코딩 도중 의문점이 생겨서 질문 남겨봅니다! 번거로우실텐데 죄송합니다 질문1. 강의에서 본것처럼 AppConfig.class 에서 @Configuration 이 붙지않으면 스프링 컨테이너가 스프링빈들을 전부 싱글톤 방식이 아닌 계속 인스턴스생성을하여 메모리 낭비가 되는 모습까지는 이해했습니다. 근데, AutoAppConfig.class에서 @ComponentScan 시에 @Configuration 애노테이션을 안붙여도 모든 Component들이 스캔 후 알아서 싱글톤방식으로 빈이 생성되는것을 test코드를 통해 확인했습니다! AutoAppConfig에서 컴포넌트 스캔 자체가 AppConfig같은 설정정보 없이도 @Component만을 탐색해서 빈을 등록하는거까지는 이해하고는 있는데 왜 @Configuration 애노테이션을 안붙여도 자동적으로 싱글톤방식으로 빈이 생성되는지 궁금합니다! 제가 뭘 놓치고 있는걸까요???
-
해결됨PHP 7+ 프로그래밍: 객체지향
PHP 리플렉션에 대한 질문입니다.
안녕하세요. PHP 리플렉션 강의를 듣고 난 후 궁금증이 생겨 질문드립니다. 리플렉션이라는 것은 특정 클래스에 대한 메터 정보를 알기위한 용도로만 사용하는 것(?)으로 이해를 했는데요. 실제로 '실무에서 많이 쓰일 것 같다.' 라기보다는 라이브리러리 또는 PHP 프레임워크들에 대한 분석을 진행할 때 정도로만 사용할 것 같은 생각이 들더라구요. 실무에서 중요도가 높은 기능인지 궁금합니다. 글 읽어주셔서 감사합니다.
-
해결됨스프링 핵심 원리 - 기본편
질문있습니다!
안녕하세요. 강의 듣다 궁금한 것이 있어 질문 드립니다. 입문자라 기본적인 것도 많이 모릅니다. ㅠ public class ApplicationContextExtendsFindTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); @Test @DisplayName("부모 타입으로 조회시 자식이 둘 이상 있으면, 중복 오류가 발생한다") void findBeanByParentTypeDuplicate() { assertThrows(NoUniqueBeanDefinitionException.class, ()->ac.getBean(DiscountPolicy.class)); } ...... @Configuration static class TestConfig { @Bean public DiscountPolicy rateDiscountPolicy() { return new RateDiscountPolicy(); } @Bean public DiscountPolicy fixDiscountPolicy() { return new FixDiscountPolicy(); } } } 이 테스트 클래스에서는 테스트용(?) 클래스?? 만들때 @Configuration 을 사용했는데 아래 테스트 클래스에서도 테스트용 클래스를 만드는데 @Configuration을 사용하지 않아서 궁금합니다. class StatefulServiceTest { @Test void statefulServiceSingleton() { ApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); StatefulService statefulService1 = ac.getBean(StatefulService.class); StatefulService statefulService2 = ac.getBean(StatefulService.class); //ThreadA: A사용자 10000원 주문 int userAprice = statefulService1.order("userA", 10000); //ThreadB: B사용자 20000원 주문 int userBprice = statefulService2.order("userB", 20000); //ThreadA: 사용자A 주문 금액 조회 // int price = statefulService1.getPrice(); System.out.println("price = " + userAprice); // Assertions.assertThat(statefulService1.getPrice()).isEqualTo(20000); } static class TestConfig { @Bean public StatefulService statefulService() { return new StatefulService(); } } } 좋은강의 감사합니다. 열심히 배우고 있습니다!!
-
미해결자바스크립트 비기너: 튼튼한 기본 만들기
console.log((5*10 % (2*2.3*10))/10); 에서 2를 왜 곱하나요?
[3:28] 강의에서 console.log((5*10 % (2*2.3*10))/10); 와 console.log((5*10 % (2.3*10))/10); 의 결과가 모두 0.4가 나옵니다. 제 생각엔 2를 곱하지 않아야 할 것 같은데요, 어차피 나머지를 구하는 것이니 2를 곱해도 결과가 같을 것이기 때문에 곱하신 건가요?
-
해결됨스프링 핵심 원리 - 기본편
인터페이스와 구현체의 패키지 관련 질문입니다
안녕하세요. 영한님. 복슴겸 해서 강의를 다시보다 궁금한 점이 있어 질문드립니다. 강의에서 member 패키지에 MemoryRepository 인터페이스를 작성하셨고 해당 인터페이스의 구현체는 다른 패키지에 작성하는게 좋다고 말씀하셨는데요, 실제 개발하실 때 어떠한 패키지명으로 구조화 하시는지 알 수 있을까요? hello.core.member에 인터페이스와 구현체 코드가 다 들어가 있는데 어떻게 패키지를 세분화 하시는지 궁금하네요! 사실 별거 아닌 간단한 질문일 수 있는데, MVC 강좌 진행 사항을 여쭙기 위한 build-up입니다.ㅎㅎㅎ MVC 강의 기대됩니다 😎
-
미해결스프링 핵심 원리 - 기본편
안녕하세요! 강의 중 필드 인잭션이 테스트가 어려운 경우가 헷갈려서 질문 남깁니다!!
안녕하세요 갓영한님 항상 강의 재밌고 유익하게 잘 보고 있습니다! 강의를 보고 "필드 인잭션은 외부에서 변경이 불가능하여 테스트하기 매우 어렵다"라고 이해했는데요! 이 경우가 테스트 할 때 1. 스프링 컨테이너를 띄워 테스트를 하는 경우인가요? 아니면 2. 순수 자바 코드로만 테스트를 하는 경우 인가요? 저는 2번인 경우로 이해를 했고, 예를 들면 Service 인터페이스에 구현체1, 구현체2 두 개의 클래스가 존재할 때 원하는 구현체로 테스트하기 어렵다는 것인지 궁금합니다 강의 너무 잘 설명 해주셨는데 정리가 잘 안돼서 질문 남깁니다 ^^ 감사합니다~
-
미해결스프링 핵심 원리 - 기본편
회원 도메인 개발 implements 관련
MemoryMemberRepository에서 MemberRepository를 implements 하는 과정에서 err 가 나올 때 저는 윈도우여서 art+enter 눌렀는데 change extend만 나오더라구요 그래서 영상에 나온 코드를 다 작성했는데도 동일한 err만 계속 나오면 어떻게 해결해야 implements method가 잘생성될 수 있을까요?
-
미해결스프링 핵심 원리 - 기본편
설계할 때 쓰는 툴?
안녕하세요 강의 잘듣고있습니다. 강의를 보다 문득 궁금해졌는데 영한님은 도메인 설계, 클래스 다이어그램, DB ERD 등을 만들 때 어떤 툴을 쓰시나요??
-
해결됨자바스크립트 비기너: 튼튼한 기본 만들기
인스턴스 생성 가능 여부 기준에 대하여.
prototype 값 존재 여부가 인스턴스 생성 가능 여부를 결정한다고 설명하셨는데 다음과 같은 코드가 동작하는 이유는 무엇인가요? function Test() {}; Test.prototype = undefined; var t = new Test(); // 객체 생성 console.log(t); // 객체 출력
-
해결됨자바스크립트 비기너: 튼튼한 기본 만들기
스펙 타입에 대해서 질문이 있습니다.
따로 구글에서 스펙 타입이라고 검색해도 문서가 나오지 않아서 그런데, 혹시 관련하여 더 공부해 볼 수 있는 문서(혹은 공식 문서)를 찾으려면 어떤 단어를 키워드로 검색해야 할까요? javascript spec type 이나 document type 이라고 쳐도 PPT에서 보여준 타입 관련 내용이 없어서 문의 드립니다.