Programming 95

스프링 웹 개발 입문(인프런 강의 요약). 2021-12-14

웹 서버에서 클라이언트에게 데이터를 전송하는 형태는 크게 정적 컨텐츠 전달 MVC와 템플릿 엔진의 동작 API의 전달 로 나뉘어 진다. 정적 컨텐츠 전달은 사용자가 url에 /hello-static.html 이라는 것을 요청하면 단순하게 우선 스프링은 스프링 컨테이너에 같은 이름의 컨트롤러(@라는 애너테이션이 붙은 것중 @Get Mapping 의 파라미터로 같은 이름이 있는지)가 있는지 확인 하고, 없으면, resources의 static이라는 파일에 같은 이름의 데이터가 있는지 확인하고, 있으면, 그대로 반환해준다. MVC는 model, view, controller 의 약자로, 사용자가 url에 hello-mvc 라는 걸 요청하면 스프링은 @Controller가 붙은 컨트롤러에서 구현된 클래스 중, ..

빈 라이프 사이클. InitializingBean, DiposableBean. 2021-11-29

우선 스프링 빈은 생명주기를 갖는다. 또 빈의 라이프 사이클은 스프링 컨테이너에 의해 관리받는다. 순서대로 빈 객체생성 -> 의존주입 -> 객체 초기화 -> 객체 소멸. 이런 주기를 갖는다. 모든 스프링 설정클래스에 의해 컨테이너에 등록되는 빈 객체는 위와같은 생명주기를 따른다. 컨테이너에 등록된 빈을 getBean() 메서드에 의해 사용가능한 기간은 초기화와 소멸 사이의 기간이다. 빈 객체의 소멸은 AnnotationConfigApplicationContext 클래스의 부모 클래스인 AbstractApplicationContext에 구현된 close() 메서드를 호출하면 된다. 그런데 이런 라이프사이클이 중요한 이유는 빈의 초기화와 소멸 단계에서 프로그램의 필요에 의해 수행되어야 하는 과정이 있을 경우..

@Component, 컴포넌트 스캔( 자동 스프링 빈 등록). 2021-11-23

