기존 이클립스에서 개발하던 프로젝트를 인텔리제이에서 사용하려고, 환경설정 중이었는데
인텔리제이 커뮤니티에서는 내장톰캣 지원 안된다.

그래서 기존에 사용하던 아파치 톰캣7을 직접 설치 후 연동해서 사용하려고 함.

※ 요약
- CATALINA_HOME, JAVA_HOME 환경변수 생성(톰캣 설치위치)
- service.bat install 이후 startup.bat 실행
- 콘솔에서 한글 깨질경우 아래 가이드 보고 설정 후 cmd 종료 후 재실행

 

1. Apache Tomcat 9 다운 / JDK 11 기존거 그대로 사용

> 기존에 톰캣 7사용중이었는데, JDK 11이랑 호환이 안되어서 톰캣 9로 올림
   톰캣7으로 환경설정 후 startup.bat 실행하면, 실행하다가 갑자기 혼자 종료 됨 - 9로 버전 올린 후 사용결과 정상동작     확인

 

 

2. 톰캣 환경변수 CATALINA_HOME 환경변수 추가

사진 1. CATALINA_HOME 환경변수 추가

 

 

3. JAVA_HOME 환경변수 추가

사진 2. JAVA_HOME 환경설정

 

 

4. 실행 후 설치 폴더로 들어가서 cmd : service.bat install  실행해서 설치

 

 

5. cmd로 CATALINA_HOME/bin로 이동 후 startup.bat 실행.
정상 실행되지만 한글 깨짐

log폴더 들어가서 catalina.log 파일 확인결과 log파일 내 한글은 안깨짐

구글링해서 regit 등록 후 정상 실행 확인

5.1 window+R 키 누르고 regedit 실행

사진 3. regedit 실행

 

 

5.2 HKEY_CURRENT_USER / Console 폴더에서 마우스 오른쪽 클릭 후 새로만들기 > Key 선택
   > 이름 'TomCat'으로 생성 함

사진 4. 레지스트리 편집기  

 

 

5.3 새로 생긴 Tomcat 폴더 클릭 후 안에 오른쪽 클릭 후 새로만들기 > DWORD(32비트) 값(D) 선택 후 생성 > 이름은 CodePage로 생성함

사진 5. 32비트 생성

5.4 값 데이터 65001, 10진수 선택 후 확인버튼 클릭

사진 6. 값 설정

 

 

6. 5번 설정 완료 후 cmd 종료 후 새로 킨 다음 다시 startup.bat 실행시켜서 콘솔 한글 안깨짐 확인!

사진 7. 정상 실행 확인

 

완료!

 

웹프로젝트로 포스 시스템을 한번 구현해 보려고 한다.

1. 개발 목적
- 개인 도매상에서 사용할 수 있는 간단한 웹 어플리케이션 개발
- 내가 필요해서

2. 프로젝트 환경 :
SpringFramework - 4.2.3Release
JavaScript - 화면단 기능 개발용도
Mybatis - 3.4.1
DB - MySQL 5.1.41
Server - Apache7.0
형상관리 - Git
Base Source - SpringWebBase (Git)

3. 주요 기능
- 상품 정보 등록 : 바코드를 key로 상품 정보를 등록하는 기능
- 상품 계산 : 바코드를 통해 상품을 계산해주는 기능
- 상품 관리 : 입고/출고/재고상태를 확인하는 기능
- 유통기한 관리 : 상품들의 유통기한을 관리해주는 기능
- 발주 관리 : 1주일 단위로 추가 주문해야 하는 리스트를 보여주고, 필요시 카카오톡 혹은 문자로 자동 주문 해주는 기능

4. 프로젝트 기간 (2달)

 

 

 

 

웹 개발을 공부하다가 문득 궁금해졌습니다.

Data Base를 연동하는 방법을 검색하면 다양한 방식이 나오는데, DB에 연동하는 방법은 몇가지나 있고,
어떤 방식이 적합한지 판단할까요?

그래서 여기저기 찾아보며 정리해본 결과 크게 3가지로 나눌 수 있었습니다.

