스프링 프레임워크 핵심 기술

스프링 프레임워크 핵심 기술

(142개의 수강평)

2188명의 수강생
김준형 프로필

강의 내용 중 질문이 있습니다. 김준형 32분 전

안녕하세요 강사님!

강의 내용 중 특히 DB와 관련하여 일을 하는 Repository 객체들은 생성하는데 비용이 많이 든다고 말씀해주셨는데요.

찾아보니 WAS에서 DB에 접근하고 데이터를 가져오기까지 가장 비용이 많이 드는 부분이 DB에 최초로 연결되어 Connection 객체를 생성하는 부분이 비용이 많이 든다고 나오더라고요. 그렇기 때문에 Repository 객체들은 생성하는데 비용이 많이 든다고 말씀해주신 건가요?

그렇다면  DB에 최초로 연결되어 Connection 객체를 생성하는 부분이 비용이 많이 드는 이유는 무엇인가요?

비용과 관련된 이야기는 아직 와닿지가 않아서 이런 초보적인 질문을 남기게 되었습니다.

0
박용훈 프로필

ConversionService쓸때, WebApplicationType을 None으로 지정하면... 박용훈 4일 전

  제 컴퓨터 별로 좋지 않아서 일부러 webApplicationType을 None으로 지정하고 수업을 듣고 있습니다. 그러다 ConversionService를 추가하시고 실행시킬때가 있었는데 저는 에러가 발생하라구요. 이게 뭔가 해서 강사님처럼 다운그래이드(스프링 부트 버전)했었는데 알고 보니 webApplicationType을 None으로 지정하면 안되는 거였더라구여ㅎㅎ. 그것도 모르고.. 그래서 궁금한게 클래스에 Web이나  MVC혹은 web을 연상케하는 단어가 있다면 webApplicationType을 None으로 지정하면 안 되는건가요?

너무 당연한 문제라 생각이 들기도 하지만.... ㅎㅎ

2
허진호 프로필

MessageSource 응용 관련 질문 허진호 7일 전

안녕하세요 제가 스프링 공부를 최근에  시작해서 강의내용에 벗어나는 질문일 수도 있는데 MessageSource를 실서비스나 현업에서 어떻게 사용하는지 알고 싶어 질문드립니다.

간단한 예시정도 알 수 있을까요?

1
허진호 프로필

@Autowired required 설정 관련 질문입니다. 허진호 8일 전

아래 질문을 보고 나서도 이해가 되지 않아서 질문드립니다.

의존성 주입을 수동으로 할 거라면 required를 false로 설정하는 것이 아니라 @Autowired annotation을 사용하지 않아도 되는건가요?

@Autowired(required=false) 설정을 한것과 @Autowired를 아예 사용하지 않는 것의 차이를 잘 모르겠습니다.

감사합니다

1
Jae-yun Kim 프로필

JoinPoint의 개념이 명확히 잡히지가 않습니다. Jae-yun Kim 16일 전

안녕하세요~!

우선  좋은 강의 찍어주셔서 감사합니다. 유튜브도 잘 보고 있어요~!

바로 질문으로 넘어가자면  밑에 [스프링 AOP 학습 후 고찰입니다.]라는 질문에서는

JoinPoint가 @Before, @After .. 등의 Annotation이라고 언급을 한 부분에서 맞다고 하셨는데

https://docs.spring.io/spring/docs/4.3.12.RELEASE/spring-framework-reference/html/aop.html

스프링 공식 문서나 "스프링 철저 입문" 이라는 책에서는

@Before,@ After returning, @After throwing @After, @Around Annotation들을 모두 Advice 개념에 끼워 넣더라구요.

강의에서도 언급해주셨지만 JoinPoint를 이해 할 때 "PointCut이 JoinPoint의 부분집합(subset)이다"라는 개념으로 이해를 하면 될까요? 다양한 합류점들이 있지만 PointCut이 그것을 구체적으로 명시한다는 것으로 받아들여집니다.

또 그렇게 되면 Advice는 로직뿐만 아니라 그러한 로직을 어떻게 실행 할 지(before,after..) 컨트롤한다고 까지 생각을 하면 될까요?

말씀해주신데로 용어들의 개념이 어렵네요 ㅠㅠ

감사합니다.

2
terecal 프로필

몇가지 질문이여 terecal 1달 전

question1

이게 실행 흐름이 맞나여?

테스트 코드에서 /envent/{event} 과 같은 형식의으로 url 요청을 날림 => eventController에서 받음

=> 데이터 바인딩 설정에 의해 이벤트 에디터에 오버라이딩된 함수들중 setAsText가 실행됨 =>  id를 문자열로 바꿔서 리턴 -> 테스트 통과

question2(init 함수의 역할에 대해)

EventController 클래스의

@InitBinder 어노테이션이 적용된 

WebDataBinder 객체를 인자로 받는 (이런 형식은 그냥 스펙이고 문서에 나온 그대로 쓰는거져?) init 함수의 역할은 /envent/{event} 과 같은 형식의 url 요청에 대해  EventEditor 클래스의 오버라이딩된 함수들 즉 setAsText , getAsText가 자동으로 실행되도록 하는것인가여? 

