코드스테이츠 - 3회차 백엔드 부트캠프/Section 3

2022.11.16 수 - 기술면접

곰돌이볼 2022. 11. 16. 14:03

📄 학습내용

기술면접 질문

  • 질문1. Spring JDBC, Spring Data JDBC, Spring Data JPA의 차이점을 설명해 주세요.

    <Spring JDBC>
    애플리케이션에서 데이터베이스에 접근할 때, 애플리케이션 내부에 SQL 쿼리문을 직접적으로 작성하는 대표적인 SQL 중심 기술이다.
    JDBC의 장점과 단순성을 유지하면서 간결한 형태의 API 기능을 제공한다.

    JDBC : DB에 접근할 수 있도록 Java에서 제공하는 API
    JDBC API 문제점 : SQL 쿼리문 실행 전후로 많은 코드 작성 필요

    <Spring Data JDBC>
    객체 중심의 데이터 엑세스 기술인 ORM 기술을 사용하면서 JPA의 기술적 복잡도를 낮춘 기술이다.
    애플리케이션의 규모가 크지않고 단순할 경우에 Spring Data JDBC를 사용하면 생산성을 높일 수 있다.
    간단하고 선택적인 ORM으로, ORM의 기본적인 기능과 사용자 정의 SQL문을 통한 질의 기능을 사용할 수 있다.

    <Spring Data JPA>
    Spring에서 JPA 기반의 데이터 엑세스 기술을 편리하게 사용하기 위한 기술이다.
    Java ORM 표준 JPA와 Hibernate(JPA 구현체)를 이용해서 만들어진 프레임워크이다.


  • 질문2. Stub와 Stubbing이 무엇인지 설명해 주세요.

    <Stub>
    stub은 기존 코드를 흉내내거나 임시로 사용되는 코드이다.
    stub는 구현되지 않은 메서드를 테스트할 때 임시 데이트를 넣어야 하는 경우, 테스트 환경이 큰 비용을 요구할 경우, 테스트 시 큰 위험 요소가 있어서 작업을 우회해야 하는 경우에 사용됩니다.

    <Stubbing>
    테스트를 할 때 생성하는 Mock 객체가 항상 동일한 동작을 하도록 설정하는 것이다.
    given()과 willReturn() 메서드를 이용해서 mock 객체의 행위에 대한 결과를 항상 동일하게 설정할 수 있다.

    stubbing : 상태기반 테스트
    mocknig : 행위기반 테스트


  • 질문3. Swagger과 Spring Rest Docs의 장단점을 설명해주세요.

    <Swagger>
    Java 기반의 애플리케이션에서 예전부터 많이 사용한 API 문서 자동화 오픈 소스이다.
    API 문서를 만들기 위해서 contoller, DTO 클래스에 애너테이션을 추가합니다.
    그렇기 때문에 API 엔드포인트 기능 구현 코드의 가독성이 떨어지고, 기능이 늘어날수록 API 문서를 위한 코드 또한 늘어나서 전체적인 코드 양이 많아져서 유지 보수성이 떨어진다. 또한 API 스펙 정보와 API 문서 정보가 불일치하는 경우가 발생할 수 있다.
    하지만 Swagger를 이용해서 작성한 API 문서는 API 요청 툴과 같이 HTTP 요청 기능을 사용할 수 있습니다.

    <Spring Rest Docs>
    Spring Rest Docs는 swagger와 같이 자동으로 API 문서를 생성해준다.
    Controller의 슬라이드 테스트 클래스에 API 문서를 작성하기 위한 코드를 추가한다. 이때 테스트 케이스를 하나라도 실패할 경우에는 API 문서가 생성되지 않아서 API 스펙 정보와 API 문서 정보의 불일치를 예방할 수 있다.
    Swagger처럼 API 문서를 통해서 API 호출하는 기능은 없고, 테스트 케이스를 반드시 작성해야 API 문서를 생성할 수 있다.


 

웹사이트에 전체 공개된 실제 개발자 이력서

 

 

 

🎡 페어리뷰

 

'코드스테이츠 - 3회차 백엔드 부트캠프 > Section 3' 카테고리의 다른 글

Section3 회고  (0) 2022.11.16
2022.11.15 화  (0) 2022.11.15
2022.11.14 월  (0) 2022.11.14
2022.11.11 금  (0) 2022.11.11
2022.11..10 목  (0) 2022.11.10