git file 상태 흐름도

git source file Status는 tracked와 untracked로 구분됩니다. 

tracked는 git에 의해 추적되고 있는 상태를 뜻하고, untracked는 추적되고 있지 않은 상태를 의미합니다.


  • Untracked
    • 원격 저장소에 올릴 필요가 없는 파일
    • 새롭게 생성된 파일

  • Tracked
  • git에 의해 추적이 되고있는 상태를 의미하고 총 3가지로 구성됩니다.
    • modified
      • 원격 저장소에 업로드 되어있고, 파일이 수정된 상태
    • unmodified
      • 커밋 된 상태
      • 원격 저장소에 업로드 되어있고, 파일이 수정되지 않은 상태
      • git status 명령어를 실행해도 화면에 노출되지 않는다.
    • staged
      • git add 명령어를 통해 index(stage) 저장소에 올라온 상태
      • modified 또는 untracked 일 경우 staged로 넘어 올 수 있다.

workspace안에 readme.txt파일 과 new_file.txt파일이 있다. readme.txt 파일은 원격저장소에 업로드 되었고
수정이 되지 않아서 unmodified 상태이다. 

new_file.txt 파일은 새롭게 추가되었고, untracked 상태이다.

readme.txt 파일을 수정하면 modified 상태로 변하게 된다.

위 두 파일을 git add 명령어를 통해 index(stage) 저장소로 이동해 staged 상태로 변경해보자.

git add .
git status

위 두 파일이 staged 상태로 변경된 것을 볼 수 있다. 이때 readme.txt 파일을 수정하면 다음과 같은 상태로 변경된다.

readme.txt 파일은 staged 상태와 modified 상태이다. 이 상태에서 commit을 하게 되면 현재 index(stage) 저장소에 있는 소스 들만 로컬 저장소로 이동하며, unmodified 상태로 변경된다.

이 경우 다시 git add 명령어를 입력하여 수정된 소스도 index(stage) 저장소로 이동시켜주자.

git add .
git status

이제 두 파일을 git commit 명령어를 통해 로컬 저장소로 이동 시켜 unmodified 상태로 변경해보자.

git commit --message "커밋메시지"
git status

unmodified 상태인 경우 git status 명령어를 입력해도 화면에 노출되지 않는다.

new_file.txt와 readme.txt 파일은 로컬저장소에 저장되어 있으며,
원격 저장소로 올리기 위해서는 push명령어를 사용해야한다.

git push 원격지명 브랜치명  

 

참조 : https://git-scm.com/book/ko/v2/Git%EC%9D%98-%EA%B8%B0%EC%B4%88-%EC%88%98%EC%A0%95%ED%95%98%EA%B3%A0-%EC%A0%80%EC%9E%A5%EC%86%8C%EC%97%90-%EC%A0%80%EC%9E%A5%ED%95%98%EA%B8%B0

 

git이란 소스코드를 효과적으로 관리하기 위해 개발된 분산형 버전 관리 시스템이다

git을 이용해 소스코드를 관리하기 위해 다음과 같은 준비가 선행되어야한다.


1. Git 소스 흐름도

Git 흐름도

git은 4가지의 저장소로 구분된다.

  • workspace
    • 현재 작업중인 장소를 의미한다.
  • index(stage)
    • workspace의 수정된 소스를 저장하는 장소(add)
  • local repository
    • 원격 저장소 업로드하기 전 저장소(push)
    • workspace 반영 없이 원격 저장소의 수정사항을 적용할 수 있는 장소 (fetch)
  • remote repository
    • 원격 저장소
    • clone 명령어를 통해 소스를 다운로드 할 수 있다.

2. Git 초기 설정

Global 설정

git config --global user.name "사용자명"
git config --global user.email "메일 주소"

Local 설정

git config user.name "사용자명" 
git config user.email "메일 주소"

local 설정 시, 매번 프로젝트 마다 커밋한 유저를 설정해주어야 하지만, global 설정 시 한번만 해주면 된다.