question3

(EventEditor class의 setAsText, getAsText 함수의 실행 흐름과 데이터 바인딩의 의미에 대해 )

/envent/{event} 과 같은 형식의 url 요청에 대해  

EventEditor 클래스의 setAsText 함수가 실행되서  파라 미터로 넘어오는 1이 String 으로 받아져서 아래의 setAsTest(String text) 에서 인자 로 받아지면  그걸  인티저로 바꾸고 생성자를 이용해 이벤트 event.id로 세팅하면 이후 getAsText()가 실행되어  event.id를 문자열로 바꿔서 리턴하는건가여? 이때 굳이 문자열로 다시 바꾸는건 데이터 바인딩을 확인하기 위해서인가여?

즉 이번 강의의 데이터 바인딩이란  url 요청의 파라미터를  이벤트 클래스에 세팅하고 다시 겟하기 위한

도메인 클래스 설정+ init 함수 설정 + 이벤트에디터 함수의 오버라이딩된 setAsText 함수 설정을 말하는거져?

question4

event.getId().toString()하면  무엇이 리턴되는건가여? 문자열로 1이 리턴되는건가여?

즉 도메인 클래스에 아래처럼 toString() 함수를 설정해놓으면  객체.특정변수getter.toString 하면 그냥 해당 변수를 문자열로 변환해서 리턴해준다는거져? 

2
hp 프로필

MessageSource 구현체 hp 1달 전

안녕하세요.

MessageSource 구현체를 강의에서 사용한 ReloadableResourceBundleMessageSource가 아닌 ResourceBundleMessageSource를 사용하면 왜 NoSuchMessageException이 날까요?

@Bean
public MessageSource messageSource() {
var messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasenames("classpath:/messages");

return messageSource;
}

강의에서 처럼 이렇게 빈을 등록해주면 정상적으로 메시지가 출력되는데

var messageSource = new ResourceBundleMessageSource();

이렇게 구현체를 바꾸기만 하면 NoSuchMessageException이 나네요

왜 프로퍼티에서 메시지를 못읽는건지 궁금합니다

감사합니다.

-----------------------------------------

이것저것 해보다가 해결 방법은 찾았습니다.

@Bean
public MessageSource messageSource() {
var messageSource = new ResourceBundleMessageSource();
messageSource.setBasenames("messages");

return messageSource;
}

setBasenames()에 저렇게 넘겨주면 메시지가 정상적으로 출력이 되더라구요

왜 ReloadableResourceBundleMessageSource를 사용할때와 달리 classpath:/를 붙이면 안되는건가요?

1
윤홍찬 프로필

세 가지 질문이 있습니다. 윤홍찬 1달 전

1. 강의 예제에서 BookService와 BookRepository 둘 다 Bean으로 관리하도록 했습니다. BookRepository는 BookService에서 사용하므로 Bean으로 관리해야 할 것 같은데, BookService를 Bean으로 관리하는 이유가 있을까요?

2. 강의의 예제에서 @Autowired를 사용해 BookRepository에 빈 객체가 주입된 경우 @PostConstruct Annotation이 있는 메소드가 실행되는 건가요?

3. 만약 의존성을 여러 번 주입해야 한다면, @PostConstruct 이 설정된 메소드는 언제 실행되나요?

1
kim종훈 프로필

상황에 맞는 에노테이션? kim종훈 1달 전

에노테이션들이 아래와 같이 있다고 하셨는데 각각 어떤 의미가 있어서 어떤 상황에 써야하나요?
@Component
@Repository
@Service
@Controller
@Configuration

2
elmo7180 프로필

강사님 @Primary 관련 질문입니다. elmo7180 1달 전

@Primary 를 이용해서 빈이 여러개일때 우선주입 받는걸 추천하신다고 하셨는데 그러면 빈을 굳이 여러개 만들 이유가 있나요... 전 설명을 듣고Qualifier 쪽이 더 유용하겠구나 싶었는데 Primary 를 추천하신 이유가 궁금합니다.

제 생각엔 어차피 interface 구현클래스라서 다 타입 safe하지 않을까 싶었는데 ... 

1
pjok1122 프로필

NoSuchMessageException이 뜹니다.. pjok1122 2달 전

며칠째 원인을 모르겠어서 이렇게 질문 드립니다.

[프로젝트 폴더 구조]

프로젝트 구조

[ 소스코드 ]

@Component
public class AppRunner implements ApplicationRunner {

	@Autowired
	MessageSource messageSource;
	
	@Override
	public void run(ApplicationArguments args) throws Exception {
		System.out.println(messageSource.getClass());
		System.out.println(messageSource.getMessage("code", new String[] {"yj"} , Locale.KOREA));
	}

}

[ messages_ko_KR.properties ]

code = hi {0}

messageSource의 클래스를 찍어봤을 때는  DelegatingMessageSource로 찍힙니다.

