평소 Notepad++를 많이 사용하는데 

여러개의 텍스트파일을 띄워두고 저장하지 않고

기록만 해두었다 필요한 내용을 정리하는 편이다.


Notepad++ 사용시 save 할지 말지 알림창이 뜨는경우가 있다. 




설정 > 기본설정 > 백업 > 세션 스냅샷 체크를 2개 해준다.





이제 여러 탭을 열어 텍스트를 작성하고

텍스트 저장없이 Notepad++를 껐다 켰다 할수 있다.



ubuntu linux에 mysql 8.0을 설치했는데 

기존 개발환경의 java버전이 낮아 mysql-connector library와 호환이 되지 않았다.

그래서 mysql 8.0을 모두 지우고 mysql 5.7로 재설치 하게 되었다.



1. 먼저 기존 mysql과 관련된 설치한  모든 것을 지운다.


1
2
3
4
5
$ sudo apt-get remove --purge mysql*
 
$ sudo apt-get autoremove
 
$ sudo apt-get autoclean
cs





중간중간 Y/n가 뜬다면 Y를 입력하여 모두 remove 시킨다.



2. 설치가능한 mysql 목록을 확인하고 mysql 5.7을 설치하기


1
2
3
$ sudo apt-cache search mysql-server
 
$ sudo apt-get install mysql-server-5.7
cs





설치가 완료되면 로그인을 시도한다.


로그인 시 아래와 같이 에러발생 한다.



1
2
3
4
5
$ mysql -u root -p
 
Enter password:
 
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
cs



로그인을 위해 sudo를 이용해 mysql에  로그인한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ sudo mysql -u root 
 
mysql> USE mysql;
 
mysql> SELECT User, Host, plugin FROM mysql.user;
 
+------------------+-----------+-----------------------+
| User             | Host      | plugin                |
+------------------+-----------+-----------------------+
| root             | localhost | auth_socket           |
| mysql.session    | localhost | mysql_native_password |
| mysql.sys        | localhost | mysql_native_password |
| debian-sys-maint | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
4 rows in set (0.00 sec)
cs




3. 현재 root 계정의 plugin이 auth_socket이므로 mysql_native_passwordupdate 시켜준다.



1
2
3
4
5
mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
$ service mysql restart
cs




다음 root plugin을 확인한다.


1
2
3
4
5
6
7
8
9
10
11
mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| User             | Host      | plugin                |
+------------------+-----------+-----------------------+
| root             | localhost | mysql_native_password |
| mysql.session    | localhost | mysql_native_password |
| mysql.sys        | localhost | mysql_native_password |
| debian-sys-maint | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
4 rows in set (0.00 sec)
cs


auth_socket에서 mysql_native_password로 바뀐것을 확인했다.




이제 sudo 없이 


1
$ mysql -u root -
cs


로 비밀번호 없이 db에 접속할수 있다.



4. root 비밀번호를 재설정해주자.



1
2
3
4
5
6
7
mysql> USE mysql;
 
mysql> update user set password=password('0000') where user='root';
 
mysql> update user set authentication_string=password('0000') where user='root';
 
mysql> flush privileges;
cs



설정이 끝나면 다시 로그인해본다.

$ mysql -u root -p 

비밀번호 0000을 넣어줘야 db에 접속할수 있다.



5. root 계정을 외부에서 접속가능하게 허용해준다.



1
2
3
4
5
6
7
mysql> grant all privileges on *.* to 'root'@'%' identified by '0000';
 
mysql> flush privileges;
 
mysql> select host, user, authentication_string  from user;
 
mysql> exit
cs




다음 bind-address 주석설정을 해준다.


1
2
3
$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
 
$ sudo service mysql restart
cs






6. MySQL tool을 이용해 root로 DB가 접속되는지 확인한다.




잘 접속 되는 것을 확인할 수 있었다.


이후 테이블을 생성하고 유저생성 및 권한을 줘서 root로 접속하지 않고 작업을 진행할 수 있다.



7. 테이블 생성


1
CREATE DATABASE DB명 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
cs



8. 유저 생성 및 권한 주기


1
GRANT ALL PRIVILEGES ON DB명.* to '계정명'@'%' identified by '비밀번호';
cs



9. 비밀번호 변경


1
2
3
4
5
6
7
USE mysql
 
