BE 109

[Java] 영속성

애플리케이션에서 생성한 데이터를 데이터베이스와 같은 영구 저장소에 저장하고, 필요할 때 다시 불러오는 과정을 의미영속성은 데이터를 객체화하고, 이를 영구적으로 저장하거나 관리하는 것을 중심으로 작동1. 영속성(Persistence)이란?데이터가 애플리케이션의 실행 주기와 독립적으로 존재할 수 있도록 저장하는 메커니즘을 의미비영속 데이터: 메모리에만 존재하며 애플리케이션 종료 시 사라지는 데이터영속 데이터: 데이터베이스에 저장되어 애플리케이션이 종료되어도 유지되는 데이터자바에서 영속성을 관리하기 위해 ORM(Object Relational Mapping)기술과 JPA를 주로 사용한다2. 영속성을 이해하기 위한 주요 개념2.1. JPAJPA는 자바 애플리케이션에서 데이터를 영속적으로 관리하기 위한 표준 AP..

BE/Java 2024.12.16

[Spring Boot] 빈이란

빈(Bean)이란Spring IoC컨테이너에 의해 관리되는 객체를 의미한다Spring 애플리케이션에는 주요 구성 요소, 서비스, 리포지토리 등의 객체를 빈으로 등록하고 관리한다 특징1. 생성 및 관리Spring 컨테이너가 Bean의 생성, 초기화, 소멸을 책임진다개발자가 직접 객체를 생성하고 관리할 필요가 없다2. 의존성 주입(DI)빈 간의 의존성을 Spring이 관리하며 애플리케이션이 실행될 때 필요한 객체를 주입한다3. 싱글톤 기본 설정Spring 컨테이너는 기본적으로 각 빈을 싱글톤으로 생성하여 동일한 인스턴스를 애플리케이션 전반에서 공유한다 (필요시 다른 스코프를 지정 가능)4. 구성 파일 또는 어노테이션으로 정의XML 파일, 자바클래스, 또는 어노테이션을 통해 빈을 정의할 수 있다Spring B..

[Java] 레이어드 아키텍처와 mvc

1. 레이어드 아키텍처애플리케이션을 여러 계층으로 나우어 각 계층이 특정 역할을 담당하고록 설계하는 방식.1.1. Presentation Layer (표현 계층)사용자가 애플리케이션과 상호작용하는 계층예: Controller, View역할:REST API 요청을 받아 처리하고, 응답을 반환데이터 출력 형식을 결정(HTML, JSON, XML 등)구현: `@Controller`, `@RestController` 등이 포함1.2. Application Layer (서비스 계층)비즈니스 로직이 구현되는 계층예: Service역할:Presentation Layer와 Data Layer 간의 중간다리 역할비즈니스 규칙 처리여러 Repository나 외부 API 호출 등을 조합구현: `@Service` 애너테이션을..

BE/Java 2024.12.15

[Spring Boot] ApplicationRunner

ApplicationRunner란Spring Boot 애플리케이션 에서 애플리케이션 이 시작된 후 실행할 코드를 정의하기 위해 사용되는 인터페이스다.주로 초기화 작업이나 애플리케이션 시작 시 필요한 논리를 실행할 때 활용된다 특징애플리케이션 초기화 작업 수행 : 데이터베이스 초기화, 캐시 로드, 외부 API 호출 등Spring Boot 컨텍스트가 완전히 초기화된 후 실행 : 모든 Bean이 로드되고 애플리케이션 컨텍스트가 준비된 상태에서 실행된다CommandLineRunner와 유사 : 차이점은 `ApplicationRunner`는 `ApplicationArguments`를 사용하여 더 구조화된 방식으로 인수를 처리할 수 있다 ApplicationRunner 사용 방법1. ApplicationRunner..

[Spring Boot] ORM, @Query

ORM은 객체와 데이터베이스의 관계를 매핑하여, 객체지향 프로그래밍 언어의 객체를 데이터베이스의 테이블에 대응시키는 기술이다. 개발자는 SQL을 직접 작성하지 않아도 객체지향 방식으로 데이터를 다룰 수 있다 장점생산성 향상: 데이터베이스 쿼리를 객체지향 방식으로 다룰 수 있어 코드 작성이 단순해짐가독성 증가: 객체와 테이블 간 매핑으로 인해 코드가 더 직관적이고 읽기 쉬움유지보수 용이: 데이터베이스가 변경되더라도 매핑 설정만 수정하면 애플리케이션 수정 최소화데이터베이스 독립성: 특정 데이터베이스에 종속되지 않고 다양한 데이터베이스에서 동작 가능단점성능 오버헤드: ORM이 쿼리를 자동으로 생성하므로 직접 작성한 SQL보다 성능이 낮을 수 있음복잡한 쿼리 처리 어려움: 복잡한 비즈니스 로직이 필요한 경우 S..

