▼웹 개발자로 살기

자바 공백 검수 쉽게 하기

공백 검수를 .equals("") 나 != null 식으로 했는데, 좀 더 진화된 방법이 있었다.

 

공백 검수 잘못된 예

1
2
3
    if (!comfile.equals("") && comfile != null) {
        paramMap.put("companyImageUrl", comIdx+".jpg");        
    }
cs

위처럼 쓸 경우, comfile 파라미터 자체가 null 일 경우 if문 수행할 때 오류가 난다.

파라미터 자체가 null 일 수 없기 때문.

쉽게말하면,

null.equals("") → X
"".equals("") → O

따라서 아래와 같이 StringUtils 의 isEmpty() 메소드를 사용하도록.

 

공백 검수 방법 (StringUtils.isEmpty 메소드 사용)

1
2
3
    if (!StringUtils.isEmpty(company.getCompanyImage())) {
        paramMap.put("companyImageUrl", company.getCompanyCode()+".jpg");        
    }
cs


활용 예)

1
double preLat = Double.parseDouble(StringUtils.isEmpty(param.get("preLat")) ? "0" : param.get("preLat").toString());
cs

 

 

<StringUtils.isEmaty 메소드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    /**
     * Check whether the given {@code String} is empty.
     * <p>This method accepts any Object as an argument, comparing it to
     * {@code null} and the empty String. As a consequence, this method
     * will never return {@code true} for a non-null non-String object.
     * <p>The Object signature is useful for general attribute handling code
     * that commonly deals with Strings but generally has to iterate over
     * Objects since attributes may e.g. be primitive value objects as well.
     * @param str the candidate String
     * @since 3.2.1
     */
    public static boolean isEmpty(Object str) {
        return (str == null || "".equals(str));
    }
cs


스프링의 역사

 

스프링은 스프링 프레임워크(Spring Framework)의 줄임말로 많이들 사용하지만, 사실 스프링소스사(SpringSource社)에는 여러가지 스프링 제품이 있다.

그 중 Spring Framework - DIxAOP 컨테이너를 중심으로 스프링 MVC 와 스프링 JDBC 등을 포함 - 에 대해 정리해볼 필요성을 느껴, 학원 교재로 쓰던 책을 바탕으로 포스팅을 해보기로 한다.

 

스프링 MVC의 등장배경
  • 스프링(버전1 계열)이 국내에서 자주 쓰이게 된 것은 2006년부터.
  • 당시에는 스프링이 제공하는 DI(Dependency Injection)와 AOP(Aspect Oriented Programming) 기능을 중심으로
  • 주로 스트럿츠(Struts)와 하이버네이트(Hibernate)를 조합한, SSH 구성으로 웹프레임워크가 이용되었음.

 

<SSH>

Application 

 Struts
(스프링MVC이용은 드물었음)

Spring Framework 

Hibernate 

 

 

 

 

웹 애플리케이션 업무가 JSP, Servlet, EJB를 거쳐 현재의 스프링에 이르는 기술사의 발전사는 아래와 같다.

 

<자바 엔터프라이즈의 역사>

HTML(Hyper Text Markup Language)
정적인 콘텐츠
CGI (Common Gateway Interface)
동적인 콘텐츠
1요청 1프로세스
세션 관리가 없다.

 ▼

 서블릿, JSP(Java Server Pages)
CGI의 문제점을 해결
자바 언어 사용

EJB(Enterprise JavaBeans) 
컴퓨넌트 모델의 업계 표준
분산 오브젝트

 ▼

 스프링
(J2EE의 반성에서 태어나 현재는 클라우드 시대를 이끈다)

 

 

 

스프링의 특징

 

 

웹 애플리케이션의 아키텍처
  • 티어
  • 레이어

 

<티어>

클라이언트 층
(PC, 스마트폰) 

중간 층
(애플리케이션 서버) 

EIS(Enterprise Information System)층
(DB, 레거시 시스템) 

 

<레이어>

프레젠테이션 층
사용자 인터페이스(UI)와 컨트롤러를 제공한다.
이 층에는 클래스 이름으로 Controller나 Action이 붙은 클래스가 놓인다. 

비즈니스 로직 층
비즈니스 로직을 제공한다. 이 층에는 클래스 이름 끝에 Service가 붙은 유스케이스를 제어하는 클래스나,
회사(Company)나 종업원(Employee), 주문(Order) 등 업무 대상의 이름이 붙은 클래스가 놓인다.

데이터 액세스 층
데이터베이스 액세스를 추상화한다.
이 층에는 클래스 이름 끝에 DAO(Data Access Object)가 붙은 클래스가 놓인다.

 