1. Java에서 지원하는 JDBC를 이용하여 DB와 통신하는 방식
2. JDBC Template을 이용하여 DB와 통신하는 방식
3. MyBatis를 이용해서 DB와 통신하는 방식
   - Mapper Class를 생성해서 쿼리를 작성하는 방식
   - DXML 파일에 쿼리를 작성하고 DAO 객체에서 불러드려 DB에 쿼리를 전송하는 방식

 

물론, 위 3가지 방식에서도 프로젝트 설계에 따라 사용하는 방식은 다릅니다. 그래서 구글에 검색하면 이렇게 해라 저렇게 해라 정보가 너무나도 많아 뭘 써야할지 헷깔리게 됩니다.

어쨋건 세세한 방식은 서서히 알아가도록 하고,  큰 틀에서 개념만 잡도록 하겠습니다.

 

위 3가지 방식을 전부 구현해볼 생각인데, 아래 사진과 같이 개발 구성도와 흐름도는 동일하게 구현할겁니다.

1. 개발환경 및 정보

STS : Spring legacy Project - MVC
MySQL :
- DB URL: Localjdbc:mysql://localhost:3306/using_jdbc
- DB 접속 ID / PW : dan / 1234
- 사용할 DB : 

 

2. 흐름도

그림 1. DB 연동 학습을 위한 프로젝트 흐름도

 

DB 연동 시작해봅시다!

 

 

웹개발하면서 DB를 연동하는 방법은 여러가지가 있습니다.

오늘은 DB와 연결하는 방법을 정리해보도록 하겠습니다.

 

목차
- DAO DTO를 이용하여 DB연동하기
- JDBC를 이용하여 DB 연결하기
- MyBatis를 이용하여 DB 연결하기
 1) XML 이용하여 SQL 작성
 2) Mapper Class를 이용하여 SQL 작성
- Connection Pool

 

1. DAO DTO를 이용하여 DB 연동하기

가장 기초적인 DB 연결 방법입니다.

DAO에 객체에 DB 로그인 정보를 작성해두고 필요할때마다
연결하는 방법 입니다.

사용 예시로 봅시다

 

 

 

 

'WEB 개발 > Spring 개념' 카테고리의 다른 글

Servlet / Container란?  (0) 2019.03.31
MVC 패턴  (0) 2019.03.28
웹 서비스 과정 - Client - Server 구조  (0) 2019.03.28

웹 프로그래밍을 하려면 웹이 어떻게 동작하는지를 알아야한다.

 

 

목차

1. 개발도구 STS, Eclipse
2. 스프링 동작방식 - LifeCycle
3. Servlet / Container란?

 

1. 개발도구 STS, Eclipse

자바 프로그래밍 수업을 들을때 대부분 Eclipse를 사용한다. 그리고 웹 개발할때도 Eclipse를 사용할 수 있다. 그러면 이 둘의 차이는 무엇이고 둘 중 무엇을 선택해야하는가?

-> 회사에서 쓰는거 쓰면 됨ㅎ
Eclipse로는 필요한 패키지를 설치, 적용시키며 원하는 형태의 JAVA 프로그램을 만들 수 있다.
반면 STS는 JAVA 웹 개발에 최적화 되도록 만들어진 형태이다. Eclipse에서 제공하는 패키지, Spring에서 제공하는 패키지 둘 다 쓸 수 있음

Eclipse에서 웹 개발하려면 톰캣 설치하고 연동하는 환경 설정이 필요하지만, STS에서는 이런 환경설정이 기본으로 셋팅되어 있기때문에 따로 설정 안해주고 바로 개발을 시작할 수 있다. 
Eclipse Marketplace에서 STS 다운로드 후 사용 가능
따라서 둘 다 똑같음. 그냥 쓰고싶은거 쓰면 된다. 

 

2. Servlet / Container란?

하나의 이야기로 알아보자.

1.  자바를 이용해서 웹페이지를 만드려고 했다. 
2.  JSP 등장 => html파일이 java로 바꾸기 위해 jsp가 탄생
3.  완성된 jsp 파일을 이제 컴파일 해야함. 
4.  .java를 컴파일 하면 .class파일이 된다. 이 class파일들이 servlet이 된다.
5.  이렇게 jsp -> servlet으로 바꾸고,  servlet -> jsp로 바꾸어 주는것을 만듬
    이 과정들을 하나로 묶어논 것을 웹 컨테이너라고 부름 서블릿들을 묶어논것이니 서블릿 컨테이너 라고도함
