강의/Java Spring Boot 18

Spring Boot Starter Data JPA 추가, 그리고 H2 데이터베이스 활용

지금까지는 데이터베이스가 없어 프로그램을 재시작하면 그동안 했던 데이터가 모조리 사라졌다. 이걸 방지하기 위해서 H2라는 데이터베이스를 사용할 것이고, 이것과 프로그램이 통신할 수 있도록 JPA를 사용할 것이다. 언제나처럼 pom.xml에서 의존성을 추가해보자. ```org.springframework.bootspring-boot-starter-data-jpa com.h2databaseh2runtime``` 이걸 추가하고 실행해보면 h2 데이터베이스와 관련한 로그가 여럿 떠있는 걸 확인할 수 있다. 로그를 보면 H2 콘솔을 다루기 위해 /h2-console에 들어갈 수 있고, 데이터베이스는 jdbc:h2:mem:으로 시작하는 url을 통해 접속할 수 있음을 알 수 있다. 이 url은 계속 변하기 때문에,..

todolist 정리하기

이제부터 투두리스트의 코드를 정리하고, 또 외관을 개선하고자 한다. 가장 먼저 url 입력 없이 클릭만으로 페이지를 옮겨다닐 수 있도록 메뉴를 추가하려고 하는데, 그전에 jsp 프래그먼트에 대해서 알아보고 넘어가려고 한다. 우리가 지금까지 작성한 여러 파일을 보면 공통적으로 들어가는 코드가 있다. 이런 걸 특정 파일에 담아서 그 파일의 경로와 이름을 작성하는 걸로 해당 코드를 작성하는 걸 대체할 수 있다. 이를 jsp 프래그먼트라고 한다. 이를 이용해서 우리는 메뉴 코드를 해당 파일에 담아서 코드를 좀더 간단하게 만들 수 있다. 일단은 이전에 했던 것처럼 코드를 작성하고, 그 뒤에 위에서 설명한 걸 적용할 것이다. 추가할 메뉴 코드는 아래와 같다. ```https://courses.in28minutes...

Spring Security를 이용한 로그인 구현

이전까지 우리는 애플리케이션 제작 방법과 과정을 이해하기 위해 직접 로그인 논리를 작성했다. 그때 글 중간에 실제로는 이렇게 안 하고 프레임워크에서 제공하는 기능을 이용하여 구현한다고 말한 적이 있을 것이다. 이제 그렇게 할 것이다. Spring Security라는 걸 이용할 건데, 이걸 위해서 우리가 그동안 코드를 어느정도 정리해야 한다. 일단 LoginController에 가보자. ```@Controller@SessionAttributes("name")public class LoginController { AuthenticationService authenticationService; public LoginController(AuthenticationService authenticationServic..

todolist CRUD 기능 구현하기

먼저 CREATE, 그러니까 투두를 추가하는 기능을 먼저 구현해보자. 버튼을 만드는 코드는 딱히 어렵지 않다 `Add Todo`를 버튼이 있으면 좋겠다~ 하는 위치에 추가해주면 된다. 디자인이 별로다 하면 이전 게시글에서 배웠던 부트스트랩을 사용할 수 있다. `Add Todo`와 같이 사용할 수 있다. 부트스트랩에 관한 정보는 Introduction · Bootstrap v5.0 (getbootstrap.com)에서 확인할 수 있다. 모르는 게 있으면 저기서 찾아보자. TodoController에 가서 버튼을 클릭했을 때 작동할 논리를 만들어보자 ```@RequestMapping(value="add-todo", method=RequestMethod.GET)public String showNewTodoPa..

JSTL 활용해서 todo 표시하기

JSTL은 태그 라이브러리로, 우리가 import하고 include 하던 걸 태그를 통해 진행한다고 보면 된다. 먼저 pom.xml에서 의존성을 추가할 필요가 있다. 이클립스에서는 아래 코드를 추가한다. 위는 JSTL API, 아래는 JSTL 구현체이다.```jakarta.servlet.jsp.jstljakarta.servlet.jsp.jstl-apiorg.eclipse.jettyglassfish-jstl``` 인텔리제이에서 위의 코드를 치면 인식하지 못하는 의존성이 있을텐데, 그거 대신 아래 코드를 추가한다.```org.glassfish.webjakarta.servlet.jsp.jstl3.0.1``` 이제 listTodos.jsp에 태그 라이브러리를 추가할 수 있다. 추가할 태그 라이브러리는 `jstl..

세션, 모델, 그리고 요청 - @SessionAttributes

이전까지 우리는 jsp로 값을 보내고, 보낸 값을 사용하는 법을 배운 적이 있다. 그리고 그 값을 이용해 login에 성공하면 다른 페이지로 이동하는 법을 배웠다. 하나 생각해보자. 우리가 특정 jsp에 값을 보냈을 때, 우리는 지금까지 배운 걸 이용해서 다른 jsp에서도 그 값을 사용할 수 있게끔 할 수 있는가?  안된다. 지금까지 배운 것만으로는 할 수 없다. 때문에 이번 시간에는 세션이라는 걸 이용해서 여러 jsp에서 값을 이용할 수 있게끔 하는 방법을 배워보려 한다.  이를 위해서 일단 페이지 내부에 다른 페이지로 갈 수 있는 링크를 삽입해보려 한다. ```${name} Welcome~!Manage your todos``` 이렇게 하고 나서, 페이지 내부의 링크를 통해 list-todos로 이동해..

todolist 만들기

sayHello.jsp, login.jsp로 대충 어떻게 해야 하는지 알았을테니 이제 본격적으로 투두리스트를 만들어 볼 것이다. 언제나 그랬듯이 todo 패키지를 만들고 그 안에 todo와 관련된 걸 모조리 쑤셔넣는다. Todo.java, TodoController.java, TodoService.java 이렇게 세 가지 파일을 만들어볼 건데, Todo와 TodoService를 먼저 만들어보자. Todo에는 id, username, description, targetDate, done 이렇게 세 가지 멤버변수를 가지고 있다고 하자. ```public class Todo { private int id;private String username;private String description;private ..

로그인 양식 만들기

이번 시간에는 로그인 양식을 만들어 볼 것이다.  물론 이번 시간에 배운 양식을 그대로 계속 쓰지는 않을 것이고, 오늘 시간을 통해 어떻게 돌아가는지 이해한 뒤에는 Spring Security를 사용할 것이다. 잡설은 줄이고 시작해보자. 일단 @RequestParam과 ModelMap은 더는 필요하지 않다. 없애자. 그리고 login.jsp로 가서 form을 이용해 로그인 양식을 만들어보자. ```Welcome to the login page~!Name: Password: ``` 이렇게 작성하고, 실행한 뒤, 양식에 값을 채우면 이전 시간에 url을 통해 값을 넘겼을 때처럼 url이 변하는 걸 확인할 수 있다. 그런데 이렇게 url을 통해 정보를 전송하는 건 안전하지 않다. 인터넷을 통해 접근한다고 할 ..

Spring MVC 작동원리

Spring MVC와 웹 애플리케이션의 작동 원리웹 애플리케이션의 기본 작동 방식은 브라우저가 서버에 요청을 보내고, 서버가 이에 대한 응답을 반환하는 구조입니다. 이번 글에서는 Spring Boot와 Spring MVC를 통해 웹 애플리케이션이 어떻게 작동하는지를 살펴보겠습니다.초기 Java 웹 애플리케이션 개발Java로 웹 애플리케이션을 개발하기 시작했을 때, 모든 로직이 JSP 파일 내에 포함되어 있었습니다. 이 방식은 흐름 로직, 뷰 로직, 데이터베이스 로직이 모두 JSP에 혼합되어 있어 유지보수가 어려웠습니다. 이러한 구조를 모델 1 아키텍처라고 부릅니다.모델 2 아키텍처로의 전환이후 모델 2 아키텍처로 발전하면서 로직이 명확하게 분리되었습니다. 뷰 로직은 뷰로 가고, 데이터베이스 같이 데이터를..

JSP 시작하기

이번 시간부터는 지금까지 배운 Spring Framework, Spring Boot, Hibernate를 이용해 Java 웹 애플리케이션을 만들어볼 것이다. 이 과정에서 복습은 당연히 이루어질 것이고, 과정 중에 겪는 어려움을 해결하기 위해 새로운 것들을 배워보기도 할 것이다. 일단 시작해보자. 언제나 그랬듯이 Spring initializr로 프로젝트를 만들어보자.  언제나처럼 빌드툴은 Maven을 선택하자. Spring Boot는 릴리즈된 버전 중 최신 버전을 사용하자. Project: MavenLanguage: JavaSpring Boot: 3.3.2 Group: com.in28minutes.springbootArtifact: myfirstwebappName: myfirstwebappDescript..