우리는 그전까지는 @Configuration 애너테이션을 통해서 직접 스프링 설정 클래스를 작성해서 스프링 컨테이너에 등록하였다. 이 방법은 설정 클래스의 코드가 너무 길어진다는 단점이 있다. 앞 포스팅에서 설명했듯, @Autowired도 기존에는 생성자나 세터메서드 방식으로 의존 주입하던 방식에서 스프링에서 자동으로 의존 주입을 해준다. 그렇기때문에 설정 클래스의 코드가 더 간결해졌다. 이 @Component 애너테이션도 마찬가지이다. 이 애너테이션을 스프링 빈 객체로 등록하고자 하는 클래스에 붙이면, 스프링 설정클래스(@Configuration) 에서 등록할 필요 없이 스프링이 알아서 등록 해 준다. 예를 들면 기존에는, @Configuration public class AppCtx { @Bean p..

@Autowired의 스프링 빈 필수여부( null 값 전달.), 의존 자동주입과 수동주입의 우선순위. 2021-11-18

그런데 앞서 클래스에서 @Autowired로 주입하려는 객체가 스프링 컨테이너에 빈으로 등록되어 있지 않을 경우, 어떤 일이 일어날까? 우선 익셉션이 바로 난다. 우선 예시를 보여주기 위해서 가상의 FakeAutowired 클래스를 빈으로 등록하고, @Autowired를 통해 빈 설정클래스에 등록되어있지 않은 P라는 클래스를 맴버로 설정하였다. public class FakeAutowired { private practice p; //빈 에 등록되어있지 않은 객체 P. public FakeAutowired() { // TODO Auto-generated constructor stub } @Autowired public void setP(practice p) { this.p = p; } public voi..

의존 자동주입 할때 타입이 일치하는 빈 중 의존 주입할 대상 빈을 선택하는 방법: @Qualifer 이용법. 2021-11-12

그런데 의문점이 생길 것이다. 만약 @Autowired를 사용해서 의존 자동주입의 대상이 되는 빈을 컨테이너에서 찾을때, 컨테이너에 등록되어 있는 해당 타입과 일치하는 빈이 여러개이면 어떤 일이 일어날까? 우선 테스트를 해보자. @Configuration @Import(AppCtx2.class) public class AppCtx1 { @Bean public MemberDao memberdao() { MemberDao m=new MemberDao(); return m; } @Bean public MemberDao memberdao2() { MemberDao m=new MemberDao(); return m; } @Bean public MemberRegisterService mrsvc() { MemberR..

자동 의존 주입 @Autowired 의 실질적 적용 (세터 메서드, 필드). 2021-11-11

우선 처음부터 난관에 부딪혔는데, 이클립스에 메이븐 프로젝트를 import하는 과정에서 pom.xml 파일을 POM.xml 이렇게 대문자로 저장해서 처음엔 임포트가 되지 않았지만 해결했다. 우선 @Autowired는 일반 클래스에 의존 주입이 필요한 "필드" 나 "메서드"에 사용된다. 필드에는 지난 포스팅에서 보여줬듯이. public class MemberRegisterService { @Autowired private MemberDao memberdao; public MemberRegisterService(MemberDao memberdao) { this.memberdao = memberdao; } public MemberRegisterService() { // TODO Auto-generated co..

스프링 설정 클래스에서 @Autowired를 통한 자동 DI, 설정메서드(세터) 형식의 DI, 두개 이상의 설정 클래스로 스프링 컨테이너 만들기. 2021-10-22

스프링에서 DI 방식은 크게 생성자 주입 방식도 있고, 세터 메서드를 통해서 의존 주입도 가능하다. @Configuration public class AppCtx1 { @Bean public MemberDao memberdao() { MemberDao m=new MemberDao(); return m; } @Bean public MemberRegisterService mrsvc() { MemberRegisterService mrsvc=new MemberRegisterService(memberdao()); //생성자를 통한 DI return mrsvc; } @Bean public PasswordChangeService pcsvc() { PasswordChangeService pcsvc=new Passwor..

스프링의 역할: 객체 조립기(@Configuration)

지난 포스팅에서 자바 개발할때, 유지보수를 쉽게 하기 위해서 DI를 전담하고, 의존 대상이 되는 객체들을 미리 생성한 클래스인 Assembler를 만들었다. DI를(나중에 공부할 @AutoWired 를 통해 가능) 한 클래스 내에서 모두 처리할수 있고, 미리 의존대상이 되는 객체를 만들어놓기 때문에 유연한 개발이 가능하다. 그렇다면 이렇게 장황하게 객체 조립기에 대해 설명한 이유가 무엇일까? 눈치빠르면 바로 이해한다ㅋㅋ 바로 스프링은 객체 조립기의 기능을 제공한다는 것이다. 우선 스프링 컨테이너라는 것이 있는데, 여기에 스프링 설정클래스를 통해 등록된 빈 객체 들이 서로서로 DI를 자동으로 해주고, 또한 해당 객체가 필요할때마다 스프링 컨테이너(ApplicationContext)에 구현된 getBean ..

객체 조립기(Assembler)의 필요성. 2021-10-18

시작하기전에 간단히 설명하자면, 회원등록서비스, 비번변경서비스 등을 만들어서 Main 메서드에 실행하려 한다. public class Main { public static void main(String[] args) { // TODO Auto-generated method stub MemberDao memberdao=new MemberDao(); MemberRegisterService mrs=new MemberRegisterService(memberdao); PasswordChangeService pcs=new PasswordChangeService(memberdao); mrs.registermember(new Member(1,6429)); mrs.registermember(new Member(2,920..

자바 클래스 파일과 소스파일. 하나의 자바소스파일에 2개 이상의 클래스가 오는 경우. 2021-10-15

열심히 chap03의 회원등록 서비스를 만들던중 의문이 생겼다. 그 전에는 무심코 지나쳤던 것에대해 의문이 생겼던 것이다. 하나의 자바 파일에 몇개의 클래스를 정의할수 있을까? 제한은 없을까? 자바 소스파일(.java)와 실제로 만들어지는 클래스는 어떤 관계가 있을까? 란 궁금증이 생겼다. 바로 하나의 자바파일안에 두개 이상의 클래스를 만들수 있다는 사실을 난 이유도 모른체 무심코 알고리즘 풀때부터 계속 쓰고 있었다. 나는 이게 왜 성립되는지 알지 못했다. 그리고 컴파일 했을때, 이클립스나 인텔리제이에서는 별도의 class 로 나오는 것도 신기했다. 그래서 자바의 정석, 명품 자바 Essential 을 참고하니, 자바 소스파일에 작성가능한 클래스에 대해서 정확하게 알게되었다. 1.모든 자바 에플리케이션에..

Programming/JAVA 2021.10.15