본문 바로가기
국비교육기관/수업

92일차 Spring - JSTL(Core), MySQL

by 밀키스 2021. 7. 17.

21.07.17

 

 Spring Framework 

 

 

$ Model.1과 Model.2 

간단히 말하면 Model.1MV의 형태, Model.2MVC의 형태를 갖춘 Web구조를 말한다.

 

출처: 제타위키 / 좌: Model.1 , 우: Model.2

 

 


$ Model.1 

출처: 제타위키

  1. JSP를 사용한다고 할때, ViewController의 역할로 데이터 입출력을 맡은 JSP / Model 역할을 맡은 Java Bean은 데이터 처리를 담당한다.
  2. JSP(V & C)가 요청과 응답을 모두 처리한다.
  3. DB에 대한 접근은 Model인 Bean Calss만 허용된다.
  4. 페이지별로 간단하고 빠르게 개발 가능하나, 복잡하고 / Back과 Front가 하나의 페이지에 있어 분업이 어렵다.

 

 


$ Model.2

  1. Bean, JSP, Servlet이 각각 MVC의 역할을 맡는다. ( 정형화 )
  2. 코드와 디자인이 분리 됨.
    • 개발자와 디자이너간의 작업 대상이 분리되어 작업 효율 향상
  3. 설정 및 작업 분량이 많으나, 확실한 분업 가능
  4. Java의 기준에서 설명한다고 JSP란 단어를 사용했으나, 꼭 JSP에 국한된 규격은 아니다.

 

 


@ JSTL - Core(prefix:c) 

90일차에 언급되었던 JSTL 중 하나인 Core에 대한 실습 내용

 

JSTL은 기본적으로 아래와 같이 5개의 종류가 존재한다.

  1. Core (prefix : c) : 변수 지원, 제어문, 페이지 관련 처리
  2. Formatting (prefix : fmt) : 포맷 처리, 국제화 지원
  3. DataBase (prefix : sql) : DB관련 CRUD 처리
  4. XML (prefix : x) : XML관련 처리
  5. Function (prefix : fn) : collection 처리, String 처리

 

 


% JSTL - Core 호출

이 중 하나인 Core를 사용하기 위해선 아래와 같은 Taglib을 사용하여 불러온다.

 

 

 

% JSTL - Core 사용

불러온 JSTL을 이용해 JSP 파일에서 Scriptlet으로 아래와 같이 만든 for문을 forEach문으로 바꿔본다.

 

 

  • 좌측의 파일에서 list란 이름으로 값을 보냈는데, 해당 이름을 Core의 forEach문에서 item이란 파라미터에 적어주는 것으로 받아올 수 있다.   -->  getAttribute로 값을 받아올 필요가 없다.
  • 반복에 쓰일 반복 변수로서 val라는 파라미터로 정해주며, 사용할 때에는 EL구문을 통해 사용한다. -> ${ }
  • 위에 적었듯 JSTL을 사용하기 위해선 태그에 자신이 사용할 JSTL의 prefix를 명시해준다 ( ex - c, fmt etc...)

 

 

 


@ MySQL 실행해보기 

위의 파일을 실행하기 위해 해당 경로를 CMD 터미널 창에서 실행하여준다.

 

그전에 아래의 경로에서 startup.bat을 통해 서버를 실행시켜준다

 

 

서버를 실행하지 않고 SQL에 접속하려하면 아래와 같이"ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost'"라는 에러를 볼 수 있다.

 

 


 

그리고 CMD 터미널 창을 통해 MySQL에 접속

 

 

# MySQL - 간단한 실습 

% table select 

user라는 테이블을 볼건데 그전에 간단한 설정을 해준다. ( 안하면 못보는것. )

 

 

 

 


% password 변경 

localhost라는 Host 이름을 갖는 행의 비밀번호를 변경한다.

위와 같이 localhost라는 이름은 Password가 존재하지 않으나 아래의 명령어를 통해 변경할 수 있다.

 

 

 

 

그리고 Oracle에서 했던것 처럼 변경 사항을 반영하기 위한 구문을 실행한다.

해당 명령어는 Commit과 비슷한 기능을 갖는 flush privileges이다.

 

 

 


% 변경된 PW로 접속해보기 

  • quit이란 명령어로 MySQL 종료
  • 접속할때에는 위에서 등록했던 "12345"라는 PW로 접속할 수 있다.

 

 


@ Data Source Explorer에 MySQL 생성 

 

 

기존에 JDBC 설치하는것과 크게 다르지 않다.

 

 

90일차 최상단에 언급했던 정부의 표준프레임워크 교육자료의 Maven 폴더 안에 내가 필요한 JAR파일이 존재한다.

 

 

좌측과 같이 되어있는 Properties를 우측 처럼 3가지를 변경해준다.

( Password는 위에서 바꿨던 12345로 바꿔주는 것.)

 

 

 

그러면 Data Source Explorer에 정상적으로 mysql을 생성할 수 있다.

 

 

 

 


@ Table Create, insert - SQL 파일 활용(MySQL) 

Mapper가 존재하는 패키지 안에 SQL의 확장자를 갖는 file을 생성해준다.  ->  그냥 SQL 파일 생성하는거..

 

 

