프로그래밍 일기 — Java의 봄(Spring) 9일차
4 min readSep 5, 2023
제발 문제없이 과제를 끝낼 수 있기를
지난 주에 과제를 마무리하고 겨우 한 숨을 돌렸지만, 그 후에 과정을 들으면서 생각보다 진행이 안되어 답답해하다가 결국 월요일 저녁이나 되어서야 끝냈다. 과제를 할 시간은 48시간 밖에 남지않았는데, 그 안에 이 모든 것을 마무리할 수 있을까하는 걱정부터 들었다.
다행히도 절반의 과제는 성공했으나, 아직 나머지 절반이 남았다. 내일 저녁까지 반드시 끝낼 수 있기를 바라고, 모레 있을 시험도 문제없이 준비할 수 있기를 바란다. 산 넘어 산이다. 문제는 한 봉우리씩 넘는 시간이 너무 타이트하다는 것이다.
어쨌든 오늘 하루를 무사히 지나왔고, 내일은 과제를 반드시 끝내야한다. 그럼에도 불구하고 오늘 배운 것을 기록하는 습관은 멈출 수 없다.
Spring 팁
- 같은 타입의
Bean
이 여러개 있을 때 지엽적인 것(범위가 좁은 것)에 대해서는@Qualifier
를 활용하고, 범용적인 것(범위가 넓은 것)은@Primary
사용 권장(범위가 작을수록 우선순위가 높다.) - Entity: DB와 서버 사이에서 통신하는 레이어이다.
- 기본생성자가 없을 때에만 매개변수를 받는 생성자를 이용하여 객체 매핑이 가능하다.
인증(Authentication)/인가(Authorization)
- 인증(Authentication): 해당 유저가 실제 유저인지 확인하는 것(로그인에서 계정과 비번을 입력하는 것)
- 인가(Authorization): 해당 유저가 특정한 리소스에 접근이 가능한지 허가를 확인하는 것(로그인 이후 권한을 받는 과정)
인증처리
- Stateless: HTTP protocol상에서 정의하는, “비연결성 무상태"를 말한다. 서버와 클라이언트가 연결이 되어 있지 않은 상태를 말한다.
- 일반적으로 벡엔드 개발시, 서버의 비용을 줄이며 리소스를 절약하기 위해 계속 연결하는 상태를 방지한다.
- URL을 통해 요청을 순서대로 쌓아놓고 차례대로 처리하는 방식을 많이 활용한다.
- 쿠키 검증 방식은 세션 저장소에 인증정보를 저장하고 필요시에 획득하는 방법이다. 쿠키(Cookies)란 쿠키를 저장하는 저장소이며, 쿠키(Cookie)는 클라이언트에 저장할 목적으로 생성한 작은 정보가 담긴 파일이다.
- 쿠키와 세션은 클라이언트 별로 인증 및 인가가 가능하다는 장점이 있다.
- 일반적으로 JWT방식이 쿠키보다 더 서버에게 효율적이다.
- 세션은
requestDto
는 생성자가 있어야 받아올 수 있다(requestDto
는 클라이언트가 서버에 보내주는 정보이다.
쿠키 세션 방식
- 사용자가 로그인 한다.
- 사용자를 DB에서 확인한다.
- 회원정보셰션을 생성한다.
- 세션 저장소에서 난수 Session Id를 발급한다(유저 정보와 관련이 없는 무작위)
- 발급한 것을 세션 아이디와 함께 클라이언트에 응답
- 클라이언트 데이터 요청(HTTP헤더에 담겨져 쿠키와 같이 송신)
- 서버는 세션 저장소에 있는 쿠키와 검증한다.
- 서버는 클라이언트에게 요청 데이터와 함께 응답한다.
JWT방식
- 사용자 로그인
- DB에서 회원 사용자 확인
- 서버가 Access Token(JWT)발급
- 서버가 응답과 Access Token을 함께 클라이언트에 보낸다.
- 클라이언트는 JWT와 데이터를 요청한다.
- 서버가 클라이언트에게서 받은 Aceess Token 검증
- 서버는 클라이언트에게 요청 데이터와 함께 응답한다.
Sticky Session
- 클라이언트마다 서버를 고정하여 세션(Session) 저장소를 생성하고 모든 세션을 저장한다.
참조:
(1) https://pixabay.com/illustrations/achievement-across-advantage-703442/