git 설정 확인

git config --list

global 유저 정보 및 원격 저장소 등 현재 경로의 git repository의 설정 정보를 보여준다.


3. Git Clone

Github에 만들어둔 원격 저장소를 다운받아보겠다.

소스를 다운받기전 git 폴더를 만들고, git bash 실행 후 해당 경로로 이동한다.

아래 git 원격 주소는 예시이며, 직접 원격 저장소를 만들어 테스트해야 한다.

cd D:/dev/git
git clone https://github.com/Bamdule/test.git

위처럼 출력되었다면 workspace 생성에 성공한 것이다.

해당 폴더 안에는 .git 폴더가 있을 것이다. 해당 폴더는 repository에 대한 각종 정보가 저장되어있다. 


4. Git add

workspace에 readme.txt 파일을 생성하고 다음과 같은 명령어를 입력해보자

git status

untracked 상태인 readme.txt 파일

readme.txt 파일은 git에 의해 추적이 안되는 상태이다. 이 상태를 untracked 상태라고 말한다.
git add readme.txt

git status

tracked 상태인 readme.txt 파일

위 명령어를 입력하면 readme.txt파일 tracked 상태로 변경되고, index(stage) 공간으로 변경사항이 저장된다.

git add .

위 명령어 입력 시, 모든 추가/변경사항이 index(stage) 공간으로 이동한다. 


5. Git commit

index(stage) 공간에서 로컬 저장소로 추가/변경된 사항이 이동한다.

git commit --message "커밋 메시지"

커밋 완료 메시지


6. Git Remote

로컬 저장소의 추가/변경 사항을 원격 저장소에 반영하기 위해서는 원격 저장소를 설정에 등록해야한다.

git remote add 원격지명 원격지주소
git remote add origin https://github.com/Bamdule/test.git

git remote -v

원격 저장소 주소 보기

원격지를 잘못입력하여 삭제하고 싶으면 다음 명령어를 입력하면 된다.

git remote remove 원격지명

7. Git push

로컬 저장소의 추가/변경 사항을 원격 저장소에 반영한다.

별다른 브런치를 생성하지 않았다면 자동으로 master 브런치가 생성/적용되어있다.

git push 원격지명 브랜치명
git push origin master

git push 완료 메시지

 

github 원격 저장소에 업로드 된 readme.txt

github repository에서도 확인할 수 있다.


8. Git pull

원격 저장소에 공동 작업자가 새로운 기능을 업로드 했을 때, 자신의 로컬 저장소와 workspace에 반영한다.

임시로 직접 github에서 pull_test.txt 파일을 등록해보자

repository list > create new file > 파일명 및 내용 입력 > commit new file
git pull origin master

pull_test.txt 파일을 다운받은 것을 볼 수 있다.

1. MySql 5.7 설치

yum -y install http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
yum -y install mysql-community-server

위 두개의 파일을 다운로드 합니다.

mysql을 실행하면 임시 비밀번호가 생성되고 mysqld.log 파일 안에서 임시 비밀번호를 확인 할 수 있습니다.

systemctl start mysqld

vi
/var/log/mysqld.log

임시 비밀번호는 MYk+*FL?c2pu와 같이 생성된다.

mysql -u root -p

mysql을 실행하고, root계정으로 로그인합니다.

로그인이 완료되면, 비밀번호를 재설정 합니다.

ALTER USER 'root'@'localhost' IDENTIFIED BY '!@#QWEasd123';
FLUSH PRIVILEGES;

비밀번호 보안수준을 높게 해야하기 때문에, 특수문자, 영대소문자, 숫자를 모두 입력해야합니다.

status 명령어를 입력하면 설치된 Mysql 정보를 볼 수 있습니다.

2. CharacterSet UTF8 설정하기

mysql의 기본 charset은 latin1입니다. 이것을 utf8로 바꾸어 보겠습니다.

