CS

면접 질문

challnum 2022. 8. 31. 15:40

1. Session과 Cookie 
Session과 Cookie 사용 이유 
- 현재 우리가 인터넷에서 사용하고 있는 HTTP프로토콜은 연결 지향적인 성격을 버렸기 때문에 새로운 페이지를                           
요청할 때마다 새로운 접속이 이루어지며 이전 페이지와 현재 페이지 간의 관계가 지속되지 않는다. 이에 따라                             
HTTP프로토콜을 이용하게 되는 웹사이트에서는 웹페이지에 특정방문자가머무르고있는동안에그방문자의상태를                         
지속시키기 위해 쿠키와 세션을 이용한다. 
  
Session 
- 특정 웹사이트에서 사용자가 머무르는 기간 또는 한 명의 사용자의 한번의 방문을 의미한다. 
- Session에 관련된 데이터는 Server에 저장된다. 
- 웹 브라우저의 캐시에 저장되어 브라우저가 닫히거나 서버에서 삭제시 사라진다. 
- Cookie에 비해 보안성이 좋다. 
  
Cookie 
- 사용자 정보를 유지할 수 없다는 HTTP의 한계를 극복할 수 있는 방법 
- 인터넷 웹 사이트의 방문 기록을 남겨 사용자와 웹 사이트 사이를 매개해 주는 정보이다. 
- Cookie는 인터넷사용자가특정웹서버에접속할때, 생성되는개인아이디와비밀번호, 방문한사이트의정보를담은                               
임시 파일로써, Server가 아닌 Client에 텍스트 파일로 저장되어 다음에 해당 웹서버를 찾을 경우 웹서버에서는 그가                             
누구인지 어떤 정보를 주로 찾았는지 등을 파악할 때 사용된다. 
- Cookie는 Client PC에 저장되는 정보기 때문에, 다른 사용자에 의해서 임의로 변경이 가능하다.(정보 유출 가능,                             
Session보다 보안성이 낮은 이유)

2.정규화란 무엇인가요 
정규화란 테이블의 데이터들간의 종속성, 중복성 등으로 인해 예기치 못한오류를제거하는과정이라할수있습니다.                               
정규화를 진행했을 때 장점은 DB의 일관성을 향상시킬수 있습니다. 또한 DB의 논리적 구조를 견고하게 만들 수                             
있습니다. 하지만 테이블의 숫자가 늘어나고 결국 join 연산의 비용이 증가 하는 단점을 가질 수 있습니다. 

3. DI와 AOP에 대해 설명하시오. 
   ① DI  : Dependency injection = 의존성 주입 
Spring을 적용하여 applicationContext.xml에서 설정만 해주면 외부 설정파일(xml)에서 연관관계에 있는 객체를                     
주입해주기 때문에 의존객체를 찾기 위한 코드가 필요하지 않게 됨. 
      즉, 외부설정에서 객체를 찾아서 쓰기 때문에 코드 내에 의존관계를 맺는 코드 생성이 불필요. 
   
   ② AOP : Aspect oriented programming = 약자 관심지향 프로그래밍 
프로그래밍 할 때 특정한 관심사를 가진 코드 부분을 별도의 모듈로 분리함으로써 기존 객체지향의 강력한                             
기능(상속, 위임)만으로는 처치가 곤란했던 중복을 할 수 있게 됨.

1) 스프링 프레임워크는 어떤 특징 혹은 장점을 가지고 있나요? (3가지 이상) 
1. 단순화된 단위 테스
단위테스트를 단순화 하면? => 생산성 향상. 결함이 일찍 발견됨. 지속적인 통합 빌드에서 자동화된 단위테스트 가능합니다.
JPA 영속성 관리라서 휘발성이기에 영속성 컨텍스트 

2. 복잡한 코드 감소 비즈니스 로직에 집중할 수 있게 해준다. 다른 부분은 스프링 프레임 워크가 도와줌

3. 아키텍쳐의 유연성
AOP활용으로 Logging, Transcation, Security사용 가능

JPA 영속성 관리라서 휘발성이기에 영속성 컨텍스트 

2)스프링에서 DI (의존성 주입) 를 사용하는 이유가 무엇인가요? 예를 통해 설명 해 보세요.
모든 코드를 수정해야 하는 경우 방지
1. 생성자 주입(Constructor Injection)
@Controller
public class CocoController {  
//final을 붙일 수 있음    
private final CocoService cocoService;   //---------------------------------------------------------  
//@Autowired     
public CocoController(CocoService cocoService) {        
this.cocoService = cocoService;    
}
}
클래스의 생성자가 하나이고, 그 생성자로 주입받을 객체가 빈으로 등록되어 있다면  @Autowired를 생략 할 수 있습니다.
2. 필드 주입(Field Injection)
@Controller
public class CocoController {  

@Autowired     
public CocoController(CocoService cocoService) {        
this.cocoService = cocoService;    
}
}
필드에 @Autowired 어노테이션만 붙여주면 자동으로 의존성 주입됩니다.
사용법이 매우 간단하기 때문에 가장 많이 접할 수 있는 방법입니다.

단점 : 코드가 간결하지만, 외부에서 변경하기 힘들다.
프레임워크에 의존적이고 객체지향적으로 좋지 않다.

3. 수정자 주입(Setter Injection)
@Controller
public class CocoController {  

private CocoService cocoService;  

@Autowired     
public void setCocoController(CocoService cocoService) {        
this.cocoService = cocoService;    
}
}
수정자 주입을 사용하면 setXXX 메서드를 public으로 열어두어야 하기 때문에 언제 어디서든 변경이 가능하다.

생성자 주입 권장 : 순환참조 방지

<Q> 우리가 브라우저에서 구매한 도메인 주소를 입력하면 만들어 놓은 aws EC2 서버까지 전달이 되어서 해당 서버에게 요청을 보낼 수 있습니다. 이 과정이 상세하게 어떻게 진행되는지 그림으로 한번 그려볼까요? 또는 순서를 설명을 적어주셔도 좋습니다.







. 이에 대한것은 인터넷에 검색해보면 많은 글들을 보실 수 있습니다. 모든 세세한 부분들을 이해하기는 어렵겠지만 큰 맥락만 이해하시고 우리가 현재 작업하는 노드 서버가 어떻게 동작하는지 정도의 간단한 부분만 잘 이해해주셔도 좋습니다.

'CS' 카테고리의 다른 글

면접 질문  (0) 2022.09.05
면접 질문  (0) 2022.09.02
ORM, JPA, Spring Data JPA  (1) 2022.09.01
Controller, Service, Repository  (0) 2022.09.01
REST API / PUT POST의 차이/ PUT PATCH의 차이  (1) 2022.09.01