Spring 기술면접 예상질문 미리보기 <1>

Call by reference, override, overload, JPA 더티체킹 질문들, 뭐라고 답해야 할까?
Mar 29, 2024
Spring 기술면접 예상질문 미리보기 <1>
💡
Spring 스프링은 네이버, 카카오, 쿠팡, 무신사 등 국내 기업에서 많이 쓰이는 Java 기반 백엔드 개발 프레임워크죠. 현재 스프링 기술면접 준비를 하고 계신다면 이번 아티클에 주목해주세요. 많이 물어보시는 스프링 기술면접 질문을 추렸습니다. 예상 질문부터 수강생의 답변과 멘토님의 피드백까지 한눈에 확인해보세요.
 
목차
 

Q (1). Call by reference란 무엇이고 보통 어떻게 쓰이나요?

핵심 키워드: 값, 참조, 복사, 객체 전달 / 값 전달
🧑‍💻 수강생 답변
Call by value (값에 의한 호출)는 메소드에 변수를 전달할 때, 해당 변수의 값이 복사되어 메소드 내에서 사용됩니다. 따라서 메소드 내에서 변수의 값을 변경하더라도 호출자의 변수는 변경되지 않습니다. 스프링에서는 메소드 호출 시 일반적으로 Call by value 방식을 따릅니다. Call by reference (참조에 의한 호출)은 메소드에 변수를 전달할 때 변수의 참조(메모리 주소)가 전달되며, 메소드 내에서 변수를 수정하면 호출자의 변수도 변경됩니다. 이것은 자바에서 직접 지원하지 않습니다. 스프링에서는 이러한 방식을 직접 사용하지 않고, 대신 객체를 전달하여 객체 내부의 상태를 변경할 수 있습니다.
 스프링(Spring)은 Java에서 메소드 호출 시 "Call by value" 방식을 따릅니다. 이는 메소드에 변수를 전달할 때 해당 변수의 값이 복사되어 전달되며, 따라서 메소드 내에서 변수의 값을 변경해도 호출자의 변수는 변경되지 않습니다. 스프링은 객체 지향 프로그래밍을 적극 활용하며, 객체를 전달하여 객체의 상태를 변경하거나 결과를 반환하는 방식을 선호합니다. 객체를 전달하면 객체의 상태 변경과 관리가 더 효율적이며 예측 가능해집니다.
 
🗣️멘토님 피드백
값과 참조에 대한 호출을 적절하게 비교 설명하고 있고 자바에서는 어떤 형태로 참조하고 있는지 언급해준 부분도 좋았습니다.
 
😄 좋은 부분
  • Call by value의 특징인 ‘메소드 내 변수 값을 변경하더라도 호출자의 변수는 변경되지 않음’과 Call by reference의 특징인 ‘메소드 내 변수를 수정하면 호출자의 변수도 변경됨’을 비교해서 설명
  • 스프링(Spring)은 Java 메소드 호출 시 ‘Call by value’ 방식을 따르는 스프링(Spring)의 참조 형태 언급.
 
 

Q (2). Override 와 Overload 를 설명해주실 수 있을까요?

핵심 키워드: 덮어쓰기, 재정의, 상속, 같은 이름, 파라미터(매개 변수)
🧑‍💻 수강생 답변
오버라이드(Override)는 상위 클래스의 메서드를 재정의 하는 것입니다. 메서드의 이름은 물론 파라메터의 갯수나 타입도 동일해야 하며, 주로 상위 클래스의 동작을 상속받은 하위 클래스에서 변경하기 위해 사용합니다. 반면 오버로드(Overload)는 메서드의 이름은 같고 파라메터의 갯수나 타입이 다른 함수를 정의하는 것을 의미합니다. 또한, 리턴값만을 다르게 갖는 오버로드는 작성 할 수 없습니다. 오버라이딩(Overriding)은 상속 받은 메서드의 내용만 변경 하는 것이고 오버로딩(Overloading)은 기존에 없던 새로운 메서드를 정의하는 것입니다.
 
🗣️ 멘토님 피드백
아주 잘 대답했고, 오버로딩 시 유의해야 할 점 또한 잘 설명했습니다. 다만, 마지막 줄에 있는 오버로딩의 “기존에 없던 함수”를 새롭게 정의하는 것이라는 문장은 잘못된 문장으로 보이고, 오버로딩은 “같은 이름의 매서드를 여러 개 가지며 매개변수의 유형과 개수가 달라도 되는 기술”로 정의하는 것이 옳습니다.
 
😄 좋은 부분
  • 오버라이드는 ‘상위 클래스의 매서드를 재정의한다’, 오버로드는 ‘매서드의 이름은 같고 파라메터의 갯수나 타입이 다른 함수를 정의한다’로 오버라이드, 오버로드의 개념을 설명.
  • 오버로딩의 유의할 점으로 ‘리턴값 만을 다르게 갖는 오버로드는 작성할 수 없다’를 언급
 
🤔 아쉬운 부분
  • “오버로딩은 기존에 없던 새로운 함수를 새롭게 정의하는 것”은 잘못된 표현.
 
 

Q (3). JPA는 언제 필요하고 언제 필요하지 않은지 설명해주실 수 있을까요?