그리고 tbl_board라는 Table을 생성해준다.  -> table 생성 방식이 조금 다르다.

  • now( )는 sysdate와 같은 기능을 한다.
  • auto_increment는 값을(idx를) 자동으로 증가시킨다
    • 약간 Oracle의 Sequence와 같은 기능을 한다.
  • Constraint 를 생성하는 부분이 굉장히 심플하다.
  • number 대신 int, varchar2 대신 varchar를 사용한다.  -->  Oracle에서도 varchar를 쓰는데.. Document에 의하면 varchar2를 선호한다고 한다. 글 어딘가에 적었을 텐뎅...

 

 

% Data insert 

샘플 데이터를 위와 같이 2개 집어 넣고, select 한 결과.

title, contents, writer를 제외하고 모두 Default 값이 있기 때문에 3가지만 값을 집어 넣어줬다.

 

 

 


@ DB 접속 위한 API 

 

 

% porm.XML - dependency 추가 

DB 접속을 위한 5개의 API를 다운한다.

 

해당 API들은 모두 MavenRepository 사이트를 통해 Dependency를 가져온다.

https://mvnrepository.com/

 

 

아래는 5개의 API 목록이다.

  1. MySQL 5.1.49
  2. Spring JDBC 4.3.14
  3. HikariCP 3.4.1
    • HikariCP는 Springboot 2.0 부터 default로 설정되어 있는 DB Connection Pool로써 Zero-Overhead가 특징으로 높은 성능을 자랑하는 DB CP(Connection Pool)이다.
    • HikariCP는 미리 정해놓은 만큼의 Connection을 CP에 담아 놓는다. 그 후 요청이 들어오면 Thread 가 Connection을 요청하고, Hikari는 CP내에 있는 Connection을 연결해주는 역할을 한다. 
    • Connection Pool  : WAS가 실행되면 Pool이란 저장소에 DB와 Connection된 객체들을 미리 저장해 놓았다가, 요청이 오면 Connection을 빌려주고, 처리가 끝나면 다시 반납 받아 Pool에 저장한다.
  4. MyBatis 3.4.6
    • SQL Mapping을 위한 Framework
  5. MyBatis Spring 1.3.2

 

 

 


 

 

 


% root-context.xml - DB설정 위한 3개의 API 

root-context.xml 에 bean 객체를 생성함으로써, Spring server를 실행하면 명시한 bean들을 모두 생성해준다.

 

지금 설정하려는 Bean들은 모두 DB 설정을 위한 객체들이다.

 

 

 

 


HikariCPDatasource를 위한 bean 생성

  • id는 그냥 내가 임의로 주는 bean의 이름이다.
  • ref내가 참조할 bean에 대해서 명시해주는 것.

 

HikariCP의 driverClassNamejdbcUrl은 아래 처럼 DataSourceExporer의 Properies를 참조하여 채운다.

내가 사용할 DB의 계정과 비밀번호를 username과 password에 각각 채워준다.

driverClassName의 value 값
jdbcUrl의 value 값

 

 


SQLSession bean 설정

<Libraries -> Maven Dependencies -> mybatis-spring-1.3.2 jar - SqlSessionFactoryBean.class> 의 경로에서해당 class의 이름을 복사하여 Bean 객체의 Class Name으로 준다.

 

 

그리고 dataSource Bean 객체를 참조한다고 명시하여 준다.

 

 

 


root-context.xml 설정 - scan 

servlet-context.xml 파일을 보면 context라는 접두사로 scan하기 위해 xmlns라는 이름으로 context를 사용한다고 상단에 명시해주었는데,

 

이와 마찬가지로 mybatis-spring이란 접두사로 scan을 사용할 때에도 똑같이 명시해주는 작업이 필요하다.

 

 


이는 kr.smhrd.mapper로 명명한 패키지에 적용하기 위한 작업인데, 이에 대해서는 좀 더 찾아보는게 중요할것 같다.

 

 

 

 


@ Spring - 실습 결과 

 

결론적으로는 아래의 각 파일들이 순서대로 실행되면서 Page를 뱉어 낸다.

Controller
boardMapper.java
boardMapper.xml
boardVO
boardList.jsp

 

 

 

Spring을 통해 위의 페이지를 결론으로 보고 싶다면?

  1. SQL 서버가 실행중이어야 한다.   ->   startup.bat
  2. 위에서 순서대로 설정해준 dependency 및 xml 파일의 설정을 모두 진행해줘야 한다.
  3. 당연하지만 DB 테이블에 데이터를 넣어놔야 한다.

 

 

 

 

 

 


$ Daemon 이란? 

Daemon : 리눅스 시스템이 처음 가동될 때 실행되는 백그라운드 프로세스의 일종이며, 사용자의 요청을 기다리고 있다가 요청이 발생하면 이에 적절히 대응하는 리스너와 같은 역할을 한다. 즉, 메모리에 상주하면서 특정 요청이 오면 즉시 대응 할 수 있도록 대기중인 프로세스를 말한다.

MS윈도우의 서비스(Service)와 유사하고 실제로 '서비스'라고 부르기도 하다.
보통 리눅스 시스템의 1번 프로세스인 init(PID=1)이 실행하고, 데몬 프로그램의 명령어는 'd'로 끝난다. (ex. ftpd, mysqld, httpd...)
반응형

댓글