<웹 애플리케이션의 다양한 레이어>

레이어1

레이어2

레이어3

레이어4

프레젠테이션

프레젠테이션

프레젠테이션

클라이언트 층에 있는
프레젠테이션

애플리케이션 컨트롤러

중간 층의 프레젠테이션

 비즈니스

서비스

도메인

비즈니스

 도메인

데이터 액세스

퍼시스턴스

인티그레이션

인티그레이션

비(非) 레이어 

리소스

 

※ 웹 애플리케이션 용어

용어 

정의 

 컨트롤러

화면 전환이나 화면에서 버튼이 눌러졌을 때의 동작 제어나 세션 관리 등을 한다.

 비즈니스 로직

서비스(애플리케이션) 

유스케이스로 표현되는 특정 업무나 특정 부서 처리의 통합, 트랜젝션의 기점.
일반적으로는 stateless(자신의 상태를 나타내는 값을 가지지 않는다) 클래스

 도메인

서비스로부터 비즈니스를 실행하는 데 있어 당연히 인식되는 고객이나 주문 같은 클래스의 집합이다.
자신이 무엇인지 나타내는 값과 그 값을 이용한 처리를 실현한다. 

 

Ajax

Ajax
  • Asynchronous Javascript+XML 을 말한다.
  • JavaScript의 비동기통신(XMLHttpRequest)을 사용해
  • 웹 브라우저의 페이지를 전환하지 않은 채
  • 일부를 수정함으로써
  • 페이지의 사용 편의성을 높여주는 기술이다.
  • 예) 구글 맵에서 지도를 움직이거나 지도에서 가게 정보를 표시하는 것

 

Java 개발환경 설정 (Java 프로그램 실행 환경 이해하기)

JDK는 무엇이고 왜 설치해야 하는 것인지, 자바 개발은 어떤 환경일 때 가능한 것인지 까먹지 않기 위해 학원 실습 내용과 방통대 수업내용을 취합해서 정리해보았다.

 

Java 프로그램의 실행

1. 자바소스 Hello.java 는 컴파일러를 통해 바이트코드 Hello.class 로 컴파일되며,

2. 바이트코드 Hello.class 는 각 운영체제의 자바플랫폼 JVM(Java Virtual Machine)을 통해 자바 애플리케이션으로 실행된다.

※ 애플리케이션 : Java 플랫폼에서 바로 실행되는 프로그램
※ 애플릿 : HTML 웹페이지에 포함되어 있는 자바프로그램. 브라우저 내에서 애플릿을 실행한다.

 

<Java 프로그램의 실행>

 Java 소스
Hello.java

컴파일러

 →

바이트코드[각주:1]
Hello.class

 

 

 

 

 

 ↙↓↘

 

 

 

 

Sun 시스템
자바플랫폼
JVM

 Windows 시스템
자바플랫폼
JVM

 Mac 시스템
자바플랫폼
JVM

 

 

  ↓

 

 

 

Java 애플리케이션
바로 실행

Java 애플리케이션
바로 실행

 Java 애플리케이션
바로 실행

 

요약 : 컴파일된 자바소스는 각 운영체제에 설치되어 있는 자바플랫폼을 통해 실행된다.

→ 자바소스를 실행시키려면 자바 플랫폼이 설치되어 있어야 한다.

 

Java 플랫폼

자바 프로그램의 실행을 위한 하드웨어와 소프트웨어 환경.

Java 플랫폼은 Java 프로그램이 동작하기 위한 소프트웨어 플랫폼으로, 각각의 운영체제에 맞는 Java 플랫폼을 설치해야 한다.

 

 

 

 

 

 

Java 프로그램

 

   

 

 

 C 프로그램

 

 Java 플랫폼

   

 

 운영체제 (Windows 등)

 

 컴퓨터 시스템 (Hardware)

※ C프로그램은 운영체제에서 바로 컴파일

 

 Java 플랫폼의 구성

 Java VM (Virtual Machine)

Java API (Application Programming Interface)

 - 자바 가상 기계
 - 자바 프로그램의 구동엔진
 - 실행에 필요한 사항을 관리
 - Garbage Collection : 자동으로 메모리 정리

 - 프로그램 개발에 필요한 각종 라이브러리
 - 패키지들이 계층구조로 분류되어 있음. ex) java.lang, java.util, 등등
 - 기본API, 확장 API

 

요약 : 자바 플랫폼은 각 운영체제에 맞는 것을 설치해야 한다.

설치파일 다운로드 방법 : Java SDK (Java Software Development Kit) (JDK라고도 함) 은 오라클 홈페이지에서 제공한다.

 

Java 프로그래밍을 위한 준비 작업

