Posts
Q&A
서블릿 생성 시점과 역할 관련 질문입니다!
안녕하세요. 지나가다가 저도 고민했던 부분이라 생각을 공유해보고 싶습니다! 2. 웹 애플리케이션 서버에서 서블릿 객체를 받아 HTTP 응답 메시지를 생성하는 것이라고 생각했었습니다. 즉, 서블릿은 개발자가 만든 내용을 서블릿 객체로 만들고 가장 앞단에서 웹 애플리케이션 서버가 실제 브라우저에게 전송할 HTTP 응답 메시지를 만들어 응답하는게 아닌가 생각했어요 저의 의견이었습니당 ps 저와 비슷한 고민들을 하실 것 같아서 같이 스터디하면 어떨까 하여 인프런 스터디 공고 공유드립니다~ 관심 있으시면 연락주세요!!😁
- 5
- 2
- 1.9K
Q&A
@Transactional
감사합니다!!!
- 1
- 2
- 363
Q&A
엔티티설계질문입니다.
답변 정말 감사합니다!!!의문이 2가지 있습니다 1. 현재 양방향으로 대체한 것이 올바른 것인가요? 양방향으로 하여도 playlist 중심으로 하여, 외래키 참조를 설정한 것이 올바르다고 생각하거든요. 1 : N은 테이블의 외래키 참조가 1에 있기 때문에 헷갈리기 때문이죠 2. 객체는 능동적이어야 하며, playlist 기능은 playlist를 중심으로 하라고 하셨는데 이 말씀은 순수하게 기능적인 면에서 보았을 때 member, playlist, video의 기능을 각각 자기 중심적으로 개발하라는 말씀이신거죠? 회원조회의 기능이라면 member가 참조를 가지고 있는 것이 좋은 것이겠구요. 하지만 저는 회원조회 할 일이 없으니 그럴 필요가 없구요. 다만 playlist는 회원의 기능이 아닌 playlist의 기능이기 때문에 playlist가 중심이 되는 것 이구요 아!! 그리고 혹시 엔티티 설계나 테이블 설계 같은거 하실 때 그림은 어떤 툴을 사용하시나요?
- 1
- 3
- 484
Q&A
@ModelAttribute
답변 감사합니다. 추가 질문이 있습니다. 아래 두가지 케이스로 모두 했을 때 에러가 발생하지 않는데 이 부분 설명은 조금 길어지는 부분일까요? MVC강의에서 다뤄주실까요? public String updateItem(BookForm form) { public String updateItem(@ModelAttribute("boo") BookForm form) {
- 0
- 3
- 443
Q&A
단위 테스트, 통합 테스트에 대한 질문입니다.
추가 질문입니다. 테스트는 메서드 단위보다는 요구사항? 별로 하는게 좋다는 말도 들었는데 도메인 로직 테스트 시에는 메서드 별로 하는게 좋은건가요?
- 6
- 3
- 1.3K
Q&A
Jpql질문
답변 정말 감사합니다!!! 이렇게 길게 써주시다니 귣굳!! 한가지 이해가 안가는 부분이 있어요 테스트 코드로 검증한다고 하셨는데 이 부분은 해당 강의 목록에는 없는 것 같은데 이는 활용1편을 공부하면서 자연스레 이해가 되는 부분일까요?? 스프링 핵심원리도 봤는데 거기서는 DB테스트를 위주가 아니라서 테스트 코드로 검증하기 때문에 1번, 2번 질문의 단점이 해결 된다는게 이해가 될까말까 하네요 ㅎ.ㅎ 감사합니다!!
- 15
- 3
- 450
Q&A
TestBean 클래스의 자동 빈등록 이유
이해가 되었습니다!!! 감사합니다. 혼자 정리 다시 해보면서 확실히 이해하면 될 것 같아요!! 감사합니다!!
- 8
- 11
- 570
Q&A
TestBean 클래스의 자동 빈등록 이유
답변 감사합니당 자꾸 도돌이표 질문을 드리는 것 같아 죄송합니다 ㅜ.ㅜ 이해한게 맞는지 확인 부탁드립니다!!! AnnotationConfigApplicationContext빈의 용도는 이름 그대로 어노테이션으로 설정된 클래스를 읽어 컨테이너를 생성하고 컨테이너에 빈으로 등록하는 역할을 하는 것이고, TestBean에 @Configuration이 달려있지 않아도 동일하게 빈으로 등록을 해줍니다. 다만 @Bean이 클래스 내에 정의 되어 있다면 같이 빈으로 등록을 해주는 것이구요. 결국 생명주기?? 라고 해야할지 모르겠지만, 생명주기락고 한다면 크게 3가지로 **컨테이너 생성** -> **빈등록** -> **의존관계주입** 으로 생각합니다. AnnotationConfigApplicationContext는 BeanFactory의 하위 레벨이기 때문에 결국 컨테이너이고, 그렇기 때문에 new AnnotationConfigApplicationContext(TestBean.class)를 했을 때 TestBean에 @Configuration이 없지만, 컨테이너를 먼저 생성 후 TestBean을 등록을 할 수 있습니다. @Component는 3가지 생명 주기를 손쉽게 할 수 있게 해주는 것이구요. 다만, @Configuration이 없을 때의 단점은, 싱글톤이 보장되지 않는다는 것 이구요. 자바 왜냐하면, 결국 자바코드이기 때문에 아래와 같을 때 memberService()에 있는 return new MemberMemoryRepository(); 1번, memberRepository()에 있는 return new MemberMemoryRepository(); 1번 총 2번이 생성 되기 때문에 memberService()의 값과, memberRopository()의 값은 싱글톤이 아니게 된니다. public class AppConfig { @Bean public MemberService memberService() { System.out.println("AppConfig.memberService"); return new MemberServiceImpl(memberRepository()); } @Bean public MemberRepository memberRepository() { System.out.println("AppConfig.memberRepository"); } } 추가로 ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class);ac.getBean(...); 을 하는 행위를 해주는 것이 @Autowired 입니다. 감사합니다!!! 친철한 답변 감사합니다!!
- 8
- 11
- 570
Q&A
TestBean 클래스의 자동 빈등록 이유
결국 new AnnotationConfigApplicationContext(TestBean.class); 위의 코드가 **@Configuration**과 **@Bean**으로 등록 되어 있으면 등록된 빈 설정 정보를 가져오게 되는 것 이고, 없다면 위의 코드에서 빈으로 등록하게 되는 것이 맞는 건가요?
- 8
- 11
- 570
Q&A
TestBean 클래스의 자동 빈등록 이유
답변 감사합니다!!! 추가 질문이 있습니다. 먼저 예제는 아래와 같은 예제입니다. 1. TestBean에는 @Configuration이 없고, @Bean도 없습니다. 해당 예제는 주입할 스프링 빈이 없을 때 통과 시키기 위한 예제입니다. 하지만 이런 상황에 TestBean을 스프링 빈으로 등록하기 위해 new AnnotationConfigApplicationContext(TestBean.class); 위의 코드로 빈 등록을 한 것이라고 이해 되었습니다. 즉, TestBean 클래스에서 아무런 정보도 없지만 해당 코드로 인해 해당 클래스를 빈으로 등록할 수 있는 것 같습니다. 2. 만약 TestBean에 @Configuration이 달렸고, @Bean도 존재 하거나 @Component이 달렸을 때는 컨테이너가 생성될 때!!! 빈으로 등록하고, new AnnotationConfigApplicationContext(TestBean.class); 여기서는 등록된 정보를 가져오는 역할만 하는 것으로 보이는데 맞을까요? 즉, 1번일 때의 역할은 등록도 하고 설정정보를 가져오기도 하며, 2번 일 때는 설정정보만 가져오는 것으로 이해 되었습니다. 앗!! 혹시 오해 하시고, 더욱 자세한 답변을 주실까봐 남겨요 @Bean이 존재하는 클래스에 @Configuration이 있을 때와 없을 때의 차이는 강사님께서 답변 해주셔서 알고 있습니다 없어도 스프링 빈으로 등록은 되지만, 존재할 때는 싱글톤이 보장되지만, 없을 때는 보장되지 않는다!! public class AutowiredTest { @Test public void autowiredOption() { ApplicationContext ac = new AnnotationConfigApplicationContext(TestBean.class); TestBean bean = ac.getBean(TestBean.class); System.out.println("bean = " + bean); } static class TestBean { //호출 안됨 @Autowired(required = false) public void setNoBean1(Member member) { System.out.println("setNoBean1 = " + member); } //null 호출 @Autowired public void setNoBean2(@Nullable Member member) { System.out.println("setNoBean2 = " + member); } //Optional.empty 호출 @Autowired(required = false) public void setNoBean3(Optional member) { System.out.println("setNoBean3 = " + member); } } }
- 8
- 11
- 570