서블릿의 구조

서블릿은 좀 전에 자바 웹 프로그램이라고 소개한 적이 있다.

이는 웹을 구성하는 기본적인 요소인데 우리는 보통 이 웹 어플리케이션으로 Tomcat을 사용하게 된다. Tomcat의 폴더를 가 보면

이와 같이 구성 되어있는 것을 볼 수 있다. 이는 웹 어플리케이션이라면 가져야 할 폴더 구조이다.

https://www.edwith.org/viewer/image?src=https%3A%2F%2Fcphinf.pstatic.net%2Fmooc%2F20180124_133%2F15167752967943AqfC_PNG%2F1_5_1_____.PNG

서블릿의 동작 원리와 라이프 사이클(life cycle)

https://mangkyu.tistory.com/14

더 정확히 말하자면 여기서 클라이언트가 아니라 WAS(Web Application Server)일 것이다.

여기서 서블릿 컨테이너의 역할은 서블릿과 서버를 연결 해 주고 객체를 생성 해 주는 것이다. 따라서 요청이 있을때 마다 객체를 생성 해 주는 역할을 하게 된다.

  1. 클라이언트로부터 요청이 들어오면 http 프로토콜을 사용하게 되므로 request, response객체를 생성하기 된다.
  2. 요청된 url에 매핑된 서블릿의 생성자를 호출하게 된다.
  3. 생성자는 init()메서드를 실행하게 된다.
  4. init()메서드는 service()메서드를 호출하고 service()메서드는 스레드에 담겨진다.
  5. 요청한 방식(get, post)에 따라서 해당 메서드로 이동한다.
  6. 응답하고 연결을 끊는다.

이것이 servlet의 동작 순서이다. 그러면 각 메서드의 역할을 알아보자.

  1. 생성자 : 생성자는 따로 작성하지 않고 default 생성자를 이용해도 된다. default 생성자는 init()메서드를 호출하게 된다.
  2. init() : init()메서드는 service()메서드를 호출하게 된다.
  3. service() : 요청된 방식(get, post)를 확인하고 맞는 메서드로 분기 시켜준다. (doGet(), doPost())
  4. doGet() : get방식으로 요청된 처리를 한다.
  5. doPost() : post방식으로 요청된 처리를 한다.
  6. destroy() : 연결 해제

자 여기 까지 알았으면 service()메서드가 스레드에 담겨진다는 말에 대한 의문이 생길 것이다.

매번 이러한 과정을 거치게 된다면 시간도 오래걸릴뿐만 아니라 매번 객체가 생성되어 서버가 마비가 되는 등의 문제가 발생하게 된다. 따라서 최초 요청에만 위와 같은 동작을 하게 되고 이후에는 바로 스레드의 서비스 메서드로 이동하게 된다. 이를 코드를 통해 알아보자.

package sample;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class LifeCycle extends HttpServlet {
	private static final long serialVersionUID = 1L;
      
	public int count =0;
    public LifeCycle() {
    	System.out.println("LifeServlet의 생성자 호출됨...");
    }
    
    @Override
    public void init() throws ServletException {
    	System.out.println("init() 호출됨...");
    }
    
    @Override
    public void destroy() {
    	System.out.println("destroy() 호출됨...");
    }
    
    @Override
    public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
    	System.out.println("service() 호출됨...");
    	System.out.println(count);
    	count++;
    }
}

이해를 돕기 위해 모든 메서드를 오버라이딩 해놨다.

사실 destroy() 메서드는 톰캣을 끄는 속도가 더 빨라서 확인할 수 없지만 알 수 없는 오류로 운좋게 확인했다.

이와 같이 최초 요청시에만 생성자와 init()메서드가 실행되었고 새로고침 하면서 계속 요청을 하면 service() 메서드만 실행되는 것을 볼 수 있다.

 

'FRONT > JSP' 카테고리의 다른 글

[Front] JSP 동작 원리와 기초  (0) 2020.06.10