mysql 설정은 my.cnf 파일에서 변경할 수 있습니다. 

vi /etc/my.cnf 

위 명령어를 입력해 my.cnf 파일을 열고 다음과 같이 수정해줍니다.

[client]
default-character-set = utf8

[mysql]
default-character-set=utf8

[mysqldump]
default-character-set=utf8

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

character-set-server=utf8
collation-server=utf8_general_ci
init_connect=SET collation_connection = utf8_general_ci
init_connect=SET NAMES utf8

character-set-client-handshake = FALSE
skip-character-set-client-handshake

symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

 

설정이 완료되었다면, Mysql을 재시작하고 다시 접속합니다.

systemctl restart mysqld

mysql -u root -p

status

status 명령어로 확인하면 모든 charset이 utf8로 변경된 것을 볼 수 있습니다.

mysql status

이 것으로 포스팅을 마치겠습니다.

 

참조 - https://www.opentutorials.org/module/1701/10229

 

Centos 7 - 데이타베이스(MySql) 설치 - 나만의 Web Server 만들기

Centos7 부터는 데이타베이스가 Mariadb로 바뀌었습니다. 그래서 MySql을 yum 으로 바로 설치가 불가능합니다. 때문에 아래 명령을 차례로 입력하여 줍니다. # yum -y install http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm # yum -y install mysql-community-server # systemctl start mysqld # systemct

www.opentutorials.org

 

사용 버전

  • VMware Workstation 15
  • CentOS 7

버전이 달라지면 설정하는 방법도 달라집니다.
되도록이면 버전을 맞추어 주세요.

 

1. VMware Workstation 설치

VMware는 가상머신의 한 종류이고, 컴퓨팅 환경을 소프트웨어로 구현한 것 입니다.

가상머신 상에서 운영 체제나 응용 프로그램을 설치 및 실행할 수 있습니다.

우선 가상머신을 다운로드 해줍니다.

www.vmware.com/kr/products/workstation-player/workstation-player-evaluation.html

다운로드 > 무료 제품 다운로드 > workstation player > 지금 다운로드

위와 같이 다운로드가 되었다면 VMware-player-버전.exe 설치파일을 실행해줍니다.

원하시는 설정에 맞추어 Next를 누른 후 설치를 완료합니다.

 설치가 완료되었다면, VMware workstation을 실행시킵니다.

실행이 되었다면, CentOS 7을 설치해줍니다.

centOS 7는 여러가지 버전이 있습니다. 저는 아래 경로에서 다운받았습니다.

http://mirror.kakao.com/centos/7.7.1908/isos/x86_64/CentOS-7-x86_64-DVD-1908.iso

http://mirror.kakao.com/centos/7.8.2003/isos/x86_64/CentOS-7-x86_64-DVD-2003.iso

CentOS 7까지 다운이 완료되었다면 VMware에서 Player > File > New Vertual Machine을 선택 후
다운받은 CentOS 7을 선택해주세요.

 

 

 

Finish를 누르면 가상의 CentOS가 생성됩니다.

Play virtual machine을 누르면 검은창이 뜨고 CentOS7의 여러가지 정보를 보여주는데 확인 후, 다음 화면까지 이동해줍니다.

원하시는 언어를 선택 후, Continue를 눌러줍니다.

위 화면에서 DATE & TIME, INSTALLATION DESTINATION, NETWORK & HOST NAME을 설정해줍니다.
(DATE & TIME 설정 화면 생략)

INSTALLATION DESTINATION

VMware, VMware Virtual S를 클릭하면 체크표시가 노출됩니다. 클릭했다면, 맨위에 파란색 Done 버튼을 눌러주세요.

NETWORK & HOST NAME

Host name을 원하는 이름으로 변경하고 오른쪽 위에 파란 버튼을 OFF에서 ON으로 변경 후 Done 버튼을 눌러줍니다.