UPDATE user SET authentication_string=password('0000') where user='root';
 
FLUSH PRIVILEGES;
 
exit
cs



1. JDK 환경변수 설정 


1
java -version
cs


을 입력한다. java를 찾을수 없다고 나온다.



1
ls
cs


명령어로 home 디렉토리 안에 설치되어 있는 목록을 확인한다.

현재 본인은 java폴더 안에 jdk 1.6폴더가 설치되어 있다.





기본 경로로 다시 돌아와 bash_profile 이라는 파일을 만든다.




1
vi ./bash_profile
cs



다운받은 jdk의 압축 푼 폴더의 경로를 JAVA_HOME으로 지정해주고 :wq로 저장한다.



1
2
3
4
5
6
7
8
9
10
11
JAVA_HOME=/home/top/java/jdk1.6.0_45
 
JRE_HOME=${JAVA_HOME}
 
export JAVA_HOME
 
export JRE_HOME
 
PATH=${JAVA_HOME}/bin:${PATH}
 
export PATH
cs



bash_profile 파일 실행


1
. ./bash_profile
cs


파일을 실행한다.

이후 자바버전을 확인한다. 


1
2
3
top@top-TS500-E5:~$ java -version
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
cs





설치 된 java 버전이 잘 뜨는 것을 확인 할 수 있다.


 

1. sourcetree 도구 > 옵션 > 기본 텍스트  인코딩 확인

 

- 기본 텍스트 인코딩을 euc-kr 이나 utf-8로 바꿔본다.

 

2. sourcetree 설정 > 설정파일 편집 > 워드패드, notepad++ 열기

 

 

다음을 추가해준다.

 

[i18n]
  commitEncoding = UTF-8

  logOutputEncoding = UTF-8

 

[core]
  symlinks = false
  repositoryformatversion = 0
  filemode = false
  logallrefupdates = true


