본문 바로가기

WEB

(18)
토비2 1.5 프로필 xml파일을 통한 프로필 설정 서버를 실행할 떄 터미널에 -Dspring.profiles.active=dev 라고 하게되면 개발전용 설정으로 작성한 프로필이 사용된다. 클래스를 이용한 프로파일 적용 package study.tobi.ioc.bean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; @Configuration public class AppConfig { @Bean void userDao(){ } @Configuration @Profile("s..
토비2 1.3 의존성 주입방법 1. @Autowired 1-1 필드 주입 public class Hello{ @Autowired private Printer printer; } 1-2 메서드 주입 public class Hello{ private Printer printer; @Autowired public void setPrinter(Printer printer){ this.printer = printer; } } 1-3 생성자 주입 public class BasSqlService implements SqlService{ protected SqlReader sqlReader; protected SqlRegistry sqlRegistry; @Autowired public BasSqlService(SqlReader sqlReader, ..
토비2 1.2 ioc/di를 위한 빈 설정 메타정보 작성 XML, 애노테이션, 자바 코드로 작성된 빈 설정 정보가 전용 리더를 통해 읽혀져서 BeanDefinition 타입의 오브젝트로 변환된다. 그 정보를 IOC컨테이너가 활용한다. 빈 등록 방법 1.1 XML 1.2 XML:네임스페이스와 전용 태그 이 코드는 개발자가 작성한 코드가 아니라 스프링이 제공해주는 코드를 class정보에 작성한다. 네임스페이스와 전용 태그를 사용하면 다음과 같이 줄일 수 있다. 2. @Component 애노테이션 @Component public class AnnotatedHello{ } @Test public void 컴포넌트빈주입테스트(){ ApplicationContext ctx = new AnnotationConfigApplicationContext( "study.tobi.i..
토비의 스프링 7.6 스프링 3.1의 DI 이전에는 XML코드로 빈들을 관리했다. 이제는 스프링 3.1을 이용하여 자바코드로 빈들을 관리하려고 한다. applicationContext.xml @Configuration 빈들을 등록하기 위한 클래스라는 것을 알리는 애노테이션이다. @Configuration이 붙은 클래스 자체도 빈으로 등록된다. @Import 빈 설정을 위한 @Configuration클래스를 포함하기 위해서 사용한다. @PropertySource database.properties 파일의 property정보를 가져온다. @Value 애노테이션을 이용해서 변수에 넣어주고 db에 적용하기 위해서 사용한다. AppContext @Configuration @EnableTransactionManagement @Import({SqlServic..
토비의 스프링 7.5.2 트랜잭션 적용하기 transactionUpdateTest를 통해서 테스트코드에 트랜잭션을 적용하려고 한다. 격리레벨은 read committed로 설정하고 sqlRegistrySchema.sql에서 읽어온 정보를 db에 빌드하고 db변수에 registry를 담은 후에 map 객체에 sql1, sql2, sql3.. 이런 식으로 담고 변경중에 에러가 터지면 롤백처리를 한다. transactionTemplate.execute(new TransactionCallbackWithoutResult() { protected void doInTransactionWithoutResult(TransactionStatus status) { for(Map.Entry entry : sqlmap.entrySet()) { updateSql(entr..
토비의 스프링 7.5 DI를 이용해 다양한 구현 방법 적용하기 데이터베이스에 관련된 로직을 실행할 때 읽기전용이라면 동시성 문제가 발생하지 않는다. 하지만 수정할 때는 동시성 문제가 발생할 수 있기 때문에 ConcurrentHashMap을 이용해서 여러개의 map을 하나의 메서드에서 실행시킬 때 동시성 문제를 해결할 수 있다. ConcurrentHashMap public class ConcurrentHashMapSqlRegistry implements UpdatableSqlRegistry { private Map sqlMap = new ConcurrentHashMap(); public String findSql(String key) throws SqlNotFoundException { String sql = sqlMap.get(key); if (sql == null..
토비 스프링 7.2 인터페이스의 분리와 자기참조 빈 xml파일을 자바오브젝트로 변환하려고 한다. jaxb(Java Architecture for Xml Binding) 을 이용해서 구현한다. 자바 17에서는 jaxb를 지원하지 않기 때문에 자바 1.8버전의 bin폴더를 찾아가서 sqlmap.xsd파일을 복사한후에 실행시켰다. 마샬링 java object to xml 언마샬링 xml to java object sqlmap.xsd 자바 8 버전의 bin폴더를 찾아가서 xjc.exe 파일이 존재하는지 확인한다. sqlmap.xsd 명령을 실행한다. bin폴더 하위에 java object가 생성된다. 이 파일들을 옮겨서 사용했다.
토비의 스프링 7.1 SQL과 DAO의 분리 현재 UserDaoJdbc에 db에 관련된 sql이 문자열로 남겨져있다. 이 부분을 인터페이스와 xml을 이용해서 분리하려고 한다. SqlService라는 인터페이스를 만들고 SimpleSqlService에서 getSql을 오버라이드하고 map필드를 만들어둔다. xml로 map을 주입받으면 sql과 dao의 코드가 분리된다. package spring.sql; public interface SqlService { String getSql(String key); } package spring.sql; import java.util.Map; public class SimpleSqlService implements SqlService{ private Map sqlMap; public void setSqlMap..