해당 글은 코드스쿼드 2022 마스터즈 코스 "Java 웹 백엔드" 과정을 수강하면서 학습한 내용 등에 대한 회고 글입니다. :)
수강 회고
어제와 마찬가지로 오늘 그룹 리뷰 역시 소모임원들간 미션과 관련하여, 많은 유익한 정보들이 공유될 수 있었다. 이때 놀라웠던 것은 같은 미션을 수행하더라도 각각의 수강생들마다 미션을 진행하는 과정에서 관심을 갖는 부분이 모두다 다르다는 것이었다. 나 역시 마찬가지이다.
예를 들어, 어떤 수강생분께선 "테스트"에 대해 좀 더 많은 관심을 갖고 계시고, 또 다른 수강생분께선 "배포"에 대해 좀 더 많은 관심을 갖고 계시고, 또 어떤 수강생분께선 "로깅"에 대해 좀 더 많은 관심을 갖고 계신다. 물론 개발을 함에 있어서 방금 언급했던 것들 중에 중요하지 않은 것은 없으며, 개발을 한다면 모두 다 알아야할 것이다. 하지만 적어도 학습함에 있어서는 모두들 자신만의 좀 더 많은 관심사가 있는 것은 분명한 것 같다.
이러한 관심사들은 쌓이고 쌓여 훗날 프로그래밍을 함에 있어서 (나를 포함하여) 개개인의 진로나 직무(역할) 등에 영향을 주지 않을까 싶었다. 이때 들었던 중요한 생각은 이러한 각자의 관심사와 역할들이 뭐 하나 중요하지 않은 게 없고 귀천이 없다는 것이다.
대학 시절 그리고 회사를 다니던 시절, 지금 보다 어린 시절 나는 무의식적 내지 의식적으로 전망 좋은 직장 또는 개개인의 능력 등으로 사람마다 일종의 계급화가 생긴다고 생각했었던 것 같다. 하지만 사회 생활을 한 이후로 각각의 사람들이 맡는 직무 중에 귀천이 없다는 사실을 느낄 수 있었다.
내가 아는 부분과 할 수 있는 부분에 대해선 내가 다른 사람들에게 도움을 줄 수 있고, 또한 내가 모르는 부분은 다른 사람들로부터 도움을 받을 수 있었다. 특히, 내가 모르는 부분에 대해 다른 사람들의 도움을 받을 때면 그 사람에 대한 존경심이 생기곤 했다.
프로그래밍을 함에 있어서도 마찬가지라고 생각한다. 개개인에게 주어진 시간과 비용은 한정되어 있다. 프로그래밍의 모든 분야를 다 알면 좋겠지만 현실적으로 그러기는 쉽지 않다. 따라서 누구나 자기 자신의 관심사를 명확히 알고 해당 분야에 전문성을 키운다면 어떤 회사에서든 좋은 영향력을 끼칠 수 있을 것이라고 생각이 들었다. 프로그래밍을 할 때면 누군가와 비교하는 일들이 많다. 하지만 (이성적으로) 생각해보면 단지 자기 자신만의 관심사와 역할이 있는 것인데 "과연 누군가와 비교하는 게 가능할까?"라는 생각이 들었다.
학습 회고
- 스프링 부트 관련 미션 과제 풀이
- Java 웹 백엔드 클래스 내 소모임원과 zoom 회의실에서 학습
세션(Session)이란?
쿠키와 함께 세션은 무상태 특성의 HTTP를 보완하고자 나온 "상태 유지 기술"이다. 이때 세션은 간단하게 클라이언트 별로 서버에 저장되는 정보라고 할 수 있다. 이때 WAS에 세션(Session)을 저장하게 되면 이는 서버 메모리를 사용하는 거라고 볼 수 있으므로 서버(WAS)가 shutdown되면 세션 정보가 모두 사라질 수 있다. 따라서 세션 정보가 영속성을 가지기 위해서는 WAS간 세션 동기화(2개 이상 WAS 운용 시) 내지 DB 같은 별도 저장소에 저장해야한다.
세션(Session) 동작 이해하기
1. 클라이언트 → 서버 : 최초 요청
우선 클라이언트(사용자)가 서버측에 요청(로그인, ID 및 패스워드 전송)을 보내면 서버는 사용자 정보에 대한 DB를 활용하여 해당 사용자에 대해 인증 절차를 거친다. 이때 유효한 회원이라면 서버는 해당 클라이언트를 식별할 수 있는 id 값인 session id(Java에서는 이를 jsessionid라고 한다.)를 세션 저장소에 저장 및 발급받아 이를 이용해서 Key(String)와 Value(Object)를 가진 HttpSession 객체(스프링 웹 앱 기준)를 생성한다. (세션 저장소 → Key : session id, Value : HttpSession)
※ session id는 웹 브라우저당 1개씩 생성되며 브라우저 종료 시 소멸된다. 또한 별도로 일정 시간이 지나면 세션 정보가 사라지도록 설정할 수 있다.
2. 서버 → 클라이언트 : 최초 응답
이후 서버는 HTTP 응답과 함께 session id를 저장하고 있는 쿠키를 생성하여 클라이언트에 전송해준다.
3. 클라이언트 → 서버 : 재요청
이후 클라이언트는 서버에 재요청을 할 때 서버로부터 받았던 session id를 저장하고 있는 쿠키를 함께 전송해준다.
4. 서버 → 클라이언트 : 재응답
서버는 이 쿠키에 있는 session id를 통해 앞서 요청에서 생성했던 HttpSession을 찾고 이를 통해 사용자 정보를 처리하여 클라이언트에 응답해준다.
로그아웃, HttpSession removeAttribute vs invalidate
사용자가 로그인을 한 후 로그아웃 요청이 들어올 때 서버에서는 HttpSession 메서드 removeAttribute 또는 invalidate를 사용하여 이 요청을 처리할 수 있다. 이때 이 둘의 차이점은 무엇일까?
우선 removeAttribute는 세션의 특정 name 값의 데이터(객체)를 제거하는 것이다. 반면 invalidate는 해당 세션을 비활성화 시키고 해당 세션과 연결된 모든 데이터(객체)들의 결속을 해제(HttpSession에 의해 참조 X -> GC 대상)시킨다. 둘 다 사용자의 로그아웃 요청을 처리할 수는 있지만 운영 상에서 차이가 있다.
만일 수많은 사용자들이 로그인을 했다가 로그아웃을 했는데 서버에서 removeAttribute 처리를 해주어 특정 세션 데이터만 삭제되고 나머지 데이터는 그대로 있게 된다면 이 또한 서버 메모리를 점유하게 되는 것이므로, 서버 입장에서는 가용성에 나쁜 영향, 혹여나 보안에도 문제가 생길 수 있다. 이에 로그아웃을 처리 할 때는 removeAttribute 보다는 invalidate를 많이 사용한다고 한다.
참고 자료 : 기술 블로그 sowon-dev
좋았던 점
- 오늘 그룹 리뷰를 통해 다양한 정보들이 공유될 수 있어서 유익했습니다!
아쉬웠던 점
- 오늘 치과 진료 등 개인적인 용무들이 있어 학습하는 시간이 부족했습니다.
이전 보다 개선되었던 점
- 마스터즈 코스 과정에서 나 자신과 타인을 비교하는(본능적으로) 마음이 들곤 했었지만 오늘 회고를 통해 내 관심사에 좀 더 집중할 수 있게 된 것 같습니다. 💪
'2022 Masters Course > Web Backend Course' 카테고리의 다른 글
2022 마스터즈 코스(백엔드) 50일차 회고(2022. 3. 18.) - "길면 길고 짧으면 짧았던 지난 50일" (2) | 2022.03.18 |
---|---|
2022 마스터즈 코스(백엔드) 49일차 회고(2022. 3. 17.) - "봄 기운에 맞서 프로그래밍하기" (0) | 2022.03.17 |
2022 마스터즈 코스(백엔드) 47일차 회고(2022. 3. 15.) - "그룹 리뷰의 즐거움" (0) | 2022.03.15 |
2022 마스터즈 코스(백엔드) 46일차 회고(2022. 3. 14.) - "프로그래밍 학습도 중요하지만 운동도 중요하다." (0) | 2022.03.15 |
2022 마스터즈 코스(백엔드) 45일차 회고(2022. 3. 11.) - "힘들었지만, 재밌었던 한 주" (2) | 2022.03.11 |