1. Java SDK 다운로드

※ Java Standard Edition Development Kit (JDK)

자바개발을 위해서는 자바플랫폼 환경이 구축되어있어야 하므로 JDK 를 설치하도록 한다.

-구글에 JDK download 키워드로 검색해도 되고
-오라클 홈페이지 Java SE 카테고리 > Downloads 탭에 직접 들어가도 됨 (아래 링크 참고)

Oracle Technology Network > Java > Java SE > Downloads
http://www.oracle.com/technetwork/java/javase/downloads/index.html

 

다운로드 파일 종류는 JDK, Server JRE, JRE 3가지가 있는데 개발자용인 JDK를 다운로드 한다.

* JDK : Java 개발 도구
* JRE : 자바 실행 환경

 

Java SE Development Kit 8u91를 다운로드한다. (2016.05.08 기준)

운영체제 : Windows x64
파일명 : jdk-8u91-windows-x64.exe

(※ 오라클 로그인 하고 라이센스 동의 해야 함)

 

설치하면 jdk, jre 폴더가 자동으로 생긴다.

* jdk 폴더 : 개발할 수 있는 라이브러리
* jrd 폴더 : 실행할 수 있는 파일이 있음

 

2. Java API 문서 (참고용)

API 문서는 자바 기술문서로 자바개발 시 참고하면 유용하다.

 

<자바 JDK8 API 문서 링크>
http://docs.oracle.com/javase/8/docs/api/index.html

 

또는 오라클 홈페이지에서 찾아 들어가는 방법이 있다.

Oracle Technology Network > Java > Java SE > Documentation 
http://www.oracle.com/technetwork/java/javase/documentation/index.html

 

Documentation 탭에 들어간 후

 Reference 카테고리의 Java SE API Documentation 링크를 클릭하면 된다.

 

 

 

 

3. 환경변수 설정

원래는 자바설치폴더인 jdk폴더 내 bin폴더까지 경로이동해야 javac 커맨더 입력이 성공하는데, 환경변수 path에 bin 경로 추가하면 커맨더창 아무 디렉토리에서나 javac 커맨더가 성공한다.

 

변수 Path 에 jdk bin 폴더 경로를 변수 값에 추가한다.

 

 

커맨더창에 javac 명령어 입력했을 때 아래와 같이 뜨면 성공이다.

 

※ 자바파일 컴파일하는 명령어 :  javac '클래스파일명.확장자'

※ 컴파일된 클래스파일 실행하는 명령어 : java '클래스파일명' (.class 붙이지 않는다)

그 다음에는 변수 CLASSPATH 를 만들고 .; 을 변수값으로 한다.

변수값 .(점)은 현재 폴더에 있는 클래스를 사용할 수 있다는 의미이고, 컴파일러는 CLASSPATH에 지정된 경로에서 클래스를 찾는다.

 

 

4. Java 개발 도구 (IDE) 다운로드. ex) Eclipse 등

http://www.eclipse.org/downloads/

최신버전이어도 상관없다.
Eclipse IDE for Java EE Developers 다운로드

New>Java Project 가 없으면 'Open Perspective'에서 'Java' 선택한다.

 

 

 

이클립스 테마 등 개인 취향을 바탕으로 세팅 마치면 자바 개발 환경은 이제 다 갖춰진 것이다.

 

 

 

 

 

  1. -Java 소스를 컴파일한 결과물 -확장자는 .class -클래스파일이라고도 함 -Java플랫폼에서 실행가능한 중간코드 [본문으로]

Maven+Spring+Mybatis+Bootstrap 사용하여 개발하기

 

 

 1. Perspective 'Spring'인 상태에서 Spring Legacy Project 선택하기

 

 2. Spring MVC Project 선택하고 패키지는 3단계로 적어준 후 'Finish' 

 

3. pom.xml 에 mybatis 의존성 부분 설정하기

pom.xml 에 아래 내용을 작성하면 프로젝트에 자동으로 mybits.jar 라이브러리가 추가된다. 이것이 바로 Maven을 사용하면 좋은 점!

/Book_SpringMybatis/pom.xml

1
2
3
4
5
6
        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.3.1</version>
        </dependency>    
cs

 

 

의존성 관련 소스 구하는 방법은 아래 사이트에서.

소스는 www.mvnrepository.com 에서 찾을 수 있다.

(캡쳐이미지의 spring 관련 부분은 무시)

 

pom.xml Dependencies 탭에서 mybatis 3.3.1 추가된 것이 확인된다.

 

4. servlet-context.xml 확인

소스는 resources 폴더에, 뷰는 컨트롤러가 요청하면 머리말, 꼬리말 붙여서 찾아가도록 설정한다.

