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는 내장된 톰캣을 제공해 서버를 바로 실행가능
- Spring은 프로젝트 초기에 다양한 환경설정을 해야 하지만, Spring Boot는 설정의 많은 부분을 자동화하여
JDBC, JPA / Mybatis, Hibernate
- JDBC(Java Database Connectivity) : 자바 언어를 사용하여 데이터베이스와 상호작용하기 위한 자바 표준 API
- 데이터베이스 연결: JDBC를 사용하여 자바 애플리케이션은 데이터베이스 서버에 연결
이 연결은 데이터베이스 서버와 통신을 수행하는 데 사용 - SQL 쿼리 실행: JDBC를 통해 SQL(Structured Query Language) 쿼리를 데이터베이스에 전송하고 실행
이를 통해 데이터를 검색, 수정, 삭제 또는 삽입 가능 - 결과 처리: 데이터베이스로부터 반환된 결과 집합을 자바 객체로 가져올 수 있음
이러한 결과 집합은 ResultSet 객체를 사용하여 처리 - 트랜잭션 관리: JDBC를 사용하여 트랜잭션을 시작, 커밋 또는 롤백 가능, 데이터베이스의 일관성을 유지하고 오류 시 롤백을 지원
- 데이터베이스 연결: 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을 통해 데이터베이스와의 상호작용
- JDBC : SQL 쿼리를 직접 작성하고 데이터베이스 연결 및 트랜잭션 관리를 수동으로 다루어야 함
- 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) : 복잡한 시스템 또는 데이터를 단순화하고, 중요한 부분을 강조하며, 불필요한 세부 사항을 숨기는 과정
- 객체(Object) : 현실 세계의 실체를 모델링한 소프트웨어의 기본 단위로, 데이터와 해당 데이터를 조작하는 메서드(함수)의 조합
// 클래스 정의
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는 웹 페이지의 동적 데이터를 렌더링하고 클라이언트에게 제공하는 데 사용
- 생명주기
- init() 메서드가 호출되어 Servlet 초기화 작업을 수행
- 클라이언트로부터 HTTP 요청이 들어오면 웹 애플리케이션 서버는 해당 Servlet의 service() 메서드를 호출
- Servlet은 클라이언트의 요청을 처리하고 데이터를 검색하거나 변경하는 등의 작업을 수행
- 요청 처리 중에 서블릿은 필요한 데이터를 가져오거나 데이터베이스와 상호 작용할 수 있음
- Servlet은 요청에 대한 응답을 생성하고 HTTP 응답 헤더 및 본문을 설정
- destroy() 메서드가 호출되어 Servlet 객체를 정리하고 자원을 해제
'면접 대비 이것저것' 카테고리의 다른 글
면접 대비 정리2 (1) | 2023.11.02 |
---|