[Spring] AnnotationConfigApplicationContext로 알아보는 스프링 컨테이너 생성 과정
·
Back end/Spring Project
📌 스프링 컨테이너의 생성 과정스프링에서는 AnnotationConfigApplicationContext를 사용하면 자바 기반 설정으로 스프링 컨테이너를 구성할 수 있습니다. 이번 글에서는 생성자 주입 방식으로 스프링 빈을 설정하고,AnnotationConfigApplicationContext가 내부적으로 어떤 과정을 거쳐빈을 생성하고 의존관계를 주입하는지 단계별로 정리해보겠습니다.✅ 스프링 컨테이너란?객체(Bean)를 관리하는 IoC(Inversion of Control) 컨테이너입니다.개발자가 직접 객체를 생성하고 연결하지 않고, 스프링이 대신 객체를 생성하고 의존성을 주입해줍니다.✅ 컨테이너 생성 과정ApplicationContext context = new AnnotationConfigAppli..
[Java] 다형성과 역할-구현 분리로 이해하는 객체 지향 프로그래밍
·
Back end/Java
🧩 객체 지향 프로그래밍(OOP)이란?객체 지향 프로그래밍은 프로그램을 명령어의 나열로 바라보는 전통적인 방식에서 벗어나, 여러 개의 독립된 단위인 "객체"들의 협력 관계로 프로그램을 구성하는 방식입니다.각 객체는 메시지를 주고받으며 데이터를 처리하고, 상호작용을 통해 전체 프로그램이 동작합니다.이러한 구조는 프로그램을 유연하고 변경에 강한 구조로 만들어, 대규모 시스템 개발에 특히 적합합니다.🔄 유연하고 변경이 용이하다?레고 블록을 조립하듯이: 객체를 자유롭게 추가하거나 교체할 수 있습니다.키보드나 마우스를 바꾸듯이: 특정 기능을 담당하는 객체를 손쉽게 대체할 수 있습니다.컴퓨터 부품을 교체하듯이: 시스템의 일부가 바뀌어도 전체에 큰 영향을 주지 않습니다.즉, 객체 간 결합도를 낮춰 변경에 유연한 ..
[Spring Project] 겨울을 지나 봄으로: 스프링의 등장 배경과 개념
·
Back end/Spring Project
📌 EJB에서 JPA까지: 스프링이 등장하게 된 배경과거 자바 진영에서는 엔터프라이즈 애플리케이션을 개발하기 위해 EJB(Entity JavaBean)를 사용했지만, 이는 지나치게 복잡하고 무거운 구조로 인해 많은 개발자들의 불만을 샀습니다.이러한 문제를 해결하기 위해 하이버네이트(Hibernate) 같은 ORM 프레임워크가 등장했고, 이후 자바 표준 ORM인 JPA(Java Persistence API) 가 나오면서 보다 간결하고 효율적인 개발 환경이 마련되었습니다.📖 스프링의 역사2002년, 호주 개발자 Rod Johnson(로드 존슨) 은 『Expert One-on-One J2EE Design and Development』라는 책을 통해 EJB 없이도 자바 애플리케이션을 개발할 수 있는 방법을 ..
[Spring Project] 반복되는 로직? AOP로 한 방에 해결하기 (예제 포함)
·
Back end/Spring Project
✨ AOP란 ?AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)는공통 관심 사항(Cross-cutting Concern)과 핵심 관심 사항(Core Concern)을 분리하여코드의 재사용성과 유지보수성을 높이는 프로그래밍 기법입니다. 🎯 핵심 관심 사항 vs 공통 관심 사항핵심 관심 사항: 비즈니스 로직 그 자체예) 회원가입, 회원 조회, 결제 처리 등공통 관심 사항: 여러 로직에서 반복적으로 사용하는 코드예) 로깅, 트랜잭션 처리, 인증/인가, 실행 시간 측정 등❓ 왜 AOP가 필요할까요?예를 들어, 다음과 같은 상황을 생각해보겠습니다.회원 서비스의 회원가입, 회원조회 기능은 핵심 비즈니스 로직입니다.이 메서드들의 실행 시간을 측정하고 싶다면, 해당 로직은 공통 관심 ..
[Spring Project] 반복되는 JDBC 코드, JdbcTemplate으로 깔끔하게 정리하기
·
Back end/Spring Project
✅ JdbcTemplate이란?JdbcTemplate은 Spring에서 제공하는 JDBC 추상화 도구로, JDBC API의 반복적인 코드(Connection, PreparedStatement, ResultSet 관리 등)를 제거하여 더 간결하고 유지보수하기 쉬운 코드를 작성할 수 있게 해줍니다. ✅ JDBC 직접 구현 vs JdbcTemplate 사용 비교🔧 기존 JDBC 직접 사용 코드 (반복 코드 多)Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;try { conn = getConnection(); pstmt = conn.prepareStatement(sql); pstmt.setLong(1, id)..
[Spring Project] 스프링 부트 정적 컨텐츠와 Welcome Page 동작 원리
·
Back end/Spring Project
1. 스프링 부트의 정적 컨텐츠 기능스프링 부트는 src/main/resources/static/ 디렉터리에 위치한 정적 HTML, CSS, JavaScript, 이미지 등의 파일을 자동으로 제공하는 기능을 갖추고 있습니다. 이를 통해 별도의 설정 없이도 정적 웹 페이지를 쉽게 배포할 수 있습니다. 예를 들어, static/index.html 파일을 추가하면 애플리케이션 실행 시 기본 Welcome Page로 동작합니다. index.htmlHellohello위와 같이 index.html을 static 폴더에 두면, 사용자가 http://localhost:8080/로 접근할 때 자동으로 해당 파일이 응답됩니다. 2. 정적 컨텐츠와 컨트롤러의 우선순위스프링 부트는 요청이 들어왔을 때 다음과 같은 우선순위로 ..
[ORM & JPA] 객체와 데이터베이스를 연결하는 새로운 길, ORM과 JPA
·
Database/ORM & JPA
ORM(Object-Relational Mapping)은 자바의 객체와 데이터베이스를 연결하는 혁신적인 프로그래밍 기법입니다.이 기법을 통해 SQL을 몰라도 데이터베이스 값을 객체처럼 다룰 수 있어 자바로 간편하게 데이터를 추출할 수 있습니다.ORM의 장점SQL 미사용: SQL을 직접 작성하지 않고도 데이터베이스에 접근할 수 있습니다.객체지향적 코드 작성: 객체지향적으로 코드를 작성하여 비즈니스 로직에 집중할 수 있습니다.데이터베이스 시스템 추상화: 데이터베이스 시스템이 추상화되어 있어 MySQL에서 PostgreSQL로의 전환 시 추가 작업이 거의 없습니다. 따라서 데이터베이스 시스템에 대한 종속성이 줄어듭니다.명확한 매핑 정보: 매핑 정보가 명확하여 ERD에 대한 의존도를 낮출 수 있고 유지보수에 용..
[H2 Database] 스프링 부트와 H2 데이터베이스: 인메모리 RDBMS의 장점과 활용
·
Database/H2 Database
H2 데이터베이스는 Java로 작성된 오픈 소스 데이터베이스 관리 시스템(DBMS)입니다. 주로 테스트 및 개발 환경에서 사용되며, 경량 데이터베이스로서 빠르고 간편하게 설정할 수 있는 것이 큰 장점입니다.관계형 데이터베이스 관리 시스템(RDBMS)이란?RDBMS는 관계형 데이터베이스 관리 시스템(Relational Database Management System)의 약자로, 데이터를 행(Row)과 열(Column)로 구성된 테이블 형태로 관리하는 데이터베이스 시스템을 의미합니다. RDBMS의 주요 특징은 다음과 같습니다.테이블 기반 구조데이터는 행과 열로 구성된 테이블에 저장됩니다. 각 테이블은 고유한 이름을 가지며, 서로 관계를 맺을 수 있습니다.데이터 무결성데이터의 정확성과 일관성을 유지하기 위해 ..