본문 바로가기

면접 대비 이것저것

면접 대비 정리

JAVA

  • Java는 객체지향 프로그래밍 언어
  • 기본 자료형을 제외한 모든 요소들이 객체로 표현되고, 객체 지향 개념의 특징인 캡슐화, 상속, 다형성이 잘 적용된 언어입니다.
    • 캡슐화: 객체 지향 프로그래밍에서 데이터와 메서드를 하나로 묶어 외부에서 직접 접근하지 못하게 보호하는 개념.
    • 상속: 이미 존재하는 클래스의 특성을 다른 클래스가 재사용하고 확장할 수 있는 객체 지향 프로그래밍의 특징.
    • 다형성: 동일한 이름의 메서드나 연산자가 다른 클래스나 객체에 대해 다양하게 동작할 수 있는 개념으로, 오버로딩과 오버라이딩을 포함한다.
  • 장점
    • JVM(자바가상머신) 위에서 동작하기 때문에 운영체제에 독립적이다.
    • GabageCollector를 통한 자동적인 메모리 관리가 가능하다.
  • 단점
    • JVM 위에서 동작하기 때문에 실행 속도가 상대적으로 느리다.
    • 다중 상속이나 타입에 엄격하며, 제약이 많다.

Spring Framework

  • Java 기반의 오픈 소스 애플리케이션 프레임워크, 자바 개발을 편리하게 해주는 오픈소스 프레임워크 입니다.
    • 컨테이너 : 스프링은 자체 컨테이너를 제공하며, 이 컨테이너는 애플리케이션 개발에 필요한 객체의
      라이프사이클을 관리하고 의존성 주입(Dependency Injection)을 통해 객체 간의 관계를 설정
      • 라이프사이클
        • 객체 생성: 스프링은 빈 객체(스프링 컨테이너에 의해 생성, 관리되는 객체)의 인스턴스를 생성
        • 초기화: 스프링은 객체가 초기화되기 전에 특정 메서드를 호출하여 초기화 작업을 수행할 수 있음
          이를 통해 설정 및 리소스 로딩, 연결 생성 등을 수행할 수 있음.
        • 사용: 빈 객체는 스프링 컨테이너에서 사용 가능한 상태로 관리
        • 소멸: 객체가 더 이상 필요하지 않을 때, 스프링은 특정 메서드를 호출하여 객체의 자원을 해제하고 정리
    • 모듈화 : 코드나 기능을 작은 독립된 단위로 나누는 접근 방식
    • 테스트 지원 : 테스트 주도 개발(TDD)을 위한 지원을 제공
    • 제어의 역전(IoC) :컨트롤의 제어권이 사용자가 아닌 프레임워크에 있어서 필요에 따라 스프링에서
      사용자의 코드를 호출
    • 의존성 주입(DI) : 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜줌
    • 관점지향프로그래밍(AOP) : 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리
  • Framework란
    • 소프트웨어 개발을 단순화하고 표준화하는 데 사용되는 구조나 틀을 제공하는 소프트웨어 플랫폼 또는 라이브러리의 집합

 

Spring Boot 

  • 스프링 애플리케이션을 빠르고 쉽게 개발할 수 있도록 도와주는 프로젝트
    • Spring Boot는 애플리케이션에 필요한 기본적인 설정을 자동으로 제공
    • Tomcat 웹 서버를 내장하고 있어, 별도의 웹 서버 설정이 필요하지 않음
    • 특정 작업이나 라이브러리를 사용하기 위한 필수 구성을 담은 패키지를 제공
  • Spring과의 차이
    • Spring은 프로젝트 초기에 다양한 환경설정을 해야 하지만, Spring Boot는 설정의 많은 부분을 자동화하여
      사용자가 편하게 스프링을 활용할 수 있도록 도움
    • Spring Boot는 내장된 톰캣을 제공해 서버를 바로 실행가능

 

