- 기간 : 4/26 ~ 6/21 (주 1회)
- 스터디원 : 👨💻(민용), 🧑🏽💻(동민), 👩🏻💻(미지)
- 스터디 내용 : Spring 기초, Spring MVC, JPA 기초
- 스터디 방식 : 정해진 분량의 강의를 듣고 각자 문제를 출제하고, 주 1회 오프라인 모임에서 답을 작성해보며 의견 공유
- Spring 기초
- Spring MVC
- JPA 기초
- 다형성을 역할과 구현의 관계의 관점에서 설명하고, 이 특성을 살려 서버를 개발하는 것이 어떤 장점이 있는지 구체적인 비즈니스 상황을 가정하여 설명하세요.
- SOLID 원칙의 OCP와 DIP에 대해 간략히 설명하고, 스프링이 두 원칙을 어떻게 준수하는지 DI와 관련하여 설명하세요.
- 프레임워크와 라이브러리의 차이를 IoC 개념과 함께 설명하세요.
- 아래의 코드는 모든 SOLID 원칙을 적절히 준수하였나요? 그렇다면/그렇지 않다면, 그 이유는 무엇인지 간단히 적어주세요!
- 아래의 코드는 정상적으로 작동하지 않습니다. 아래 코드가 throw하는 에러의 종류와, 해당 에러를 마주치지 않고 MemberRepository 타입의 모든 빈을 조회할 수 있는 방법을 간단히 소개해주세요!
- 자바의 static import 기능의 장/단점은 어떤 것이 있을까요? 하나씩 간단히 소개해 주세요!
- 아래의 코드에서 memberService와 orderService는 각각 memberRepository 멤버변수를 가지는데, memberRepository의 store 멤버변수에 save한 값을 두 Service 객체에서 공유할 수 있는 이유를 적어주세요.
- 스프링이 컨테이너 생성과정에서 설정파일을 찾고 빈 등록에 사용되는 애노테이션 두개를 적어주세요.
- 스프링 컨테이너를 생성을 위해 만드는 객체 이름을 적어주세요.
- 빈 초기화 및 소멸 시 메소드 실행을 위한 방법으로 @PostConstruct, @PreDestroy 메소드 어노테이션 사용과 @Bean 어노테이션의 initMethod, destroyMethod 옵션 사용 두 가지 방법이 있는데 장단점을 비교하세요.
- Lombok 라이브러리를 간단히 설명하고 어떤 경우에 사용할 수 있는지 두 가지 예시를 들어주세요.
- 특정 어노테이션의 옵션으로 String 값을 사용할 때 이에 대한 에러를 컴파일 단계의 정적분석에서 검출하기 어려운데 이를 어떤 방식으로 해결할 수 있을 지 설명해주세요.
- [ 복습 ] SOLID 원칙 5가지를 모두 적어 주세요. 그리고, 각각의 원칙의 의미를 두 문장 이내로 간단히 적어주세요.
- Setter 주입 및 필드 주입에 비해 “생성자 주입” 방식이 상대적으로 가지는 장점을 한 가지만 적어주세요.
- 아래의 두 코드가 서로 같은 값을 출력하는지, 혹은 다른 값을 출력하는지 적어주세요. 그리고, 그렇게 생각한 이유를 “빈 스코프” 개념과 관련하여 세 문장 이내로 간단히 적어 주세요.
👩🏻💻’s Question
- 스프링 빈의 이벤트 라이프 사이클을 적고, 그 중 ‘초기화 콜백’과 ‘소멸 전 콜백’ 단계는 각각 빈 생성/소멸 보다 먼저 일어나는지 나중에 일어나는지 적어주세요.
- 다음 수정 전/후 코드를 보고 수정 전에는 에러가 났지만 수정 후에는 에러가 나지 않는 이유에 대해 설명해주세요.
- 수동 빈 등록과 자동 빈 등록에서 사용되는 가장 필수적인 애노테이션을 각각 2개, 3개 적어주세요.
- WS와 WAS의 차이에 대해 설명하세요.
- 멀티쓰레드를 지원하는 WAS 환경에서 쓰레드 풀은 무엇이며, 이것을 사용하는 이유를 설명하세요.
- MVC는 웹 어플리케이션 개발의 어떤 문제를 해결하기 위한 디자인패턴인지, 그리고 그 동작 원리를 간단히 설명하세요.
- 아래 <보기>의 Apache 로그 레벨을 세부적으로 출력하는 레벨부터 순서대로 정렬해주세요.
- 서블릿 방식에서, GET 메소드로 요청을 받을 때와 HTML Form을 통한 POST 메소드로 요청을 받았을 때의 공통점과 차이점을 주어진 키워드를 사용하여 각각 두 문장 내로 설명해주세요. [content-type, 파라미터 조회, HTTP 메시지 body]
- WAS는 서버로 들어오는 요청을 처리할 때, 매 요청마다 쓰레드를 생성하여 요청을 처리할 수 있습니다. 해당 방식이 야기할 수 있는 문제를 2가지 이상, 각각 두 문장 내로 설명해주세요.
- 서블릿과 JSP의 한계점에 대해 설명해주세요.
- SSR과 CSR을 비교해서 설명해주세요.
- redirect와 forward의 차이에 대해서 설명해주세요.
- 핸들러 매핑과 핸들러 어댑터에 대해서 간단히 설명하세요.
- 스프링 MVC 구조에서 뷰 리졸버의 역할에 대해 설명하세요.
- 스프링 웹 MVC의 DispatcherServlet에 해당하는 프론트 컨트롤러 및 프론트 컨트롤러 패턴에 대해 두 문장 이내로 설명해 주세요. 그리고 해당 패턴을 도입했을 때의 장점을 한 가지만 적어주세요.
- 스프링 부트가 자동 등록하는 핸들러 매핑과 핸들러 어댑터 중 가장 우선순위가 높게 설정되는 것은 각각 무엇인지 적어주세요.
- Spring MVC 동작의 단계를 적어주세요.
- 다음 코드에서 newForm 메소드는 GET 요청일때만, save 메소드는 POST 요청일때만 매핑되어 실행될 수 있도록 코드의 애노테이션을 수정해주세요.
- slf4j가 무엇인지 설명하세요.
- Spring에서 HTTP 요청/응답에 대해 어떤 HTTP 메시지 컨버터를 사용할 지 결정하는 기준 두 가지를 요청, 응답 각각에 대하여 적어주세요.
- PRG 패턴은 무엇이며 이 패턴을 통해 어떤 문제를 해결할 수 있는지 설명하세요.
- Jar와 War의 차이를 2문장 내외로 간단히 설명해 주세요.
- 사용할 모든 HTML 파일을 _resources_static 경로 하위에 두는 방식에서 주의해야 할 점을 해당 경로의 의미와 함께 간단히 설명해주세요.
- 다음 코드에서 @ModelAttribute가 하는 역할을 2가지 적어주세요.
- 로깅 시에 log.debug(“data=“+data)가 아닌 log.debug(“data={}”, data)와 같은 방식을 사용해야하는 이유를 적어주세요.
- 전체 로그 기본설정을 info에서 debug로 바꾼다면 로그는 더 [많이/적게] 출력될 것입니다. 답을 고르고 이유를 설명해주세요.
- JPA란 무엇인지 다음의 키워드들을 모두 포함해 설명하세요. [영속성, ORM, JDBC, 표준, 인터페이스, Hibernate]
- JPA의 Dialect(방언)이 무엇인지 설명하세요.
- JPA의 기본키 매핑을 위해 사용하는 @GeneratedValue 어노테이션에서 IDENTITY 타입과 SEQUENCE 타입에 대해 설명하세요.
- JPQL이란 무엇인지 간단히 설명해 주세요. 그리고, native SQL을 직접 사용하는 것에 비해 JPQL을 사용함으로써 얻을 수 있는 장점을 한 가지만 간단히 적어주세요.
- 아래 코드에서 Member 객체는 영속성 컨텍스트의 관점에서, 로직 진행에 따라 총 3가지 다른 상태를 가집니다. 객체의 상태가 한 상태에서 다른 상태로 변화하는 2가지 시점이 코드상 어느 부분인지, 그리고 해당 시점에 어떤 상태에서 어떤 상태로 변화하는지 적어 주세요.
- 아래 코드에서 em.update와 같은 update 명령을 명시적으로 입력하지 않았지만, DB에 저장된 값이 정상적으로 변경됩니다. 아래와 같이, JPA가 엔티티의 변경을 감지(Dirty Checking) 및 데이터를 update하는 5가지 단계를 각각 한 문장으로 간략히 나열해 주세요.
- EnumType.ORDINAL이 무엇이며 해당 타입을 사용하는 것이 권장되지 않는 이유를 설명해주세요.
- 다음 코드에서 Insert SQL이 DB에 반영되는 순간은 언제인지 적어주세요. 또한 DB에 저장되기 전 어디에 저장되는지 설명해주세요.
- Flush가 일어나는 과정을 설명해주세요.
- Entity의 연관관계 설정에서 cascade 또는 orphanRemoval 옵션을 사용할 때 주의할 점에 대해 설명해주세요.
- N+1 문제가 무엇인지 설명하고, 어떻게 이 문제에 대처할 수 있는지 설명해주세요.
- @OneToMany 애노테이션의 mappedBy 에 대해 다음의 키워드들을 모두 포함하여 간단히 설명해 주세요. [ 매핑 규칙, 외래 키, 연관관계의 주인 ]
- 상속관계 매핑을 위한 @Inheritance 어노테이션 사용 시의 3가지 매핑 전략이 무엇인지, 그리고 다음의 DB 테이블 구조에서 각 전략 사용 시의 테이블 생성 결과를 설명해주세요.
- 아래의 코드에서 동일성 비교의 출력 결과를 적고, 해당 결과가 출력되는 이유를 두 문장 이내로 간단히 적어 주세요.
- 아래 코드에서 m1,m2의 타입이 프록시인지 Member인지 쓰고 이유를 설명해주세요.
- 프록시 객체의 초기화 과정을 설명해주세요.
- 즉시로딩과 지연로딩에 대해서 설명해주세요.
👨💻’s Question
- 객체의 equals 메소드 재정의 시에 hashCode 메소드를 함께 재정의해야 하는 이유를 설명하세요.
- JPQL에서의 묵시적 조인과 명시적 조인을 간단히 비교하고 어떤 것을 사용하는 것이 바람직한지 설명하세요.
👨🏽💻’s Question
- JPA의 값 타입의 특징을 엔티티 타입과의 차이점을 중심으로 2가지만 적어 주세요.
- 동일성(identity) 비교와 동등성(equivalance) 비교의 차이를 2문장 이내로 간단히 적어 주세요.
👩🏻💻’s Question
- 임베디드 타입이 무엇이며, 해당 타입을 사용하는 것의 장점을 설명해주세요.
- 값 타입 사용 시에 이를 불변 객체로 설계해야 하는 이유에 대해 설명해주세요.