Back-End 면접질문5

Lee·2020년 10월 2일
1

5탄 가즈아~

JAVA에서 singleton 패턴을 쓰는 이유를 말해보세요

1) 객체를 여러개 생성하지 않아도 되서 불필요한 자원사용을 방지할 수 있습니다
2) 객체가 무조건 한번만 생성되는 것을 보장할 수 있습니다
3) 커넥션 풀이나 스레드풀과 같이 객체를 여러개 동시에 생성해서 사용하게 될 경우 프로그램이
예상치 못한 결과를 얻을 수 있습니다.

DB클러스터링과 리플리케이션의 차이점에 대해 설명해보세요

리플리케이션은 비동기화 방식이고 클러스터는 동기화 방식입니다. 리플리케이션의 경우 일방적으로 데이터를 전달하여 복제를 하지만 클러스터는 데이터 복제 후 결과를 확인하기 때문에 일반적인 경우 데이터 누락이 발생하지 않습니다. 다만 복제한 결과를 확인해야 하기 때문에 Replication에 비해 Cluster가 속도가 느린단점이 있고, Replication의 경우 확인작업이 없기 때문에 데이터에 대한 신뢰도가 떨어집니다.

Spring을 쓰는 이유?

스프링이 나오기전 자바 엔터프라이즈 개발은 굉장히 복잡했는데, 그 이유는 비즈니스 로직 외에도 타 프로젝트와의 연계, 분산 트랜잭션, 보안 등 고려할 사항들이 많았기 때문이다. 이와 같은 문제점들을 해결하기 위해서 spring이 등작하게 되었습니다

Spring 3대 요소에 대해 설명해주세요

  • DI(의존성 주입) : 객체간의 결합도를 낮춰주는 요소를 말합니다. Spring 에서는 IOC 컨테이너가 Bean객체를 생성하여 개발자 대신 객체를 생성하고 관리해주는것을 의미한다. 초기에는 XML로 관리하다 그 복잡성으로 현재는 주입을 위한 Anotation으로 관리되고 있다.

  • AOP(로직의 주입) : 객체간 공통된 로직을 따로 뽑아내어서 관리하는 것을 말합니다.

  • PSA(일관성 있는 서비스 추상화) : 스프링의 경우 서비스 추상화를 해주면서 일관성 이는 방식을 제공하는데 이를 PSA라 합니다. 스프링에서 데이터 베이스 연동시 어댑터 패턴을 사용하는데 이를 통해 로직의 변경 없이 DB종류를 변경할 수 있습니다. 이처럼 같은 일을 하는 다수의 기술을 공통의 인터페이스로 제어할 수 있게 해준것을 서비스 추상화라고 합니다.

Java8에서 Stream을 사용한 경우 발생 할 수 있는 문제점은?

  • 병렬스트림 사용시 적절하게 동기화를 하지 않는다면 데드락에 걸릴 수 있음
  • 의도치 않게 무한 스트림을 사용해서 CPU자원을 엄청나게 소비할 수 있음
  • 스트림은 1회만 소비가능하다 재사용 불가

Java에서 가비지 컬렉터가 너무 잘 작동 했을 때 이 문제를 진단하는 방법과 해결 하는 방법은?

  • 먼저 gc는 minor와 full gc로 나누어질 수 있는데 문제가 될만한 경우는 물론 서비스에 따라 다르겠 지만 횟수가 너무 자주 일어나거나 gc수행속도가 느릴 경우 입니다.
    진단하는 방법은 일단 수행시간을 확인해봐야 하는데 일반적으로 minor gc의 경우 처리시간은 50ms 내외 주기는 10초, Full GC의 처리시간의 경우 1초 이내 Full GC 주기는 10분에 1회정도인지 확인해 봐야 합니다. New영역과 Old영역의 비율을 조절해 Old 영역으로 넘어가는 객체의 수를 최소화 하거나 JVM시작시 힙 영역 크기 또는 최대 힙 영역 크기 등을 조절하여 튜닝을 합니다.

Restful 이란

  • 일반적으로 rest원칙을 따르는 시스템을 restful이라고 하며 여기서 rest란 클라이언트와 서버사이의 통신 중 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 것을 의미합니다. 즉 자원의 표현(이름)에 의한 상태전달입니다.
profile
두비두비둡

0개의 댓글