웹은 기본적으로 Http Protocol을 지원한다.

http 프로토콜을 이해해야지 웹의 구조를 이해할 수 있다.

 

웹의 구조

웹은 위 그림처럼 구조 되어있다.

  1. client : 보통은 인터넷을 사용하는 유저로 http 프로토콜을 통해 요청과 응답을 한다.
  2. DNS (Domain Name Service) : 우리가 보기 쉽게 이루어진 URL을 IP주소와 매핑 시켜주는 역할을 한다.
  3. 웹서버 : 정적인 페이지, 문서(html) 같은 요청을 처리 해 준다.
  4. WAS(Web Application Server) : 동적 처리를 해준다.
  • WAS의 리소스에는 여러가지가 있는데 앞으로 뒤에서 필요할 내용이므로 같이 소개한다.
  • Servlet : 서블릿은 Java 프로그램으로 생각하면 된다.
  • JSP(Java Server Page) : html과 같은 코드를 사용하지만 java코드도 사용할 수 있는 동적인 페이지이다.
  • Model(java beans) : VO, DAO 객체가 있으며 DB와 연동하여 값을 받아온다.

웹은 이렇게 크게 구성되어있고 흐름을 살펴보자면

  1. 클라이언트가 웹서버에 요청을 한다.
  2. 그 요청이 정적페이지인 경우 웹 서버에서 해당문서를 응답을 한다.
  3. 그 요청이 동적페이지나, 프로그램인 경우 WAS로 제어권을 넘긴다.
  4. 해당 요청을 처리하고 client로 응답을 보낸다.

기본적으로 위와 같은 흐름으로 웹이 구성된다. 

'FRONT' 카테고리의 다른 글

[Front] HTTP Protocol ( http 프로토콜 )  (0) 2020.06.04
[Front] Cookie와 Session의 차이점  (0) 2020.06.04
HTML

Hyper Text Markup Language로 언어이자 문서의 한 종류로서 웹을 이루는 가장 기본적인 문서다.

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>title</title>
</head>
<body>
  
</body>
</html>

위 코드는 html을 구성하는 가장 기본적인 형태이다. 무슨 뜻인지 하나하나 살펴보자

html의 구성요소

html을 하면 알아야 할 4가지가 있는데 

1.요소

  •  요소는 시작태그와 종료태그로 이루어진 모든 명령어를 의미한다.

2.태그

  • 태그는 <괄호 안에 들어가는 명령어를 뜻한다.> 얼핏 들으면 요소와 같아 보이지만 요소의 하위 개념이다.
  • 대개 태그는 시작태그와 종료태그로 이루어져 있다.
  • ex) <title>title<title> : <title> 타이틀 태그, <p> 문단태그

3.속성

  • 속성은 설정 값으로 태그의 세부 설정 기능을 담당한다.
  • ex) <p align=””> : p태그에 align이라는 속성(세부설정)을 가진다.

4.변수(Argument)

  • 속성이 가지는 값을 의미한다.

즉, 종합하자면 <p align=”center”></p> : 여러가지 요소 중 p태그는 align이라는 속성에 center라는 변수를 가지고 있다. 라고 말 할 수 있다.

자 그럼 위 코드를 하나씩 해석해 보자

  1. <!DOCTYPE html> : html5에서 부터 적용되는 것으로 현재 문서가 html이라는 것을 명시해 주고 있다.
  2. <html> : 모든 태그들은 <html> 태그 안에 작성 되어야 한다.
  3. <meta> :해당 html 파일의 구성요소를 설정하는 태그라고 생각하면 된다. 해당 html파일은 charset(캐릭터셋)으로 utf-8을 가진다.
  4. <title> : 해당 문서 상단의 타이틀을 성정하는 태그이다.
  5. <head> : 해당 문서의 제목, 제작자, 설정등 문서에 대한 설명이 들어가 있는 부분으로 해당 문서에 대한 참고사항들이 들어있는 태그이다.
  6. <body> : html에서 가장 의미있고 중요한 태그로 실제 사용자에게 보여지는 태그이다. 따라서 <body>태그 안에 있는 명령어와 글자들은 웹에 보여지게 된다.
