본문 바로가기

JAVA

(133)
스프링 부트 데이터 액세스 스프링 부트 데이터 액세스 SQL 데이터베이스 JDBC(Java Database Connectivity) 자바 데이터베이스 연결를 개발자가 일일이 코드 한줄 한줄 신경써서 처리하던 때가 있었다.알맞는 드라이브러르 내려받고 접속문자열을 매뉴얼에서 찾은 다음 연결을 맺고 끊음, SQL문, 결과, 트랜잭션, '결과세트를 객체로 변환'등 잡다한 일련의 과정을 손수 코딩했었다. 그후 캐스터(Castor)XML, 오브젝트 스토어(Object-Store), 하이버네이트(Hibernate)같은 ORM(Object Relational Mapping-객체 관계매핑) 프로엠워크가 잡다한 일을 대행하기 시작했다.개발자는 그저 도메인 클래스를 작성하고 DB 테이블과 매핑하는 XML파일만 만들면 되었다.그런데 서서히 이런 프레임..
스프링 부트 테스트 스프링 부트 테스트spring init --package=com.apress.spring -g=com.apress.spring -a=spring-boot -name=spring-boot -x pom.xml4.0.0 com.apress.springspring-boot0.0.1-SNAPSHOTjar spring-bootDemo project for Spring Boot org.springframework.bootspring-boot-starter-parent1.3.3.RELEASE UTF-81.8 org.springframework.bootspring-boot-starter org.springframework.bootspring-boot-starer-testtest org.springframework.boo..
스프링부트에서 스프링 초기 스프링 프레임워크는 XML 구성파일에 지나치게 의존했다.자바 5 출시 이후 자바클래스(애노테이션)로도 구성할 길이 열리면서 @Configuration(클래스에 선언) 및 @Bean(빈 인스턴스에 선언)으로 스프링 컨테이너를 구성하게 되었다.스프링 부트 역시 마찬가지로 XML파일이나 애노테이션으로 가능하다. XML 구성하기XML구성 파일이 여러 있으면 메인 애플리케이션에서 애노테이션 하나로 합칠수가 있다.각 XML 구성파일의 경로와 이름을 org.springframework.context.annotaion.ImportResource 애노테이션에 String 배열 형태로 넘기면된다. @ImportResouce는 스프링 3버전 이후로 지금껏 달라진게 없다.스프링 부트 앱에서는 리소스를 더 쉽게 임포트할 ..
인터페이스로 프로그래밍하기 #깨지기 쉬운 기반 클래스 문제1 깨지기 쉬운 기반 클래스 문제이제 결합도의 개념을 상속에 적용해 보자extends를 사용하는 구현 상속 관계에서는 파생클래스(자식 클래스)가 기반 클래스(부모 클래스)에 강하게 결합되며, 이런 강한 결합은 바람직하지 않다.디자이너들은 구현 상속으로 인한 강결합으로 인한 부작용을 설명하기 위해 '깨지지 쉬운 기반 클래스 문제'란 별칭을 붙였다. 이때 겉으로는 안전해 보이는 방식으로 기반 클래스를 수정했지만 파생 클래스가 잘못 작동하게 되는 경우가 왕왕 있기 때문에 '깨지지 쉬운'이라는 수식어가 붙게 되었다.기반 클래스는 기반 클래스만 따로 떨어뜨려 놓고 안전하게 수정할 수 없으며, 모든 파생 클래스를 함께 살펴보고 테스트해 보야야 한다.당연히 기반 클래스를 사용하는 객체뿐 아니라 파생 클래스를 사용하는 객..
인터페이스로 프로그래밍하기 #인터페이스 vs 클래스 인터페이스 관점에서 프로그래밍하는 것은 OO(object-oriented) 시스템의 기본 개념이며 GoF의 디자인 패턴은 이의 구체적인 예가 된다.보통 인터페이스를 사용하지 않고 extends 관계를 남용하고 있다. extends 키워드디자인 패턴은 크게 보면 구현상속(extends)을 인터페이스 상속(implements)으로 바꾸는 방법을 설명하고 있다. extends는 적절히 사용하면 값진 도구이지만 많은 개발자들이 남용하고 있다.extends와 같은 언어 기능은 분명 OO시스템 구현을 용이하게 해주지만,단순히 상속을 사용하는 것이 시스템을 객체 지향적으로 만들어주지는 않는다. OO언어를 사용하여 프로그래밍을 했다고 OO시스템이 되는 것이 아니다. 언어가 제공하는 기능을 목적에 맞게 사용해야 된다. ..
스프링과 스프링 부트 비교 스프링과 스프링 부트 비교 J2EE 웹 애플리케이션서블릿 2.4 명세와 메이븐 아키타입을 응용해서 J2EE 웹 애플리케이션을 작성mvn archetype:generate -DgroupId=com.apress.j2ee -DartifactId=simple-web-app -DarchetypeArtifactId=maven-archetype-webapp simple-web-app 폴더 구조가 생성 simple-web-app---pom.xml---src ---main ---resources ---webapp ---WEB-INF ---web.xml ---index.jsp pom.xmlcom.apress.j2eesimple-web-appwar 1.0-SNAPSHOTsimple-web-app Maven Webapphtt..
스프링 부트 작동원리 스프링 부트 작동원리 @SpringBootApplication org.springframework.boot.autoconfigure.SpringBootApplicatonpackage org.springframework.boot.autoconfigure; @Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(excludeFilters = {@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),@Filter(type = FilterType..
리포지터리와 모델구현(JPA 중심) 리포지터리와 모델구현(JPA 중심) 애그리거트를 어떤 저장소에 저장하느냐에 따라 리포지터리를 구현하는 방법이 다르기 때문에 모든 구현 기술을 대해 알아볼 수는 없다.도메인 모델과 리포지터리를 구현할 때 선호하는 기술을 꼽자면 JPA를 들 수 있다.데이터 보관소로 RDBMS를 사용할 때 객체 기반의 도메인 모델과 관계형 데이터 모델 간의 매핑을 처리하는 기술로 ORM 만한 것이 없다.다양한 ORM기술이 존재하지만, 자바의 ORM 표준인 JPA를 이용해서 리포지터리와 애그리거트를 구현하는 방법을 살펴보자 모듈위치리포지터리 인터페이스는 애그리거트와 같이 도메인 영역에 속하고, 리포지터리를 구현한 클래스는 인프라스트럭처 영역에 속한다. domain InfraModel ------> ModelRepository ..