학교 과제로 자바와 Spring 프레임워크를 통해 웹 게시판을 만들게 되었다. 스프링 프레임워크에 대해 공부하고 문제를 해결하는 과정을 남겨 같은 오류가 생겨도 대처할 수 있도록 할 것이다.
기본 조건 : STS 3.9.7 or 4.5.0, MCV2 구조. server pivotal4, MariaDB, mybatis 사용
오늘은 Spring 설치와 기본 설정을 마쳐 server를 실행해보도록 하겠다.
Spring Framework 이란?
자바로 웹 백엔드를 개발할 때 주로 사용하는 프레임워크가 Spring이다. 프레임워크는 말 그래도 코드의 뼈대를 의미한다. 파이썬의 장고를 다뤄봤는데 이와 비슷한 역할을 할 것으로 생각한다. 자바 EE 기반의 오픈소스 프레임워크이며 우리나라 공공기관 표준 프레임워크 기반 기술이기도 하다. 모듈화가 되어있어 필요한 부분만 사용 가능하다.
- Spring의 특징
- POJO (Plain Old Java Object) 기반의 프레임워크이다. 자바 객체의 라이프사이클을 스프링 컨테이너가 직접 관리하며, 컨테이너로부터 필요한 객체를 얻어올 수 있다. 대표적인 예로 JavaBean이 있다. 기본 생성자와 멤버 필드에 접근할 수 있는 getter/setter 메소드를 가진 객체를 의미한다. 이러한 단순한 객체는 추후 테스트나 유지보수에서 유연성을 가진다.
- IOC : Inversion of Control. 지금까지 프로그램은 객체 생성과 객체 내의 메소드 호출 등 모든 작업을 사용자가 제어하였다. 하지만 IOC에서는 그것이 역전되어 사용할 객체를 직접 생성하거나 사용하는 것이 아닌 제어의 흐름을 다른 객체(컨테이너)에 맡겨 객체 생성등 제어권을 모두 맡기게 된다.
- Bean : Spring IOC 컨테이너가 관리하는 자바 객체를 의미한다. 보통 객체를 new로 만드는데 그것이 아니라 ApplicationContext.getBean()으로 객체를 만든다. 즉 컨테이너가 관히나는 객체이다.
- DL : Dependency Lookup 의존성 검색. 빈(Bean) 검색.
- DI : Dependency Injection 의존성 주입. 각 계층이나 서비스들 사이, 객체들 사이에 의존성이 존재할 경우 스프링이 서로를 연결시켜준다. 클래스들 사이에 약한 결합이 가능해진다.
- AOP : Aspect Oriented Programming. 기존의 OOP(Object Oriendted Programming) 방식과 달리 트랜잭션, 로깅, 보안 등 여러 모듈에서 공통적으로 사용하게 되는 기능을 따로 분리해서 각각이 사용하도록 해준다.
- MVC : model, view, controller로 동작. 장고에서도 나왔던 개념. Spring에서는 Model2 기반으로 만들어진 MVC를 사용한다. 사용자가 보는 view, 실제 데이터를 가지고 있는 model 그 중간에서 연결하고 조정해주는 controller. 각각을 나눠 각 코드의 목적을 분리하고 유지보수를 쉽게 한다.
STS로 Spring Framework 가져오기
과제에서 해당 프로젝트는 STS 3.9.7 or 4.5.0을 사용해야한다고 하였다. STS는 Spring Tools Suite로 이클립스에 Spring Framework를 추가하는 것이 아니라 따로 Spring 개발만을 위해 만들어진 개발 환경이다. 다운은 github.com/spring-projects/sts4/wiki/Previous-Versions 여기서 원하는 버전을 다운받을 수 있다.
* 스프링을 사용하려면 먼저 JDK를 다운받아야한다.