주석

html 주석은 <! —주석 — > 이런 식으로 작성하게 된다.

특징
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>title</title>
</head>
<body>
   html 언어의 특징
  1. 개행이 되지 않는다.
  이렇게              말    이    다
  . 참
  신
             기          하 다.
  2. <!--주석 처리 한 것은 보이면서 보이지 않는다. -->
  3. 사실 태그를 안해도 된다. 그럼 왜하는가? 설정을 하지 않는다면
  이렇게 사실 그냥 메모장과 다름이 없다.
  태그 설정을 하여 이 부분이 정확히 무엇인지를 명시하는것이 훨씬 효율적이기 때문이다.
  
</body>
</html>

위 코드 실행 결과

위 코드 실행 결과는 흰 배경이고 메모장은 해당 문서에서 소스보기를 한 결과이다.

여기서 html주석의 문제점이 나타나게 된다.

html주석은 실행결과에서 나오지 않지만 실제로 소스 보기를 통해서 확인하면 볼 수 있으므로 보안이 좋지 않다.

그리고 두 번째 문제점은 그럼 어떻게 개행을 해야 하는가 이다. 이는 아래 태그에서 학습할 수 있다.

태그

모든 태그를 다 언급할 수 없지만 자주 사용하는 태그들을 몇 개 알아보자

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>title</title>
  <writer></writer>
</head>
<body>
  <header>
    <h1>여기는 header 영역입니다.</h1>
  </header>
  <nav>
    <ul>
      <li><h1>리스트1</h1></li>
      <li><h2>리스트2</h2></li>
      <li><h3>리스트3</h3></li>
      <li><h4>리스트4</h0></li>
      <li><a href="apple.co.kr"> apple홈페이지</a></li>
    </ul>
  </nav>
  <main>
    여기는 main입니다. <br>
    개행이 됩니다.
    이것은 개행이 안됩니다. &nbsp
    이것은 띄어쓰기 입니다.
    <p>여기는 1문단 입니다.</p>
    따라서 1문단이 끝나므로 뒤 아래로 개행이 됩니다.
    <pre>
pre 태그 안의 이곳에 작성하는 모든 것은 전부 그대로 나타나게 됩니다.
개행 태그 없이 그냥 작성해도 되고 <br>개행태그 해서 작성해도 됩니다.
    </pre>
  </main>
  <footer>
    <h2>여기는 footer 영역입니다.</h2>
  </footer>
</body>
</html>

위 코드 실행 결과

먼저 레이아웃이다.

레이아웃은 말 그대로 틀을 잡아주는 것인데 아래 그림과 같이 html레이아웃이 정해져있다. 이에 맞춰 위치에 작성 해 주면 된다.

http://tcpschool.com/html/html_space_layouts

여기서 레이아웃 외에 다른 태그들을 볼 수 있는데

  1. <ul> unordered list : 순서 없는 목록을 만들 때 사용하게 된다.
  2. <li> list item : 리스트 목록을 작성할 때 사용하게 된다.
  3. <h?> heading : 표제로 정의된다. h뒤의 숫자가 작을수록 큰고 굵은 문자가 나오게 된다.
  4. <a> anchor : 링크를 만들 때 사용하게 된다. 속성으로 href를 가지고 뒤에 경로를 작성하면 클릭시에 해당 경로로 이동하게 된다.
  5. <br> line break : 개행시에 사용하게 된다.
  6. &nbsp : 띄어쓰기를 할 때 사용하게 된다. 여러번 쓰면 여러면 띄어쓰기 할 수 있다.
  7. <p> paragraph : 문단을 형성할 때 사용하게 된다. br태그로 개행하여 문단을 나눌 수 있지만 br태그를 남용하게 되면 가독성이 떨어지기 때문에 p태그를 사용하는것을 권장한다.
  8. <pre> : 해당 태그 안에 적은 문자는 태그를 제외하고 전부 작성한 형식과 똑같이 나오게 된다.

