안녕하세요, Brad입니다! 오늘은 수업시간에 DB를 연동하는 법을 배웠어요! 불과 몇 줄 안되는 코드로 데이터베이스를 연동시킬 수 있다는 점이 매우 놀라웠는데요. 원래 이전엔 DB 연동시키기 위해 훨씬 코드가 길었다고 해요. 아마 제가 전에 학교에서 따라치면서 배웠던 코드가 그랬던 것 같아요. 정말 많은 작업들을 해서 지금 생각해보면 기억이 전혀 안 나네요.. 그런데 오늘 정리할 부분은 DB부분은 아니고 qna step1 미션에 대한 질문과 대답입니다. DB에 대한 부분은 내일 이후부터 가능할 것 같아요.
@Controller 는 어떻게 작동하는 것인가요?
- 제가 질문했던 부분인데요. 자바 클래스에서 위에
@Controller
어노테이션을 설정해놓으면 알아서 그 안의 매핑 메서드들이 작동하잖아요. 그런데 이게 어떤 방식으로 작동되는 것인지 궁금하더라구요. - 서버가 작동을 하면
@Controller
에 있는 부분을 Map으로 만든다고 합니다. key가 매핑시켜주는 url, value가 메서드 안 처리내용이 되겠죠. 그리고 url 요청이 있으면 그에 따른 처리를 한 후 응답을 보내주는 것이죠. - 그렇기 때문에 사실 컨트롤러 내 메서드명은 url과 관련이 없습니다. 중요한건 Mapping옆에 있는 url인 것이죠.
- Mapping방식(GET방식, POST방식 등등)과 url path가 같으면 서버 띄울 때 에러발생합니다. 이 부분의 경우 개발자의 실수임을 알고 개발도구에서 알아서 서버작동시 오류메시지를 띄운다고 하네요.
- 또 중요한 한가지! Controller를 타기 시작하면 templates폴더가 default라는 점입니다!
- 제가 질문했던 부분인데요. 자바 클래스에서 위에
매개변수로 객체 전달(예를들어
User
객체의 전달)은 어떤 식으로 이루어지는 건가요?- 우선 서버쪽으로 POST방식 또는 GET방식을 통해서 'userId=javajigi&password=1234&name=java' 이런 식으로 데이터가 전달될 것입니다.
- 우선 받는 곳에서의 매개변수에서 어떤 객체인지 찾아준 후(예를들어 User) 그 객체를 생성합니다. 그리고 받아온 데이터들을 setter 메서드를 이용하여 값을 넣은 다음 넘겨주는 것입니다.
- 'Spring을 한다는 것은 일관된 규약을 따른다는 것'입니다. 그렇기 때문에 Java Bean규약에 따라 default생성자와 setter메서드를 이용하여 해당 객체를 정상적으로 넘겨줄 수 있었던 것이죠.
왜 redirect가 필요한가요? 한 곳에서 몰아서 처리해줄 수 없나요?
redirect가 필요한 이유는 여러 가지가 있겠지만 몇 가지 이유를 말하자면 '기능에 적절한 이름의 url부여', '똑같은 요청은 피하기 위해', '재사용성' 등이 있습니다.
좀 더 이해를 돕고자 '똑같은 요청은 피하기 위해'와 관련해 수업시간에 들었던 예시를 보여드릴게요.
위 코드는 원래 create()메서드에서 회원을 만든 처리를 하고 list()메서드로 redirect하는 구조였는데 create()메서드에 list()메서드가 하는 일까지 모두 집어넣은 경우입니다.
이 경우 create()메서드 처리 후 바로 "user/list"로 이동하게 됩니다. 그런데 문제는 이후 '새로고침'을 하게되면 해당 요청이 그대로 남아있기 때문에 아까 회원가입한 유저가 또 나오게 된다는 것입니다. 물론 List에도 같은 유저가 추가되구요.
이건 하나의 단편적인 예시이지만 이런 식으로 하나의 메서드가 여러 일을 담당하게 되면서 버그나 부작용이 발생할 수 있다는 것입니다. 이 또한 레벨2에서 배웠던 '메서드는 하나의 일만 한다'와 밀접하게 관련이 있네요.
그리고 오늘 백엔드 동료로부터 '파일 변경시 서버 자동 재시작'하는 방법을 배웠습니다. 이게 별게 아닌 것 같지만 제대로 작동하는지 여부를 살펴보기 위해 정말 수십번 테스트를 해보는데 그러다보면 그 차이가 엄청 크거든요. 그 방법은 여기 블로그에 정말 자세하게 설명되어 있습니다. 블로그 글에 따라 위부터 그대로 따라하고 밑의 '--추가내용--'부분 중에서는 application.properties에 속성 값 부분 설정하는 것까지 추가적으로 진행하면 됩니다!
내일은 DB 미션을 좀 더 진행하면서 오늘 배운 부분까지 마저 정리해볼게요!!
'TIL' 카테고리의 다른 글
Today's Dev Notes(2018-11-18) (0) | 2018.11.18 |
---|---|
Today's Dev Notes(2018-11-17) (0) | 2018.11.18 |
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-12) (0) | 2018.11.13 |