6.  암튼 servlet(java 클래스)을 컴퓨터가 동작시키려면? -> 컴파일 해야함
7.  컴파일에 필요한것 = 컴파일러 - JDK 필요
그래서 WAS 설치할때 환경 변수에 JDK 컴파일러 경로를 써주는것이다.

8.  아파치 회사에서는 원래 WS(웹서버)를 통해 html로 정적 웹을 운영하는 웹서버를 가지고 있었다.
여기에다가 이렇게 개발된 웹 컨테이너를 합침 -> 웹 서버 + 웹 컨테이너 = Tomcat(톰캣) 탄생~

9. 이런것을 아파치사에서만 만든게 아니고 다른 회사에서도 만들었는데 암튼 이렇게 동작하는것들을 WAS(Web Application Server)라고 함. 그래서 WAS의 대표 종류중 하나를 Tomcat이라 한다.

따라서 웹 컨테이너는 아래 역할을 한다.
---------------------------------------------------------------------------------------------------
jsp 파일 -> 서블릿 변경 -> 서블릿 JDK로 컴파일 
서블릿 파일 -> jsp로 변경
=> html로 보이게 된 jsp 파일은 웹서버로 던져줌 = 웹 서버와 통신 기능
jsp 서블릿 관리함 
=> 서블릿의 생애주기 관리
요청이 오면 하나씩 생성하면 겁나 비효율적이겠져? -> 
요청할 때마다 쓰레드를 생성함
=> 멀티쓰레드 관리
프로그램이 메모리에 올라와서 동작하면 객체를 생성하고 끝내면서 동작한다.
그런데 뭘 생성하고 뭘 끝내는건가를 결정하는것을 XML 파일에 작성을 한다.
(XML 파일의 유래와 왜 사용되는지는 시간나면 정리)
그래서 프로그램이 동작하면 첫빠따로 보는것이 XML 파일보고 설명서대로 행동한다.
=> 선언적 보안관리(?)
---------------------------------------------------------------------------------------------------

첨부터 자바 파일(.class) 안에다 html썻으면 편했잖아 라고 하면 설명 길어짐
GooGle 검색창에 "JSP 탄생배경" 검색하면 우리 개발 고수님들이 깔끔하게 정리한 내용들이 많이 나옵니다!

암튼 그래서.

jsp파일을 java파일로 바뀌어진것을 서블릿 이라고 부른다.
그리고 이와 같이  프로그램이 동작할 수 있도록 환경을 하나로 묶어논 것들을 Container라고 부른다.

- 결론
Servlet : jsp파일을 Java 환경에서 실행시키기 위해 변경된 .java 파일
Container : (서블릿) 파일을 실행 시킬 수 있는 환경

객체를 생성하고 동작하고 다 사용하면 죽인다. 그래야 한정된 메모리 공간을 효율적으로 사용하는 것이다.
이것을 프로그램의 생애주기(Life Cycle)이라고 한다.

 

3. LifeCycle

스프링은 컨테이너에 Bean객체를 만들어 이것을 실행시키는 것이다. 이 라이프 사이클이 어떻게 돌아가는건지를 알아보도록 한다.
LifeCycle이 어떻게 돌아가는지 알아보도록 한다.
InitializingBean( 생성 ) -> servlet 객체 동작 -> DesposalBean( 종료 )

GenericXmlApplicationContext gxac = new GenericXmlApplicationContext("classpath:DispatchServlet.xml");

'WEB 개발 > Spring 개념' 카테고리의 다른 글

Spring - DB 연동방법  (0) 2019.04.24
MVC 패턴  (0) 2019.03.28
웹 서비스 과정 - Client - Server 구조  (0) 2019.03.28

Q. MVC 패턴이란?

A. Model / View / Controller 이렇게 3가지로 나누어 개발하는 소프트웨어 디자인 패턴입니다.

Model은 모델의 상태에 변화가 있을 때 컨트롤러와 뷰에 이를 통보합니다.

View는 사용자가 볼 수 있는 인터페이스 입니다.

Controller는 사용자의 요청에따라 어떤 동작을 해야할지 작성하는 부분 입니다.

이것 역시 검색하면 정리가 잘 된 내용이 많지만, 내가 이해하고 있는 방식대로 정리해보고자 한다.

 