핵심 키워드: ORM, SQL, 영속성, 더티 체킹, 객체 지향
🧑‍💻 수강생 답변
JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준입니다. JPA는 객체 중심적인 애플리케이션 개발을 가능하게 하므로 아래와 같을 때 필요합니다.
첫 번째로 데이터베이스 관계가 복잡할 때 사용 가능해서 복잡한 조인 쿼리를 작성할 필요가 없어집니다. 두 번째로 CRUD 작업이 자주 발생하는 경우 JPA가 객체와 데이터베이스 간의 변환을 자동으로 처리해줍니다. 세 번째 유지 보수가 용이한 어플리케이션을 구축하고 싶을 때 사용할 수 있습니다. JPA는 스키마의 변경에 대응하기 쉽기 때문에 유지 보수가 용이한 어플리케이션을 구축할 때 적합합니다. 마지막으로 네 번째는 패러다임 불일치를 해결할 수 있습니다. 객체는 상속 구조를 만들 수 있으며, 다형성 구현이 가능하지만, 관계형 데이터베이스의 테이블은 상속이라는 개념이 존재하지 않습니다. 객체는 참조를 통해 관계를 표현하며 방향을 가지고 있으나, 관계형 데이터베이스는 외래 키를 통해 관계를 표현하며, 방향이 존재하지 않습니다. JPA는 객체 간의 상속과 다형성을 데이터베이스에서 표현할 수 있게 해줘, 객체 중심적으로 데이터베이스를 다룰 수 있게 해줍니다. JPA가 필요하지 않은 경우는 다음과 같습니다. 첫 번째 간단한 프로젝트에서는 JPA를 사용하지 않고 작은 규모의 프로젝트에서는 JDBC, SQL을 직접 다루는 것이 좋습니다. 두 번째 쿼리가 복잡하지 않은 경우인데요. 간단한 쿼리로 데이터베이스와 상호작용할 때는 JPA를 사용하는 대신 직접 SQL을 작성하는 것이 더 효과적일 수 있습니다. 마지막 세 번째로는 고도의 높은 성능을 요구하는 애플리케이션 같은 경우에 쓰지 않습니다. JPA는 객체와 데이터베이스 간의 변환을 처리하는데 일정한 오버헤드가 발생할 수 있기 때문에 매우 높은 성능을 요구하는 애플리케이션은 직접 SQL을 작성하는 것이 더 효율적일 수 있습니다.
 
🗣️멘토님 피드백
질문의 의도에 맞게 적절한 답변을 잘 작성했습니다.
 
😄 좋은 부분
  • JPA이 필요한 경우를 데이터베이스 관계가 복잡할 때, CRUD 작업이 자주 발생하는 경우일 때, 유지 보수가 용이한 애플리케이션 구축할 때 그리고 패러다임 불일치를 해결할 때, 총 4가지 경우로 설명.
  • JPA가 불필요한 경우를 작은 규모의 프로젝트일 때, 쿼리가 복잡하지 않을 때, 고도의 높은 성능을 요구하는 애플리케이션일 때, 총 3가지 경우로 설명.
 
 

Q (4). JPA의 더티 체킹이란 무엇인가요?

핵심 키워드: 변경 감지, 커밋, 스냅샷, Transaction
🧑‍💻 수강생 답변
JPA의 더티 체킹JPA에서 더티 체킹(dirty checking)이란 영속성 컨테이너가 관리하는 엔티티의 상태를 감지해서, 변경된 부분이 있다면 자동으로 트랜잭션이 끝나는 시점에 데이터베이스에 반영하는 기능입니다. 따라서 여기서 말하는 dirty는 ‘엔티티 데이터의 변경된 부분’을 뜻하며 dirty checking은 변경된 부분을 감지한다는 의미입니다.
티 체킹 조건은 영속성 컨텍스트에서 관리되는 엔티티 영속성 컨텍스트는 엔티티를 처음 조회할 때 시작되며, 이후 변경을 감지하기 때문에 준영속/비영속 상태의 엔티티는 더티 체킹의 대상이 되지 못합니다. 트랜잭션이 커밋되었을 때 트랜잭션이 커밋되기 전까지 영속성 컨텍스트는 변경사항을 추적하기만 하고, DB에 반영하지는 않습니다. 따라서 트랜잭션이 커밋될 때 영속성 컨텍스트는 엔티티의 변경된 상태를 DB에 반영합니다.
 
🗣️ 멘토님 피드백 더티 체킹에 대해서 핵심 키워드 위주로 잘 설명했습니다.
 
🤔 좋은 부분
  • 더티 체킹을 핵심 키워드를 중심으로 “영속성 컨테이너가 관리하는 엔티티의 상태를 감지해, 변경된 부분이 있다면 자동으로 트랜잭션이 끝나는 지점에 데이터베이스를 반영하는 기능”으로 설명.
 
 
 
스프링(Spring) 면접 질문, 도움이 되셨나요? 기술면접 대비는 현직 개발자의 시선에서 어떤 답변이 좋은지 파악할 수 있어서 취업 리부트 코스 수강생들의 만족도가 가장 높은 세션 중 하나인데요. 앞으로도 React, Spring의 기술면접 Q&A를 꾸준히 발행할 예정이니, 관심이 있다면 항해99 블로그를 구독해주세요.
 
 
 

🚢 개발자 취업 준비 어떻게 시작해야 할지 모르겠나요? 취업으로 향하는 거친 항해에서 든든한 메이트가 되어 드리겠습니다.

취업 실패 시 교육비 0원. 반드시 취업까지 책임질 수 있다는 항해의 자신감입니다.
높은 수준의 개인 프로젝트 경험이 없는 개발 유관 전공자, 전반적인 학습이 부족한 부트캠프 수료생이라면 개발자 취업 리부트 코스에 합류하세요. 자료구조 공부, 프로젝트, 코테준비, 이력서와 면접 대비까지 취업 리부트 코스에서 한 번에 할 수 있습니다. 갈수록 높아지는 개발자 취업의 벽, 개발자 취업 리부트 코스로 11주 만에 취업의 문을 열어 보세요
 
 
 
CREDIT
글 | 송민영 팀스파르타 에디터
 
Share article
Subscribe to our newsletter

IT 커리어 성장 코스, 항해