개념 정리

2024. 3. 12. 12:48Java

1. Structure

- Spring Boot

1) 구성요소의 설정을 줄여 Spring Framework을 간소화(COC)

2) tomcat server 내장

- Inversion of Control(IoC) Container: Spring Framework의 핵심 요소

- IoC: 프로그래밍에 있어 객체의 생성 및 관리 책임을 개발자에서 전체 애플리케이션 또는 프레임워크에 위임하는 디자인 원칙으로, 의존성을 줄여준다. Spring에서는 IoC를 DI로써 구현한다.

- DI(Dependancy Injection): 프레임워크가 객체를 호출하고, 의존성이 필요한 경우 프레임워크가 연결하는 방식

-> loosely coupled

- J2EE(JavaEE | JakartaEE): EJB(Enterprise Java Beans) 사용

- Spring: POJO(Plan Old Java Object)를 사용하며, EJB보다 좀 더 가벼움

- Build Tool: 소스코드에서 어플리케이션 생성을 자동화 하기 위한 프로그램으로, Maven과 Gradle 방식이 있다.

- Bean:  스프링 컨테이너가 관리하는 자바 객체

- JDBC(Java DataBase Connectivity): 자바 기반 데이터베이스 연결과 처리를 위한 API
- 영속성 데이터 처리를 위한 프레임워크
1) JPA(Hibernate, DataNucleus, EclipseLink) : ORM(Object Relataion Model)
2) Mybatis : SQL Mapper

- Natural Template: 순수 HTML 구조를 유지하려는 기조를 가진 Template Engine으로, Thymeleaf가 해당한다.

- DispatcherServlet: HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러(Front Controller)

 

2. Concept

- 웹 애플리케이션 기술 발전

(1) MVC Model 1

(2) MVC Model 2: Controller와 View가 분리

(3) Front Controller Model: 흐름 제어용 프론트 컨트롤러 생성, 스프링 부트에서 @SpringBootApplication을 통해 기본적으로 구현

- API(Application Programming Interface):  두 개 이상의 소프트웨어 컴포넌트 사이에서 상호 작용할 수 있도록 정의된 인터페이스

- Library: 개발자들이 자주 사용하는 코드 집합

- Framework: 개발자들이 애플리케이션을 개발하는 데 사용되는 구조

- 작업 방식

(1) Blocking: 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작

(2) Non-blocking: 다른 주체의 작업에 관련없이 자신의 작업을 하는 것

(3) Sync: 작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작

(4) Async: 시작과 종료가 일치하지 않고 끝나는 동시에 시작을 하지 않음

- AOP(Aspect Oriented Programming)

1) 관점(Aspect)지향 프로그래밍으로, 관점을 기준으로 다양한 기능을 분리하여 보는 프로그래밍

2) OOP를 보완

3) 관심의 분리(separation of concern): 문제 영역을 core concerns와 cross-cutting concerns로 분해하여 처리

- core concern(핵심 관심 사항): 핵심 로직

- cross-cutting concern(횡단 관심 사항): 공통 기능

- 관점(Aspect): 부가 기능과 그 적용처를 정의하고 합쳐서 모듈로 만든 것

- COC(Convention Over Configuration) Solution: 최소한의 설정으로 platform과 thirdparty library들을 사용하여 실행에 중점을 두는 기술로, Spring boot가 해당

 

3. Apply

- intelliJ에서는 상위 버전의 JDK 설치시 하위 버전의 java 선택 기능을 지원

- 모든 Beans에는 getter setter가 필요하므로 lombok Dependency는 필수적이다.

- 데이터 삽입, 수정, 삭제 로직은 test class에서 실행해본 후 수행한다.

- annotation은 다른 annotaion을 포함할 수 있다.

- annotation

1) @SpringBootApplication

  • 컴파일러에게 해당 메인 메서드를 자바 애플리케이션이 아닌 스프링 부트 애플리케이션임을 알려준다.
  • Component Scan을 통해 Bean을 자동으로 검색하고 등록한다.
  • @Configuration, @EnableAutoConfiguration, @ComponentScan 등 여러 중요한 어노테이션을 내포하여 처리한다.

2) @Component: 해당 어노테이션을 가진 클래스는 Bean으로 등록된다.

3) @NoArgsContructor: 매개변수 없는 생성자 생성하는 어노테이션

4) @AllArgsContructor: 모든 필드의 매개변수를 가진 생성자를 생성하는 어노테이션

- resource 디렉토리 내에 static 폴더와 template 폴더는 같은 레벨로 접근된다.

- Model: spring에서 ui를 통해 view에게 전달할 때 사용하는 객체

- injection

1) field injection(추천되지 않음): @Autowired를 통해 주입하는 경우, 시점에 따라 객체 생성 전 호출의 가능성이 있음

2) constructor injection(가장 많이 사용): 생성자를 활용하며, 생성 순서 준수

3) setter injection: setter method를 정의하여 활용하며, 값 할당 전 사용 불가능

- Application Context: 실행 중인 애플리케이션의 최상위 경로로, Spring Boot에서는 실행 시 resource 디렉토리 경로로 취급

 

4. etc

- boiler plate code(상용구 코드): 수정하지 않거나 최소한의 수정만을 거쳐 여러 곳에 필수적으로 사용되는 코드

 

5. 참고자료

- Java Framework(유응구 교수님) 강의

- POJO와 javabeans:

 

POJO(Plain Old Java Object)와 JavaBean

POJO(Plain Old Java Object) 특정 프레임워크에 종속되지 않은 순수한 자바 객체 속성, 메서드에 대한 어떠한 네이밍 규칙도 없다. Java EE와 같은 무거운 프레임워크들이 서비스 시장을 점유했을 때, 해

2jinishappy.tistory.com

- 작업 방식 설명: 

 

Sync/Async, Blocking/Non-Blocking 무슨 차이일까?

*SYNC AND *BLOCKING

velog.io

- injection:

 

Constructor injection을 사용하자.

field injection을 사용하다보면 "Field injection is not recommended" 이라는 문구를 본 경험이 있을 것이다.왜 field injection을 추천하지 않을까?🤔

velog.io

 

'Java' 카테고리의 다른 글

Jakarta EE Project 환경 구축 - 2  (0) 2023.09.13
Jakarta EE Project 환경 구축 - 1  (0) 2023.09.05
자바의 구성요소  (0) 2023.03.23