[Spring] Spring 과 Spring Boot

1. Spring 프레임워크1.1. Spring이란Spring은 효율적으로 개발할 수 있도록 지원하는 경량 오픈소스 프레임워크기존의 복잡한 Java EE 기반 개발의 단점을 보완하여 등장POJO(Plain Old Java Object) 프로그래밍과 의존성 주입(DI, Dependency Injection) 및 관점 지향 프로그래밍(AOP, Aspect-Oriented Programming) 같은 기능을 중심으로 설계됨1.2. Spring의 핵심 개념1.2.1. IoC (Inversion of Control)객체의 생성과 생명 주기를 개발자가 관리하지 않고, spring컨테이너가 관리주로 의존성 주입(DI) 으로 구현됨예 : `@Autowired` 를 통한 주입1.2.2. AOP (Aspect-Orient..

[Java] 명령형 , 선언형 프로그래밍

문제를 해결하기 위한 사고방식에 따라 명령형과 선언형으로 구분할 수 있다코드 작성 및 문제 접근 방식에서 차이를 보이며, 자바에서도 이를 활용한 다양한 프로그래밍 스타일을 구현할 수 있다 1. 명령형 프로그래밍특징어떻게(HOW) 문제를 해결할지 구체적으로 지시상태와 명령어를 중심으로 동작로직을 단계적으로 작성하며, 제어 구조(반복문, 조건문 등)를 사용하여 수행 과정을 정의특징적 요소변수 : 상태를 저장루프 : 반복작업수행조건문 : 논리 흐름 제어명령과 제어의 연속으로 문제를 해결함장점알고리즘 구현과 제어 흐름을 명확히 이해할 수 있음저수준 작업(메모리 관리, 상태 관리)에 적합단점코드가 길어지고 복잡해질 수 있음병렬 처리 및 함수 추상화가 어렵거나 번거로움예제리스트에서 짝수만 필터링하여 합산import..

BE/Java 2024.12.12

[Spring Boot] 어노테이션

@GetMapping : 메서드 레벨, GET 요청을 처리할 수 있다.@Controller : @GetMapping, @PostMapping, @PutMapping, @DeleteMapping 등을 사용할 수 있다.@ResponseBody : 메서드의 반환값을 응답 본문으로 사용@RestController : @Controller + @ResponseBody@Component : 스프링 IoC 컨테이너에 등록, new 로 생성할 필요가 없어진다.@Controller : 이것도 컴포넌트의 일종이다.@Service : @Component 과 동일@Repository : @Component 과 동일@Bean : 메서드 레벨, 스프링 IoC 컨테이너에 등록, new 로 생성할 필요가 없어진다.메서드로 빈을 등록..

[Java] 어노테이션

어노테이션은 메타데이터를 제공하는 특별한 형태의 문법주로 컴파일러 지시, 런타임 동작제어, 문서화 등에 사용된다 특징메타데이터 제공코드에 부가적인 정보를 포함하지만 프로그램의 로직에는 직접적인 영향을 미치지 않는다주석과는 다름주석은 개발자를 위한 설명일뿐이지만, 컴파일러나 런타임 환경에서 사용된다클래스, 메소드, 필드, 매개변수 등 다양한 위치에 적용 가능클래스, 메서드, 변수, 생성자, 매개변수, 패키지 선언 등 여러 곳에 사용할 수 있다기본문법`@`기호로 시작한다@AnnotationNamepublic class Main{}어노테이션 정의@interface 어노테이션이름 {}어노테이션 사용@어노테이션이름public class MyClass { // 클래스 내용}자바에서 제공하는 기본 어노테이션1...

BE/Java 2024.12.11

[Java] JDBC와 JPA

JDBCJDBC는 Java와 데이터베이스를 연결하는 기본적인 다리데이터베이스에 직접 연결해서 SQL 쿼리를 실행하고 데이터를 가져오거나 저장할 수 있게 해준다 특징 직접 SQL 사용: SQL 쿼리를 직접 작성해서 데이터베이스와 소통로우레벨 작업: 데이터베이스 연결, 쿼리 실행, 결과 처리 등을 개발자가 하나씩 직접 처리유연하지만 복잡: 모든 세부 작업을 수동으로 처리해야 하므로 복잡한 코드가 될 수 있음예제import java.sql.*;public class JdbcExample { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/mydb"; String user = "us..

BE/Java 2024.12.11