다운받아 압축을 풀면 다음과 같이 나타나는데 여기서 SpringToolSuite4.exe를 실행하면 된다. 그 후 이클립스처럼 workspace를 정해주고 project를 만들면 된다.
수업 시간에 Spring MVC Project를 사용하였기 때문에 똑같이 사용하였다.
4버전은 Legacy 버전이 없기 때문에 Help -> Eclipse Marketplace에서 sts를 검색해 3버전을 다운받아준다.
그 후 File -> New -> Others -> Spring Legacy Project 를 선택하여 MVC project를 만든다.

프로젝트를 생성하면 말 그대로 코드의 뼈대가 이미 생성되어 있다. 이제 이 뼈대에 원하는 코드를 추가하여 원하는 웹페이지를 만들어가면 된다.
추후 추가 : 각 폴더에 대한 설명
Spring Framework 기본 설정
- 자바 버전
프로젝트 -> properties -> project facets 에서 자바 버전을 1.8로 변경해준다. (1.6부터 사용 가능하지만 보통 1.8로 하는 듯 하다) pom.xml에서도 마찬가지로 변경해준다.
- framework 버전
pom.xml에 springframework version을 4.3.20으로 변경해주었다. 변경이 됐는지 확인하는 방법은 maven dependencies 폴더를 펼쳐보면 버전이 적용되었는지 확인할 수 있다. 현재 Spring에서 사용할 수 있는 버전은 mvnrepository.com/artifact/org.springframework/spring-context 여기에서 확인할 수 있다.
- UTF-8 인코딩
또, 글자 깨짐을 방지하기 위해 인코딩 방식을 UTF-8로 변경하였다. 우선 Window -> Preferences -> General -> Workspace에서 text file encoding을 UTF-8로 적용하였다. (html이나 CSS 등도 다 설정해주면 좋다.) 또, Spring 코드에서 src-> main -> webapp -> WEB-INF -> web.xml 로 들어가 주고받는 데이터들을 UTF-8로 encoding하는 코드를 추가해준다. (web.xml의 위치는 버전에 따라 다를 수 있음)
<!-- UTF-8 encoding -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
<!-- HTTP request/response data encoding to UTF-8 -->
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
또 jsp 파일에서도 UTF-8로 encoding해준다. view 폴더의 home.jsp의 html이 시작하기 전에 추가해준다. 그러면 home.jsp가 열렸을 때 UTF-8로 encoding되어 보인다. html 파일 만들 때 맨 위에 적어주는 meta랑 비슷하다고 생각하면 될 것 같다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
- 서버 연결
pivotal 서버는 STS에 기본으로 내장되어있는 서버이다. 근데 STS4에서부터는 내장되어있지 않다. 4에는 있는 게 뭘까. Legacy도 없고 이럴 줄 알았으면 3을 깔 걸 그랬다. 그래서 다시 3.9.7 버전으로 설치하였다. spring boot를 사용할 것이라면 4가 더 편하겠지만 난 아니다.
요구사항인 pivotal 4 버전을 선택하면 된다.
- 실행
이제 이 코드를 실행해보자. 먼저 Window -> Web Browser에서 우리가 알아보기 쉽게 Chrome을 선택한다. 그 후 Servers에서 start를 누르던가 Run as -> Run on server를 선택한다. 설치된 pivotal 4를 선택한 후 Finish를 누르면 Chrome 창이 뜬다. 그 Chrome 창이 현재 개발 중인 서버 결과가 된다.

아무 코드를 작성하지 않았으니 기본 Hello world가 출력된다. 이제 여기에 코드를 추가하면 된다.
다음으로는 데이터베이스 연동과 main page에 DB 내용 출력을 진행할 예정이다.
'서버 공부' 카테고리의 다른 글
| 자바 스프링으로 웹 게시판 만들기(3) (0) | 2021.05.09 |
|---|---|
| 자바 스프링으로 웹 게시판 만들기(2) (0) | 2021.05.04 |
| 장고 서버 외부 접속 허용하기 (포트 포워딩) (0) | 2021.05.02 |
| MySQL Database 와 Django(장고) 서버 연결 방법, 기본 MySQL 명령어 (0) | 2021.04.07 |
| Django 기본 개념 정리 (0) | 2021.04.07 |
댓글