안녕하세요, Brad입니다. 오늘부터 코드스쿼드 레벨3 과정이 시작되었는데요. 본격적으로 백엔드 개발자로서 기본적인 지식을 배울 수 있는 기회가 왔네요! 새로운 낯선 것들을 배운다는 막연한 두려움과 현업에서 실제 쓰이는 기술들을 배울 수 있다는 기대감으로 일주일만에 학원에 발을 딛은 것 같아요. 이제부터 제가 모르는 거대한 새로운 지식들의 일부분은 조금씩 보는 것이라 전에 비해 단편적이거나 부정확한 내용이 좀 더 포함되어 있을 수도 있습니다. 하지만 제가 이해한 내용을 바탕으로 우선 정리해보고 틀리거나 부정확한 내용은 이해가 깊어짐에 따라 계속 수정 보완하겠습니다.
Spring Framework
제가 신기했다고 느꼈던 것과 '아! 이래서 프레임워크라는 것을 쓰구나'하고 느꼈던 부분은 @PostMapping
할 때와 @GetMapping
할 때 form
태그로 넘어온 값이 객체(예를들어 User
)로 넘어올 때입니다. 저는 넘어온 파라미터값에 대해서 setter해서 객체를 만든 적이 없거든요? 근데 User
가 넘어왔다는 것이죠! 이건 Java Bean규약에 의해서 가능한 부분인데요. Spring Framework내에서 form
태그 안에 있던 name속성(id 속성 아닙니다!)을 이용하여 넘겨줄 때 알아서 setter부분을 이용하여 만들어 주는 것입니다. 물론 또 이후에 Java Bean 규약을 이용하여 Mustache에서 getter속성을 이용할 수도 있구요. 이런 점 때문에 Java Bean규약을 따르는게 중요한 것 같습니다. 만약 의도대로 객체가 안 넘겨온다던가, 객체가 안 출력된다면 setter/getter가 제대로 정의되어 있는지 살펴봐야할 것 같습니다.
말 나온김에 Java Bean규약을 살펴봅시다. 큼직하게 이 두 가지만 기억합시다.
- 기본 생성자가 무조건 필요하다. 생성자가 따로 정의되어 있지 않다면 default생성자가 자동으로 만들어지기 때문에 생략 가능하지만 따로 생성자가 있다면 명시적으로 default생성자를 만들어줘야 합니다.
- getter/setter 함수가 필요합니다. 이 이름과 그 안 구현도 규칙이 있는 것 아시죠? boolean타입일 땐 변칙이 있구요. 제일 좋은 건 개발도구를 활용하는 것입니다!
그리고 또 신기했던 것은 URL 주소 매핑이 쉽다는 것입니다! 전 이 과정이 어려운 것인 줄 알았거든요. 근데 form
태그에서 action속성에 설정해둔 URL를 @PostMapping
또는 @GetMapping
옆에 설정하면 그 메서드에서 요청에 따른 처리를 손쉽게 할 수 있다는게 인상깊었습니다. 몇 가지 테스트 삼아 해본 것이 있는데요. 한번 보시죠.
@GetMapping
으로 /뒤에 haha가 오는 url이 오면 그 메서드에서 GET방식으로 name 파라미터를 받아 처리합니다.(return에 "user/test.html"이 아닙니다 .html은 자동으로 붙여지기 때문입니다. 오히려 쓰면 오류발생)
보이시나요? haha뒤에 GET방식으로 넘겨주기 위해 ?name=brad
를 넘겨주었습니다. 그리고 그 name값이 user안에 있는 test.html로 보내져 위와 같은 출력을 얻을 수 있었습니다. 기본적으로 Controller에서 default경로가 resources 바로 밑 templates 폴더로 설정되어 있습니다.(Spring설정에서 변경 가능) 따라서 실제 'user/test' 경로는 templates > user > test.html 인 것이죠.
그럼 이 경로를 좀 더 다르게 해볼까요?
'../test2/test2-1'로 넘겨주면 templates 상위 그리고 test2 > test2-1 로 가게 될까요?
오!! 제대로 가네요. URL은 '/haha?name=brad'그대로 있지만 '../test2/test2-1'경로의 html로 띄워주었습니다. 그럼 이 경로는 어떨까요?
Controller의 default인 templates폴더 상위 그리고 static > test > test1-1.html로 갔네요. 이건 괜찮을까요?
제대로 나오네요!!
여기서 몇 가지 깨달음을 얻을 수 있었습니다.
- 우리가 처음 접속하는 경로는 static폴더가 default로 되어있다. static > user 안에 있는 html파일에서 "../css/bootstrap.min.css"로 지정되어 있으면 상위 / 에서 css > bootstrap.min.css로 찾아가는 것이다.
- 하지만 Controller에서 return할 때 default폴더는 templates폴더로 되어있다. 상대경로로 지정하여 다른 폴더의 html을 지정할 수 있다.
- 그런데
@PostMapping
할 때와@GetMapping
옆에 있는 URL주소는 이 폴더 경로와 전혀 연관없다!!
오늘 이 경로 부분이 너무 헷갈렸어요. 막상 정리하려고 하니 또 이게 맞는것인지 잘 모르겠네요. 이 부분은 내일 미션을 좀 더 진행하면서 연습해봐야할 것 같아요.
마지막으로 '리다이렉트'는 어떻게 사용하는지 살펴볼게요!
위에서 return을 어떤 경로에 있는 html파일로 설정해줬는데요. return뒤에 "redirect:"을 사용하고 넘기고 싶은 url "/users"를 쓰면 바로 그 매핑된 곳으로 가게 됩니다. 따라서 위의 경우 회원가입한 후 "/user/create" 요청처리에서 User객체를 받아 users에 넣고 리다이렉트된 "/users"에서는 users를 넘겨 "user/list"로 보내는 것이 한번에 가능하게 된 것입니다.
아직 확실하게 잘 모르는 부분이 많네요. 좀 더 연습과 테스트가 많이 필요할 것 같아요!
'TIL' 카테고리의 다른 글
Today's Dev Notes(2018-11-14) (1) | 2018.11.14 |
---|---|
Today's Dev Notes(2018-11-13) (0) | 2018.11.14 |
Today's Dev Notes(2018-11-04) (0) | 2018.11.04 |
Today's Dev Notes(2018-11-01) (0) | 2018.11.01 |
Today's Dev Notes(2018-10-31) (0) | 2018.10.31 |