JDBC, JPA / Mybatis, Hibernate

  • JDBC(Java Database Connectivity) : 자바 언어를 사용하여 데이터베이스와 상호작용하기 위한 자바 표준 API
    • 데이터베이스 연결: JDBC를 사용하여 자바 애플리케이션은 데이터베이스 서버에 연결
      이 연결은 데이터베이스 서버와 통신을 수행하는 데 사용
    • SQL 쿼리 실행: JDBC를 통해 SQL(Structured Query Language) 쿼리를 데이터베이스에 전송하고 실행
      이를 통해 데이터를 검색, 수정, 삭제 또는 삽입 가능
    • 결과 처리: 데이터베이스로부터 반환된 결과 집합을 자바 객체로 가져올 수 있음
      이러한 결과 집합은 ResultSet 객체를 사용하여 처리
    • 트랜잭션 관리: JDBC를 사용하여 트랜잭션을 시작, 커밋 또는 롤백 가능, 데이터베이스의 일관성을 유지하고 오류 시 롤백을 지원
  • JPA(Java Persistence API) : 자바에서 데이터베이스와 상호작용하는 데 사용되는 자바 표준 API
    • ORM 프레임워크 지원: 객체 지향 프로그래밍 언어와 관계형 데이터베이스 간의 데이터 매핑과 관계를 관리하는 기술, 개발자가 SQL 쿼리를 직접 작성하지 않고도 데이터베이스와 상호작용할 수 있음
    • CRUD 작업 지원: 데이터베이스에서 데이터를 생성(Create), 읽기(Read), 업데이트(Update), 삭제(Delete)하는 작업을 지원
    • 트랜잭션 관리: 트랜잭션을 관리하며, 애플리케이션의 데이터 일관성을 보장하기 위한 ACID(원자성, 일관성, 고립성, 지속성) 트랜잭션을 지원
  • JDBC와 JPA 차이
    • JDBC : SQL 쿼리를 직접 작성하고 데이터베이스 연결 및 트랜잭션 관리를 수동으로 다루어야 함
      데이터베이스의 테이블과 자바 클래스 간의 매핑을 수동으로 관리
      데이터베이스 테이블의 구조와 SQL 쿼리를 직접 다룸
    • JPA : SQL 쿼리를 직접 작성하지 않고도 데이터베이스 액세스를 관리
      객체와 데이터베이스 간의 매핑을 자동화
    • JPA는 JDBC를 기반으로 동작, JPA 구현체는 내부적으로 JDBC를 사용하여 데이터베이스와 통신,
      ORM을 통해 데이터베이스와의 상호작용
  •  Mybatis : Java 기반의 오픈 소스 퍼시스턴스 프레임워크로, 데이터베이스 액세스를 간편하게 만들어줌
    • SQL 쿼리와 Java 객체 간의 매핑을 설정 파일을 사용하여 정의
    • 개발자가 SQL을 직접 작성하고 관리하며, SQL 매핑 및 실행을 단순화
    • 주로 자바 애플리케이션에서 데이터베이스와 상호 작용할 때 사용
  • Hibernate : 자바 기반의 오픈 소스 ORM(객체 관계 매핑) 프레임워크
    • 객체 지향 프로그래밍과 관계형 데이터베이스 간의 상호 작용을 간편하게 만들어주는 도구
    • 자바 객체와 데이터베이스 테이블 간의 매핑을 정의하고, 데이터베이스 액세스를 추상화

 

JPA 동작과정

  • JPA는 어플리케이션과 JDBC 사이에서 동작
    • 개발자가 JPA를 사용하면 JDBC를 사용하여 SQL을 호출하여 DB와 통신

영속성 컨테스트

  • 소프트웨어 개발에서 데이터베이스와 상호 작용하고 데이터를 영구적으로 저장하고 검색하는 데 사용되는
    개념 중 하나
    • 객체 추적: 영속성 컨텍스트는 관리하는 모든 엔티티(객체)의 상태를 추적하며, 어떤 엔티티가 변경되었는지 여부를 파악
    • 데이터베이스와의 동기화: 영속성 컨텍스트는 변경된 엔티티를 데이터베이스와 동기화하고 데이터베이스에 쓰거나 데이터를 읽을 때 적절한 SQL 쿼리를 생성하고 실행
    • 캐싱: 영속성 컨텍스트는 자주 요청되는 데이터를 캐싱하여 데이터베이스 요청을 최소화하고 성능을 향상시킴
    • 트랜잭션 관리: 영속성 컨텍스트는 트랜잭션을 관리하고 변경 사항을 롤백하거나 커밋하는 데 도움을 줌
    • 지연 로딩: 필요한 시점에 데이터를 가져오기 위해 지연 로딩(Lazy Loading)을 지원

 

