본문 바로가기

카테고리 없음

자바 팀 스터디 스프링 bean 과 세션

Bean 수동 등록이란?

@Component를 사용하면 @ComponentScan에 의해 자동으로 스캔이되어 해당 클래스를 Bean으로 등록을 해준다.

프로젝트의 규모가 커질 수록 등록할 Bean들이 많아져서 자동으로 등록해서 사용하면 편하다.

@Controller,@Service 같은 에너테이션을 사용하고 등록하며 개발하면 생산성이 올라간다.

하지만 이것은 일반적인 사항임

 

기술적인 문제나 공통적인 관심사를 처리할 때 사용하는 객체들을 수동으로 등록하는 것이 좋다.

공통 로그처리와 같은 비즈니스 로직을 지원하기 위한 부가 적이고 공통적인 기능들을 기술지원 bean이라고 부른다.

/이와 같은 인터페이스를 아래 클래스에서 implements를 해줬을 때...

 

 

package com.sparta.springauth.food;
import org.springframework.stereotype.Component;
@Component
public class Chicken implements Food {
@Override
public void eat() {
System.out.println("치킨을 먹습니다.");
}
}

 

package com.sparta.springauth.food;
public interface Food {
	void eat();
}
ackage com.sparta.springauth.food;
import org.springframework.stereotype.Component;
@Component
public class Pizza implements Food {
@Override
	public void eat() {
		System.out.println("피자를 먹습니다.");
	}
}

우리가 테스트 파일에서 테스트 클래스를 생성후 Food food 객체로 인스턴스화를 시킨다면

 

 

@SpringBootTest
public class BeanTest {
	@Autowired
	Food food;
}//오류가 난다.

 

만약에 @Autowired를 통해 Bean 객체를 주입을 하려고 할 때 주입을 할 수 없다는 오류가 뜬다.

저기서 어떤 Bean 객체를 등록해야 할지 spring 부트가 못찾는 것이다.

 

@SpringBootTest
public class BeanTest {
    @Autowired
    Food pizza;
    @Autowired
    Food chicken;
}

이렇게 피자 치킨을 정확하게 명시해주면 해결 가능

혹은 @Primary 사용

@Component
@Primary
public class Chicken implements Food {
    @Override
    public void eat() {
    	System.out.println("치킨을 먹습니다.");
    }
}

 

@SpringBootTest
public class BeanTest {
    @Autowired
    Food food;
}

여러개가 Bean이 읽어도 @Primary에 설정된 Bean 객체를 주입을 해준다.

혹은 이렇게 해주어도 가능

 

@Autowired

@Qualifier("pizza")<-주입 받으려고 하는 것은 피자이다.

Food food;

 

 

 

네트워크 및 세션 개념들

인증 : 말그대로 해당 유저가 실제 유저인지 확인 하는 개념

인가:해당 유저가 특정 리소스에 접근이 가능한지 허가를 확인하는 개념이다.

Http프로토콜

 

 

그리고 Http(HyperText Transfer Protocol  ) 라는 프로토콜을 이용하여 통신하는데, 그 통신은 비연결성(Connectionless) 무상태(Stateless)로 이루어집니다.

 

->클라이언트와 서버 간에 데이터를 주고 받기 위한 규칙 프로토콜이다.

Http 종류에는 TCP UDP방식이 존재하고 포트 번호는 80이다.

tcp는 연결지향 프로토콜이다

udp는 신뢰할 수 없는 통신 비연결지향 프로토콜이다. 서버와 클라이언트가 연결이 안되어씨음

Tcp와 다르게 연결 설정 과정이 필요 없고 소켓과 생성과 데이터 송신 수신 과정만 존재

Tcp와 비교했을 때 신뢰할 수 없지만 연결 수립에 부하가 없고 빠르다.

 

 

 

TCP 방식에선 연결 과정이 필요하다고 위에서 언급했었다.이 때, 연결을 수립할 때는 3way-HandShake,

간단하게 핸드셰이크는 특정 패킷을 보내고 클라이언트는 해당 피킷을 보냄과 동시에

해당 응답을 기다린다. ack 패킷 syn패킷을 서버는 보내고 클라이언트는 ack 패킷을 보낼 때 까지 기다리게 된다.

 

osi 7계층

 

 

 

 

소켓에서는 클라이언트 서버의 주소들 좀 더 상세하게 표현하기 위해 소켓 주소 구조체 사용

컴퓨터 본채에서 포트
192.168.0.1 ip 주소 :(포트번호)

 

쿠키 세션

 쿠키의 특징

  • 쿠키는 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일입니다.
  • 쿠키는 클라이언트의 상태 정보를 로컬에 저장했다가 참조합니다.
  • 하나의 도메인당 20개의 값만 가질 수 있음, 하나의 쿠키값은 4KB까지 저장합니다.
  • 쿠키는 사용자가 따로 요청하지 않아도 브라우저가 Request시에 Request Header를 넣어서 자동으로 서버에 전송합니다.

 

 

세션

  • 서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지합니다.
  • 사용자에 대한 정보를 서버에 두기 때문에 쿠키보다 보안에 좋지만, 사용자가 많아질수록 서버 메모리를 많이 차지하게 됩니다.
  • 클라이언트가 서버에 접속 시 세션 ID를 발급 받음
  • 클라이언트는 세션 ID에 대해 쿠키를 사용해서 저장하고 가지고 있음
  • 클라리언트는 서버에 요청할 때, 이 쿠키의 세션 ID를 같이 서버에 전달해서 요청
  • 서버는 세션 ID를 전달 받아서 별다른 작업없이 세션 ID로 세션에 있는 클라언트 정보를 가져와서 사용
  • 클라이언트 정보를 가지고 서버 요청을 처리하여 클라이언트에게 응답