-
75일차 - 스프링부트 환경 구성 및 간단한 예제 개발백엔드(웹 서버, WAS)/Spring Boot 2024. 5. 16. 17:46
pom.xml 에서 라이브러리 다운로드 받은 위치가 두번째 줄의 경로에 차곡차곡 설치된다
<localRepository>C:/repository</localRepository>
- 스프링부트에서 라이브러리는 C:/repository 에 저장해줘
스프링 부트의 특징
1. 잭슨 라이브러리 필요없다 왜냐하면 백엔드만 개발하기 때문에
2. JSP 는 불편한점이 많아서 다른거를 사용한다
3. 톰캣 설치하지 않아도 톰캣이 내장되어있다 (실제 톰캣보다 성능이 매우 떨어진다)
4. 내장 톰캣이 있기 때문에 JAR 라는 놈으로 묶어서 사용할 수 있다
스프링을 먼저 배워야지 XML 이나 설정 파일들이 익숙해져서 부트에서는 쉬워지기 때문에
스프링과 부트의 차이는 XML를 비교해보면 알 수 있다 XML 를 객체화해 단순화시킨것이 부트이다
첫 프로젝트 생성
애는 기본적으로 어떤 라이브러리를 사용할지 프로젝트 생성 전에서 선택할 수 있다
1. 자바 버젼이 17 을 사용한다고 했는데 로컬 환경은 11이라 오류가 난다
2. Mybatis 나 다른 라이브러리 버젼과 호환을 위해 스프링도 3.2 가 아니라 2.7.17 로 변경해야한다
pom.xml 에서 작성 후 maven - update project 하여 작성한 내용을 반영해야한다
1. webapp 에는 비어있는 상태이다 왜냐하면 jsp 를 지원하지 않는다
2. 삼단 패키지 구성 설정도 안해도 된다 부트 내부에서 해주기 때문에
application.properties 작성 시 유의사항
1. 한글쓰면 다 깨진다
2. 관련된 모든 설정은 여기서 작성한다
3. key-value 쌍으로 이루어져있다
// JSP 지원도 하지 않고, .jsp 붙여주고 경로 매핑도 되어지있지 않아서 안된다 /* @RequestMapping(value="/") public String home() { return ""; } */ @RequestMapping(value="/") @ResponseBody public Map<String, String> home() { Map<String, String> map = new HashMap<String, String>(); map.put("msg", "OK"); return map; }
내장 톰캣으로 작성한 코드를 실행해보자
크롬 브라우저에서 localhost 로 접속하면 아까 작성한 코드가 실행되어 ok 라는 메시지를 전달해준다
서버 꺼주자
//@Controller @RestController // @ResponseBody 없이 jsp 형태로 보내주는 컨트롤러이다 public class MainController { // JSP 지원도 하지 않고, .jsp 붙여주고 경로 매핑도 되어지있지 않아서 안된다 /* @RequestMapping(value="/") public String home() { return ""; } */ @RequestMapping(value="/") //@ResponseBody public Map<String, String> home() { Map<String, String> map = new HashMap<String, String>(); map.put("msg", "OK"); return map; } }
spring.application.name=01_Start # PORT server.port=80 # UTF-8 server.servlet.encoding.charset=UTF-8 server.servlet.encoding.enabled=true server.servlet.encoding.force=true
스프링 부트에서 기초 AJAX
@RestController public class AjaxController { @RequestMapping(value="/") public Map<String,Object> home() { Map<String,Object> response = new HashMap<String,Object>(); response.put("msg", "Hello main page"); return response; } @RequestMapping(value="/list") public Map<String,Object> list() { Map<String,Object> response = new HashMap<String,Object>(); List<String> list = new ArrayList<String>(); list.add("first"); list.add("second"); list.add("third"); response.put("list", list); return response; } }
HTML 파일을 하나 생성해서 HTML 가 AJAX 요청을 한 후 받아오는 작업을 해보자
<html> <head> <meta charset="UTF-8"> <title>J-QUERY</title> <link rel="icon" href="../img/chrome.png"> <!--Content Delivery Network 방식--> <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script> </head> <body> </body> <script> $.ajax({ type:'GET', url:'', data:{}, dataType:JSON, success:function(data) { console.log(data); }, error:function(error) { console.log(error); } }); </script> </html>
외부에서 ajax 요청을 할때에는 서버 주소를 명시해줘야지 올바르게 요청이 서버에 전달된다
CrossOrigin으로 AJAX 통신 허용
Access to XMLHttpRequest at 'http://localhost/list' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
오리진(서버) 접근 제어가 금지되어있어서 AJAX 요청이 안되니깐 허용해줘
자바 스크립트하고 서버와 통신하려고하면 외부의 공격자가 변조하여 서버의 정보를 탈취할 수 있기 때문에 막아둔다
외부 자바스크립트가 통신을 요청할때 @CrossOrigin 으로 허용해준다
// Cross domain issue - CORS, 서로 다른 도메인(서버)에 있는 자바스크립트와 서버간의 통신을 제한한다 // 이것을 해결하기 위해서는 서버에서 요청을 허용하도록 해줘야한다 // @CrossOrigin 이 클래스 위에 선언되어 있으면 해당 메서드들은 모두 허용된다 // @CrossOrigin 이 클래스 위에 선언되어 있으면 해당 메서드만 허용한다 // @CrossOrigin(origins={"space", "group"}) 과 특정한 url 만 허용할 수도 있다 // 외부에서는 읽기만 허용하고 쓰거나 실행은 불가능하다 @CrossOrigin
<html> <head> <meta charset="UTF-8"> <title>J-QUERY</title> <link rel="icon" href="../img/img01.jpg"> <!--Content Delivery Network 방식--> <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script> </head> <body> <h1>HI</h1> </body> <script> // 파일의 위치가 프로젝트 밖에 있다면 서버 주소도 명시 해줘야한다 $.ajax({ type:'GET', url:'http://localhost/list', data:{}, dataType:'JSON', success:function(data) { console.log(data); }, error:function(error) { console.log(error); } }); </script> </html>
Logger 적용
보통 INFO 에서 DEBUG 까지 확인한다
@RestController public class LogController { Logger logger = LoggerFactory.getLogger(this.getClass()); # FATAL > ERROR > WARN > INFO(*) > DEBUG > TRACE @RequestMapping(value="/") public String home() { logger.info("home page 방문"); return "home page 방문"; } @RequestMapping(value="/root") public String root() { logger.warn("root page 방문"); return "root page 방문"; } @RequestMapping(value="/index") public String index() { logger.debug("index page 방문"); return "index page 방문"; } }
JSP 연동 설정
스프링부트는 jsp 를 지원하지 않기 때문에 추가적인 라이브러리 설치와 설정이 필요하다
스프링 부트에서는 알아서 일부 라이브러리에 대해서 버젼 관리를 해준다
서버에서 Views 폴더 경로로 지정해두고 반환시 .jsp 붙여서 응답한다
@RequestMapping(value="/") public String home() { logger.info("메인페이지 진입"); // main 이라는 문자열에 // prefix = /views/ // suffix = .jsp // 를 이용하여 /views/main.jsp 로 이동시킨다 return "main"; }
Mybatis 연동
db, mybatis 관련 라이브러리 받아놓고 해당 설정 등이 안되어 있으면 에러가 난다
JSP 와 JSTL 라이브러리는 필수이다
resources 폴더 아래에 매퍼만 담고 있는 폴더를 하나 만들어서 편리하게 관리한다
1. 스프링부트에서는 따로 마이바티스이 사용되는 범위를 지정하지 않아도 된다
2. 손쉽게 데이터베이스 접속 정보를 입력한다
3.
@Mapper
매퍼 등록을 위한 인터페이스에 선언하여 사용한다
// 자동으로 마이바티스를 사용하는 설정이 된다 @Mapper public interface MainDAO { }
@MapperScan
매퍼를 하나씩 등록하는게 아닌 페키지 경로를 지정하여 이하 위치에있는 인터페이스들은 전부 맵퍼로 사용할수있다
@Service @MapperScan(value= {"kr.co.gudi.dao"}) // mybatis 사용 범위 public class MainService { Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired MainDAO dao; }
과제
"/" 요청시 list.jsp 에 게시판 리스트 출력
환경
JAVA : 11
Spring Boot : 2.7.17
<!-- mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.3.2</version> </dependency> <!-- mariadb --> <dependency> <groupId>org.mariadb.jdbc</groupId> <artifactId>mariadb-java-client</artifactId> <scope>runtime</scope> </dependency> <!-- JSP https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jasper --> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jasper</artifactId> <version>9.0.85</version> </dependency> <!-- JSTL https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl BOOT 에서는 일부 라이브러리에 대해서 버젼 관리를 지원한다 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency>
'백엔드(웹 서버, WAS) > Spring Boot' 카테고리의 다른 글
81일차 - 인터셉터, 파일 업로드, 다운로드, 스케쥴러 (2) 2024.05.24 80일차 - RESTAPI, Properties 활용, Spring FW 특징, AOP 활용(로그인 처리) (0) 2024.05.23 79일차 - RESTful (0) 2024.05.23 77~78일차 - Transaction, RESTFUL 개념과 사용 방식 (0) 2024.05.21 76일차 - 로그 설정 및 동적 쿼리 예제 (0) 2024.05.17