이렇게 기본적인 태그가 있다. 이 외에 table 태그나, img 태그 등 여러가지 태그가 더 있지만 이는 사용하면서 필요할 때 마다 더 찾아보도록 하자. 이는 프로젝트 부분에서 더 볼 수 있을 것이다.

 

 

'FRONT > Html' 카테고리의 다른 글

[Front] HTML input 태그(tag)  (0) 2020.06.13
[Front] HTML 작성 가이드  (0) 2020.06.11
[Front] HTML 태그(tag)  (0) 2020.06.10

이번에는 JDBC를 통해서 DBMS와 JAVA를 연동해보겠다.

 

내부 동작 구조와 JDBC

 

JDBC는 java사에서 DB와 연동 할 수 있게 만든 것으로 위와 같은 내부구조를 가진다. 하지만 JDBC는 바로 사용할 수 없고 interface만 구성되어 있고 동작은 overriding해서 사용해야 한다. 그 이유는 모든 DBMS가 같은 구조로 동작되지 않기 때문이다. 따라서 해당 DBMS에 맞게 재정의 해서 사용해야 한다.

내부 구조를 살펴보면 애플리케이션 즉, eclipse 와 같은 java ide에서 sql문이 String 형태로 날아갈 것이다. 그럼 이를 DBMS에서 사용할 수 있게 번역의 기능을 하는것이 JDBC이다. 이정도 구조만 알아도 이해하기엔 무리 없을 것이다.

 

기본적으로 프로젝트나 여러가지 상황에서 주로 동적 쿼리를 사용하는 경우가 많아 동적 쿼리를 기준으로 작성하였다.

정적 쿼리를 작성하고 싶은 경우 PreparedStatement 대신 일반 Statement를 사용하고 StringBuffer에 올바른 쿼리문을 작성하면 된다.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class UserDB {
	public static void main(String[] args) {
		StringBuffer sql = new StringBuffer();
		sql.append("insert into CGVUSER ");
		sql.append("values(?,?,?,?,sysdate)");
		Connection con = null;
		PreparedStatement pstmt = null;
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/XEPDB1","test","test");
			pstmt = con.prepareStatement(sql.toString());
			pstmt.setString(1, "id");
			pstmt.setString(2, "password");
			pstmt.setString(3, "저팔계");
			pstmt.setString(4, "남자");
			
			int result = pstmt.executeUpdate();
			System.out.println(result+"개의 행이 추가되었습니다.");
		}catch (ClassNotFoundException e) {
			e.printStackTrace();
		}catch(SQLException e) {
			e.printStackTrace();
		}finally {
			try {if(pstmt!=null) pstmt.close();} catch(SQLException e) {}
			try {if(con!=null) con.close();} catch(SQLException e) {}
		}
	}
}

위와 같이 INSERT 구문이 잘 동작하는것을 볼 수 있다.

'DB(DataBase) > Oracle' 카테고리의 다른 글

[DB] Oracle(오라클)의 기본적인 쿼리(CRUD)  (0) 2020.05.12
[DB] Oracle의 초기설정  (0) 2020.05.12

오라클을 설치하고 기본설정 하는 것은 이전 포스팅에서 완료 했다.

그리고 이번에는 DB가 무엇인지 오라클은 무엇인지 간단하게 설명하고 이러한 DB를 사용하는 기본적인 쿼리문을 살펴보려고 한다.

  • 쿼리문은 SQL에서 사용하는 코드라고 생각하면 편하다.

DB란?

