자바지기 박재성 강사님의 유튜브 강좌 'Spring Boot, JPA로 Q&A 게시판 구현하기'를 공부하며, 각 반복주기마다 추가 학습한 내용을 포스팅으로 남기고 있다.
첫번째 반복주기에 이어 두번째 반복주기에서는 회원가입 기능과 사용자 목록 기능을 구현하였다. 이 과정을 통해 MVC 패턴에 대한 기본적인 이해와 mustache를 활용하여 동적인 HTML을 생성하는 방법에 대해 배워보았다.
스프링 MVC 패턴 중 C(Controller)에 해당
스프링 MVC 패턴
1. Model: 애플리케이션의 정보, 데이터를 나타냄
2. View: 사용자 인터페이스 요소를 나타냄
3. Controller: 데이터와 사용자 인터페이스 요소를 잇는 다리 역할, 사용자의 요청을 처리한 후 지정된 뷰에 모델 객체를 넘겨주는 역할
@GetMapping
은 @RequestMapping(value="", method=RequestMethod.GET)
을 대신하는 코드@PostMapping
은 @RequestMapping(value="", method=RequestMethod.Post)
을 대신하는 코드<form action="URL">
<form name="텍스트">
<form method="get|post">
private는 자기 자신만 사용할 수 있는 접근 제어자이다.
아래 예시를 통해 더 자세히 살펴보자.
public class Information {
public String id;
private String password;
}
위 코드에서 public으로 선언된 id 변수는 다른 클래스에서도 사용할 수 있지만, private로 선언된 password 변수는 information이라는 클래스 내에서만 사용할 수 있다.
하지만, 이런 private로 선언된 변수를 사용하기 위해 get, set 메소드를 사용한다.
객체 지향 프로그래밍에서는 객체 외부에서 직접적으로 객체에 접근하는 것을 막는다. 그 이유는 객체의 데이터를 외부에서 마음대로 접근하게 되는 경우 무결성이 깨질 수 있기 때문이다.
따라서 객체 외부에서 직접적으로 데이터에 접근하는 것이 아닌, 메소드를 공개해서 이 메소드를 통해 데이터에 접근하게 한다.
이러한 역할을 담당하는 메소드가 바로 get과 set 메소드이다.(getter, setter라고도 한다) get은 가져오는 것, set은 지정하는 것으로 이해하면 된다.
아래 예시를 통해 조금 더 자세히 살펴보자.
public class Information {
public String id;
private String password;
// 1번
public void setPassword(String password1) {
password = password1;
}
// 2번
public String getPassword() {
return password;
}
}
1번 코드를 보면 set 메소드(setPassword)를 통해 데이터를 입력하는 것을 알 수 있다.
2번 코드를 보면 get 메소드(getPassword)를 통해 password 변수를 가져온다는 것을 알 수 있다.
1번과 2번 코드 모두 public으로 선언을 해주었으니, 다른 클래스에서도 get과 set 메소드를 통해 password 변수에 접근할 수 있다.
toString 메소드는 객체가 가지고 있는 정보나 값들을 문자열로 만들어 리턴하는 메소드이다.
회원가입한 사용자를 저장하고 있어야 사용자 목록을 통해 해당 사용자를 보여줄 수 있다. 따라서, 회원가입을 했을 때 회원가입한 사용자를 저장할 수 있는 List 컬렉션에 대해 알아보자.
배열은 크기가 정해져 있다. 하지만, 프로그래밍을 할 때 배열의 명확한 크기를 알 수 없는 경우가 많다. 이처럼 동적으로 자료형의 개수가 변하는 상황이라면 List를 사용하는 것이 유리하다.
대표적인 List 컬렉션 클래스(ArrayList, LinkedList, Vector, Stack) 중 오늘은 ArrayList에 대해 더 자세히 살펴보자.
정의
ArrayList는 List 컬렉션 인터페이스를 구현한 클래스이다.
일반 배열과 ArrayList는 인덱스로 객체를 관리한다는 점에서는 동일하지만, ArrayList는 크기를 동적으로 늘릴 수 있다는 점에서 차이가 있다.
예제
// User 객체를 관리하는 ArrayList 생성
List<User> users = new ArrayList<User>();
// add() 메소드를 이용해 요소 저장
users.add(user);
@Controller
public class WelcomeController {
@GetMapping("/helloworld")
public String welcome(String name, int age, Model model) {
System.out.println("name: " + name + " age: " + age);
model.addAttribute("name", name);
model.addAttribute("age", age);
return "welcome";
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>welcome</title>
</head>
<body>
Hello I'm {{name}} :)<br/>
I'm {{age}} years old!
</body>
</html>
http://localhost:8080/helloworld?name=Minju&age=25
해당 url을 통해 서버에 요청하면 아래와 같은 화면이 출력되는 것을 확인할 수 있다.
(사진 추가)
redirect란 다시(re) 지시한다(direct)는 뜻이다.
예를 들어 브라우저가 "http://localhost:8080/create" URL을 웹 서버에 요청했다고 가정해보자. 이 때 서버는 HTTP 응답 메시지를 통해 "http://localhost:8080/list" 로 다시 요청하라고 브라우저에게 다른 URL을 지시할 수 있다.
👉 본 강의에서는 다음 코드를 통해 redirect 기능을 사용하였다.
@PostMapping("/create")
public String create(User user) {
users.add(user);
return "redirect:/list"; // 이 코드를 통해 /create가 아닌 /list url이 재요쳥된다.
}
git log
를 통해 현재까지 진행된 작업 상태를 확인한다.
--hard
: 돌아가려는 이력 이후의 내용을 모두 삭제--soft
: 돌아가려는 이력 이후 내용 모두 유지(바로 다시 커밋할 수 있는 상태로 남아있음)--mixed
: 돌아가려는 이력 이후 내용 모두 유지, 그러나 인덱스는 초기화됨(커밋하려면 변경 내용 다시 추가해야 함)git push --force
명령어를 통해 강제로 이전 작업으로 되돌린다.
두번째 반복주기를 공부하면서 맛보기이긴 했지만 Spring MVC 패턴에 대해서 알 수 있었고, mustache를 활용해 동적인 HTML을 생성하는 방법도 알아볼 수 있었다.
Spring은 처음 공부해보는 거라 하나의 반복주기를 공부하는 데 시간이 많이 걸려서 빨리빨리 진행하고 싶은 마음이 굴뚝 같다. 하지만, 공부한 내용을 블로그에 기록하면서 강의를 들을 때 놓쳤던 부분을 좀 더 꼼꼼하게 짚고 넘어갈 수 있어서 좋다!
세번째 반복주기도 무사히 잘 넘어갈 수 있기를🙏
SpringMVC(1) Controller 생성하기
SpringMVC - 핸들러 메소드 - 1(Mapping 어노테이션, 확장자, 요청 헤더
코딩의 시작, TCP School
자바 get, set 메소드
JAVA에서 set이랑 get의 쓰임과 class의 의미
Java 리스트(List) 컬렉션 종류 ArrayList, Vector, LinkedList
자바 List 컬렉션 클래스 (ArrayList)
2-1. mustache 활용한 동적인HTML과 MVC 설명
[HTTP] 리다이렉트(REDIRECT)란?
Git - 복원(undo), 복구(reset, revert) 사용 방법 및 상세 설명