설정이 완료되었다면, Begin Installation 버튼을 눌러주세요.

해당 화면까지 오셨다면 자동으로 설정에 맞게 CentOS 7 설치가 진행됩니다. 

설치가 진행되는 동안 ROOT PASSWORD와 USER CREATION을 설정해주세요.

설치가 완료되었다면 Reboot 버튼을 눌러줍니다.

계정 로그인 후 인터넷 연결 확인을 위해 ifconfig를 입력해줍니다.

ifconfig를 찾을 수 없다고 뜰 경우 

yum install net-tools 명령어를 입력해 net-tools를 설치해줍니다. 

설치가 완료되었다면, ifconfig 명령어를 입력해 네트워크 설정이 잘되었는지 확인합니다.

ping google.com을 입력해 인터넷이 연결되었는지 확인합니다.

여기까지 CentOS7 설치 방법을 알아보았습니다.

도움이 되셨다면 추천버튼 한번씩 눌러주세요.

 

 

'IT > Linux' 카테고리의 다른 글

[Linux] CentOS 7에 OpenJDK 1.8 설치  (0) 2020.02.19
[Tomcat] CentOS 7에 Tomcat8 설치 및 설정  (0) 2020.02.19
[Linux] 계정과 그룹관리  (0) 2020.02.12
[Linux] CentOS 7 Git Server 구축하기  (0) 2020.02.11
[Linux] CentOS 7 Mysql 설치  (0) 2019.12.27

Java의 문자열 관련 클래스인 String 메소드 정리 글입니다.

참고 : CharSequence는 인터페이스이며, String 클래스는 CharSequence를 구현한 구현체입니다.


char charAt(int index)
  • 문자열의 Index번째 문자를 반환한다.
String str = "abcde";
char c = str.charAt(1); // 'b'


int indexOf(int ch)
int indexOf(int ch, int fromIndex)
int indexOf(String str)
int indexOf(String str, int fromIndex)
  • 문자열의 첫번째 인덱스를 기준으로 마지막 인덱스까지 검색하여 특정 문자가 위치한 인덱스를 반환한다. 
  • fromIndex는 검색 범위를 지정한다.
    • fromIndex가 2일 경우 2 ~ 마지막 문자 인덱스 조회
  • 찾지 못하면 -1을 반환한다. 
String str = "abcdef";
System.out.println(str.indexOf("c")); // 2
System.out.println(str.indexOf("c", 2)); // 2
System.out.println(str.indexOf("c", 3)); // -1


int lastIndexOf(int ch)
int lastIndexOf(int ch, int fromIndex)
int lastIndexOf(String str)
int lastIndexOf(String str, int fromIndex)

  • 문자열의 마지막 인덱스를 기준으로 첫번째 인덱스까지 검색하여 특정 문자가 위치한 인덱스를 반환다.
  • fromIndex는 검색 범위를 지정한다.
    • fromIndex가 6일 경우 0 ~ 6 인덱스 조회
  • 찾지 못하면 -1을 반환한다.
String str = "abcdcef";
System.out.println(str.lastIndexOf("c")); // 2
System.out.println(str.lastIndexOf("c", 6)); // 2
System.out.println(str.lastIndexOf("c", 1)); // -1


String substring(int beginIndex) 
String substring(int beginIndex, int endIndex)
  • beginIndex부터 endIndex -1 사이에 위치한 String을 반환한다.
String str = "abcdcef";
System.out.println(str.substring(3)); // dcef
System.out.println(str.substring(1, 3)); // bc


String replace(String target, String replacement) 
String replaceAll(String regex, String replacement)
String replaceFirst(String regex, String replacement)
  • 특정 문자열을 검색해 특정 문자열로 변경한다.
  • replace 메소드와 replaceAll 메소드의 차이는 정규표현식의 사용 가능 유무이다.