DB란 Data Base의 약자로 특정 관심의 데이터를 수집하고 그 데이터의 성격에 맞게 잘 설계하여 이를 저장하고 관리함으로서 효율적으로 그 데이터를 사용할 수 있는 자원이다. 즉, 쉽게 말하면 데이터는 실제 존재하는 값들이다. 이러한 값들의 특징에 맞게 틀을 만들고 그 틀에 맞게 데이터를 저장하는 저장공간이라고 생각하면 편하다.

DBMS란?

DBMS란 Data Base Management System의 약자로 말 그대로 DB를 효율적으로 관리해 주는 일종의 프로그램이다. 그리고 DB를 효율적으로 관리하려면 데이터 추가(생성),불러오기,수정,삭제의 기능을 가지고 있어야 하는데 이를 CRUD(Create, Read, Update, Delete)라고 한다.

그리고 이러한 DBMS에는 여러가지 종류가 있는데 그중 가장 비중을 많이 차지하는 RDBMS에 대해 주로 알아볼 것이다.

RDBMS란?

관계형 데이터베이스로 데이터 베이스가 어떠한 관계가 맺어져 있다고 생각하면 편할것이다. 자세한 내용은 이후 포스팅 할예정이다.

RDBMS의 구조와 CRUD의 기본 문법

RDBMS는 기본적으로 테이블의 구조를 하고있다. 테이블구조는 쉽게 말하면 표 모양이다. 이는 아래 쿼리문을 학습하면서 알아보자

1. Create

  • Create는 말 그대로 생성하는 것이다. 생성을 할 때에는 아무렇게나 생성해서는 안된다. 여기서 DB의 정의를 다시 보면 DB는 “특정 관심의 데이터를 수집하고 그 데이터의 성격에 맞게 잘 설계하여 이를 저장하고 효율적으로 사용할 수 있는 자원”이다. 그렇다면 내가 저장하려고 하는 데이터의 특징을 먼저 파악해야한다.
  • 예를 들어 회원가입시에 필요한 User 테이블을 만들어보자.

전 포스팅까지 잘 따라했다면 이렇게 만들어져 있을 것이다.

그리고 데이터 베이스를 새로 만드는데 사용자 이름과 비밀번호는 저번에 생성한 그 본인 계정을 작성하면 된다.

기본적으로 Create 문은 Create [만드려고 하는 대상] [테이블명]( 데이터의 형태)로 구성이 된다.

데이터는 [데이터 속성] [데이터의 자료형] [데이터의 제약조건]으로 구성이 된다. 데이터의 속성은 데이터라면 마땅이 가져야할 특징,속성이다.

이번 유저 테이블을 예로 들자면 여러분들이 어떠한 사이트이든지 회원 가입을 하려면 필수적으로 작성해야하는 아이디나 패스워드 이름 등이 속성이 될 것입니다. 즉 유저를 정의하는 속성들인 셈이죠.

2. INSERT INTO

  • insert into 구문은 이렇게 만든 테이블에 데이터를 집어넣는 쿼리문 입니다.
  • INSERT INTO [table명] VALUES(‘속성1’,….);의 형태로 작성하게 되는데 이렇게 작성하려면 생성시에 작성한 데이터의 속성 순서대로 넣어야 한다. 그러려면 table안이 어떻게 구성되어있는지 알아야 하는 조건도 있어야 할 뿐만 아니라 원하는 데이터만 넣을 수 없는 단점이 있다.

  • 그래서 대부분 아래와 같이 모든 속성의 이름을 적고 작성하게된다.

INSERT INTO cgvuser(id,password,name,gender,birth)
VALUES(‘test2’,’test2',’사오정’,’여자’,’2020–05–11');

#참고 — SQL문은 대소문자를 구분하지 않는다. 하지만 구분하지 않으면 어디까지 명령어이고 어디부터 변수인지 한눈에 구분하기 어렵다. 따라서 기본적인 명령어는 대문자로 작성하는것이 좋다.

이제 데이터를 DB에 넣었으니 잘 들어갔는지 확인 해 보자.