/Book_SpringMybatis/src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml

1
2
3
4
5
6
7
8
    <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
    <resources mapping="/resources/**" location="/resources/" />
 
    <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
    <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <beans:property name="prefix" value="/WEB-INF/views/" />
        <beans:property name="suffix" value=".jsp" />
    </beans:bean>
cs

 

5. web.xml <filter> 추가하기

한글처리 때문에 해줘야 한다.

/Book_SpringMybatis/src/main/webapp/WEB-INF/web.xml

1
2
3
4
5
6
7
8
9
10
11
12
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>  
cs

 

 

6. 패키지와 중요 파일들 만들기

프로젝트 만들 때 com.mycompany.mybook 3단계 레벨로 패키지를 만들었다.
com.mycompany 밑에 config, model, util 패키지를 추가로 만들고,
해당 패키지에 알맞은 파일들을 새로 만든다.

com.mycompany.

config.

 - MybatisManager.java
 - Configuration.xml
 - db.properties
 - MapperBook.xml
 - MapperAuthor.xml
 - MapperPublishCompany.xml
 - MapperTranslator.xml

model.

 - Book.java
 - BookDAO.java
 - BookDAOImpl.java
 - Author.java
 - AuthorDAO.java
 - AuthorDAOImpl.java
 -

mybook.

 - BookController.java

util.

 - PagingAction.java

config 부분부터 소스를 하나하나 보자면 아래와 같다.

 

1. 마이바티스

  • SqlSessionFactory 선언
  • 리소스 Configuration.xml 경로 명시하고 있다.

/Book_SpringMybatis/src/main/java/com/mycompany/config/MybatisManager.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package com.mycompany.config;
 
import java.io.IOException;
import java.io.Reader;
 
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 
public class MybatisManager {
    
    public static SqlSessionFactory sqlMapper;
    
    static{
        String resource = "com/mycompany/config/Configuration.xml";
        Reader reader;
        
        try {
            reader = Resources.getResourceAsReader(resource);
            sqlMapper = new SqlSessionFactoryBuilder().build(reader);
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    public static SqlSessionFactory getMapper(){
        return sqlMapper;
    }
 
}
cs

 

2. Configuration

  • db.properties 리소스 위치 명시 (url, username, password 등 관리하는 파일을 별도로 관리고 싶을 경우에...)

  • alias 선언

  • sql이 작성되어 있는 Mapper.xml 파일을 명시하고 있다.

/Book_SpringMybatis/src/main/java/com/mycompany/config/Configuration.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
 
<configuration>
    
    <properties resource="com/mycompany/config/db.properties"/>
    
    <typeAliases>
        <typeAlias type="com.mycompany.model.Book" alias="book"/>
        <typeAlias type="com.mycompany.model.Member" alias="member"/>
        <typeAlias type="com.mycompany.model.Admin" alias="admin"/>
        <typeAlias type="com.mycompany.model.Inventory" alias="inventory"/>
        <typeAlias type="com.mycompany.model.CodeGroup" alias="code"/>
        <typeAlias type="com.mycompany.model.Author" alias="author"/>
    </typeAliases>
    
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    
    <mappers>
        <mapper resource="com/mycompany/config/MapperBook.xml"/>
        <mapper resource="com/mycompany/config/MapperMember.xml"/>
        <mapper resource="com/mycompany/config/MapperAdmin.xml"/>
        <mapper resource="com/mycompany/config/MapperInventory.xml"/>
        <mapper resource="com/mycompany/config/MapperCodeGroup.xml"/>
        <mapper resource="com/mycompany/config/MapperAuthor.xml"/>
    </mappers>
        
</configuration>
cs

 

3. DB접속정보

/Book_SpringMybatis/src/main/java/com/mycompany/config/db.properties

1
2
3
4
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:orcl
username=BOOK
password=RENTAL
cs

이클립스 새 프로젝트 개발환경 설정하기

 1. 프로젝트별/워크스페이스별 바로가기 분리

 

2. 텍스트 인코딩은 UTF-8로 

 

3. GETTER 코드 스타일 변경

 

4. 칼라 테마 변경

 

5. JSP 템플릿 수정

 

'999.eclipse' 카테고리의 다른 글

서로 다른 프로젝트 다른 톰캣 서버 사용하기  (0) 2016.09.28

티스토리 블로그 시작

원래는 초대장이 있어야 시작할 수 있었던 티스토리 블로그.
공지사항 보고 어플 설치했더니 정말로 블로그가 만들어졌네?
네이버 블로그보다 컨트롤범위가 엄청 광범위해서 한동안은 적응하는데 시간 다 보낼 것 같다!

+ Recent posts