String str = "abcdefbg";
System.out.println(str.replace("a", "apple")); // applebcdefbg
System.out.println(str.replaceAll("[b,a]", "X")); // XXcdefXg
System.out.println(str.replaceFirst("[b,a]", "X")); // Xbcdefbg


String concat(String str)
  • 두개의 문자열을 합쳐서 반환한다.
String str = "I am";
System.out.println(str.concat(" a boy"));//I am a boy


boolean isEmpty()
  • 문자열이 비어있는지 확인한다.
String str = null;
System.out.println(str.isEmpty()); // true


String[] split(String regex)
String[] split(String regex, int limit)
  • 문자열을 특정 문자를 기준으로 나눈다.
  • 정규식을 사용하여 나눌 수 있다.
String str = "1 2 3 4 5 6 7";
str.split(" "); // [1, 2, 3, 4, 5, 6, 7]
str.split(" ", 2); //[1, 2 3 4 5 6 7]

boolean contains(CharSequence s) 
  • 특정 문자가 포함되어있는지 검색한다.
String str = "i am a boy !";
System.out.println(str.contains("bo")); //true

boolean startsWith(String prefix) 
boolean startsWith(String prefix, int toffset)
  • 특정 문자로 시작하는지 검색한다.
  • toffset 파라메터를 이용해 시작위치를 조정할 수 있다.
String str = "i am a boy !";
System.out.println(str.startsWith("boy")); //false
System.out.println(str.startsWith("boy", 7)); //true

boolean endsWith(String suffix)
  • 특정 문자로 끝나는지 검색한다.
String str = "String.java";
System.out.println(str.endsWith(".java")); //true
System.out.println(str.endsWith(".class")); //false

boolean matches(String regex)
  • 정규식이 만족되는 문자열인지 확인한다.
String str = "12345";
System.out.println(str.matches("(^[0-9]*$)")); //true , 문자열이 모두 숫자인지 확인한다.

char[] toCharArray()
  • 문자열의 각 문자를 char[]에 담아 반환한다.
String str = "korea";
str.toCharArray();//[k, o, r, e, a]

String toUpperCase()
String toLowerCase()
  • 모든 문자열을 대문자/소문자(Upper/Lower)로 변경한다.
String str = "KoreA";
System.out.println(str.toUpperCase()); //KOREA
System.out.println(str.toLowerCase()); //korea

String trim()
  • 시작과 끝에 존재하는 공백을 제거한다.
  • 중간에 있는 공백은 제거하지 않는다.
String str = "   K ore A    ";
System.out.println(str.trim()); //K ore A

int length() 
  • 문자열의 개수를 반환한다.
String str = "Korea";
System.out.println(str.length()); //5

byte[] getBytes(Charset charset)
byte[] getBytes()
  • 문자열을 특정 charset으로 Encoding해준다.
  • charset을 넘기지 않으면 기본 플랫폼 charset으로 Encoding된다.

static String format(String format, Object... args)
  • 문자열을 정의된 format대로 치환하여 반환한다.
String str = "log-%s.%s";
System.out.println(String.format(str, "20191224", "txt")); //log-20191224.txt

도움이 되셨다면 추천 부탁드립니다.

모두 좋은 하루 되세요.

1. (Annotation) String > LocalDateTime, LocalDate, LocalTime 

import java.time.LocalTime;
import java.time.LocalDate;
import java.time.LocalDateTime;
import org.springframework.format.annotation.DateTimeFormat;


...

@DateTimeFormat(pattern = "YYYY-MM-dd'T'HH:mm:ss")
private LocalDateTime localDateTime;

@DateTimeFormat(pattern = "YYYY-MM-dd")
private LocalDate localDate;

@DateTimeFormat(pattern = "HH:mm:ss")
private LocalTime localTime;

...

2. String > LocalDateTime, LocalDate, LocalTime 