3.SELECT

  • select문은 데이터를 검색할 때 사용하게 되는데 기본 구문은

SELECT [보고싶은 데이터 속성 명][][]… from [테이블 명];이다.

이 외에 SELECT는 여러가지 옵션이 있는데 이는 나중에 더 포스팅 해보도록 하겠다.

이와같이 쿼리문을 날리면 아까 insert into 구문으로 저장해둔 두 개의 데이터를 볼 수 있다.

여기서 RDBMS의 구조를 볼 수 있는데 저러한 데이터의 모양이 마치 표처럼 구성되어있고 행과 열이 있는 구조로 되어있다. 따라서 데이터의 속성 명을 column(열)이라 하고 데이터를 row(행)라고 한다.

4. DELETE

  • DELETE 구문은 데이터를 삭제하는 것이다. 기본 구문은
  • DELETE (from) [테이블 명];이고 이렇게 작성하면 테이블에 해당하는 모든 데이터가 삭제된다.
  • from 은 생략해도 된다.

이처럼 두개의 쿼리를 날리면 cgvuser에 해당하는 테이블에 있는 두 개의 데이터가 삭제된것을 알 수 있다.

이렇게 4가지의 쿼리가 기본적인 쿼리문으로 CRUD에 해당하는 구문이다.

앞에 말한 SELECT에 해당하는 쿼리는 추가적으로 공부해야할 부분이 많을 것이다. 워낙 활용도가 높은 구문이기 때문에 어떻게 사용하는지에 따라 굉장히 많은 것들을 사용할 수 있다. 이도 나중에 정리해서 포스팅 할 예정이다.

'DB(DataBase) > Oracle' 카테고리의 다른 글

[DB]JDBC를 통한 Oracle과 JAVA연동  (0) 2020.05.13
[DB] Oracle의 초기설정  (0) 2020.05.12

[DB] Oracle의 초기설정

Oracle은 DBMS의 한 종류인 대표적인 RDBMS이다.

오라클을 사용하려면 초기설정을 해야하는데 우선 해당 포스트는

18c버전을 기준으로 작성되었다.

설치는 어렵지 않게 oracle사에서 다운받을 수 있다.

그 뒤에 설정이 중요한데 설치가 완료되었으면 윈도우에서 cmd창을 띄운다.

그리고 cmd창에 sqlplus를 대뜸 적으면 위와 같이 사용자명을 입력하라는 것을 볼 수 있다. 그럼 설치하면서 작성한 루트계정에대한 아이디와 비밀번호를 입력하면 된다.

그러면 이와 같이 접속할 수 있다.

그 다음에

alter session set container=XEPDB1;

이라는 명령어를 치면 되는데 오라클은 MySQL과 다르게 컨테이너라는 것이 있는데 기본적으로 설정되어있는 컨테이너에서는 아무것도 할 수 없기 때문에 XEPDB1 컨데이너로 이동한다.

그리고 오라클에서 기본적으로 제공하는 유저가 있는데 바로 hr이다. 그러므로 hr 유저에대한 사용권한과 비밀번호를 설정해야 한다. 물론 본인 고유의 아이디와 비밀번호를 만들 수 있다.

이런식으로 하면 접속할 수 있다.

명령어 대부분을 차지하는 alter를 사용하게 되면 주로 대답이 ~~이 변경되었습니다. 로 나오게 되는것으로 보아 alter는 어떠한 설정을 변경하는데 사용하는 명령어라는 것을 유추 할 수 있다. 실제로도 맞다.

alter user hr identified by hr;

이 명령어는 alter user [ID] identified by [password]; 의 문법을 기준으로 사용한다.

여기서 또 유추해 볼 수 있는점은 alter가 수정이었다면 수정에 해당하는 alter를 생성으로 바꿔 

create user [id] identified by [password];

이렇게 사용해 볼 수 있지 않을까? 해보자

역시나 생성이 된다. 앞으로는 기본 유저 말고 이 유저를 사용해볼 예정이다.

