1. 의존관계 주입 응용 스프링이 제공하는 기능의 99%는 DI 의 혜택을 이용하고 있다. DI 없이는 스프링도 없다. DI 의 장점이 드러나는 몇 가지 응용 사례를 알아보자. 먼저 데이터베이스 관련 개발을 하고 있다고 해보자. 보통 개발환경과 운영환경이 나뉘어져 있어 데이터베이스도 개발 DB와 운영 DB가 나뉘어있을 것이다. 만약 DI 를 사용하지 않고 DAO 코드에서 DB 연결 클래스를 직접 new 로 생성해서 사용했다면 엄청난 수정과정을 거쳐야 한다. DI 는 이 문제를 깔끔하게 해결해준다. 모든 DAO 는 생성 시점에 ConnectionMaker 타입의 오브젝트를 컨테이너로부터 제공받는다. 구체적인 사용 클래스 이름은 컨테이너가 사용할 설정 정보에 들어있다. 개발 DB 를 사용한다고 하면 아래와 ..
1. 싱글톤 레지스트리 앞서 직접 만들었던 오브젝트 팩토리와 스프링의 애플리케이션 컨텍스트 사이에는 큰 차이가 있다. 바로 싱글톤 객체라는 부분이다. DaoFactory의 userDao() 메소드는 호출할 때마다 new 연산자를 통해 오브젝트를 생성하도록 되어있다. 즉, userDao() 메소드를 통해 얻는 오브젝트는 매번 새롭게 생성된다는 것이다. DaoFactory factory = new DaoFactory(); UserDao dao1 = factory.userDao(); UserDao dao2 = factory.userDao(); System.out.println(dao1); System.out.println(dao2); springbook.dao.UserDao@11111111 springbook..
지금까지 DAO 코드를 개선해온 과정을 프로그래밍 이론의 관점에서 한 번 더 생각해보자. 1. 개방 폐쇄 원칙(OCP, Open-Closed Principle) 클래스나 모듈은 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다는 원칙이다. 앞서 구현한 UserDao 는 DB 연결 방법 기능을 확장하는 데에는 열려 있다. 동시에 UserDao 자신의 핵심 기능을 구현한 코드는 변화에 영향을 받지 않고 유지된다. 그러므로 개방 폐쇄 원칙을 지킨다고 말할 수 있다. 2. 전략 패턴(Strategy Pattern) 전략 패턴은 자신의 기능 맥락에서 필요에 따라 변경이 필요한 알고리즘을 인터페이스를 통해 통째로 외부로 분리시키고, 이를 구현한 구체적인 알고리즘 클래스로 필요에 따라 바꿔서 사용할 수 있게 하는..
앞서 클래스 상속을 통해 관심사 분리를 했었다. 이번에는 서브 클래스가 아닌 아예 독립된 클래스로 분리해보자. DB 커넥션 생성 기능을 전담하는 SimpleConnectionMaker 클래스를 만든다. public class SimpleConnectionMaker { public Connection makeNewConnection() throws ClassNotFouncException, SQLException { Class.forName(“com.mysql.jdbc.Driver”); Connection c = DriverManager.getConnection(“jdbc:mysql://localhost/springbook”, “spring”, “book”); return c; } } 그리고 UserDao..
먼저 사용자 정보를 저장할 User 클래스를 만들어보자. package springbook.user.domain; public class User { String id; String name; String password; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName() { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.passwor..
안녕하세요. 요즘 JVM Garbage Collector 에 대해 공부를 하면서 GC 알고리즘에 대해 알게되었는데요. 그러다 문득 JVM 버전마다 기본 GC 알고리즘이 무엇인지 궁금해졌어요. 그래서 구글링을 열심히 해보았는데 오라클 공식사이트에는 제대로 된 내용이 잘 안보이더라구요. 스택오버플로에서 정리해준 내용이 있긴 하지만 직접 눈으로 봐야 속이 시원하기 때문에 제 노트북 콘솔에서 확인해보려해요. 1. Hotspot JVM 설치 우선 오라클 홈페이지에서 Jdk 를 버전별로 다운받았어요. 그리고나서 각 Jdk 를 설치해주었어요. 설치를 완료하고나니 C:\Program Files\Java 경로에 아래처럼 폴더가 생겼어요. jdk 폴더를 기준으로 JVM GC 알고리즘을 확인해볼게요. 2. Hotspot J..
1. JVM 이란 Java Virtual Machine 은 하나의 개념, 즉 스펙이다. 정확한 설계도가 있는 것이 아닌 이렇게 해야 한다는 표준화된 정의만 존재한다. 그래서 JVM 벤더사들마다 이러한 표준에 맞게 자신들의 방식으로 엔진을 개발한다. 유명한 JVM 벤더사로는 Oracle, IBM 등이 있다. 2. JVM 구조 JVM 은 스펙이란 것을 알았으니 이 설계 스펙에 대해 알아보자. Java Source : 사용자가 작성한 Java 코드이다. (확장자 .java) Java Compiler : Java Source 파일을 JVM이 해석할 수 있는 Java Byte Code로 변경한다. Java Byte Code : Java Compiler에 의해 수행될 결과물이다. (확장자 .class) Class ..
스프링 배치를 실행하면 Job이 자동 실행되는 부분이 있었다. 내가 정한 시간에만 실행을 시키고 싶어서 자동 실행을 막으려고 구글링을 하다가 아래 페이지를 찾게 되었다. https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/autoconfigure/batch/BatchAutoConfiguration.html BatchAutoConfiguration (Spring Boot 3.1.1 API) Auto-configuration for Spring Batch. If a single job is found in the context, it will be executed on startup. Disable this behavior..