LocalDateTime.parse(localDateTimeStr, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"));
LocalDate.parse(localDateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
LocalTime.parse(localTimeStr, DateTimeFormatter.ofPattern("HH:mm:ss"));

3. LocalDateTime, LocalDate, LocalTime > String

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

public class Main {

    public static void main(String[] args) {

        LocalDateTime localDateTime = LocalDateTime.now();
        String localDateTimeStr = localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"));
        System.out.println(localDateTimeStr);

        LocalDate localDate = LocalDate.now();
        String localDateStr = localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        System.out.println(localDateStr);

        LocalTime localTime = LocalTime.now();
        String localTimeStr = localTime.format(DateTimeFormatter.ofPattern("HH:mm:ss"));
        System.out.println(localTimeStr);

    }
}

 

'IT > JAVA' 카테고리의 다른 글

[JAVA] 배열 설명 및 초기화 방법  (0) 2020.07.09
[Java] Windows 10 Open-JDK 8 다운로드 및 환경변수 설정  (0) 2020.04.07
[Java] 람다(Lambda) 란?  (0) 2020.03.13
[JAVA] Java 란?  (0) 2020.03.03
[JAVA] String 메소드 정리  (0) 2019.12.18

1. Spring Framework란?

서버 어플리케이션 개발 시, 코드 품질 및 개발 속도를 상향 평준화시키기 위해 고안된 프레임워크이다.

 

2. Spring의 특징 

POJO(Plain Old Java Object)
POJO 특정 객체에 종속적이지 않은 순수한 객체를 의미한다.
왜 Spring은 POJO객체를 지향하는 것 일까?
그것은 객체가 특정 객체에 종속적이게 되면, 확장성이 매우 떨어지기 때문이다.

DI(Dependency Injection) - 의존성 주입
Framework에 의해 객체에 속성값을 주입하는 방식으로, 모듈간의 결합도를 낮추어 유연한 코드를 작성하게 해준다.

AOP(Aspect-Orented Programming) - 관심지향 프로그래밍
프로그램 로직 중에 반복되는 코드를 횡으로 분리하여 중복된 코드를 줄여주고 핵심 로직에 대한 가독성을 높여준다.  반복되는 핵심 로직은 Logging, Securirty, Transaction 등이 있고, 해당 로직을 모듈화하여, 필요한 로직에 끼워 넣을 수 있다.

 

3. Spring MVC란?

Model, View, Controller를 분리한 디자인 패턴이다.
Model
View가 데이터를 표현하는데 필요한 데이터이다. 예를 들어서 게시글 리스트, 게시글 상세 등, 화면에 출력하기 위한 데이터를 의미한다.

View

Model Data의 렌더링을 담당하며, 렌더링된 데이터를 포함한 HTML을 생성한다.
JSP, Thymeleaf, Freemaker, Mustache 등 여러 Template Engine이 있다.

Controller

View와 Model 사이의 연결을 담당한다.

 

4. Spring MVC의 동작

 

DispatcherServlet
Spring Framework가 제공해주는 Servlet클래스이다. FrontController라고도 하고 사용자의 URL 요청을 수행할 Controller를 찾기 위해  URL 정보를 HandlerMapping로 전달한다.

HandlerMapping
사용자의 요청을 처리할 Controller를 찾는다. (Controller URL Mapping)
Controller와 URL을 연결할 수 있는 Mapping Table을 가지고있다.
Controller 선언 시 함께 선언하는 @RequestMapping("/url")통해 매핑이 가능하다.

Controller

사용자 요청에 대한 처리를 담당한다.
DB에 대한 처리 및 파일 처리 등, 다양한 서비스 로직을 호출하여 실행한다.
Servlet이 수행했던 역할과 같다.
@Controller를 통해 선언가능하다.

ViewResolver

Controller가 반환한 View Name에 Prefix, suffix를 적용하여 View Object를 반환한다.

 

4. Spring MVC 동작 상세

사용자가 브라우저를 통해 특정 URL로 서비스를 요청한다.

2) DispatcherServlet이 요청을 가로채고, Controller를 찾기 위해 HandlerMapping에 요청 정보를 전달한다.

3) HandlerMapping을 통해 Controller를 찾고 DispatcherServlet에 반환한다.