목차

  •  Spring 동작 방식
        - 정적 과정(html) 흐름도
        - 동적 과정(JSP) 흐름도
        - MVC 동작 좀 더 자세한(?) 흐름도
        - 정리 : 전체 과정 흐름도

 

 

1. Spring 동작 방식

이전에 정리글 Tomcat -> Webapp폴더로 들어가면 이제 뭐가 어떻게 동작하는건가?

여기부터가 STS, Atom , Eclipse 등 다양한 개발 툴을 이용해서 어플리케이션을 개발하는 영역으로 들어온 것이다. (난 Spring FrameWork 공부중이니까 Spring 기준으로 작성할 것임)

간단하게 그림으로 살펴본다.

 

- 정적 과정(html) 흐름도

사진 1. html 요청 과정

서버에 요청이 들어오면 Dispatcher Servlet에서 해당 요청에 맞는 View(.html)를 보여준다.
(Dispatcher Servlet은 웹 컨테이너 내에서  실행되는 것)

 

- 동적 과정(JSP) 흐름도

사진 2. MVC 동작 과정

 

1. 서버에 요청이 들어오면 Dispatcher Servlet에서 요청 동작을 수행하기 위한 Controller로 전달한다.
2. 이후 컨트롤러에서 DB 내용이 필요하다면 Model에 요청하여 값을 받아오고 이것을 다시 Dispatcher Servlet으로 전달
3. Dispatcher Servlet은 처리가 완료된 결과가 작성된 View를 사용자에게 전달한다.

 

 

- MVC 동작 좀 더 자세한(?) 흐름도

 

사진 3. MVC 동작 자세히 보기

좀 더 자세히 보게되면, Dispatcher Servlet에는 HandlerMapping/ HandlerAdapter/ ViewResolver 라는 메서드가 작성되어 있다.

1. 서버에 요청이오면 Dispatcher Servlet내의  HandlerMapping 메서드가 동작하면서 해당 요청을 처리할 컨트롤러를 찾은 후 Dispatcher Servlet에게 알려준다.

2. 그 다음 선택 된 컨트롤러 중 어떤 메서드가 실행되야할지 HandlerAdapter가 찾아서 다시 Dispatcher Servlet에게 알려준다.

3. 그러면 Dispatcher Servlet은 HandlerMapping/ HandlerAdapter로 부터 전달받은 컨트롤러에게 일을 하라고 요청한다

.
4. 요청받은 컨트롤러는 필요한 데이터를 Model을 통해 데이터를 받아와서 다시 Dispatcher Servlet에게 전달한다.

5. 요청이 수행된 결과값을 적용할 View를 ViewResolver가 찾아서 적용을 시키고 다시 Dispatcher에게 전달

6. 마지막으로 Dispatcher servlet은 전달 받은 View를 사용자에게 전달 하면 완료!

 

 

 

 

 

정리 : 전체 과정 흐름도

사진 5. 웹 전체 동작 과정

 

그래서 Web을 이용할때 Client - Server에서 이루어지는 과정을 그림으로 보면 대략 이렇게 되는 것이다.

어쨋건 이렇기 때문에 톰캣 컨테이너가 무엇인지를 알아보았고, 우리가 개발하는 내용들이 어디에 위치되어 배포되는지까지 알아보았다. 아주아주 단순하고(?) 기본적인 내용이지만, 한번쯤 정리하고 싶었다.

'WEB 개발 > Spring 개념' 카테고리의 다른 글

Spring - DB 연동방법  (0) 2019.04.24
Servlet / Container란?  (0) 2019.03.31
웹 서비스 과정 - Client - Server 구조  (0) 2019.03.28

- 들어가기 -

웹 어플리케이션을 만들다 보니, 이것이 어떻게 통신하고 동작이 이루어지는지 서비스 과정이 궁금해졌다.

물론 깊게 들어가면 끝도없기 때문에 필요에 따라 하나씩 알아가기로 하고, 우선은 큰 그림만 이해하기로 한다.

 

목차

  • Client - Server 구조
  • Server에서 하는 일
  • Tomcat 구조

 