그럼 이제 사용하면 되느냐?? 아니다. 이제 막 들어온 신입한테 무슨 권한이 있겠는가?? 권한을 부여해보자

기본적으로 사용하기 위한 초기 셋팅이라고 할 수 있다.

오라클은 tablespace라는 개념이 있는데 그 테이블 스페이스에 여러개의 테이블이 그냥 올라가게 된다. 그 테이블 스페이스의 용량을 차지할 수 있게하는(?) 권한을 준 것이라고 생각하면 되겠다.

이러한 일련의 과정들은 사실 sqldeveloper에서 해도 된다. 그리고 그곳이 아마 UI가 보기 좋아 편할것이다.

 

 

다음 포스팅은 이렇게 설치한 오라클을 가지고 기본적인 테이블 생성과 CRUD구문을 작성해볼 예정이다.

'DB(DataBase) > Oracle' 카테고리의 다른 글

[DB]JDBC를 통한 Oracle과 JAVA연동  (0) 2020.05.13
[DB] Oracle(오라클)의 기본적인 쿼리(CRUD)  (0) 2020.05.12

나는 지금부터 천천히 facebook, instagram 처럼 SNS 서비스를 제공하는 웹 페이지를 제작하는 프로젝트를 시작할 것이다. 그리고 프로젝트 시작 전에 프로젝트를 관리하기 위해 내가 사용할 도구, 툴에 대해서 소개 할 것이다.

 

기본적으로 프로젝트를 관리하는 방법과 도구, 툴들은 너무나도 많다.

 

1. 그 중 첫 번째로 나의 프로젝트 전체 일정 관리 부분에서 에자일 방식의 개발을 사용할 것이고 툴은 Jira라는 툴을 통해서 관리하게 될 것이다.

기본적인 Jira에 관한 설명은 일전에 블로그에 개시해두었다. 

https://denyok.tistory.com/7?category=790116

 

[SW] JIRA를 이용한 스크럼 프로젝트 관리

* 스크럼(Scrum)은 프로젝트관리를 위한 상호,점진적 개발방법론이며, 애자일 소프트웨어 공학 중의 하나이다. 소프트웨어 개발은 애자일 개발 방법론을 기반으로 진행되어 진다. 이 방법론의 특징은 협업을 중요..

denyok.tistory.com

이 글을 참고 하면 되겠다. 위 글을 보면서 Jira 프로젝트를 하나 만들었다.

앞으로 이게 내 Jira로 여기에 프로젝트 관리를 시작할 것이다.

 

 

 

2. 두 번째는 Git이다.

Git에는 여러 종류가 있는데 가장 보편적으로 사용하고 사용하기 쉬운 온라인 기반의 원격 저장소를 관리해 주는 Github를 사용할 것이다. Git이 어떤것인지 그리고 어떻게 사용해야 하는지에 대해서 포스팅 할 것이다. Git을 만들고 생성하는 자세한 과정은 포스팅 하지 않겠다. 쉽게 찾을 수 있을 것이다.

 

 

우선 Git을 이해하려면 그 흐름을 알고 있는게 편할것이다.

Git은 크게 4가지 구역으로 나누어져 있는데

 

- Working directory : 내가 현재 작업하고 있는 공간을 의미한다.

 

- Staging area : 작업하는 공간에서 Local repository로 저장하기 전에 임시로 저장해 두는 곳으로 일종의 버퍼라고 생각하면 편할 것이다.

 

- Local repository : 로컬 저장소 즉, 현재 사용중인 서버 주로 노트북이나 PC의 메모리에 해당하는 공간을 의미한다.

 

- Remote repository : 원격 저장소 즉, Github를 의미한다.

 

 

그 다음 알아야 할 것은 용어다.

 

- add : 현재 작업 공간에서 로컬 저장소로 저장 하기 전에 임시 저장소에 저장하는 행위를 뜻한다.

 

