- 프로젝트명: "게시판 만들기"
- 프로젝트 소개: 게시글을 쓰거나 지울 수 있는 게시판 프로그램입니다.
- 사용 기술: #SpringBoot #JPA #MySQL
GitHub: https://github.com/k-jaehyun/Board
Food 인터페이스에 Chicken, Pizza 구현 클래스를 만들어서 @Component로 둘 다 Bean 주입 가능.
"Food 타입의 bean 객체가 1개보다 많다." -> 치킨, 피자 2개 있기 때문에 어느것을 주입시킬지 물어보는 것이다.
Food food; --> 이렇게하면 Food타입의 food라는 bean을 찾아봤는데 없음 -> spring은 구현체의 bean 을 찾음(chiken,pizza) -> 2개 중에 하나를 골라야 하므로 오류.
해결방법1: bean 이름을 직접 주입.
@Autowired
Food pizza; //--> bean으로 등록된 이름을 직접 명시해줌.
@Autowired
Food chicken;
해결방법2: bean에 우선순위 적용 -> 해당 bean 위에 @Primary
해결방법3: @Qualifier로 직접 가져온다 -> @Qulifier("bean이름")을 해당 bean에 써주고, @Autowired 밑에도 똑같이 써줌.
Primary와 Qualifier 가 동시에 걸려있으면 Qualifier의 우선순위가 더 높음.
--> 범용적 사용에는 Primary를 걸어두고, 지엽적 사용에는 Qualifier를 직접 붙여주고 사용하면 됨
(보통 Spring에서는 좁은 범위의 설정이 더 우선순위가 높다!)
인증은 해당 유저가 실제 유저인지 인증하는 개념
인가는 해당 유저가 특정 리소스에 접근이 가능한지 허가를 확인하는 개념
Http 라는 프로토콜을 이용하여 통신하는데, 그 통신은 비연결성(Connectionless) 무상태(Stateless)로 이루어짐.
인증 처리 방식
(서버는 비연결성, 무상태를 갖는데도 불구하고 인증이 되었다는 사실을 어떻게 인지하고 있을 것인가!)
쿠키-세션 방식은 세션 저장소가 따로 있고, 거기서 검증을 진행하기 때문에 서버의 부담을 줄일 수 있다.
쿠키와 세션 모두 HTTP 에 상태 정보를 유지(Stateful)하기 위해 사용.
(=클라이언트별 인증 및 인가를 위해)
클라이언트에 저장될 목적으로 생성한 작은 정보를 담은 파일.
크롬 F12에서 Application - Storage - Cookies 에 도메인 별로 저장되어 있는게 확인됨.
(번외) local storage, session storage에 대해서도 학습하면 도움이 많이 됨.
쿠키 예시
- Name (이름): 쿠키를 구별하는 데 사용되는 키 (중복될 수 없음)
- Value (값): 쿠키의 값
- Domain (도메인): 쿠키가 저장된 도메인
- Path (경로): 쿠키가 사용되는 경로
- Expires (만료기한): 쿠키의 만료기한 (만료기한 지나면 삭제)
서버에서 일정시간 동안 클라이언트 상태를 유지하기 위해 사용.
클라이언트 별로 유일무이한 '세션 ID' 를 부여한 후 클라이언트 별 필요한 정보를 서버에 저장.
'세션 ID' 는 클라이언트의 쿠키값('세션 쿠키' 라고 부름)으로 저장되어 클라이언트 식별에 사용됨.
- 세션 동작 방식
1. 클라이언트가 서버에 1번 요청
2. 서버가 세션ID 를 생성하고, 쿠키에 담아 응답 헤더에 전달
3. 클라이언트가 쿠키에 세션 ID를 저장
4. 2번 요청(쿠키값에 세션 ID 포함하여 요청)
5. 서버가 세션 ID를 확인하고 1번 요청과 같은 클라이언트임을 인지
--> 세션ID 를 사용하여 세션을 유지!!
함께 추가적으로 공부한 것은 다음과같다.
- 엔터티는 setter 사용을 지양하며, DTO는 상관 없다는 사실
- 왜 엔터티에는 setter를 사용하지 말아야하는지
- hibernate의 ddl-auto 속성의 종류와 주의해야할 점
- 서블릿 -> 요청을 담는 3가지 기술(DTO, HttpServletRequest, 매개변수)
- @GeneratedValue의 GenerationType
GenerationType을 IDENTITY로 했을 때 오류가 났었는데, 고쳤다!
포스팅 하고싶으나 내용이 너무 많아서...
정리해둔 원노트를 첨부한다.
>원노트 링크