[ getMessage() 메서드 호출시 발생하는 예외 ]

왜 동작을 안하는 걸까요.. 

1
gyuyoung park 프로필

공부한 것들 정리해서 블로깅해도 되나요? gyuyoung park 2달 전

출처 밝힌 뒤에, 공부한 내용들이나 코드들 따로 재구성해서 블로깅해도 되나요? 

ps:유튜브 너무 잘보고 있어요!

2
빈센트 프로필

스프링 공부방법 빈센트 2달 전

안녕하세요. 스프링 공부방법 문의드립니다.

새로운 기술을 접할때 공식 문서를 선호하는 편입니다.

스프링 공부를 위해 공식문서를 처음부터 끝까지 보려했으나 너무 어려워 백기선님의 강의를 수강하고 있습니다. 현재 회사에서 Spring 이용한 웹서비스를 유지보수하고 있는데 부트도 아니고 JPA 아니라서 스프링 핵심강의 > MVC > RestAPI 순으로 들으려고 하고 있습니다. 그런데 강의만으로는 깊이가 없는것 같아 핵심강의 강좌가 끝나면 스프링을 자세히 공부하고 싶은데요, 스프링 공식문서(Core파트) 봐야할지 토비스프링을 봐야할지 모르겠습니다. 어떤방법이 좋을까요?

  1. 스프링 레퍼런스(core) 본다.
  2. 토비 스프링 책을 본다.
  3. 공부를 따로 하지말고 MVC, RestAPI강의를 듣고 실전에서 코딩하며 필요할때 찾아본다.

1
jin3670 프로필

PropertyEditorSupport 관련 질문드립니다. jin3670 2달 전

안녕하세요. 2년차 개발자 임진욱입니다.

강의 감사하게 잘 듣고 있습니다.

강의를 듣고 실습 중 propertyEditor Binding을 따로 하지 않아도 정상적으로 동작하여, 검색 결과  

Standard JavaBeans infrastructure will automatically discover PropertyEditor classes if they are in the same package as the class they handle. Also, these need to have the same name as that class plus the Editor suffix.

https://www.baeldung.com/spring-mvc-custom-property-editor

같은 패키지 내부에 클래스명 + Editor suppix가 붙으면 자동으로 property Editor 바인딩이 되는 것을 찾았습니다.

강의 자료에는 클래스 명이 EventPropertyEditor로 되어 있는데, 영상에는 EventEditor로 하여서, 저와 비슷한 혼란을 갖는 분이 없기를 생각해서 질문 등록하였습니다!

추가적으로 저는 소스코드가 어떻게 동작하는지 명확하게 알고 싶은데, 장벽에 막혀 흐지부지하게 되는 경우가 많은 것같습니다.

이번에도 따로 바이딩을 해주지 않는데 정상적으로 동작하지 않아서 디버깅도 해봤는데, url 호출시 propertyEditor클래스 즉,영상내 예시인 EventEditor의 setAsText 메서드로 바로 이동하는 것을 보았습니다. 

스프링 내부에서 이런것을 처리해주구나.. 하면 되는데 그런 코드가 어딨는지 궁금할 경우, 어떻게 공부를 해야할지 아님 Auto property Editor binding을 해준다니, 해주겠지.. 하고 받아들여야하는지 궁금합니다.

유투브 영상이나 인프런 강의 잘듣고있습니다.

감사합니다.

1
Painkiller 프로필

스프링 AOP 학습 후 고찰입니다. Painkiller 2달 전

안녕하세요.

관점지향프로그래밍에서 스프링 AOP를 사용한다면

Aspect, Target, Advice, Join point, Pointcut에 대한 이해가 필요함에 따라 각각의 의미를 강의를 통해 이해한데로 적어봅니다.

'EventService'를 구현한 클래스 'SimpleEventService'가 있고 create(), publish(), delete() 총 3개의 메소드를 재정의 한 상황에서 각각의 메소드 실행시 '성능에 대한 로그(공통관심사)'를 출력해야 할 때

이를 AOP 주요 개념으로 해석해 보면 ,

Aspect(모듈) - 공통관심사'들'을 정의해 놓은 Class,  강의에서는 'PrefAspect' Bean.

Target - 공통관심사가 적용이 될 대상(* 프로젝트에 존재하는 모든 Class는 타겟이 될 수 있는 것인지 궁금합니다.)

Advice - 모듈(Aspect) 안에서 정의된 공통관심사(로그),  강의에서는 'PrefAspect' bean의 'logPref'() 또는 'hello()'

Pointcut - 공통관심사가 적용이 될 위치,  Target(Class)에 대한 특정 행위(Method)의 실행 시점을 의미

Joinpoint -  합류점,  가령 'SimpleEventService'의 특정 메소드 실행 전, 실행 후 등..(@Before, @Around와 같은 어노테이션을 의미)

제가 생각한 개념이 맞는지 조언 부탁드립니다.

(AOP는 반복학습을 해야겠습니다.)

미리 답변 감사드립니다.

1
지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스