Back-end/JAVA,Spring 70

eclipse-maven연동 m2e+wtp 사용시 ContextRoot 변경되는 문제 해결

이클립스과 메이븐 연동은 개발자에게 편리함을 제공한다. 하지만 .settings의 자동변화에 종종 삽질을 하게됨. 이번에 겪은 삽질은 Dynamic Web Projects와 M2E 통합으로 인해 메이븐 업데이트시, .settings/org.elipse.wst.common.component 파일의 의 값이 자동으로 변경된다는 점이다. ContextRoot 고정시키는 방법 이클립스 내에서 m2e-wtp플러그인을 사용하여 웹프로젝트를 관리할 때 다음과 같이 context root가 관리된다. 기본적으로 m2e-wtp는 maven-war-plugin환경에 정의된 값으로부터 독립된 웹 애플리케이션의 context root가 적용된다. maven-war-plugin 1.2 myWebapp 2. 설정에 값이 지정되어..

JNDI란? Java Naming and Directory Interface.

JNDI Java Naming and Directory Interface. 이름지정 및 디렉토리 서비스에서 제공하는 데이터 및 객체를 참조(lookup)하기 위한 자바 API이다. 일반적으로 자바 애플리케이션을 외부 디렉터리 서비스(DB server,LDAP server..)에 연결할 때 쓰이는데 그중에서도 데이터베이스 연결에 가장 많이 쓰인다. 데이터베이스 연결 시에는 데이터베이스 커넥션을 미리 만들어서 저장해두고, 필요할때 저장된 공간 (DB Pool)에서 가져다 쓰고 반환하는 기법이다. 커넥션 풀을 이용하면 미리 커넥션을 만들어두고 사용하기 때문에 매번 사용할때마다 드라이버를 로드하고, 커넥션 객체 생성-연결-종료 하는 과정을 반복하지 않아도 되어서 데이터베이스의 부하를 줄이고 자원을 효율적으로 관..

스프링에서 자주 사용하는 기본 @어노테이션 정리

@ 어노테이션이란? 어노테이션의 사전적 의미는 주석이지만 Java에서는 그 이상의 메타 데이터 역할을 한다. 어노테이션을 선언하여 특수한 기능을 사용할 수 있다. @Component 스프링에서 관리하는 객체임을 표기하는 가장 기본적인 범용 스테레오타입 어노테이션. 스프링 빈으로 등록시키는 역할을 수행. Application Context에서 스프링 빈을 등록할 때, 빈으로 등록할 후보 클래스들을 탐지하여 등록한다. 에서는 @Component만 스캔하도록 되어있다. 당연하게 쓰던 어노테이션을 따라가서 소스를 살펴보자.... ex) @Controller @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Component public @inte..

Spring DI 스프링 의존성 주입 3가지 방법

Spring DI 스프링에서 의존성 주입(DI)이란, 객체간 의존성을 개발자가 객체 내부에서 직접 호출(new연산자)하는 대신, 외부(스프링 컨테이너)에서 객체를 생성해서 넣어주는 방식이다. 외부에서 두 객체 간의 관계설정을 해주는 디자인 패턴으로, 인터페이스를 사이에 두어 클래스 레벨에서는 의존관계가 고정되지 않도록 하고, 런타임 시 관계를 동적으로 주입하여 유연성을 확보하고 결합도를 낮출 수 있게 한다. public class Controller{ private Service service; service.test(); } } 다음과 같이 Controller객체가 Service객체를 사용하고 있는 경우, Controller는 Service에 의존성이 있다고 할 수 있다. 의존한다는 것은 의존대상, 여..

스프링 Service에서 ServiceImpl를 사용하는 이유 ?