객체 지향 프로그래밍

  • 객체 지향 프로그래밍(Object-Oriented Programming, OOP) :  프로그램 구현에 필요한 객체를 파악하고 상태와 행위를 가진 객체를 만들고 각각의 객체들의 역할이 무엇인지를 정의하여 객체들 간의 상호작용을 통해 프로그램을 만드는 것
    • 객체(Object)  : 현실 세계의 실체를 모델링한 소프트웨어의 기본 단위로, 데이터와 해당 데이터를 조작하는 메서드(함수)의 조합
      체는 속성(데이터)와 행위(메서드)를 가지며, 상태(state)를 가질 수 있음
    • 클래스(Class): 클래스는 객체를 생성하기 위한 구조를 정의한 것으로, 객체의 템플릿 또는 설계도
      클래스는 객체의 공통 특성과 행위를 정의하며, 객체는 클래스의 인스턴스임
    • 인터페이스 (Interface) : 추상 메서드의 집합으로, 클래스가 해당 인터페이스를 구현하는 경우 해당 메서드를 반드시 구현해야 함
    • 캡슐화 (Encapsulation) : 데이터와 관련 메서드(동작)를 하나로 묶어서 객체 내부의 상세 정보를 숨기는 개념
    • 추상화 (Abstraction) :  복잡한 시스템 또는 데이터를 단순화하고, 중요한 부분을 강조하며, 불필요한 세부 사항을 숨기는 과정
// 클래스 정의
class Dog {
    // 속성(멤버 변수)
    String name;
    int age;

    // 생성자
    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 메서드
    public void bark() {
        System.out.println(name + "가 짖습니다!");
    }
}

public class Main {
    public static void main(String[] args) {
        // 객체 생성 - myDog는 인스턴스, new Dog("멍멍",3)는 객체를 생성하고 초기화
        Dog myDog = new Dog("멍멍", 3);

        // 객체의 속성과 메서드 사용
        System.out.println("제 개의 이름은 " + myDog.name + "이고, 나이는 " + myDog.age + "세입니다.");
        myDog.bark();
    }
}

 

MySQL, Oracle

  • MySQL : 관계형 데이터베이스 관리 시스템(RDBMS)의 한 종류로, 데이터베이스를 생성, 관리, 저장, 검색 및 관리하기 위한 소프트웨어
    • 오픈 소스: GNU General Public License(GPL) 또는 상용 라이선스로 제공되며, 대부분의 사용 사례에서 무료로 사용 가능
    • 성능: MySQL은 빠른 속도와 뛰어난 성능을 제공하며, 대규모 트랜잭션 처리와 데이터 검색을 지원
    • 확장성: MySQL은 수평 및 수직 확장이 가능
    • 대규모 커뮤니티: MySQL은 전 세계적으로 대규모 커뮤니티와 개발자 생태계를 가지고 있어, 문제 해결 및 지원을 받을 수 있는 기회가 풍부
    • 소규모 및 중규모에 적합: MySQL은 소규모 및 중규모 애플리케이션, 웹 애플리케이션 및 시작 단계의 프로젝트에 적합한 경량 데이터베이스 시스템
  • Oracle : 관계형 데이터베이스 관리 시스템(RDBMS) 및 관련 소프트웨어와 서비스
    • 성능: Oracle 데이터베이스는 높은 성능을 제공하며 대규모 데이터와 트랜잭션 처리에 강력
    • 고급 기능: Oracle은 고급 기능을 갖추고 있으며 데이터 보안, 확장성, 백업 및 복구, 데이터 분석 및 기타 기능을 제공
    • 대규모 엔터프라이즈 지원: Oracle은 대규모 엔터프라이즈 환경에서 널리 사용되며, 높은 가용성, 클러스터링 및 복제 기능을 제공
    • 다중 플랫폼 지원: Oracle은 다양한 운영 체제 및 플랫폼에서 작동하며, 다양한 프로그래밍 언어와 통합이 가능
    • 라이선스 및 가격: Oracle은 상용 RDBMS로, 라이선스 및 지원에 대한 비용이 높음
    • 대규모에 적합: Oracle은 대규모 엔터프라이즈 환경에서 주로 사용되며, 고급 기능, 높은 성능, 데이터 보안 및 확장성을 제공
  • 둘의 차이
    • MySQL은 오픈 소스 커뮤니티에 의해 지원되며, Oracle은 상용 라이선스 및 지원을 통해 수익을 얻음
    • MySQL은 오픈 소스이며 무료로 사용할 수 있거나 상용 버전을 선택 가능, Oracle은 비싼 상용 RDBMS로 라이선스 및 지원 비용이 높음
    • MySQL은 소규모 및 중규모에 적합, Oracle은 대규모에 적합

 