[remote "origin"]
  url = https://github.com/shlee0882/spring-uses.git
  fetch = +refs/heads/*:refs/remotes/origin/*

 

[branch "master"]
  remote = origin
  merge = refs/heads/master

 

 



서블릿 라이프사이클에 대해 궁금증을 갖게 되어 정리해보았다.



■  서블릿은 init () 메소드를 호출하여 초기화된다.


■  서블릿은 service () 메소드를 호출 하여 클라이언트의 요청을 처리한다.


■  서블릿은 destroy () 메소드를 호출하여 종료된다.


■  마지막으로, 서블릿은 JVM의 가비지 컬렉터에 의해 가비지 수집된다.



그림으로 표현하면 다음과 같다.




init 메소드는 처음 한번만 실행되고 그 이후에 service()가 다 처리를 하는 것이다.

service () 메소드는 HTTP 요청 유형 (GET, POST, PUT, DELETE 등)을 확인하고

적절하게 doGet, doPost, doPut, doDelete 등의 메소드를 호출한다.



그럼 정말로 이렇게 도는지 확인하기 위해 테스트 소스를 작성해보았다.




1. jsp 파일


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
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
    $(document).on("click""#button"function() {
        // get method 호출
        $.get("myServlet"function(content) {             
            $( "#list" ).append( "<li>"+content+"</li>" );
            myMethod();
        });
    
    myMethod = function(){
        // ajax post method 호출
        var myData = $("#button").val();
        $.ajax({
            type : "POST",
            data : myData,
            url : "myServlet",
            success : function(content) {
                $( "#list" ).append( "<li>"+content+"</li>" );
            }
        });
    }
});
</script>
</head>
<body>
    <button id="button" value="1">servlet 메소드 호출하기</button>
    <ul id="list">
    </ul>
</body>
</html>
 
cs



2. 서블릿 파일


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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package myServletTest;
 
import java.io.IOException;
 
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
@WebServlet("/myServlet/*")
public class MyServlet extends HttpServlet{
    
    private static final long serialVersionUID = 1L;
    String msg = "default";
    
    // The servlet is initialized by calling the init() method.
    public void init() throws ServletException {
        msg = "init 메소드 Call";
    }
    
    
    // The servlet calls service() method to process a client's request.
    // service () 메소드는 HTTP 요청 유형 (GET, POST, PUT, DELETE 등)을 확인하고 
    // 적절하게 doGet, doPost, doPut, doDelete 등의 메소드를 호출
    @Override
    public void service(ServletRequest request, ServletResponse response) 
            throws ServletException, IOException {
        String text = "Service 메소드 Call";
        if(!"default".equals(msg)){
            text = msg +"<br>"+text;
            msg = "default";
        }
        response.setContentType("text/plain");  
        response.setCharacterEncoding("UTF-8"); 
        response.getWriter().write(text);       
    }
    
    
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String text = "doGet 메소드 Call";
        commonMethod(text, response);
    }
    
    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String text = "doPost 메소드 Call";
        commonMethod(text, response);
    }
 
    // The servlet is terminated by calling the destroy() method.
    @Override
    public void destroy() {
        // Finalization code...
        System.out.println("destroy method call");
    }
    
 
    private void commonMethod(String text, HttpServletResponse response) 
            throws ServletException, IOException{
        if(!"default".equals(msg)){
            text = msg +"<br>"+text;
            msg = "default";
        }
        response.setContentType("text/plain");  
        response.setCharacterEncoding("UTF-8"); 
        response.getWriter().write(text);   
    }
}
 
cs


버튼을 누를시 get 요청 1번,  post 요청 1번이 이루어지고

response 시 공통되는 부분은 메소드로 빼서 작성했다.


이후 실행을 하면 


서블릿 java 파일에 service() 가 없을 경우 init() 한번 호출 이후 doGet(), doPost()를 호출한다.





서블릿 java 파일에 service() 가 있을 경우 init() 한번 호출 이후 service()를 호출한다.

service () 메소드가 HTTP 요청 유형 (GET, POST, PUT, DELETE 등)에 따라

적절하게 doGet, doPost, doPut, doDelete 등의 메소드를 호출하여 처리해줌을 알수 있었다.






이후 서블릿이 종료되면 destroy() 메소드가 발생하며 종료된다.



마지막으로 작성한 소스코드를 첨부한다.


myServletTest.zip






1. git저장소와 local git 연결(clone),  add,commit push 방법



1. github( https://github.com/ )으로 이동해 로그인 후 git저장소를 만들자. 



 





2. git저장소를 만들면 github에서 git저장소로 원격접속 가능한 주소를 제공한다.(https, ssh)



 





3. https://git-scm.com 에서 git을 다운받고 기본설정으로 설치한다.

원격 git저장소에  접속하려면 자신의 로컬컴퓨터에 git프로그램이 있어야한다.








4. 설치가 완료되면 cmd창을 열고 명령어를 입력한다. 


   git

   git --version

   (git관련 명령어와 git버전이 잘 뜬다면 설치 성공)




5. git 환경설정으로 name과 email을 지정해준다.


   git config --global user.name shlee0882

   git config --global user.email shlee0882@gmail.com




6. github에서 만든 원격 git저장소를 자신의 로컬 컴퓨터로 다운받기 위해서는

clone 명령어를 사용한다.

로컬 컴퓨터의 clone(다운로드)할 위치로 이동 후 다음 명령어로 복사(다운로드)한다.


   git clone https://github.com/shlee0882/Git-Study.git




7. 다운로드된 위치로 이동 후 text.txt파일을 하나 만든다.




8. working directory 에서 현재 상태를 확인한다. 

상태 명령어는 status이다.


   git status




9. 만든 파일을 올리기 위해서는 working directory -> staging area(index)

로 옮겨야 한다. 스태이징의 명령어는 add이다.


   git add text.txt




10. add명령이 성공적으로 되었다면 local repository(로컬 저장소)로 올려야한다.

로컬 저장소는 commit명령어를 사용하여 커밋메세지로 -m을 커밋내용을 입력한다.

   

   git commit -m "add Text File"




11. commit 명령이 성공적으로 되었다면 remote repository(원격저장소)로 올려야한다.

원격 저장소는 push명령어를 사용한다.


   git push




12. push가 완료되면 자신의 github으로 이동해서 커밋한 파일이 잘 올라갔는지 확인한다.





2. git work flow (동작원리)



앞에 명령어를 그림으로 나타내면 git은 다음과 같이 동작하는 것을 확인할 수 있다.

index는 staging하는 영역이다.


add와 commit으로 로컬 저장소까지 올릴수 있고

commit -a를 통해 add와 commit을 동시에 진행 할 수 있다.


push로 원격 저장소로 올리고

fetch로 로컬 저장소로 받을 수 있다.


fetch와 checkout으로 merge를 할수 있고

pull을 통해 fetch와 merge를 동시에 진행 할 수 있다.




 






3. git 명령어 add, reset, checkout, amend, log




sampleCode.html 을 스테이징으로 올린다.


   git add sampleCode.html




스태이징에 올라간 sampleCode.html 파일을 내려오게 한다.


   git reset sampleCode.html




sampleCode.html 파일을 원격레파지토리에 올라간것으로 바꾼다.


   git checkout -- sampleCode.html 




올라가야 할 파일을 전부 스태이징으로 올린다.


   git add . 




git 로그 확인 하기 (커밋 메세지, 해쉬 값)


   git log 




과거의 커밋한 특정 시점으로 돌아감 


   git reset --hard [hash value]

   git reset --hard adf0f596fbe1e8033e76ac2680546480fb2b0ed9





강제로 푸시 진행


   git push -f




커밋 메세지 변경


   git commit --amend




4. git branch 사용해 master에 merge해 올리기




1. 현재 브랜치 확인

   git branch





2. develop 브랜치 생성

   git brach develop





3. develop 브랜치 이동

   git checkout develop





4. 현재 브랜치 확인

   git branch





5. 파일 수정, 추가 후 push, git log 확인






현재 push한 곳은 develop 브랜치

github은 master 브랜치를 바라보고 있음

master 브랜치에도 push를 해줘야함.




6. 마스터 브랜치로 이동

   git checkout master





7. develop 브랜치와 머지

   git merge develop





8. git log 확인






HEAD -> master, develop으로

master와 develop 모두 올라간 것을 확인





9. develop 브랜치 삭제

  git branch -d develop




10. local 레파지토리에서 작업한 파일을 원격 레파지토리로 바로 올리는 방법


1
2
3
4
5
6
7
git init
git status
git add .
git commit -m "test commit"
git remote add origin https://github.com/shlee0882/git-test.git
git remote -v
git push origin master
cs



1. 파일 명명 규칙(File Name Convention Rule)


JAVA 소스 개발 표준안을 수립하고 통일된 작성 규칙을 통해서 가독성을 증가시키고 좋은 품질을 유지할 수 있다.

업무 프로젝트를 구현하기 위해서 각 Layer 별 소스 파일의 명명 규칙은 다음과 같다.


1. 패키지명은 영문소문자를 사용한다.

2. 2개 이상 단어 조합 시 Camel  규칙 적용



class 종류 

파일명 구성 

위치 패키지 또는 디렉토리 

예 

 Controller

api 

 <업무명>ApiController.java 

 com.cname.<업무명><업무영역>.controller

 DisplayApiController.java 

fo/bo 

 <업무명>Controller.java

 com.cname.<업무명><업무영역>.controller

 DisplayController.java

 Service

공통 

 <업무명>Service.java

 com.cname.<업무명><업무영역>.service

 DisplayService.java

 DAO

공통 

 <업무명>DAO.java

 com.cname.<업무명><업무영역>.dao

 DisplayDAO.java

 Model

공통 

  DB 테이블 이름으로 명명

 com.cname.<업무명><업무영역>.model

 GoodsBase.java

 SQL map xml

api 

 <업무명>Mapper.xml

 src/main/resources/mapper/

 DisplayMapper.xml

 폴더

 

  폴더명은 full name 명명

 

 ex) admin(O) , ad(X)

 html, xml

 

  업무prefix.html

 

 stSearch.html



2. 코딩규칙(Coding Rule)

2.1 공통 적용 규칙

구분 

규칙 

예 

 객체 변수

  '_' 사용 금지

 2개 이상 단어 조합 시 Camel 규칙 적용

 의미 있는 명사로 작성

 GoodsDetails goodsDetails = 

displayService.getGoodsDetails(dispNo, goodsNo);

 변수

 String[] goodsList;

 필드 선언

 상품번호 컬럼 : GOODS_NO → Model 필드 : goodsNo

 메소드 선언

 getGoodsDetails(..) {..}

 상수

  '_' 사용 금지
 의미 있는 명사로 작성

 PAGE_SIZE



2.2 업무 Mapper Interface 메소드명 규칙

1. 업무 Mapper 클래스의 메소드 명은 기능에 따라 다음과 같은 형태로 작성하여야 한다.
2. 업무 Mapper : 데이터 구조 종속적인 단위로 개발

동사 

 설명 

 예 

 insertXXX

 한 건의 데이터를 생성하는 경우 

 void insertCode(Code)

 updateXXX

 한 건의 데이터를 변경하는 경우

 void updateCode(Code)

 deleteXXX

 한 건의 데이터를 삭제하는 경우 

 void deleteCode(Code)

 selectXXX

 한 건의 데이터를 조회하는 경우

 CodeDTO selectCode(CodeDto)

 selectXXXList

 여러 건의 데이터를 조회하는 경우(List<DTO>리턴)

 List selectCodeList(CodeDto)

 updateXXXList

 여러 건의 데이터를 변경하는 경우

 void updateCodeList(Code...)

 deleteXXXList

 여러 건의 데이터를 삭제하는 경우

 int deleteCodeList(Code...)

 insertXXXList

 여러 건의 데이터를 생성하는 경우

 void insertCodeList(Code...)

 saveXXXList

 여러 건의 데이터를 생성, 변경, 삭제 하는 경우

 void saveCodeList(Code...)



2.3 업무 SQL MAP query id명 규칙


1. 업무 SQL MAP 파일 내 query Id 부여 방식은 다음과 같다.

2. 업무 SQL MAP 파일 :  업무 Mapper Interface와 1:1로 매핑 ( e.g.CodeMapper.java → CodeMapper.xml )


 동사

 예 

 insertXXX

 <insert id="deleteCode" parameterType="">

 </insert>

 updateXXX

 <update id="updateCode" parameterType="" resultType="">

 </update>

 deleteXXX

 <delete id="deleteCode" parameterType="">

 </delete>

 selectXXX

 <select id="selectCode" parameterType="" resultType="">

 </select>



3. Model 개발 가이드


3.1 Model의 역할 


Model 객체는 Request/Response에 필요한 데이터를 담고 있는 객체이다 

보통 VO, DTO  등 여러 이름으로 사용하고 있으나 현 프로젝트에서는 Model 로 통일한다 

model  객체는 주로  setter/getter 로 이루어진 POJO 객체로써 절대로  Bean객체로 생성하면 안된다 

model  객체를 사용함으로써 요청에 대한 데이터를 예상할수 있으며 또한 @Valid 같은 Validation Framework 활용도 가능하여 

효율적으로 개발할수 있다 


또한 @Data 같은   lombok 라이브러리도 활용할수 있다 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Data
public class Board implements Serializable {
 
    private int num;
 
    @NotEmpty(message = "제목을 입력해 주세요")
    @Size(min = 3, max = 200, message = "제목은 최소 {min}자에서 최대 {max}자까지만 가능합니다")
    @ApiModelProperty(notes = "글제목", required = true)
    private String title;
 
    @NotEmpty(message = "내용을  입력해 주세요")
    @Length(min = 5, message = "내용은 최소  {min}자리 입니다")
    private String contents;
}
cs


3.2 Model 사용범위


model 은 정보를 담는 기능을 하기 때문에 모든 로직에서 자유롭게 사용할수 있다 

보통 데이터베이스의 테이블과 매칭하여 사용하고자 하는  경우가 많고 1개의 model객체만 생성하여  

Request  요청 파라미터 / 데이터베이스 결과값을 담는 경향이 있는데 이는  지양한다 


1개의 model 객체만으로 로직을 구현시 API 통신및 BO/FO에 전달시 불필요한 json 정보들이 많을수 있다 

따라서 Request 요청에 대응하는 model 과 Response에 대응하는 model을 각각 분리하여 사용하기를 권장한다 


이럴경우 보통 Request/Response  model 객체간에 중복 정보에 해당하는 경우가 많은데 

이럴경우 중복된 정보들은 부모객체를 생성하여 상속하여 사용하면 

효율적으로 확장하여 활용할수 있다 


프로젝트에서 Model 객체 사용을 가능한 권장한다 



3.3 Model package 확장 


model 객체는 프로젝트내에서 다수가 발생할수 있으며 이를 효율적으로 관리하기 위해서  package를 확장하여 사용하길 권장한다 


예)  com.cname.lps.board.model package에서 다음과 같이 확장하여 model  객체를 관리한다 

      com.cname.lps.board.model.user

      com.cname.lps.board.model.file

      com.cname.lps.board.model.notice



3.4 조회 조건 하에서 get/post 에서의  model  개발가이드(API) 


BO/FO에서 API로 전송하는  경우 가능한 get 방식으로 전송을 권장한다 

api 전송은 REST API 방식을 따르도록 가이드 하고 있으며 이는 get에 대해서  cache를 활용하기 위함이다 


API 서버 앞단에  API G/W 미들웨어를 연동하며 G/W에서   get 호출에 대해서 cache를 활용할수 있어 효율적이다 

따라서 parameter 갯수가 10개 미만인 경우 get 방식을 권장한다 


4. Annotation 기반 개발


업무 컴포넌트는 Annotation 기반으로 구현하며 Layer별로 사용하는 Annotation은 다음과 같다


@SpringBootApplication : 스프링 컴포넌트 스캔 및 스프링 부트 자동 구성을 활성화 한다.

@Controller : 업무 Controller 구현 시 사용, 역할 별 객체 생성 (@RequestMapping, @ResponseBody, @RequestBody)

@Service : 업무 Service 구현 시 사용, 역할 별 객체 생성

@Repository : 업무 DAO구현 시 사용, 역할 별 객체 생성

@Autowired : DI(Dependency Injection, 의존성 삽입)을 지원하며, 객체 초기화 시 연관된 객체를 삽입시킨다.

@Mapper : DAO interface를 구현하지 않아도 SQL map xml을 호출해준다. (단, DAO의 패키지명과 SQL map xml의 네임스페이스가 동일해야함)


이외 @Component, @Qualifier, @Resource 등의 여러 종류의 Annotation이 존재하며 프로젝트 진행 중 추가적으로 유용한 Annotation을 검토하여 사용할 수 있다.


DI : Dependency Injection(의존성 삽입), Spring IOC(Inversion of Control) Container에서 지원하는 runtime 시 객체 연관 참조 삽입 기술


1. 개발환경


1.1. jdk 설치

1.2 자바 환경변수 설정

2. sts 3.9 설치

3. git repository 설정 ( git user정보 설정 )

4.1 AWS Toolkit for Eclipse 설치

4.2 Lombok plugin 설치

4.3 MoreUnit Plugin 설치

4.4 Thymeleaf Eclipse Plugin 설치

5. Encoding 설정을 변경 ( Window > Preferences > General > Workspace > Text file encoding : Other (UTF-8) )

6. Mysql-Workbench 설치



2. 개발 소프트웨어 구성


 구분

 소프트웨어 

 JDK 

 JDK 1.8 

 Java IDE 

 Spring Tool Suite 3.9.0 (64bit) 

 Spring Boot

 Spring Boot 1.5.6 

 Web Application Server

 Tomcat embedded in Spring Boot 

 Web Server 

 None 

 Build Manager 

 Maven 4.0.0 embedded in STS 

 SCM 

 Git 



3. 개발환경 디렉토리 구조



디렉토리 및 파일 

 설명

 업무 프로젝트

(ex: display-api)

src 

main 

java 

com.cname

(도메인) 

서비스

(ex: display) 

업무 영역

api

fo

 bo 

 common 

 프로젝트 내에서 사용하는 공통 모듈

 controller

 서블릿 요청을 처리하는 컨트롤러

 service

 비지니스 로직 처리

 dao

 데이터 access를 위한 로직

 model 

 데이터를 저장하는 POJO 객체

 interceptor 

 controller 클래스 호출 전에 비지니스 로직을 처리

 config

 프로젝트 내의 configuration 설정 Bean

 exception

 전역 예외처리 클래스

 resources application.yml 업무 프로젝트의 환경별 설정 및 property 정보 저장

 mapper 

 myvatis 관련 설정 및 xml query 파일 저장

 logback.xml

 업무프로젝트별 로그 설정 저장

 static

 js 

 업무 로직 javascript 파일 (FO/MO만 해당)

 templates

 서비스 

 Thymeleaf 파일 저장

 test

 java

 

 테스트에 필요한 Junit 테스트 케이스

 resources  테스트에 필요한 설정 관련 파일
 .project STS 프로젝트 설정 파일
 .classpath STS 클래스패스 설정 파일
 .gitignore git 제외대상 파일 등록
 pom.xml

 Maven 설정 파일





+ Recent posts