통신은 OSI 7 Layer 과정을 거쳐 통신을 한다. 각 계층의 통신에는 종류에 맞는 스펙이 존재한다. 그 중 웹 어플리케이션을 개발할때 필요한 개념을 정리할거니까 7 layer에서 7층에 있는 Application 계층(응용계층) 부분을 정리한다.

응용계층의 프로토콜에는 FTP, SSH , HTTP, SMTP ... 등이 있으며 목적에 따라 필요한 프로토콜을 사용한다.
나는 웹 어플리케이션 통신방식을 공부할거니까 저것 중 http 통신 방식을 사용하게 될 것이다.

(응용계층 프로토콜 정리 위키백과  - https://ko.wikipedia.org/wiki/%EC%9D%91%EC%9A%A9_%EA%B3%84%EC%B8%B5)

 

1. Client - Server 구조

Client가 Server에 요청을하면  Server는 요청 결과물을 Client에 응답.

(웹의 경우 클라이언트는 internet explorer, Chrome 등..)

웹 어플리케이션을 개발하게 되면 클라이언트는 http 프로토콜을 통해 필요한 정보를 주고 받을 것이다.

사진 1 Client - Server (CS) 구조

 

이것을 모르는 사람은 거의 없을 것이다.  Server는 어떤 개념인가?
그리고 Client가 서버에 요청을 하면 Server에서는 무엇을 할까?


서버는 단순하게 그냥 컴퓨터다. 솔직히 이걸 잘 몰랐다.(?) TV에서 가끔 보는 서버실 처럼 생긴게 서버인줄 알았다. 
내가 지금 사용하는 컴퓨터도 서버 컴퓨터가 될 수도 있다는 말인데, 컴퓨터에 관심없는 사람이었을땐 이 개념을 잘 몰랐다.


평소에는 나 혼자 내 컴퓨터를 쓰기때문에 많은 메모리가 필요하지 않다. 하지만 서비스를 하게되면 엄청나게 많은 사람들이 내 컴퓨터로 접속하게 될 것이고, 이 많은 요청을 처리하려면 성능 좋은 CPU와 메모리가 필요하게 될  것이다. 그래서 서비스 맞춤형의 고사양의 CPU와 메모리를 탑재한 서버용 컴퓨터를 만들게 된 것이고, 서버는 컴퓨터가 꺼져서 사용자들이 접속 못하면 큰일나기(?) 때문에 특별관리를 할 수 있도록 서버실에 컴퓨터를 몰아놓고 관리하는 것이다.

2.  Server에서 하는 일

서버를 구축하려면 물리적으로 어떤 사양으로 컴퓨터를 만들지 정하고, OS는 무엇으로 설치 할 것인지 정하고, 어떤 설치 파일이 필요하고 등등 할것이 정말 많지만, 웹/앱 초보 개발자가 손댈 부분은 아니기때문에 일단 패스

그래서 최대한 단순하게 정리한다.

사진 2. Server - tomcat 매핑

 

프로토콜에는 여러가지가 있고, 서버 내에서 웹 부분 요청(http)을 처리하는 웹서버를 설치하면 웹 서비스가 가능해진다.
웹서버의 종류에는 apache Tomcat, IIS , node js 등이 있으며 필요에 따라 선택하면 된다. 

Client는 "http://www.xxxx.com"과 같이 http 규격에 맞게 요청을 하면 서버는 이 요청에 맞게 웹서버로 요청을 보낸다. 그리고 필요한 정보를 찾아서 다시 클라이언트에게 보여준다.

더보기

여기서 궁금했던점이 있는데, 서버가 있는데 왜 또 웹서버를 설치해야 하는가? 에 관한 물음
http프로토콜 통신을 서버에서 직접적으로 관리할 수는 있으나 웹서버를 설치하고 실행해두면 서버는 http요청이 들어오면 웹서버로 던져주어 웹서버관련해서는 신경 안써도 되는것이다. 그러면 서버 메모리 사용에 있어서 훨씬 효율적으로 사용할 수 있기 때문에 웹서버를 설치하고 사용하는 것이다.

/* 포트는 서버에 접속할 때 서비스를 구분하려고 만든 번호 - 통신 영역 개념이기때문에 넘어감 */

 

그러면 Tomcat 폴더는 어떤 구조로 되어있으며 또 어떻게 동작을 할까?

3. Tomcat 구조

사진 3. 톰캣 폴더 구조

톰캣의 시작/종료/포트설정/연동 등등 설정을 담당하는 설정 폴더와 서비스 폴더 이렇게 두가지로 나누어지고 실제 서비스 되는 프로젝트 파일들은 webapps 내의 ROOT 폴더 밑에 놓인다.

사진 4. webapps 폴더 구조

webapps의 ROOT 폴더 아래에 STS / Eclipse 등으로 개발된 소스를 위치시키면 내가 개발한 어플이 서비스가 가능해지는 것이다. 클라이언트는 서버와 http로 통신하고, 클라이언트가 보게 되는 것은 ROOT폴더 내의 html/jsp파일인 것이다.

이렇게 서버 관리자들은 서버에 접속하는 Client의 요청들을 부하가 걸리지 않게 트래픽을 관리하고, 서비스가 원활하게 제공될 수 있는 환경을 연구하고 인프라를 구축 적용, 관리하는 역할을 하게 된다.

개발자들은 보통 ROOT 폴더 내에서 동작하는 어플리케이션을 개발하게 된다.

 

'WEB 개발 > Spring 개념' 카테고리의 다른 글

Spring - DB 연동방법  (0) 2019.04.24
Servlet / Container란?  (0) 2019.03.31
MVC 패턴  (0) 2019.03.28


이제 DB 출력을 확인했으니, 입력하는 방법을 알아보겠습니다.

간단합니다! 출력 반대로(?)


요약

- DB에 data insert하기-

1. .jsp 에 input 추가하여 controller로 던져주기

2. controller에 데이터 삽입 메서드 작성하기

3. mapper에 insert 문 작성하기

4. 동작 확인하기



시작합니다!

1. jsp에 input 추가하여 contoller로 던져주기

처음에 데이터 입력할 페이지를 설정을 해줍니다. 저는 testpage.jsp에다가 하려고 합니다.

데이터 삽입 페이지, 출력 페이지 따로 구성할 수 도 있지만

저는 그냥 한 페이지에 입력하면 바로 출력할 수 있도록 만들 계획입니다.


- form을 이용하여 페이지에서 입력된 값을 구분자 값 -"/testPage/insert_data"를 'POST'형식으로 controller로 던져줄 것입니다.


일단 작성 했으니 페이지 동작하는지 확인


굿


2.  Contoller에 메서드 추가하기

이제 Controller에 던져준 값을 처리할 메서드를 작성합니다.

저는 testPageController.java에 추가하면 되겠군요


1
2
3
4
5
6
7
8
9
10
11
/*jsp 페이지에서 구분자로 "/testPage/insert_data" 값으로 던져주었기 떄문에 해당 값으로 RequesetMapping을 합니다.
  post 형식으로 던졌기 때문에 post로 받아주기! (GET/POST 형식의 차이는 면접에서 자주 물어보는 기본 질문이니 숙지합시다 ㅎㅎ) */
@RequestMapping(value = "/testPage/insert_data", method = RequestMethod.POST)
 
    //메서드 작성하기 @Model 어노테이션을 통해 testPage 생성
    public String insert_data(@ModelAttribute testPage testpage){
        
        System.out.print(testpage.toString()); //view에서 제대로 값 던져주는지 확인하기        
        
        return "redirect:/testPage";  //요청 처리 후 testPage로 다시 연결
    }
cs

* GET/POST 간단정리 (자세한건 검색하기!)



2.1 이후 웹 페이지에서 데이터 입력하고 확인해봅니다.

console로 확인 하면 완료!



3. mapper에 insert 문 작성하기

mapper에 DB로 입력 할 Inert문을 작성합니다.



3.1 mapper에 insert_data를 생성 후 controller에서 mapper로 전달 해 줄 문장을 추가합니다.


4. 확인하기

- 데이터 jin / user 데이터 작성 


- 저장 버튼 누른 후 테이블 변동 확인


정상 동작하면 완료!!


이렇게 DB를 입력 출력을 완성했습니다.

이것을 응용하면 회원가입/ 로그인 / 게시판 입력/수정/삭제 와 같은 기능을 작성할 수 있을 것 입니다.

물론 깊게 들어가면 부가적으로 들어가는 개념들을 이해해야겠지만요


아무튼 오늘은 끝!






+ Recent posts