[TIL] 3월 12일

yeon·2021년 3월 14일
0

UserRepository에서 User findByUserId(String userId); 추상메소드 추가하면 어플리케이션 실행이 안된다..

UnsatisfiedDependencyException 발생했다. Cause by BeanCreationException

[Spring] 스프링 properties 사용시 UnsatisfiedDependencyException 발생 원인

→ 오타때문에 생긴 문제였다.

생성자주입시 @Autowired 없어도됨

application.properties 에 handlebars.expose-session-attributes=true 추가

→ 세션에 있는 데이터를 모델에 담아서 템플릿 엔진에 담아주는 역할

사용자 예외 정의시 Exception 상속? RuntimeException 상속?

파이로가 공유해주신 내용

java-squid/effective-java

→ checked 예외는 Exception을 상속받고 unchecked 예외는 RuntimeException을 상속받는다.

HTTP의 특성 (비연결성과 무상태)

[HTTP] HTTP 특성(비연결성, 무상태)과 구성요소 그리고 Restful API

HTTP의 특성

  • connectionless(비연결성)

    : 클라이언트 요청에 대해 서버가 응답을 마치면 맺었던 연결을 끊어버리는 것

    • 장점 : 서버와 다수의 클라이언트의 연결을 유지하게되면 많은 리소스가 발생하는데 이를 줄일수 있다.
    • 단점 : 동일한 클라이언트의 요청에 매번 새로운 연결, 해제를 해야해서 오버헤드 발생
  • stateless(무상태)

    : 통신이 끝나면 상태를 유지하지 않는 특징

    • connectionless로 인해 서버가 클라이언트를 식별할 수 없는것(클라이언트의 상태를 모르는 것), 매번 새로운 인증을 해야하는 번거로움 발생

쿠키와 세션

[HTTP] 쿠키( Cookie )와 세션( Session )

쿠키

사용자 정보를 브라우저에 저장하는 것

  • 특징
    • 브라우저에 저장되서 보안에 취약
    • 사용자 인증이 유효한 시간을 명시할 수 있다.
  • 쿠키 동작 방식
    1. 클라이언트가 페이지 요청
    2. 서버에서 쿠키 생성
    3. HTTP 헤더에 쿠키를 포함시켜 응답
    4. 브라우저가 종료되어도 쿠키가 유효하면 클라이언트에서 보관하고 있음
    5. 쿠키가 존재하면 요청할경우 HTTP헤더에 쿠키를 함께 보내서 요청
    6. 서버에서 쿠키를 읽어 이전 상태 정보를 변경해야 할 경우, 쿠키를 업데이트 함, 변경된 쿠키를 HTTP헤더에 포함시켜 응답
  • 쿠키 사용의 예
    • 쇼핑몰 장바구니 기능, 사이트에서 로그인시 아이디와 비밀번호 저장 기능

세션

서버단에 사용자 정보를 저장

  • 특징

    • 쿠키보다 안전하다.
    • 클라이언트를 구분하기 위해 서버에서 각 클라이언트에게 고유한 세션 ID를 부여한다.
    • 브라우저가 서버에 접속하고, 브라우저를 종료할때까지 인증상태 유지
    • 서버에 메모리를 차지해서 동시 접속자가 많을 경우에 서버 과부화가 걸릴 수 있다.
  • 동작 방식

    1. 클라이언트가 서버 접속시 세션 ID 발급

    2. 클라이언트는 세션 ID에 대해 쿠키를 사용해서 저장

      → 이때 쿠키 이름은 JSESSIONID

    3. 클라이언트가 서버에 다시 접속시 이 쿠키를 이용해서 세션 ID값을 서버에 전달

세션도 쿠키를 사용하기때문에 비슷한 역할을 하지만, 사용자의 정보가 저장되는 위치가 다르다. 쿠키는 서버의 자원을 전혀 사용하지 않는다.

토큰 (OAuth, JWT)

  • 쿠키와 세션의 문제점을 보완하기 위한 토큰 기반 인증방식
  • 보호할 데이터를 토큰으로 치환하는 것, 보안성이 높다.

스프링에서 쿠키와 세션 이용하기

[Spring] 클라이언트와 서버간 연결을 유지하는 세션 & 쿠키

userId 값을 고유하게 만들기

userId의 @Column 어노테이션에 unique = true라고 해주면 된다.


오늘 한일

  • 오늘 드디어 코드스쿼드 멤버들과 처음 대면하는 날이였다. 실제로 만나니 반가웠고 마스터즈분들을 실제로 보니 더 신기했다. 오프라인만의 장점이 확실히 있다. 특히 코드리뷰는 오프라인이 훨씬 좋다. 지옥철 안에서 너무 힘들어서 다음주엔 갈수 있을까 싶었는데 러시아워를 피해서 가면 괜찮을듯 하다.
  • 미션3 구현중인데 세션이라는 개념이 나와서 쿠키와 세션에 대해 학습했다.
  • 동영상을 따라하면서 더 나은 방법을 알아도 바로 구현하는 능력이 아직 부족한거같다. 처음엔 동영상보고 따라하고, 나중에 다시 코드를 일일히 보면서 고치거나 다른 조원들의 피드백을 받고 깨닫게 되는데 응용력이 부족해서 그런듯하다.

Todo

(주말)

  • 김영한님 스프링 강의

0개의 댓글