스프링 Service에서 ServiceImpl를 사용하는 이유? 대부분의 스프링 프로젝트에서 서비스를 구현할때 Service.java를 인터페이스로 만들고, ServiceImpl 이라는 구현체 클래스를 생성하여 사용한다. 왜 인터페이스와 구현체를 따로 두어 사용할까? ex) MemberService / MemberServiceImpl 1. OOP의 다형성, 개방-폐쇄 원칙 이론상으로는 인터페이스-구현체 패턴으로 설계하는 이유는 인터페이스와 구현체를 분리함으로써 구현체를 독립적으로 두고, 구현체 클래스를 변경하거나 확장해도 이를 사용하는 클라이언트의 코드에 영향을 주지 않도록 하기 위함. 이와 같은 추상화를 통한 구현방식은 객체지향의 특징인 다형성과, 개방-폐쇠원칙(OCP)을 지향하는 설계방식이다. 2.A..

JUnit Test 자바 단위테스트란? feat. 서비스 단에서 DB연결 테스트해보기.

junit 자바 단위테스트란? Java에서 독립된 단위테스트 (Unit test)를 지원해주는 프레임워크. * 단위테스트란? 특정 소스코드의 모듈이 의도한 대로 작동하는지 검증하는 테스트이다. 즉, 함수 및 메소드에 대한 테스트를 하는 작업. Spring에서 단위테스트를 하는것은 스프링 커네이너에 올라와있는 Bean들을 테스트 하는 것이다. Junit을 사용하면 스프링 컨테이너를 띄워, 그 위에 올라가있는 Bean을 테스트 할 수 있다. JUnit 특징 단정 메서드(assert)로 테스트 케이스의 수행결과를 판별. ex) assertEquals(예상값, 실제값) assert()는 junit의 대표적인 기능이다. 이 메소드를 사용하여 테스트가 정상인지 아닌지 판별한다. Junit 4부터는 테스트 어노테이션..

Tomcat Dymanic Web Module 버전 오류 해결

에러: Maven Java EE Configuration problem -One or more contraints have not been satisfied. -Cannot change version of project facet Dynamic Web Module to x.x *서블릿 스펙에 따라 Dymanic Web Module 버전이 다름 Project > Properties > Project Facets 에서 버전 확인 이클립스 내에서도 여전히 Cannot change version of project facet Dynamic Web Module 에러로 변경 불가하다고 뜨는 경우 파일로 접근해서 수동으로 변경 해 줄 수 있다. 프로젝트 경로 > .settings > org.eclipse.wst.co..

Spring boot 스프링 부트란?

Spring boot 란? Spring framework 기반 프로젝트를 복잡한 설정없이 쉽꼬 빠르게 만들어주는 라이브러리. 개발자가 일일히 모든 설정을 할 필요없이 자주 사용되는 기본 설정을 알아서 해준다. 스프링 부트는 실행만 하면 스프링기반의 사용화가 가능한 애플리케이션을 쉽게 만들기 위해 단독 실행 가능하도록 해주는 스프링 프로젝트이다. 스프링 부트는 스프링을 쉽게 사용할 수 있도록 필요한 여러가지 복잡한 설정을 대부분 미리 세팅 해놓았을 뿐만 아니라 WAS도 별도의 설절없이 바로 웹개발에 들어갈 수 있도록 만들어 놓은 놈이다. Why Spring boot? 왜 사용하나? Spring framework를 사용하기 위한 필수 설정파일 (web.xml, rootContext.xml, ServletCo..

[java build] ANT란? (feat. MAVEN과 차이점? )

Ant란? 주식개미아니고요.. 자바 기반의 빌드툴로 리눅스의 make와 흡사한 기능 제공한다. Ant는 자바 기반으로 플랫폼에 독립적으로 실행. - 운영체제에 구애받지 않고 프로젝트 진행가능. 복잡한 쉘 명령어 대신 xml기반의 기능 설정파일을 사용하기 때문에 작업 설정이 복잡하지 않다. 미리 정의된 Task를 사용하여 쉽고 빠르게 배치 작업을 설정할 수 있다. 새로운 Task의 추가를 통해 배치작업의 확장이 가능하다. *Task는 Ant를 통해서 처리하고자 하는 작업을 나타내는것으로 파일복사 태스크, 소스코드 컴파일 태스크, Javadoc API생성 태스크 등 다양한 태스크가 미리 정의되어 있다. Ant사용법 Ant의 빌드 파일은 xml 문서의 구조이며 Ant가 작업을 수행할 프로젝트에 대한 정보를 담..