Command + Option + C
선택한 파일의 절대경로 복사
Command + Shift + G
바로 점프할 수 있는 경로 입력창
터미널 쓸 때 파일 경로 같은 거 너무 귀찮은데..파인더에서 이렇게 배운 단축키 써먹으면 훨씬 편할듯하다. 이전에는 파일 오른쪽 버튼 눌러서 Get info 해서 파일경로를 보고..사실 그게 복사도 안되서 어떻게 해야지 고민했는데 이번 기회에 확실히 외워둬야겠다.
서버 키고 끌때마다 회원가입한 데이터가 다 날아간다. 아마 데이터 안날아가도록 다른 설정이 있을 것 같지만, data.sql
을 src/main/resources
에 넣는 방식으로 히원목록을 초기화하기로 했다. 예시로 다음과 같이 파일에 넣어주면 된다.
INSERT INTO user (id, user_id, name, password, email) VALUES
(1, 'lala', 'lala', 'lala', 'lala@lala.com'),
(2, 'kyu', 'kyu', 'kyu', 'kyu@kyu.com');
참고로 User클래스에 넣어준 속성의 이름을 사용하면 안되고..테이블이 컬럼들을 이름을 어떻게 생성했는지 확인하고 해줘야한다. 다행인건 틀려도 Run 하면 인텔리제이가 뭐가 틀렸는지 알려준다. (런타임 에러 라고 부르면 맞는 말인가?)
참고로 튜토리얼을 따라하다보면 이 부분을 검색할때 sprig data jpa initialize database 정도로 검색하는데 여기서 jpa가 왜 들어갈까? jpa에 대해서 자세히 잘 이해해야할 듯.
로그인, 로그아웃 기능을 구현할때 HttpSession을 이용해서 쉽게 구현할 수 있었다. HttpSession은 뭘까?
웹에서 로그인 기능을 구현할때 가장 기본적인 방식이 HttpSession 객체를 이용하는 것이다. HttpSession의 동작은 세션 쿠키를 통해 이루어진다. 서버는 접속한 브라우저에게 고유한 세션 쿠키를 전달한다.
세션쿠키가 열쇠라면 HttpSession은 자물쇠로 잠겨진 박스라고 생각하면 된다. 사용자는 항상 열쇠를 가지고 접근한다. 그 때문에 각각의 열쇠를 가진 사용자들이 다른데이터를 가질 수 있다? (걍 추론)
호눅스가 안내해주시는 대로 따라하면서 heroku에 배포했던걸 직접 AWS에 배포해보았다. 그저따라한거지만 이런 식으로 클라우드를 이용해서 멀리서 컴퓨터하나로 다른 컴퓨터서버에다가 웹서버를 배포한다는 것 자체에 큰 의미가 있었다.
몇몇 어려운 문제점 포트설정이라던가 ssh를 이용해 서버접속하던거나..그런것들이 있었지만 오늘은 호눅스가 계속 옆에서 알려주고 팀원분들도 적극적으로 알려주려고 하셔서 금방 해결했다.
There was an unexpected error (type=Internal Server Error, status=500).
Cannot expose session attribute 'user' because of an existing model object of the same name
javax.servlet.ServletException: Cannot expose session attribute 'user' because of an existing model object of the same name
로그인 상태에서 개인정보수정을 누르면 세션에 설정된 유저의 정보를 바뀌도록 구현하는 과정에서 위와 같은 에러가 나왔다. 자바지기님의 설명은 이렇게 말씀하셨다.
- 유저라는 이름으로 데이터를 전달하는 거처럼 세션에 데이터를 담을때 expose를 하면서 모델의 데이터가 담겼는데 이름이 똑같기 때문에 같은 이름을 전달할수없다고 나온거다
- 개인정보수정을 할때 모델에 전달되는 데이터와 세션에 담기는 데이터의 이름을 다르게 변경해야지 에러가 없습니다
근데 무슨 말인지 모르겠다.
그리고 session에 들어간 user를 불러서, 들어온 id와 일치하지 않으면 updateForm 에 접근하지 못하도록 자바지기님을 따라했는데, 이상하다. 반대로작동한다. 예상되는 동작은 id와 session의 id가 다를때 야이노무자식아가 나오는건데, 분명히 같은데 야이노무자식이가 나온다. 근데 느낌표를 지우면 id가 같음에도 불구하고 updateForm이 잘나온다. 흠
@GetMapping("/{id}/form")
public String getForm(@PathVariable Long id, Model model, HttpSession session) {
Object tempUser = session.getAttribute("sessionedUser");
if (tempUser == null) {
return "redirect:/users/login";
}
User sessionedUser = (User) tempUser;
if (!id.equals(sessionedUser.getUserId())) {
throw new IllegalStateException("야이노무자식아");
}
model.addAttribute("user", getUserBy(id));
return "/user/updateForm";
}