4) Controller를 실행해 사용자가 요청한 처리를 수행 후, Model과 View를 DispatcherServlet에 반환한다.

5) DispatcherServlet은 View Name을 ViewResolver로 전달하여 View를 찾고 Model 값을 이용해 렌더링하여 사용자에게 반환한다.


참조 :

engkimbs.tistory.com/601
gmlwjd9405.github.io/2018/12/20/spring-mvc-framework.html

 

Servlet은 웹 요청에 대한 동적인 처리를 수행하는 클래스이다. 
  • 서버 상에서 실행되는 자바 프로그램
  • 개발자가 작성해야하는 부분이다. 
  • HttpServlet 클래스를 상속하고 doPost(), doGet() 등을 재정의하여 요청에 대한 응답을 처리한다. 

 

WAS 동작 과정

 

Servlet의 기본 동작 과정 

  • Web Server는 Http Request를 Web Container에게 위임한다.
  • 클라이언트 URL 요청이 들어오면,  Web Container가 URL 매핑을 통해 Servlet을 실행한다.
  • Servlet이 처음 실행된 것이라면 init() 메소드를 통해 Servlet을 초기화하고 메모리에 로드한다. 
  • Servlet이 메모리에 적재되어있다면 Thread를 생성하고 service() 메소드를 실행해 요청에 대한 처리와 응답을 수행한다.
  • service() 메소드 실행 시, 요청 Method 타입에 따라 doGet(), doPost() 메소드가 호출된다.
  • 요청이 끝나면 Thread는 종료되고 제거된다. 하지만 해당 Servlet 객체는 메모리에 계속 유지된다.

 

 

Servlet LifeCycle

Web Container는 Thread의 생성과 제거를 담당한다.

thead의 생성과 제거의 반복은 큰 오버헤드를 만든다.

이를 위해 Tomcat(WAS)은 Thread Pool을 만들어 오버헤드를 줄인다.

즉, Web Container는 Servlet의 LifeCycle을 당담한다.

클라이언트의 요청이 들어왔을 때, Servlet객체 생성은 Web Container가 알아서 처리한다.

개발자는 서비스 로직을 수행하는 Servlet만 개발하면 된다.

 

init(), service(), destroy() 메소드

  • init() 메소드
    • 한 번만 수행된다
    • 클라이언트가 요청하면 servlet이 생성되고, 메모리에 로드 될 때, init() 메소드가 호출된다.
    • Servlet 객체를 초기화 역할을 수행한다.
  • service(request, response) 메소드
    • request type에 따라서 doGet(), doPost(), doPut(), doDelete() 메소드가 실행된다.
    •  메서드가 return되면 해당 thread는 제거된다.
  • destroy() 메소드
    • 한 번만 수행된다.
    • WAS가 갱신되거나 종료될 때 호출된다.
    • Servlet 객체를 메모리에서 제거하는 역할을 수행한다.

 

HttpServletRequest, HttpServletResponse 객체

  • HttpServlet을 상속한 클래스의 doGet(), doPost() 메소드 등의 파라메터로 넘어온다.

 

  • HttpServletRequest
    • 클라이언트의 요청 정보(헤더 정보, 파라메터, 쿠키, URI, URL 등)를 저장한다.
    • getHeader("헤더이름") 메소드를 통해서 헤더정보를 확인 할 수 있다.
    • getPrameter("파라메터이름") 메소드를 통해 parameter 값을 확인 할 수 있다.
    • getParameterValues("파라메터이름") 메소드를 통해 배열로 저장된 값을 읽을 수 있다.
  • HttpServletResponse
    • HTML 코드 및 데이터를 담아서 반환할 수 있다. 

 

참조 - https://gmlwjd9405.github.io/2018/10/28/servlet.html

 

 

 

+ Recent posts