REST

  • REST (Representational State Transfer)는 웹 서비스를 구축하고 상호 작용하는 데 사용되는 아키텍처적인 스타일
    • 자원 (Resources) : REST 아키텍처는 자원을 나타냅니다. 이 자원은 웹 서비스에서 표현하고자 하는 모든 것을 나타냄. 예를 들어, 사용자, 제품, 주문, 댓글과 같은 모든 데이터는 자원으로 간주됨
    • HTTP 메서드 활용 : REST는 HTTP 메서드 (GET, POST, PUT, DELETE 등)를 사용하여 자원에 대한 동작을 정의
    • 상태를 표현 (State Representation) : REST 아키텍처에서는 자원의 상태를 표현하기 위해 데이터 포맷을 사용
    • 상태 무상태 (Stateless): RESTful 서비스는 상태를 유지하지 않음.
      즉, 각 요청은 모든 필요한 정보를 포함하고 있어야 하며, 서버는 이 요청을 처리하기 위해 추가 상태 정보를
      저장하거나 관리하지 않음

 

Thymeleaf

  • Thymeleaf는 서버 측 웹 템플릿 엔진으로, HTML, XML, JavaScript, CSS 등의 웹 마크업과 클라이언트 측 코드를 생성하는 데 사용되는 자바 템플릿 엔진

 

Servelet

  • 웹 애플리케이션 서버(예: Apache Tomcat)에서 관리되며 HTTP 요청을 처리하는 Java 클래스
  • Java 언어로 작성된 웹 응용 프로그램의 구성 요소 중 하나로, 클라이언트와 서버 간의 통신을 처리하고 동적 웹 페이지를 생성하는 Java 클래스
    • HTTP 요청 처리: 클라이언트(일반적으로 웹 브라우저)에서 온 HTTP 요청을 처리하고 그에 대한 응답을 생성
    • 동적 콘텐츠 생성: Servlet은 Java 코드를 사용하여 동적 웹 페이지를 생성하거나 데이터베이스와 상호 작용하여 동적 데이터를 가져올 수 있음
    • 세션 관리: Servlet은 클라이언트와 서버 간의 상태를 유지하고 세션을 관리할 수 있어, 사용자 로그인, 장바구니 관리 및 상태 유지와 같은 기능을 구현할 수 있음
    • 웹 애플리케이션 로직: Servlet은 웹 애플리케이션의 비즈니스 로직을 처리하고 데이터를 처리하며, 다른 Java 클래스 및 라이브러리와 상호 작용할 수 있음
  • Thymeleaf와의 관계
    • Servlet과 Thymeleaf는 웹 애플리케이션 개발에서 다른 역할을 하는 것이지만 일반적으로 함께 사용
    • Servlet은 웹 애플리케이션의 백엔드 로직을 처리하고 HTTP 요청 및 응답을 다루는 데 사용되고,
      Thymeleaf는 웹 페이지의 동적 데이터를 렌더링하고 클라이언트에게 제공하는 데 사용
  • 생명주기
    1. init() 메서드가 호출되어 Servlet 초기화 작업을 수행
    2. 클라이언트로부터 HTTP 요청이 들어오면 웹 애플리케이션 서버는 해당 Servlet의 service() 메서드를 호출
    3. Servlet은 클라이언트의 요청을 처리하고 데이터를 검색하거나 변경하는 등의 작업을 수행
      • 요청 처리 중에 서블릿은 필요한 데이터를 가져오거나 데이터베이스와 상호 작용할 수 있음
    4. Servlet은 요청에 대한 응답을 생성하고 HTTP 응답 헤더 및 본문을 설정
    5. destroy() 메서드가 호출되어 Servlet 객체를 정리하고 자원을 해제

 

'면접 대비 이것저것' 카테고리의 다른 글

면접 대비 정리2  (1) 2023.11.02