[목표]
알고리즘 문제를 풀어봅니다.
스프링으로 로그인 기능을 구현합니다.
방 대 청소를 했습니다. 청소기를 돌리고 닦았습니다.
배고파서 음식(돈가스 냉면)을 시키고 스프링을 공부했습니다.
식사를 하고 왔습니다.

스프링 부트를 공부하고 있습니다. 섹션1은 모두 학습했고, 별 내용은 없습니다.
섹션2를 보다가 그냥 바로 섹션7의 스프링부트로 웹 만들기를 봐도 상관없을것 같아서 우선적으로 학습하기로 했습니다.
Spring Boot 3, Java 17 버전으로 시작합니다.
스프링 부트를 시작하려면 spring initializr라는 웹사이트에서 프로젝트를 만듭니다. maven, java, 3.5.0 버전으로 선택하였고 그룹과 아티팩트는 알아서 설정하면됩니다. 저는 java 17버전을 사용하므로 17로 진행했습니다.
프레임워크와 비슷한 의존성에는 Spring WEB, Spring Boot DevTools를 설정했습니다.
의존성
pom.xml 에는 의존성이나 자바 버전 등을 확인할 수 있습니다. build.gradle 와 같다.
jsp로 리다이렉션 가능하다. 즉 html 형식이 아닌 jsp로 페이지를 구성가능하다.
LoginController.java
package com.webteset.springboot.myfirstwebapp;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
// jsp 사용
@Controller
public class LoginController {
@RequestMapping("login")
public String gotoLoginPage() {
return "login";
}
}
/src/main/resources/META-INF/resources/WEB-INF/jsp/login.jsp 경로에 jsp를 작성합니다.login.jsp
<html>
<head>
<title> Login Page </title>
</head>
<body>
<h1> Hi </h1>
Welcome to the login Page!
</body>
</html>
추가로 pom.xml을 바꾼 이후에는 다시 Run 해줘야 합니다.
pom.xml (maven)
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
jsp로 mvc 뷰 세팅을 하기위해 다음과 같은 코드를 추가합니다.
application.properties
# 뷰 세팅
spring.mvc.view.prefix= /WEB-INF/jsp/
spring.mvc.view.suffix= .jsp
login?name=Ranga 와 같습니다. Ranga에 원하는 이름을 적을 수 있습니다. 해당되는 import는 인텔리제이에서 자동으로 가져옵니다. 아니면 수동으로 추가하세요.LoginController.java
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.ui.ModelMap;
...
@RequestMapping("login")
public String gotoLoginPage(@RequestParam String name, ModelMap model) { // Url에서 값을 받아서 컨트롤러 코드에 전달
model.put("name", name); // jsp에 값을 넘기기 위해 model을 쓸수 있다. 여기선 파라미터값이 name이므로 name으로 적는다.
System.out.println("Request param is " + name); // 프로코드 추천 안함
return "login";
}
${name} 코드를 추가합니다. <body>
<h1> Hi </h1>
Welcome to the login Page ${name}!
${name} <%-- 이렇게 이름 파라미터를 가져올수 있다. --%>
</body>
`http://localhost:8080/login?name=prkty` 에 접속하여 작성한 이름(prkty)이 뜨는지 확인해봅니다.
스프링에서 application.properties 파일을 수정하여 로깅(디버깅) 수준을 정할 수 있습니다.
로깅 수준 종류
debug: 개발 및 디버깅 시 사용되는 가장 상세한 로그 수준입니다.info: 애플리케이션의 정상적인 흐름을 알리는 일반적인 정보 수준 로그입니다.warn: 잠재적인 문제나 예상치 못한 상황을 알리는 로그입니다. 아직 오류는 아니지만 주의가 필요합니다.# 로깅 확인수준(많은 로그를 확인 가능)
logging.level.org.springframework=info
# 패키지 로깅 확인수준(많은 로그를 확인 가능)
logging.level.com.webteset.springboot.myfirstwebapp=debug
원하는 컨트롤러의 로깅 수준을 따라 출력하는 값을 다르게 설정가능합니다.
LoginController.java
import org.slf4j.LoggerFactory; // 로거
import org.slf4j.Logger; // 로거
...
@Controller
public class LoginController {
private Logger logger = LoggerFactory.getLogger(getClass()); // 로거 초기화 추가
@RequestMapping("login")
public String gotoLoginPage(@RequestParam String name, ModelMap model) {
...
// 로거 레벨별로 로그 출력 설정가능
logger.debug("Request param is {}",name); // 디버깅 수준에서만 name 로그 출력
logger.info("info level");
logger.warn("warn level");
...
}
}
기본적으로 많이 사용하는 Front Controller 형 스프링 MVC 모델의 동작 로직을 살펴봅니다. (현재 우리가 구현한 login을 예시로)

/login → LoginController.gotoLoginPage)/WEB-INF/jsp/login.jsp 으로 매핑)로그인을 할땐 GET이 아닌 POST로 method를 변경한다. 페이로드에 담겨서 넘어간다. 네트워크단에서의 보안 가능
슬슬 배고파져서 편의점에서 대강 때웠습니다.

토요일 TIL을 정리하여 올리고, 알고리즘 문제를 정리하여 올렸습니다. 벨로그와 티스토리 모두 올렸습니다.
아까전에 이어서 로그인 시스템 중 아이디와 비밀번호를 GET과 POST를 통해서 login 페이지에서 welcome 페이지로 리다이렉션 되게 구현중입니다.
정해진 아이디와 비밀번호가 입력되면 pass되고 아니면 다시 쳐달라는 요청문이 나오게끔 구현하는 것 까지 완료 했다.
다음 강의는 TODO 리스트 만들기이다.
오늘 강의를 들으면서 생각을 해봤는데, 지금 JSP 강의가 의미가 크게 없는것 같다. 이 강사분이 앞에 설명을 했어도 다시 한번더 설명해주는 특징이 있기 때문이다.
그래서 내일 그냥 React랑 Spring 종합 강의를 들을 예정이다.
알고리즘 풀라했는데, 생각보다 시간 오래걸릴것 같아서 내일해야겠다. 잠자야됨.