본문 바로가기

분류 전체보기112

[Spring] 스프링 MVC의 기본 구조 목차 MVC 패턴이란? MVC 패턴은 어플리케이션을 세 가지 영역, 즉 모델(Model), 뷰(View), 컨트롤러(Controller)로 구분하여 작업을 분리하는 웹 어플리케이션 개발 방법론으로서, 서로 간의 결합도를 최소화하고 유지보수성을 높이며 개발의 효율성을 향상시킵니다. 사용자가 입력을 담당하는 View를 통해 요청을 보내면 해당 요청을 Controller가 받고, Controller는 Model을 통해 데이터를 가져온 후, 해당 데이터를 바탕으로 출력을 담당하는 View를 제어해서 사용자에게 전달합니다. Model : 어플리케이션이 무엇을 할 것인지 정의합니다. 내부 Business Login을 처리하기 위한 역할을 합니다. 즉, 데이터 저장소와 연동하여 사용자가 입력한 데이터나 사용자에게 출.. 2022. 8. 31.
[Spring] @Transactional 기본 사용법 목차 트랜잭션 (Transaction) 트랜잭션(Transaction)은 더 이상 쪼개질 수 없는 하나의 작업 단위을 의미합니다. 예를 들어 '계좌 이체'라는 행위를 따져보면, '출금'과 '입금'이라는 각각의 작업이 하나의 단위를 이루고 있습니다. 이때 출금은 정상적으로 처리되었는데 입금하는 과정에서 예외가 발생하는 경우를 생각해 볼 수 있습니다. 이미 계좌에서 돈이 빠져나갔는데 상대방의 계좌에 돈이 입금되지 않는다면 큰 문제가 될 것입니다. 이 때문에 출금과 입금을 하나의 트랜잭션으로 관리하여 문제가 발생한 경우 모든 작업을 rollback하는 것이 필요합니다. 이처럼 여러 작업을 진행하다가 문제가 생기면 모든 작업을 이전 상태로 rollback하기 위해 사용되는 것이 트랜잭션입니다. ACID 원칙 원.. 2022. 8. 27.
[Spring] DB 연동 - MyBatis 목차 MyBatis 란? MyBatis(마이바티스)는 SQL 매핑(mapping) 프레임워크입니다. MyBatis는 JDBC로 처리하는 상당 부분의 코드와 파라미터 설정 및 결과 매핑을 대신해 줌으로써, 개발자가 복잡한 코드 작업을 피하고 좀 더 빠르게 SQL을 처리할 수 있도록 도와줍니다. JDBC의 기본적인 프로그래밍 구조와 비교했을 때 MyBatis의 장점은 다음과 같습니다. JDBC MyBatis Connection 직접 맺고 close() MyBatis 내부적으로 Connection 자동으로 맺고 close() PreparedStatement 직접 생성 및 처리 MyBatis 내부적으로 PreparedStatement 생성 및 처리 PreparedStatement의 setXXX() 등 작업 직접.. 2022. 8. 27.
[Spring] DB 연동 - JDBC 목차 Spring 프로젝트에서 JDBC 기술을 이용해 DB를 연동하는 방법에 대해 알아보도록 하겠습니다. 순수 JDBC를 사용하는 방법과 JdbcTemplate을 사용하는 방법을 알아볼 텐데요, 아래는 프로젝트의 구조입니다. 실습을 위해 오라클 DBMS의 scott 계정에 test라는 테이블을 만들어 멤버를 조회하고 추가하는 등의 작업을 해 보도록 하겠습니다. create table test ( num number(4) primary key, username varchar2(10), address varchar2(10) ); insert into test values ( 1, '홍길동' , '서울'); insert into test values ( 2, '이순신' , '강원'); insert into t.. 2022. 8. 25.
[Spring] SpEL 사용법 목차 SpEL 이란? SpEL은 Spring Expression Language의 약자로서 런타임에서 객체에 대한 쿼리와 조작(querying and manipulating)을 지원하는 강력한 표현 언어입니다. XML 기반 설정, 어노테이션 기반 설정, 자바코드에서 모두 사용 가능합니다. SpEL 표기법 #{ SpEL표현식 } SpEL은 기본적으로 #{}로 표기하며 괄호 안의 내용을 SpEL 표현식으로 인식해서 evaluation(평가, 실행) 합니다. SpEL 지원 기능 Literal expressions : 리터럴 표현식 Boolean and relational operators : Boolean과 관계 연산자 Regular expressions : 정규 표현식 Class expressions : 클.. 2022. 8. 22.
[Spring] 의존성 주입(Dependency Injection) - (2) 어노테이션 기반 설정 목차 어노테이션을 사용한 빈 설정 방법 스프링 프레임워크에서 빈을 설정하는 방법으로 XML 기반 설정, 자바 기반 설정 외에 자바 어노테이션(Annotaion, @) 기반 설정 방법이 있습니다. 자바에서 어노테이션은 코드 사이에 주석처럼 쓰이며 특별한 의미, 기능을 수행하도록 하는 기술입니다. 즉, 프로그램에 추가적인 정보를 제공해주는 메타 데이터라고 볼 수 있습니다. 어노테이션 기반 설정 방법은 @Component 같은 마커 어노테이션(Marker Annotation)이 부여된 클래스를 탐색해서(Component Scan) DI 컨테이너에 빈을 자동으로 등록하는 방법입니다. Component Scan 설정 지정한 패키지의 하위 클래스를 탐색한 후 DI 컨테이너에 객체를 생성하여 등록합니다. 방식 예시 .. 2022. 8. 21.
[Spring] XML 기반 설정 의존 객체 자동 주입 (autowire) 목차 의존 객체 자동 주입 - autowire XML 기반으로 빈을 등록할 때, 의존 관계에 있는 객체를 주입하는 코드를 일일이 직접 작성해 줘야 하는 번거로움이 있었습니다. 이때, 의존 관계를 설정하고자 하는 빈에 autowire 속성을 사용하면 의존 객체를 자동으로 주입하게 되어 코드 작성이 편리해집니다. autowire 속성의 설정값으로는 다음의 네 가지가 있습니다. 설정값 설명 byName 프로퍼티의 이름과 같은 이름을 갖는 빈 객체를 자동 설정한다. (setter 메소드의 메소드 이름 기준) byType 프로퍼티의 타입과 같은 타입을 갖는 빈 객체를 자동 설정한다. (setter 메소드의 매개변수 타입 기준) constructor 생성자 파라미터 타입과 같은 타입을 갖는 빈 객체를 생성자에 자동.. 2022. 8. 17.
[Spring] 의존성 주입(Dependency Injection) - (1) XML 기반 설정 목차 의존성 주입(Dependency Injection)이란? 의존성 주입(DI)은 스프링 프레임워크가 지원하는 핵심 기능 중 하나로서, 객체 사이의 의존관계가 객체 자신이 아닌 외부에 의해 결정되는 디자인 패턴입니다. 스프링 IoC 컨테이너는 어떤 객체(A)가 필요로 하는, 의존관계에 있는 다른 객체(B)를 직접 생성하여 A 객체로 주입(설정)하는 역할을 담당합니다. 컴포넌트를 구성하는 객체의 생성과 의존관계의 연결 처리를 해당 객체가 아닌 컨테이너가 대신하기 때문에 제어의 역전(Inversion of Control)이라고 합니다. 의존성 주입을 사용하면 종속성과 결합도(coupling)가 낮아져 테스트가 용이해지고 재사용성, 유연성, 확장성을 향상시킬 수 있게 됩니다. 의존성 주입 방법 의존성을 주입.. 2022. 8. 14.
[Spring] 스프링 프레임워크 개요 목차 Spring Framework 란? Spring의 배경 스프링은 자바 엔터프라이즈(J2EE) 개발을 편리하게 해주는 오픈소스 경량 애플리케이션 프레임워크입니다. 엔터프라이즈급 개발이란 대규모 데이터 처리와 트랜잭션이 동시에 여러 사용자로부터 행해지는 매우 큰 규모의 개발을 의미합니다. 2000년대 초반부터 시작된 엔터프라이즈급 개발은 안정된 품질의 개발을 필요로 했고, 그 결과 많은 프레임워크가 나오게 되었습니다. 프레임워크는 뼈대나 근간을 이루는 코드들의 묶음이라고 할 수 있습니다. 프로그램에 필요한 기본 흐름과 구조를 미리 코드로 만들어 놓았기 때문에, 프레임워크를 사용하면 일정한 품질이 보장되는 결과물을 얻을 수 있습니다. 하지만 EJB로 대표되는 과거 엔터프라이즈급 프레임워크들은 너무 복잡하.. 2022. 8. 13.
[jQuery] Ajax 호출 후 추가된 엘리먼트에 이벤트가 작동하지 않을 때 목차 문제 상황 예를 들어 댓글 기능의 경우, 클라이언트의 페이지가 새로고침되지 않고 기능이 동작하게 하려면 ajax 비동기로 처리해야 할 것입니다. 그런데 댓글이 추가되는 상황을 생각해 봅시다. 댓글이 새로 추가되면 해당 댓글에 댓글 삭제 버튼도 함께 추가되고, 삭제를 클릭했을 때 다시 삭제가 비동기로 처리되어야 합니다. 그런데 비동기로 추가된 요소(삭제 버튼)에 대한 이벤트 처리를 다음과 같이 작성하면 이벤트 처리가 작동하지 않는 것을 확인할 수 있습니다. $(".commentDelBtn").on("click", function () { //댓글 삭제 코드 }); 원인 이는 버튼이 비동기로 새롭게 추가되었기 때문입니다. 이벤트 핸들러는 코드가 실행되는 시점에 페이지 내에 이미 존재하고 있는 엘리먼트에.. 2022. 8. 6.