- commit : 임시 저장소에 있는 코드를 로컬 저장소에 저장한다. 이러한 행위를 commit이라고 한다. 그리고 커밋을 할때 일종의 코멘트를 작성하는데 (이 또한 커밋이라고 한다.) 이 코멘트를 읽고 어떤 부분이 바뀌었는지 짐작을 할 수 있게 작성을 해야한다. 또 commit은 하루의 작업을 마무리하면서 로컬 저장소에 저장하는것이 아니라 주관적으로 의미 있는 변경의 단위가 바뀌었다고 생각이 되었을 때 작성하는 것이 좋다. 이는 지극히 주관적이므로 사람마다 커밋의 단위는 차이가 있을 수 있다.

 

- push : 이렇게 커밋하여 로컬 저장소에 저장된 이 코드들을 원격 저장소에 저장하는 것을 의미한다.

 

- fetch : 원격 저장소에 저장된 코드를 다시 내 로컬 저장소로 가져와 저장하는 것을 의미한다. 이는 주로 작업을 다시 수행할 때 하게 된다.

 

- merge : 로컬 저장소에 있는 코드를 현재 내 작업 공간에 위치하여 업데이트 시키는 것을 의미한다.

 

- pull : fetch + merge의 과정을 pull이라고 한다. 다른 개발자와 싱크를 맞추는 역할을 수행한다.

 

- branch : 위의 용어들과 성격이 좀 다른 용어이다. 용어의 의미를 말 해 주기전 branch의 사전적 의미를 생각해보자 branchs는 (나뭇)가지의 의미를 가지고 있다. 이를 코드에 적용해 보면 현재 프로젝트의 main코드 즉, 아무 문제 없이 작동되는 코드를 몸통이라고 하면 이 코드를 가지고 직접적인 개발을 하기엔 리스크가 너무 크다. 그래서 branch라는 가지를 두어 개발한 후에 문제가 없는 것을 확인 후에 main 코드에 업데이트 하는 것이다.

 

이러한 작업들은 꽤나 까다롭다. 근데 카톡으로 주고받고 할 수 있는 것을 왜 Git을 사용하면서 까지 코드를 관리할까?

 

- 릴리즈 관리, 버전관리를 하기 쉽다.

- 코드 병합시에 문제해결이 편하다.

 

이게 다는 아니지만 이것만으로 충분히 사용할 만한 가치가 있다.

 

이정도만 알면 프로젝트 개발시에 문제가 없을것으로 보인다.

 

그럼 이제 프로젝트를 진행 해 보자.

 

 

 

 

 

 

 

 

 

 

 

Spring Boot는 내장 톰캣이 존재하여 실행 가능한 Jar 파일을 만들어 배포하기 쉽다.

이 글은 “스프링 스타터 프로젝트 HelloWorld jar 파일 내보내기” 이걸 기준으로 작성하였다. 좀 더 자세한 내용이 보고 싶으면 위 링크를 따라 가보는것을 추천한다.

실행 가능한 Jar파일로 빌드 — 실행 환경설정
  • 이클립스의 Run 메뉴의 Run Configurations 접속

  • 왼쪽 리스트의 Java Application 더블 클릭 Name: New_configuration 작성Main class: [Search…] 클릭
  • “Select Main Type” 메인 클래스 Boot의 경우 생성시에 자동으로 ‘프로젝트 이름 + Application’ 형태로 생성 된다. - 패키지 선택 

  • 적용하고 실행
  • 기존과 똑같이 실행된다.
실행 가능한 Jar파일로 빌드 — 내보내기
  • Jar 파일로 배포할 프로젝트 Makeup[boot] 우클릭하고 Export 클릭
  • Runnable JAR file 선택 —  [Next >]

  • Launch configuration: 에 아까 환경 설정에 했던 configuration 선택(Makeup) Export destination: [Browse…] 클릭

  • Jar 파일로 저장하고 싶은 위치 지정

 

+ Recent posts