마켓보로

마켓보로

개발팀 리뷰

위 내용은 마켓보로 전 • 현 재직자의 응답 결과입니다.

기술 스택

기술 스택 정보가 없어요.

재직자가 작성한 글

재직자가 좋아한 글

🕊️ 2024 버클리즈 Java SpringBoot 인터뷰 질문 (2)  |  Join은 무엇인가요? Join은 여러 테이블의 데이터를 결합하기 위한 개념입니다. 공유 field를 기반으로 서로 다른 테이블에서 관련 정보를 검색할 수 있습니다. 다음과 같은 데이터베이스가 있다고 가정합시다: * 고객 테이블은 이름, ID와 같은 고객 정보를 저장합니다. * 주문 테이블은 고객 ID(고객 테이블과 연결된)를 포함한 주문 정보를 저장합니다. 완전한 정보를 위해, 고객 정보를 주문 정보와 결합해 보여주길 원할 것입니다. 이때 조인을 사용합니다. * Inner Join: 가장 일반적인 조인입니다. 두 테이블 모두에 포함된 내용만 반환합니다. * Left Join: 왼쪽 테이블의 모든 행과 오른쪽 테이블의 일치하는 행이 포함됩니다. 일치하지 않는 오른쪽 테이블의 행은 null 값을 가집니다. * Right Join: 오른쪽 테이블의 모든 행과 왼쪽 테이블의 일치하는 행이 포함됩니다. 일치하지 않는 왼쪽 테이블의 행은 null 값을 가집니다. * Full Join: 조인 조건에 일치하는 행이 있는지에 관계없이 두 테이블의 모든 행이 결합됩니다. 일치하지 않는 행은 해당 열에 null 값을 갖습니다.   Primary와 Foreign key의 차이점이 무엇인가요? [Primary Key(기본 키)] * Uniqueness: 테이블의 각 행에 고유 식별자가 있는지 확인합니다. 이를 통해 레코드 중복을 방지하고 효율적인 데이터 검색이 가능합니다. * Single Key: 테이블은 기본 키를 하나만 가질 수 있습니다.  * Not null: 기본 키 열은 일반적으로 null 값을 허용하지 않습니다. [Foreign Key(외래 키)] * Relationship Builder: 두 테이블 간의 연결을 설정합니다. 다른 테이블의 기본 키를 참조합니다. * Multiple Keys: 한 테이블에 여러 개의 외부 키가 있을 수 있습니다. * Nullable: 외부 키 열은 null 값을 허용합니다.   REST-API란 무엇인가요? REST API는 Representational State Transfer API의 약자입니다. 웹 API를 설계하는 데 널리 사용되는 스타일입니다. 간단히 말해, HTTP 요청 및 응답을 사용하여 통신하는 방법에 대한 일련의 규칙을 정의합니다. 이를 통해 응용 프로그램은 사용된 프로그래밍 언어에 관계없이 표준화된 방식으로 서로 쉽게 상호 작용할 수 있습니다.    언제 캡슐화와 추상화를 사용하나요? 캡슐화와 추상화는 코드 재사용성, 유지 보수성 및 보안을 강화하는 객체 지향 프로그래밍(OOP)의 기본 개념입니다.  [캡슐화] * 데이터 숨김 및 보호: 객체의 내부 데이터에 대한 접근을 제어하고자 할 때 사용합니다. 데이터를 비공개로 설정하고 접근할 수 있는 메서드를 따로 제공하여 데이터 무결성을 보장하고 의도하지 않는 수정을 방지할 수 있습니다. * 은행 클래스에서 계좌금액 데이터를 캡슐화하여 입출금과 같은 적절한 방법을 통해서만 접근하게 합니다. [추상화] * 기능에 집중: 추상화를 사용하여 클래스의 구현 세부 사항을 숨기고 인터페이스 또는 추상화 클래스를 통해 필수 기능만 노출합니다. 이를 통해 사용자는 기본 세부 구현에 대한 걱정 없이 객체와 상호 작용할 수 있습니다. [결론] * 캡슐화를 사용하여 객체의 내부 데이터를 보호하고 데이터 접근을 제어합니다. * 추상화를 이용하여 "how"보다 "what"에 집중합니다.   Lazy Loading과 Eager Loading을 설명해주세요 Hibernate와 같은 ORM 프레임워크에서 데이터를 가져오기 위한 두 가지 전략이 Lazy loding과 Eager loading입니다. 데이터베이스에서 관련 객체가 로드되는 시기와 방법을 결정합니다. [Lazy Loading(지연 로딩)] * Delay Loading: 데이터는 명시적으로 필요한 경우에만 검색됩니다. 사용자가 특정 제품을 클릭할 때만 제품 설명이나 리뷰와 같은 정보가 로딩되도록 합니다. * Performance Benefits: 사용하지 않는 데이터에 대한 불필요한 쿼리를 방지함으로써 데이터 로딩 시간을 개선할 수 있습니다. * Potential for Extra Queries: 관련 데이터가 필요한 경우 지연 로딩으로 인해 추가 쿼리가 실행되어 오버헤드가 발생할 수 있습니다. [Eager Loading(즉시 로딩)] * Loads Everything Upfront: 모든 관련 데이터를 단일 쿼리에서 기본 객체와 함께 가져옵니다. 이는 사용자가 모든 데이터를 보지 않더라도 모든 제품 정보가 목록 페이지에 로드되는 것을 의미합니다. * Faster Access to Related Data: 데이터를 이미 불러왔으므로 관련 정보에 접근할 때 추가적인 쿼리가 필요하지 않습니다. 데이터 대부분을 사용해야 하는 시나리오의 경우 성능이 향상될 수 있습니다. * Potentially Slower Initial Load: 필요하지 않을 수도 있는 데이터를 가져오는 경우 초기 페이지 로딩 시간이 길어질 수 있습니다.   @GetMapping과 @PostMapping을 언제 사용하나요? [@GetMapping] * HTTP GET 요청을 처리하는 메서드에서 이 어노테이션을 사용합니다. 일반적으로 서버에서 데이터를 검색하는 데 사용됩니다. * 리소스 목록 가져오기 * 특정 리소스의 세부 정보 가져오기 * 검색 또는 필터링 요청 처리  @Controller public class ProductController { @GetMapping("/products") public List<Product> getAllProducts() { // Logic to retrieve all products from the database } } [@PostMapping] * HTTP POST 요청을 처리하는 메서드에 이 어노테이션을 사용합니다. 일반적으로 생성 또는 업데이트 목적으로 서버에 데이터를 제출하는 데 사용됩니다. * 새 리소스 생성 * 기존 리소스 업데이트 * 리소스 삭제 @Controller public class ProductController { @PostMapping("/products") public Product createProduct(@RequestBody Product product) { // Logic to save the new product to the database } }   메서드 오버라이딩에 대한 예외 처리 규칙에는 어떤 것이 있나요? [Same or Subclass Exception] * 슈퍼클래스의 메서드가 checked exception을 선언할 때, 오버라이딩된 메서드는 동일한 예외를 선언하거나 해당 예외의 하위 클래스를 선언할 수 있습니다. 이를 통해 하위 클래스에서 보다 구체적인 예외 처리가 가능합니다. class SuperClass { public void doSomething() throws IOException { // ... } } class SubClass extends SuperClass { @Override public void doSomething() throws FileNotFoundException { // Subclass of IOException // ... } } [No Checked Exception] * 만약 슈퍼클래스 메서드가 예외를 선언하지 않으면, 하위 클래스의 메서드는 checked exception을 선언할 수 없습니다. 그러나, unchecked exception은 선언할 수 있습니다. class SuperClass { public void doSomething() { // ... } } class SubClass extends SuperClass { @Override public void doSomething() throws IOException { // Not allowed (superclass doesn't throw IOException) // ... } }   Spring MVC 플로우에 대해 설명해 주세요 Spring MVC는 MVC 아키텍처 패턴을 따르며, 이 패턴은 애플리케이션 로직, 데이터 프레젠테이션 및 사용자와의 상호작용을 분리하여 유지 보수성과 테스트성을 높입니다.   1. Client Request: 사용자가 브라우저를 통해 웹 프로그램과 상호 작용하여 서버의 특정 URL에 대한 HTTP 요청을 날립니다. 2. DispatcherServlet Intercept: DispatcherServlet이 Spring MVC의 프론트 컨트롤러 역할을 하며, 웹 컨테이너(Tomcat/Jetty)로부터 들어오는 모든 HTTP 요청을 수신합니다. 3. Handler Mapping: DispatcherServlet이 요청을 처리할 컨트롤러 메서드를 결정하기 위해 일반적으로 RequestMappingHandlerMapping으로 구현되는 HandlerMapping을 참조합니다.  4. Handler Selection: HandlerMapping은 요청 URL 및 HTTP 메서드 기반으로 요청을 처리할 적절한 컨트롤러 클래스 및 메서드를 식별합니다. 5. Controller Invocation: DispatcherServlet은 스프링 의존성 주입을 사용하여 식별된 컨트롤러 클래스의 인스턴스를 생성합니다. (아직 생성되지 않은 경우에) 그런 다음 컨트롤러에서 해당 메서드를 호출하여 요청 객체를 인수로 전달합니다. 6. Model Population: 메서드 안에서 비즈니스 로직이 실행됩니다.  7. View Resolution: 모델이 채워지면 컨트롤러는 응답을 렌더링 할 뷰를 선택해야 합니다. 일반적으로 ViewResolver를 사용하여 적절한 뷰 템플릿을 선정합니다.  8. View Rendering: ViewResolver는 view name을 기준으로 뷰 템플릿을 찾습니다. 모델 객체는 최종 HTML 응답을 렌더링 하기 위해 뷰 엔진(JSP/FreeMarker)으로 전달됩니다. 렌더링 된 HTML 응답은 클라이언트의 브라우저로 다시 전송됩니다.    번역: [https://ducktopia.tistory.com/118] 원문:

좋아요 64 저장 169

thumbnail