목록BackEnd/Spring (7)
kimgusxo 님의 블로그

1. 서블릿(Servlet)이란?서블릿은 자바에서 제공하는 웹 어플리케이션 구성 요소클라이언트의 HTTP 요청을 처리하고 HTTP 응답을 생성한다.파일 다운로드, HTML form, JSON 등 다양한 포맷의 통신 용도로 사용한다.@WebServlet("/hello")public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setContentType("text/plain"); resp.getWriter().write("Hello from Servlet!..
1. 트랜잭션(Transaction)이란?트랜젝션은 하나의 작업 단위를 의미하며 이 단위는 반드시 모두 성공하거나 모두 실패해야한다.데이터의 일관성, 안정성, 무결성을 지키는 도구이며 스프링에서는 @Transactional로 간단하게 처리한다.대표 예: 계좌이체는 출금+입금 모두 성공해야 하는 것, 하나라도 실패하면 모두 취소해야한다. 1-1. 트랜잭션의 4대 속성 (ACID)원자성(Atomicity): 전부 성공하거나 실패해야 한다.일관성(Consistency): 무결성이 보장되어야 한다.격리성(Isolation): 다른 트랜잭션간 간섭이 불가능 해야한다.지속성(Durability): 성공한 트랜잭션은 영구적으로 반영되야 한다. 2. 스프링에서의 트랜잭션스프링은 @Transactional을 통해 트랜잭..

1. AOP란?."관점 지향 프로그래밍"으로 핵심 로직 외의 반복되는 부가 기능(cross cutting concerns)을 공통된 영역(aspect)으로 분리해서 관리하는 프로그래밍 패러다임이다.로그 남기기, 트랜잭션 처리, 시간 측정 등에 사용된다. 1-1. 기존 방식 문제점public class MemberService { public void join(Member member) { long start = System.currentTimeMillis(); try { repository.save(member); } finally { long end = System.currentTimeMillis(); ..

1. 빈의 생명주기란?스프링에서는 객체의 생성 -> 의존성 주입 -> 초기화 -> 사용 -> 소멸의 흐름을 자동으로 처리한다.하지만 빈 내부에서 자원 초기화(DB 커넥션 열기), 종료 처리(커넥션 닫기) 등을 직접 다뤄야 할 때가 있다.그때 필요한 것이 바로 스프링 빈 생명주기 콜백이다. 2. 스프링 빈 생명주기 전체 흐름빈 클래스 탐색: @ComponentScan 또는 @Bean 메소드로 등록인스턴스 생성: 기본 생성자 또는 생정자 주입 방식으로 객체 생성의존성 주입: @Autowired, 생성자/필드/세터 방식초기화 콜백: @PostConstruct, InitializingBean.afterPropertiesSet()소멸 콜백: @PreDestory, DisposableBean.destroy() 3...
1. 빈(Bean)이란?스프링 컨테이너가 생성하고 관리하는 객체즉, 단순히 자바 객체지만 스프링이 책임지고 만들고 관리해주는 객체를 "빈"이라 한다.빈은 싱글톤 패턴을 가지며 thread-safe하게 설계되어야된다.@Componentpublic class MyService {}위 클래스는 컴포넌트 스캔을 통해 스프링 컨테이너가 자동으로 객체를 생성MyService클래스는 ApplicationContext 내부에서 등록된 빈으로 관리된다. 2. 컴포넌트 스캔(ComponentScan)이란?스프링은 객체를 직접 생성하지 않아도 되도록 컨테이너가 대신 관리해주는 프레임워크이다.즉, 이 "관리"의 출발점이 클래스를 탐색하고 등록하는 것이다. 2-1. 컴포넌트 스캔의 동작방식@SpringBootApplicatio..
1. 객체지향 프로그래밍1-1. 객체지향의 핵심 원칙 중 하나: 높은 응집도, 낮은 결합도응집도: 각 클래스가 자신의 역할에 충실한가?결합도: 서로 얼마나 밀접하게 연결되어 있는가?// 높은 결합도 예시public class OrderService { private final PaymentService paymentService = new PaymentService();}OrderService는 항상 PaymentService에 종속됨테스트가 어렵고 구현체 변경이 어려운 문제가 발생 2. 제어의 역전(IoC)의 등장IoC(Inversion of Control)란 객체 생성과 의존성 연결을 개발자가 아니라 프레임워크(컨테이너)가 대신 처리하는 것즉 "제어의 주체가 뒤바뀐다" 2-1. 기존 구조Orde..

1. 스프링 이전 시대의 자바 개발1-1. 자바의 복잡성자바는 강력한 OOP 언어지만 코드보다 설정과 반복 작업이 많다.문제 1: 객체를 직접 설정하고 연결해야한다.객체 간 강한 결합을 가져 변경 및 테스트가 어렵다.문제 2: 객체 생명주기 관리가 안된다.DB 커넥션을 언제 닫을지, 외부 API를 언제 초기화할지 개발자가 수동으로 관리해야한다.문제 3: 중복 코드와 설정 지옥XML파일과 인터페이스/구현체/팩토리/서비스를 조립함으로 엄청난 생산성이 저하된다. 1-2. 그래서 등장한 프레임워크들StrutsMVC 패턴 제공 -> 웹 프레임워크하지만 의존성 주입, 트랜젝션, AOP는 별도로 처리해야 하는 단점 존재.HibernateORM(Object-Relational Mapping) 처리DB 접근은 쉽게 하지..