{"id":19327259,"url":"https://github.com/rosieoh/springframework_study","last_synced_at":"2026-05-16T00:09:26.065Z","repository":{"id":196565209,"uuid":"696106946","full_name":"RosieOh/SpringFramework_Study","owner":"RosieOh","description":"🌈천재교육 풀스택 JAVA 과정 2기 Spring Framework 🌈","archived":false,"fork":false,"pushed_at":"2023-10-06T18:00:11.000Z","size":5967,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-24T06:27:53.823Z","etag":null,"topics":["aop","hibernate","java","jpa","spring"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RosieOh.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-09-25T05:17:16.000Z","updated_at":"2023-10-04T08:19:27.000Z","dependencies_parsed_at":null,"dependency_job_id":"0d429a02-a765-4399-9dae-d8cd9b6ee11f","html_url":"https://github.com/RosieOh/SpringFramework_Study","commit_stats":null,"previous_names":["rosieoh/springframework_study"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/RosieOh/SpringFramework_Study","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RosieOh%2FSpringFramework_Study","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RosieOh%2FSpringFramework_Study/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RosieOh%2FSpringFramework_Study/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RosieOh%2FSpringFramework_Study/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RosieOh","download_url":"https://codeload.github.com/RosieOh/SpringFramework_Study/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RosieOh%2FSpringFramework_Study/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33085155,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-15T20:25:35.270Z","status":"ssl_error","status_checked_at":"2026-05-15T20:25:34.732Z","response_time":103,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aop","hibernate","java","jpa","spring"],"created_at":"2024-11-10T02:16:32.235Z","updated_at":"2026-05-16T00:09:26.048Z","avatar_url":"https://github.com/RosieOh.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 01. Spring Framework 개요\n\n\u003cbr\u003e\n\n## 01-01. Spring 역사\n- EJB를 주 프레임워크로 사용할 때 불편했던 점들(무거움, 따라야 할 스펙들이 복잡함)을 해소하기 위해 탄생함\n- 2002년 로드존슨이 출판한 도서 Expert One-on-One J2EE Design and Development에 선보인 코드가 현재 Spring의 근간이 됨\n- 이 도서를 읽은 개발자들이 '코드가 책으로만 존재하기에는 너무 아깝다'라며 로드 존슨의 허가를 받은 뒤 프레임워크로 발전시킴\n- 2003년 6월 Apache 2.0 License로 공개됨\n- 2004년에 1.0v이 배포됨\n\n\u003cbr\u003e\n\n## 01-02. Spring Framework란?\n- 자바, 엔터프라이즈 개발, 오픈소스, light-weigth \"애플리케이션 프레임워크\"이다.\n- 특정 계층이나 기술, 업무 분야에 국한되지 않고 애플리케이션의 전 영역을 포괄하는 범용적인 프레임워크를 말함.\n- 굉장히 범용적이고 다양한 분야에서 활용하고 있지만, 모두 다 알아야 활용할 수 있는 것은 아닌 만큼 기본에 충실해서 학습해야 합니다.\n\n### 1) 경량급 프레임워크\n- 단순한 웹 컨테이너에서도 엔터프라이즈 개발의 고급기술을 대부분 사용할 수 있습니다.\n- EJB에 비해 경량급입니다. 또한 일반 자바 객체만을 사용하여 엔터프라이즈급의 고급 기술을 구현할 수 있습니다.\n\n### 2) 엔터프라이즈 개발 용이\n- 개발자가 복잡하고 실수하기 쉬운 Low Level에 많이 신경 쓰지 않으면서 Business Logic 개발에 전념할 수 있도록 해줍니다.\n\n### 3) 오픈소스\n- Spring은 OpenSource 로서 누구나 사용할 수 있습니다. 다만, 아무나 잘 하는 것은 아니며, 무료 프레임워크의 단점을 극복하고, 장점을 극대화하여 사용하여하여 합니다.\n\n\u003cbr\u003e\n\n\n## 01-03. Spring Framework 특징\n### 1) 컨테이너 제공\n- Spring 컨테이너(Container)는 Java 객체의 Life Cycle을 관리하며, Spring 컨테이너(Container)로부터 필요한 객체를 가져와 사용할 수 있습니다.\n\n### 2) DI(Dependency Injection) 지원\n- Spring은 설정 파일이나 어노테이션(Annotation)을 통해서 객체 간의 의존관계를 설정할 수 있도록 하고 있습니다.\n\n### 3) AOP(Aspect Oriented Programming) 지원\n- Spring은 트랜잭션(Transaction)이나 로깅(Logging), 보안(Security)과 같이 공통적으로 필요로 하는 모듈들을 실제 핵심 모듈에서 분리해서 적용할 수 있습니다.\n\n### 4) POJO(Plain Old Java Object) 지원\n- Sring 컨테이너(Container)에 저장되는 Java객체는 특정한 인터페이스(Interface)를 구현하거나, 특정 클래스(Class)를 상속받지 않아도 됩니다.\n\n### 5) 트랜잭션(Transaction) 처리를 위한 일관된 방법을 지원\n- JDBC(Java DataBase Connectivity), JTA(Java Transaction API) 등 어떤 트랜잭션을 사용하더라도 설정(Configuration)을 통해 정보를 관리하므로 트랜잭션 구현에 상관없이 동일한 코드를 사용할 수 있습니다.\n\n### 6) 영속성(Persistence)과 관련된 다양한 API 지원\n- Spring은 Mybatis, Hibernate 등 데이터베이스 처리를 위한 ORM(Object Relational Mapping) 프레임워크들과의 연동 지원합니다.\n\n\u003cbr\u003e\n\n## 01-04. Spring Framework 주요 모듈 구성\n\n![Spring Framework 주요 모듈 구성](./springframework001.png)\n\n### 1) Data Access/Integration(데이터 접근 및 통합)\n\nJDBC(Java DataBase Connectivity) : Java 기반 애플리케이션의 데이터를 데이터베이스에 저장 및 업데이트하거나, 데이터베이스에 저장된 데이터를 Java에서 사용할 수 있도록 하는 자바 API입니다.\n\nORM(Object Relational Mpping) : 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말합니다.\n\nOXM(Object-XML Mapping) : XML과 자바(Java) 오브젝트를 매핑해서 상호 변환해주는 기술입니다.\n\nJMS(Java Message Service) : 사람이 아닌 애플리케이션의 구성 요소가 소비하는 요청, 보고서, 이벤트로 메시지를 작성, 전송 수신 및 읽을 수 있는 메시징 서비스를 제공하는 것을 말합니다.\n\nTransactions : 데이터베이스에서 여러 요청이 한 꺼번에 처리가 되어야 하는 트랜잭션(Transaction)이 정의되고, 구현될 수 있도록 어노테이션으로 제공합니다.\n\n\u003cbr\u003e\n\n### 2) Web\n- Websocket :  HTTP 통신의 단점인 단방향 통신을 개선하기 위하여 웹 소켓을 활용하여 반 영구적인 양방향 통신을 제공합니다.\n- Servlet : MVC 처리 패턴에서 Controller에 해당하는 요청에 대한 처리 작업이 진행되도록 합니다.\n- Web : JSP(Java Server Page)에 속하는 Expression, Directive, Declaration, Expression Language, Java Standard Tag Library 등을 활용할 수 있는 웹 모듈을 제공합니다.\n- Portlet : 포털 페이지를 구성하는 웹 컴포넌트(Web Component)를 제공하며, 또한, MVC 처리 패턴에서 View 속하는 곳에 데이터를 처리하여 보내 질 수 있는 역할을 수행합니다.\n\n\u003cbr\u003e\n\n### 3) Core Container\n- 주요한 객체들(Bean)을 관리해주는 아주 중요한 모듈\n- Beans : 스프링 컨테이너에 의해 관리되는 재사용 가능한 소프트웨어 컴포넌트로서 하나의 클래스로 부터 얻어진 객체이며, 주입(Inject)의 대상입니다. XML의 bean 태그나 @Configuration 어노테이션으로 설정되는 주입 설정 클래스에서 @Bean 어노테이션으로 설정됩니다.\n- Core : 스프링 프레임워크의 근간이 되는 요소로 IoC(Invert Of Control) 또는 DI(Dependency Injection)기능을 지원하는 요소입니다.\n- Context : 여러 Bean을 관련있는 요소로 각 각 분리하여 하나의 XML 파일로 구성될 수 있도록 하는 요소입니다.\n- SpEL : Spring Expresion Language의 약자로 런타임(실행) 시 객체 그래프 쿼리 및 조작을 지원하는 표현 언어로서 #{표현식} 이나 ${표현식} 으로된 파라미터나 연산식, 비교식 등을 구현할 수 있도록 돕습니다.\n\n### 4) Test\n- JUnit 및 Spring Test 를 지원합니다.\n- JUnit은 @Test, @Ignore, @Before, @After, @BeforeClass, @AfterClass 등의 어노테이션을 활용한 assert 메서드로 단위 테스트 프레임을 구성을 지원합니다.\n- Spring Test는 @RunWith, @ContextConfiguration, @Autowired 어노테이션을 활용하여 별도의 컨텍스트 없이도 테스트 케이스를 작성할 수 있도록 지원합니다.\n\n### 5) Spring Object\n- AOP(Aspect-Oriented Programming) : 공통적으로 적용이 되어야 하는 부분이 여러 군데에 흩어져 있을 경우 사용시기(Jointpoint)가 되었을 경우 대비해 여러 사용시기(Jointpoint)를 정규 표현식인 포인트컷(Pointcut)으로 만들어 각 각의 대상 클래스에 있는 코드를 연결하여 하나의 객체로 만드는데 이를 위빙(Weaving)이라 하고, 위빙(Weaving) 된 것을 동작되도록 합니다. 이 때 위빙(Weaving)된 동작을 어드바이스(Advice)라고 합니다.\n- Aspects : 보통 AspectJ에 의한 관점지향 프로그래밍을 의미하며, Spring AOP는 공통적인 문제를 해결하기 위해 간단히 구현하고, Spring Container에 의해 관리되는 Bean에만 적용하지만, Aspects는 Spring AOP보다 강력하고, 완전체를 별도로 구성하여 진행하기 때문에 많이 복잡해집니다.\n- Instrumentation : 빈의 생명주기와 설정 그리고 처리방법을 관리하는 스프링 컨테이너입니다.\n- Messaging : 시스템의 구성 요소 간에 메시징을 지원하고 관리하는 요소입니다.\n\n\u003cbr\u003e\n\n## 01-05. Spring Framework 의 개발환경 설정\n\n### 1) Open JDK 설치\n\nhttps://www.azul.com/downloads/?package=jdk#zulu\n\n\n위 사이트에 접속하여 Open JDK 17 버전의 Windows\nx86 64-bit용으로 다운로드 받은 후 설치합니다.\n\n![OpenJDK 17 설치](./capture/setting00_01.png)\n\n\n\n### 2) 인텔리제이 설치\n\nhttps://www.jetbrains.com/ko-kr/idea/download/?section=windows\n\n위 사이트에 접속하여 인텔리 제이를 다운로드 받아 설치합니다.\n\n![인텔리제이 설치](./capture/setting00_02.png)\n\n\n### 3) 인텔리제이 프로젝트 생성\n\n#### 3-1) 새로운 프로젝트 생성\n\n![인텔리제이 새로운 프로젝트 생성](./capture/setting01.png)\n\n\n#### 3-2) 새로운 프로젝트 설정\n\n![인텔리제이 새로운 프로젝트 생성 및 설정](./capture/setting02.png)\n\n\n#### 3-3) 새로운 프로젝트 라이브러리 로딩 설정\n\n![인텔리제이 새로운 프로젝트 생성](./capture/setting03.png)\n\n\n![인텔리제이 새로운 프로젝트 설정](./capture/setting04.png)\n\n#### 3-4) D:\\kim\\springStudy\\study1\\pom.xml 기본 설정\n\n```xml\n\u003cproject xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n  xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd\"\u003e\n  \u003cmodelVersion\u003e4.0.0\u003c/modelVersion\u003e\n  \u003cgroupId\u003ekr.co.study\u003c/groupId\u003e\n  \u003cartifactId\u003estudy\u003c/artifactId\u003e\n  \u003cpackaging\u003ewar\u003c/packaging\u003e\n  \u003cversion\u003e1.0-SNAPSHOT\u003c/version\u003e\n  \u003cname\u003estudy Maven Webapp\u003c/name\u003e\n  \u003curl\u003ehttp://maven.apache.org\u003c/url\u003e\n  \u003cproperties\u003e\n    \u003cjava-version\u003e17\u003c/java-version\u003e\n    \u003corg.springframework-version\u003e5.3.20\u003c/org.springframework-version\u003e\n    \u003corg.aspectj-version\u003e1.9.0\u003c/org.aspectj-version\u003e\n    \u003corg.slf4j-version\u003e2.0.0\u003c/org.slf4j-version\u003e\n  \u003c/properties\u003e\n  \u003cdependencies\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.springframework\u003c/groupId\u003e\n      \u003cartifactId\u003espring-context\u003c/artifactId\u003e\n      \u003cversion\u003e${org.springframework-version}\u003c/version\u003e\n      \u003cexclusions\u003e\n        \u003cexclusion\u003e\n          \u003cgroupId\u003ecommons-logging\u003c/groupId\u003e\n          \u003cartifactId\u003ecommons-logging\u003c/artifactId\u003e\n        \u003c/exclusion\u003e\n      \u003c/exclusions\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.springframework\u003c/groupId\u003e\n      \u003cartifactId\u003espring-webmvc\u003c/artifactId\u003e\n      \u003cversion\u003e${org.springframework-version}\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.aspectj\u003c/groupId\u003e\n      \u003cartifactId\u003easpectjrt\u003c/artifactId\u003e\n      \u003cversion\u003e1.9.0\u003c/version\u003e\n    \u003c/dependency\u003e\n\n     \u003c/dependencies\u003e\n  \u003cbuild\u003e\n    \u003cfinalName\u003estudy1\u003c/finalName\u003e\n    \u003cplugins\u003e\n      \u003cplugin\u003e\n        \u003cartifactId\u003emaven-eclipse-plugin\u003c/artifactId\u003e\n        \u003cversion\u003e2.9\u003c/version\u003e\n        \u003cconfiguration\u003e\n          \u003cadditionalProjectnatures\u003e\n            \u003cprojectnature\u003eorg.springframework.ide.eclipse.core.springnature\u003c/projectnature\u003e\n          \u003c/additionalProjectnatures\u003e\n          \u003cadditionalBuildcommands\u003e\n            \u003cbuildcommand\u003eorg.springframework.ide.eclipse.core.springbuilder\u003c/buildcommand\u003e\n          \u003c/additionalBuildcommands\u003e\n          \u003cdownloadSources\u003etrue\u003c/downloadSources\u003e\n          \u003cdownloadJavadocs\u003etrue\u003c/downloadJavadocs\u003e\n        \u003c/configuration\u003e\n      \u003c/plugin\u003e\n      \u003cplugin\u003e\n        \u003cgroupId\u003eorg.apache.maven.plugins\u003c/groupId\u003e\n        \u003cartifactId\u003emaven-compiler-plugin\u003c/artifactId\u003e\n        \u003cversion\u003e2.5.1\u003c/version\u003e\n        \u003cconfiguration\u003e\n          \u003csource\u003e17\u003c/source\u003e\n          \u003ctarget\u003e17\u003c/target\u003e\n          \u003ccompilerArgument\u003e-Xlint:all\u003c/compilerArgument\u003e\n          \u003cshowWarnings\u003etrue\u003c/showWarnings\u003e\n          \u003cshowDeprecation\u003etrue\u003c/showDeprecation\u003e\n        \u003c/configuration\u003e\n      \u003c/plugin\u003e\n      \u003cplugin\u003e\n        \u003cgroupId\u003eorg.codehaus.mojo\u003c/groupId\u003e\n        \u003cartifactId\u003eexec-maven-plugin\u003c/artifactId\u003e\n        \u003cversion\u003e1.2.1\u003c/version\u003e\n        \u003cconfiguration\u003e\n          \u003cmainClass\u003eorg.test.int1.Main\u003c/mainClass\u003e\n        \u003c/configuration\u003e\n      \u003c/plugin\u003e\n    \u003c/plugins\u003e\n  \u003c/build\u003e\n\u003c/project\u003e\n```\n\n#### 3-5) 톰캣 서버 다운로드\n\n![인텔리제이 새로운 프로젝트 설정](./capture/setting05.png)\n\n![인텔리제이 새로운 프로젝트 설정](./capture/setting06.png)\n\n![인텔리제이 새로운 프로젝트 설정](./capture/setting07.png)\n\n\n\n#### 3-5) 톰캣 서버 설정 및 실행\n\n![인텔리제이 새로운 프로젝트 설정](./capture/setting08.png)\n\n![인텔리제이 새로운 프로젝트 설정](./capture/setting08_1.png)\n\n![인텔리제이 새로운 프로젝트 설정](./capture/setting08_2.png)\n\n![인텔리제이 새로운 프로젝트 설정](./capture/setting08_3.png)\n\n![인텔리제이 새로운 프로젝트 설정](./capture/setting08_4.png)\n\n![인텔리제이 새로운 프로젝트 설정](./capture/setting08_5.png)\n\n![인텔리제이 새로운 프로젝트 설정](./capture/setting08_6.png)\n\n![인텔리제이 새로운 프로젝트 설정](./capture/setting08_7.png)\n\n![인텔리제이 새로운 프로젝트 설정](./capture/setting08_8.png)\n\n![인텔리제이 새로운 프로젝트 설정](./capture/setting08_9.png)\n\n![인텔리제이 새로운 프로젝트 설정](./capture/setting08_10.png)\n\n![인텔리제이 새로운 프로젝트 설정](./capture/setting08_11.png)\n\n![인텔리제이 새로운 프로젝트 설정](./capture/setting08_12.png)\n\n\n\u003cbr\u003e\u003cbr\u003e\n\n# 02. Spring Framework 설정\n\n## 02-1. 의존성 설정\n\nD:\\kim\\springStudy\\study2\\pom.xml 설정\n\n```xml\n\u003cproject xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n  xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd\"\u003e\n  \u003cmodelVersion\u003e4.0.0\u003c/modelVersion\u003e\n  \u003cgroupId\u003eorg.study2\u003c/groupId\u003e\n  \u003cartifactId\u003estudy2\u003c/artifactId\u003e\n  \u003cpackaging\u003ewar\u003c/packaging\u003e\n  \u003cversion\u003e1.0-SNAPSHOT\u003c/version\u003e\n  \u003cname\u003estudy2 Maven Webapp\u003c/name\u003e\n  \u003curl\u003ehttp://maven.apache.org\u003c/url\u003e\n  \u003cproperties\u003e\n    \u003cjava-version\u003e17\u003c/java-version\u003e\n    \u003corg.springframework-version\u003e5.3.20\u003c/org.springframework-version\u003e\n    \u003corg.slf4j-version\u003e2.0.0\u003c/org.slf4j-version\u003e\n  \u003c/properties\u003e\n  \u003cdependencies\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.springframework\u003c/groupId\u003e\n      \u003cartifactId\u003espring-context\u003c/artifactId\u003e\n      \u003cversion\u003e${org.springframework-version}\u003c/version\u003e\n      \u003cexclusions\u003e\n        \u003cexclusion\u003e\n          \u003cgroupId\u003ecommons-logging\u003c/groupId\u003e\n          \u003cartifactId\u003ecommons-logging\u003c/artifactId\u003e\n        \u003c/exclusion\u003e\n      \u003c/exclusions\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.springframework\u003c/groupId\u003e\n      \u003cartifactId\u003espring-webmvc\u003c/artifactId\u003e\n      \u003cversion\u003e${org.springframework-version}\u003c/version\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.aspectj\u003c/groupId\u003e\n      \u003cartifactId\u003easpectjrt\u003c/artifactId\u003e\n      \u003cversion\u003e1.9.0\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- slf4j and log4j --\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.slf4j\u003c/groupId\u003e\n      \u003cartifactId\u003eslf4j-api\u003c/artifactId\u003e\n      \u003cversion\u003e${org.slf4j-version}\u003c/version\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.slf4j\u003c/groupId\u003e\n      \u003cartifactId\u003ejcl-over-slf4j\u003c/artifactId\u003e\n      \u003cversion\u003e${org.slf4j-version}\u003c/version\u003e\n      \u003cscope\u003eruntime\u003c/scope\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.slf4j\u003c/groupId\u003e\n      \u003cartifactId\u003eslf4j-log4j12\u003c/artifactId\u003e\n      \u003cversion\u003e${org.slf4j-version}\u003c/version\u003e\n      \u003cscope\u003eruntime\u003c/scope\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003elog4j\u003c/groupId\u003e\n      \u003cartifactId\u003elog4j\u003c/artifactId\u003e\n      \u003cversion\u003e1.2.15\u003c/version\u003e\n      \u003cexclusions\u003e\n        \u003cexclusion\u003e\n          \u003cgroupId\u003ejavax.mail\u003c/groupId\u003e\n          \u003cartifactId\u003email\u003c/artifactId\u003e\n        \u003c/exclusion\u003e\n        \u003cexclusion\u003e\n          \u003cgroupId\u003ejavax.jms\u003c/groupId\u003e\n          \u003cartifactId\u003ejms\u003c/artifactId\u003e\n        \u003c/exclusion\u003e\n        \u003cexclusion\u003e\n          \u003cgroupId\u003ecom.sun.jdmk\u003c/groupId\u003e\n          \u003cartifactId\u003ejmxtools\u003c/artifactId\u003e\n        \u003c/exclusion\u003e\n        \u003cexclusion\u003e\n          \u003cgroupId\u003ecom.sun.jmx\u003c/groupId\u003e\n          \u003cartifactId\u003ejmxri\u003c/artifactId\u003e\n        \u003c/exclusion\u003e\n      \u003c/exclusions\u003e\n      \u003cscope\u003eruntime\u003c/scope\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- 의존성 주입 라이브러리 - @Inject --\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003ejavax.inject\u003c/groupId\u003e\n      \u003cartifactId\u003ejavax.inject\u003c/artifactId\u003e\n      \u003cversion\u003e1\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- 서블릿(servlet-api 2.5, jsp-api 2.1, jstl 1.2) --\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003ejavax.servlet\u003c/groupId\u003e\n      \u003cartifactId\u003eservlet-api\u003c/artifactId\u003e\n      \u003cversion\u003e2.5\u003c/version\u003e\n      \u003cscope\u003eprovided\u003c/scope\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003ejavax.servlet.jsp\u003c/groupId\u003e\n      \u003cartifactId\u003ejsp-api\u003c/artifactId\u003e\n      \u003cversion\u003e2.1\u003c/version\u003e\n      \u003cscope\u003eprovided\u003c/scope\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003ejavax.servlet\u003c/groupId\u003e\n      \u003cartifactId\u003ejstl\u003c/artifactId\u003e\n      \u003cversion\u003e1.2\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- 테스트 도구(junit 4.13, spring-test 5.3.20)   --\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003ejunit\u003c/groupId\u003e\n      \u003cartifactId\u003ejunit\u003c/artifactId\u003e\n      \u003cversion\u003e4.13\u003c/version\u003e\n      \u003cscope\u003etest\u003c/scope\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.springframework\u003c/groupId\u003e\n      \u003cartifactId\u003espring-test\u003c/artifactId\u003e\n      \u003cversion\u003e${org.springframework-version}\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- maven build tool(3.2.1) --\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.apache.maven.plugins\u003c/groupId\u003e\n      \u003cartifactId\u003emaven-archetype-plugin\u003c/artifactId\u003e\n      \u003cversion\u003e3.2.1\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- lombok(1.18.22)--\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.projectlombok\u003c/groupId\u003e\n      \u003cartifactId\u003elombok\u003c/artifactId\u003e\n      \u003cversion\u003e1.18.22\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- DB 로그(log4jdbc-log4j2 1.16) --\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.bgee.log4jdbc-log4j2\u003c/groupId\u003e\n      \u003cartifactId\u003elog4jdbc-log4j2\u003c/artifactId\u003e\n      \u003cversion\u003e1.16\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- 스프링 jdbc(5.3.20)--\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.springframework\u003c/groupId\u003e\n      \u003cartifactId\u003espring-jdbc\u003c/artifactId\u003e\n      \u003cversion\u003e${org.springframework-version}\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- DBMS Common Library(1.4) --\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003ecommons-dbcp\u003c/groupId\u003e\n      \u003cartifactId\u003ecommons-dbcp\u003c/artifactId\u003e\n      \u003cversion\u003e1.4\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- 마리아DB 연결 라이브러리(3.1.4) --\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.mariadb.jdbc\u003c/groupId\u003e\n      \u003cartifactId\u003emariadb-java-client\u003c/artifactId\u003e\n      \u003cversion\u003e3.1.4\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- 스프링 트랜잭션 도구(5.3.20) --\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.springframework\u003c/groupId\u003e\n      \u003cartifactId\u003espring-tx\u003c/artifactId\u003e\n      \u003cversion\u003e${org.springframework-version}\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- mybatis 라이브러리 - mybatis 3.4.0 --\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.mybatis\u003c/groupId\u003e\n      \u003cartifactId\u003emybatis\u003c/artifactId\u003e\n      \u003cversion\u003e3.4.0\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- mybatis-spring 1.3.2 --\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.mybatis\u003c/groupId\u003e\n      \u003cartifactId\u003emybatis-spring\u003c/artifactId\u003e\n      \u003cversion\u003e1.3.2\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- 구글 JSON : gson 2.7 --\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003ecom.google.code.gson\u003c/groupId\u003e\n      \u003cartifactId\u003egson\u003c/artifactId\u003e\n      \u003cversion\u003e2.7\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- 웹 크롤링 도구 jsoup 1.12.1 --\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.jsoup\u003c/groupId\u003e\n      \u003cartifactId\u003ejsoup\u003c/artifactId\u003e\n      \u003cversion\u003e1.12.1\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- 범용 json(20200518) --\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.json\u003c/groupId\u003e\n      \u003cartifactId\u003ejson\u003c/artifactId\u003e\n      \u003cversion\u003e20200518\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- 심플 json(0.4) --\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.apache.clerezza.ext\u003c/groupId\u003e\n      \u003cartifactId\u003eorg.json.simple\u003c/artifactId\u003e\n      \u003cversion\u003e0.4\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- jackson library(json to xml) 2.9.4--\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003ecom.fasterxml.jackson.core\u003c/groupId\u003e\n      \u003cartifactId\u003ejackson-databind\u003c/artifactId\u003e\n      \u003cversion\u003e2.9.4\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- jackson mapper(1.9.13) --\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.codehaus.jackson\u003c/groupId\u003e\n      \u003cartifactId\u003ejackson-mapper-asl\u003c/artifactId\u003e\n      \u003cversion\u003e1.9.13\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- 스프링 암호화 라이브러리 --\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.springframework.security\u003c/groupId\u003e\n      \u003cartifactId\u003espring-security-core\u003c/artifactId\u003e\n      \u003cversion\u003e5.4.0\u003c/version\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.springframework.security\u003c/groupId\u003e\n      \u003cartifactId\u003espring-security-web\u003c/artifactId\u003e\n      \u003cversion\u003e5.4.0\u003c/version\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.springframework.security\u003c/groupId\u003e\n      \u003cartifactId\u003espring-security-config\u003c/artifactId\u003e\n      \u003cversion\u003e5.4.0\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- 파일 첨부 및 업로드 라이브러리 commons-fileupload 1.3.2, commons-io 2.4  --\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003ecommons-fileupload\u003c/groupId\u003e\n      \u003cartifactId\u003ecommons-fileupload\u003c/artifactId\u003e\n      \u003cversion\u003e1.3.2\u003c/version\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003ecommons-io\u003c/groupId\u003e\n      \u003cartifactId\u003ecommons-io\u003c/artifactId\u003e\n      \u003cversion\u003e2.4\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!--  이미지 편집 라이브러리 imgscalr-lib 4.0 --\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.imgscalr\u003c/groupId\u003e\n      \u003cartifactId\u003eimgscalr-lib\u003c/artifactId\u003e\n      \u003cversion\u003e4.0\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- 자바 이메일 기본 라이브러리 javax.mail-api 1.4.7 --\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003ejavax.mail\u003c/groupId\u003e\n      \u003cartifactId\u003ejavax.mail-api\u003c/artifactId\u003e\n      \u003cversion\u003e1.4.7\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- 이메일 및 자원에 대한 외부 송출 라이브러리 spring-context-support 스프링mvc 버전과 동일 --\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.springframework\u003c/groupId\u003e\n      \u003cartifactId\u003espring-context-support\u003c/artifactId\u003e\n      \u003cversion\u003e${org.springframework-version}\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- java의 validation 라이브러리 validation-api 2.0.1.Final --\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003ejavax.validation\u003c/groupId\u003e\n      \u003cartifactId\u003evalidation-api\u003c/artifactId\u003e\n      \u003cversion\u003e2.0.1.Final\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- 폼 검증을 애노테이션으로 검증하는 라이브러리 hibernate-annotations 3.5.6-Final --\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.hibernate\u003c/groupId\u003e\n      \u003cartifactId\u003ehibernate-annotations\u003c/artifactId\u003e\n      \u003cversion\u003e3.5.6-Final\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- hibernate Validator 라이브러리 hibernate-validator 6.0.8.Final, jaxb-api 2.3.0 --\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.hibernate.validator\u003c/groupId\u003e\n      \u003cartifactId\u003ehibernate-validator\u003c/artifactId\u003e\n      \u003cversion\u003e6.0.8.Final\u003c/version\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003ejavax.xml.bind\u003c/groupId\u003e\n      \u003cartifactId\u003ejaxb-api\u003c/artifactId\u003e\n      \u003cversion\u003e2.3.0\u003c/version\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.junit.jupiter\u003c/groupId\u003e\n      \u003cartifactId\u003ejunit-jupiter\u003c/artifactId\u003e\n      \u003cversion\u003eRELEASE\u003c/version\u003e\n      \u003cscope\u003ecompile\u003c/scope\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- 애노테이션 설정 api 추가 --\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003ejavax.annotation\u003c/groupId\u003e\n      \u003cartifactId\u003ejavax.annotation-api\u003c/artifactId\u003e\n      \u003cversion\u003e1.3.2\u003c/version\u003e\n    \u003c/dependency\u003e\n\n    \u003c!-- 음력 달력 --\u003e\n    \u003cdependency\u003e\n      \u003cgroupId\u003ecom.ibm.icu\u003c/groupId\u003e\n      \u003cartifactId\u003eicu4j\u003c/artifactId\u003e\n      \u003cversion\u003e4.0.1\u003c/version\u003e\n    \u003c/dependency\u003e\n\n  \u003c/dependencies\u003e\n  \u003cbuild\u003e\n    \u003cfinalName\u003estudy2\u003c/finalName\u003e\n    \u003cplugins\u003e\n      \u003cplugin\u003e\n        \u003cartifactId\u003emaven-eclipse-plugin\u003c/artifactId\u003e\n        \u003cversion\u003e2.9\u003c/version\u003e\n        \u003cconfiguration\u003e\n          \u003cadditionalProjectnatures\u003e\n            \u003cprojectnature\u003eorg.springframework.ide.eclipse.core.springnature\u003c/projectnature\u003e\n          \u003c/additionalProjectnatures\u003e\n          \u003cadditionalBuildcommands\u003e\n            \u003cbuildcommand\u003eorg.springframework.ide.eclipse.core.springbuilder\u003c/buildcommand\u003e\n          \u003c/additionalBuildcommands\u003e\n          \u003cdownloadSources\u003etrue\u003c/downloadSources\u003e\n          \u003cdownloadJavadocs\u003etrue\u003c/downloadJavadocs\u003e\n        \u003c/configuration\u003e\n      \u003c/plugin\u003e\n      \u003cplugin\u003e\n        \u003cgroupId\u003eorg.apache.maven.plugins\u003c/groupId\u003e\n        \u003cartifactId\u003emaven-compiler-plugin\u003c/artifactId\u003e\n        \u003cversion\u003e2.5.1\u003c/version\u003e\n        \u003cconfiguration\u003e\n          \u003csource\u003e17\u003c/source\u003e\n          \u003ctarget\u003e17\u003c/target\u003e\n          \u003ccompilerArgument\u003e-Xlint:all\u003c/compilerArgument\u003e\n          \u003cshowWarnings\u003etrue\u003c/showWarnings\u003e\n          \u003cshowDeprecation\u003etrue\u003c/showDeprecation\u003e\n        \u003c/configuration\u003e\n      \u003c/plugin\u003e\n      \u003cplugin\u003e\n        \u003cgroupId\u003eorg.codehaus.mojo\u003c/groupId\u003e\n        \u003cartifactId\u003eexec-maven-plugin\u003c/artifactId\u003e\n        \u003cversion\u003e1.2.1\u003c/version\u003e\n        \u003cconfiguration\u003e\n          \u003cmainClass\u003eorg.test.int1.Main\u003c/mainClass\u003e\n        \u003c/configuration\u003e\n      \u003c/plugin\u003e\n    \u003c/plugins\u003e\n  \u003c/build\u003e\n\u003c/project\u003e\n```\n\n## 02-2. 웹 설정\n\nD:\\kim\\springStudy\\study2\\src\\main\\webapp\\WEB-INF\\web.xml 의 설정\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003cweb-app version=\"2.5\" xmlns=\"http://java.sun.com/xml/ns/javaee\"\n         xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\u003e\n  \u003cdisplay-name\u003eStudy2 Web Application\u003c/display-name\u003e\n\n  \u003c!-- 빈 설정 파일 등록 : applicationContext.xml 지정 --\u003e\n  \u003ccontext-param\u003e\n    \u003cparam-name\u003econtextConfigLocation\u003c/param-name\u003e\n    \u003cparam-value\u003e/WEB-INF/applicationContext.xml\u003c/param-value\u003e\n  \u003c/context-param\u003e\n\n  \u003c!-- 모든 서블릿과 필터가 공유하는 Context Spring 컨테이너 생성 --\u003e\n  \u003clistener\u003e\n    \u003clistener-class\u003eorg.springframework.web.context.ContextLoaderListener\u003c/listener-class\u003e\n  \u003c/listener\u003e\n\n  \u003c!-- 내부 웹 관련 처리 작업 설정 파일 등록 : dispatcher-servlet.xml 지정 --\u003e\n  \u003c!-- 암호화 처리 설정 파일 등록 : spring-security.xml 지정 --\u003e\n  \u003cservlet\u003e\n    \u003cservlet-name\u003eappServlet\u003c/servlet-name\u003e\n    \u003cservlet-class\u003eorg.springframework.web.servlet.DispatcherServlet\u003c/servlet-class\u003e\n    \u003cinit-param\u003e\n      \u003cparam-name\u003econtextConfigLocation\u003c/param-name\u003e\n      \u003cparam-value\u003e\n        /WEB-INF/dispatcher-servlet.xml\n        /WEB-INF/spring-security.xml\n      \u003c/param-value\u003e\n    \u003c/init-param\u003e\n    \u003cload-on-startup\u003e1\u003c/load-on-startup\u003e\n  \u003c/servlet\u003e\n\n  \u003cservlet-mapping\u003e\n    \u003cservlet-name\u003eappServlet\u003c/servlet-name\u003e\n    \u003curl-pattern\u003e/\u003c/url-pattern\u003e\n  \u003c/servlet-mapping\u003e\n\n  \u003c!-- 한글 깨짐 방지 --\u003e\n  \u003cfilter\u003e\n    \u003cfilter-name\u003eencodingFilter\u003c/filter-name\u003e\n    \u003cfilter-class\u003eorg.springframework.web.filter.CharacterEncodingFilter\u003c/filter-class\u003e\n    \u003cinit-param\u003e\n      \u003cparam-name\u003eencoding\u003c/param-name\u003e\n      \u003cparam-value\u003eUTF-8\u003c/param-value\u003e\n    \u003c/init-param\u003e\n  \u003c/filter\u003e\n  \u003cfilter-mapping\u003e\n    \u003cfilter-name\u003eencodingFilter\u003c/filter-name\u003e\n    \u003curl-pattern\u003e/*\u003c/url-pattern\u003e\n  \u003c/filter-mapping\u003e\n\u003c/web-app\u003e\n```\n\n\u003cbr\u003e\u003cbr\u003e\n\n## 02-3. 애플리케이션 빈 등록 및 설정\n\nD:\\kim\\springStudy\\study2\\src\\main\\webapp\\WEB-INF\\applicationContext.xml\n\n### 1) applicationContext.xml 생성\n\n- D:\\kim\\springStudy\\study2\\src\\main\\webapp\\WEB-INF 디렉토리에서 마우스 오른쪽 버튼 을 누르고 나오는 메뉴에서 [New]-[File] 을 선택하고, 입력 란에 applicationContext.xml을 입력하고, Enter를 칩니다.\n\n![applicationContext.xml 파일 추가](./capture/setting09.png)\n\n![applicationContext.xml 파일 추가](./capture/setting09_1.png)\n\n\n\u003cbr\u003e\n\n\n### 2) applicationContext.xml 작성\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003cbeans xmlns=\"http://www.springframework.org/schema/beans\"\n       xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n       xmlns:mybatis-spring=\"http://mybatis.org/schema/mybatis-spring\"\n       xmlns:context=\"http://www.springframework.org/schema/context\"\n       xmlns:aop=\"http://www.springframework.org/schema/aop\"\n       xmlns:jdbc=\"http://www.springframework.org/schema/jdbc\"\n       xmlns:tx=\"http://www.springframework.org/schema/tx\"\n       xsi:schemaLocation=\"http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd\n\t\thttp://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd\n\t\thttp://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd\n\t\thttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd\n\t\thttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd\n\t\thttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd\"\u003e\n\n\u003c!-- applicationContext : 빈을 설정하는 파일로 외부 자원과 연동하는 부분을 설정 --\u003e\n\n    \u003c!-- 데이터베이스 설정 --\u003e\n    \u003c!-- spring-jdbc-5.3.20.jar 안의 드라이버매니저 연결 --\u003e\n    \u003cbean id=\"dataSource\" class=\"org.springframework.jdbc.datasource.SimpleDriverDataSource\"\u003e\n        \u003cproperty name=\"driverClass\" value=\"org.mariadb.jdbc.Driver\"/\u003e\n        \u003cproperty name=\"url\" value=\"jdbc:mariadb://localhost:3306/haebeop\"/\u003e\n        \u003cproperty name=\"username\" value=\"root\"/\u003e\n        \u003cproperty name=\"password\" value=\"1234\"/\u003e\n    \u003c/bean\u003e\n\n    \u003c!-- sql을 대신할 my-batis 설정 : mybatis-spring-1.3.2.jar의 세션팩토리빈클래스 연결 --\u003e\n    \u003cbean id=\"sqlSessionFactory\" class=\"org.mybatis.spring.SqlSessionFactoryBean\"\u003e\n        \u003cproperty name=\"dataSource\" ref=\"dataSource\"/\u003e\n        \u003cproperty name=\"configLocation\" value=\"classpath:/mybatis-config.xml\"/\u003e\n        \u003cproperty name=\"mapperLocations\" value=\"classpath*:/mappers/**/*Mapper.xml\"/\u003e\n    \u003c/bean\u003e\n\n    \u003c!-- SqlSession 객체 주입 --\u003e\n    \u003cbean id=\"sqlSession\" class=\"org.mybatis.spring.SqlSessionTemplate\" destroy-method=\"clearCache\"\u003e\n        \u003cconstructor-arg name=\"sqlSessionFactory\" ref=\"sqlSessionFactory\"/\u003e\n    \u003c/bean\u003e\n\n    \u003c!-- 트랜잭션 및 DB 패키지 방안 및 각 종 로깅과 보안 설정 --\u003e\n    \u003cbean id=\"transactionManager\" class=\"org.springframework.jdbc.datasource.DataSourceTransactionManager\"\u003e\n        \u003cproperty name=\"dataSource\" ref=\"dataSource\"/\u003e\n    \u003c/bean\u003e\n\n    \u003ccontext:annotation-config/\u003e\n\n    \u003c!-- @Transactional 어노테이션 처리 --\u003e\n    \u003ctx:annotation-driven transaction-manager=\"transactionManager\"/\u003e\n\n\n\u003c/beans\u003e\n```\n\n\u003cbr\u003e\n\n## 02-4. 맵퍼 등록 및 설정\n\n### 1) mybatis-config.xml 파일 생성\n\nD:\\kim\\springStudy\\study2\\src\\main\\resources 디렉토리에서 마우스 오른쪽 버튼 을 누르고 나오는 메뉴에서 [New]-[File] 을 선택하고, 입력 란에 mybatis-config.xml을 입력하고, Enter를 칩니다.\n\n![mybatis-config.xml 파일 추가](./capture/setting09_2.png)\n\n![mybatis-config.xml 파일 생성](./capture/setting09_3.png)\n\n\n\u003cbr\u003e\n\n\n### 2) mybatis-config.xml 파일 작성\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003c!DOCTYPE configuration PUBLIC\n        \"-//mybatis.org//DTD Config 3.0//EN\"\n        \"http://mybatis.org/dtd/mybatis-3-config.dtd\"\u003e\n\u003cconfiguration\u003e\n    \u003ctypeAliases\u003e\n        \u003cpackage name=\"kr.ed.haebeop\" /\u003e\n    \u003c/typeAliases\u003e\n\u003c/configuration\u003e\n```\n\n\u003cbr\u003e\n\n### 3) mappers 디렉토리 생성 및 파일 작성\n\n- D:\\kim\\springStudy\\study2\\src\\main\\resources 디렉토리에서 마우스 오른쪽 버튼 을 누르고 나오는 메뉴에서 [New]-[Directory] 를 선택하고, 입력 란에 mappers을 입력하고, Enter를 칩니다.\n\n![mappers 디렉토리 생성](./capture/setting09_4.png)\n\n![mappers 디렉토리 생성](./capture/setting09_5.png)\n\n- D:\\kim\\springStudy\\study2\\src\\main\\resources\\mappers 디렉토리에서 마우스 오른쪽 버튼 을 누르고 나오는 메뉴에서 [New]-[File] 을 선택하고, 입력 란에 testMapper.xml을 입력하고, Enter를 칩니다.\n\n![testMapper.xml 파일 생성](./capture/setting09_51.png)\n\n![testMapper.xml 파일 생성](./capture/setting09_6.png)\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003c!DOCTYPE mapper\n        PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\"\n        \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\"\u003e\n\u003cmapper namespace=\"test\"\u003e\n    \u003cselect id=\"testSelectList\" resultType=\"kr.ed.haebeop.domain.test\"\u003e\n        select * from test\n    \u003c/select\u003e\n\u003c/mapper\u003e\n```\n\n\u003cbr\u003e\u003cbr\u003e\n\n## 02-5. 서블릿 등록 및 설정\n\n### 1) 서블릿 디스패처 작성 - dispatcher-servlet.xml 작성\n\n- D:\\kim\\springStudy\\study2\\src\\main\\webapp\\WEB-INF 디렉토리에서 마우스 오른쪽 버튼 을 누르고 나오는 메뉴에서 [New]-[File] 를 선택하고, 입력 란에 dispatcher-servlet.xml을 입력하고, Enter를 칩니다.\n\n![dispatcher-servlet.xml 파일 생성](./capture/setting10.png)\n\n![dispatcher-servlet.xml 파일 생성](./capture/setting10_1.png)\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003cbeans:beans xmlns=\"http://www.springframework.org/schema/mvc\"\n             xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n             xmlns:beans=\"http://www.springframework.org/schema/beans\"\n             xmlns:context=\"http://www.springframework.org/schema/context\"\n             xsi:schemaLocation=\"http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd\n\t\thttp://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd\n\t\thttp://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd\"\u003e\n\n    \u003c!-- dispatcher-servlet.xml : 내부 웹 접근 및 처리 작업 설정 파일 --\u003e\n\n    \u003c!--  접근 자원에 대한 권한 설정 --\u003e\n    \u003cresources mapping=\"/resources/**\" location=\"/resources/\" /\u003e\n    \u003cresources mapping=\"/data/**\" location=\"/data/\" /\u003e\n    \u003cresources mapping=\"/admin/**\" location=\"/WEB-INF/views/admin\" /\u003e\n    \u003cresources mapping=\"/board/**\" location=\"/WEB-INF/views/board\" /\u003e\n    \u003cresources mapping=\"/check/**\" location=\"/WEB-INF/views/check\" /\u003e\n    \u003cresources mapping=\"/guestbook/**\" location=\"/WEB-INF/views/guestbook\" /\u003e\n    \u003cresources mapping=\"/free/**\" location=\"/WEB-INF/views/free\" /\u003e\n    \u003cresources mapping=\"/include/**\" location=\"/WEB-INF/views/include\" /\u003e\n    \u003cresources mapping=\"/member/**\" location=\"/WEB-INF/views/member\" /\u003e\n    \u003cresources mapping=\"/notice/**\" location=\"/WEB-INF/views/notice\" /\u003e\n    \u003cresources mapping=\"/qna/**\" location=\"/WEB-INF/views/qna\" /\u003e\n    \u003cresources mapping=\"/reservation/**\" location=\"/WEB-INF/views/reservation\" /\u003e\n    \u003cresources mapping=\"/util/**\" location=\"/WEB-INF/views/util\" /\u003e\n    \u003cresources mapping=\"/sample/**\" location=\"/WEB-INF/views/sample\" /\u003e\n    \u003cresources mapping=\"/sample2/**\" location=\"/WEB-INF/views/sample2\" /\u003e\n    \u003cresources mapping=\"/test/**\" location=\"/WEB-INF/views/test\" /\u003e\n    \u003cresources mapping=\"/error/**\" location=\"/WEB-INF/views/error\" /\u003e\n\n    \u003c!-- 컨트롤러에서 던진 URL : /notice/noticeList --\u003e\n    \u003c!-- 실제 존재하는 URL : /WEB-INF/views/notice/noticeList.jsp --\u003e\n    \u003c!-- 앞(prefix)의 /WEB-INF/views, 뒤(suffix)의 .jsp  --\u003e\n    \u003c!-- 리졸버에 대한 접두사와 접미사 설정 --\u003e\n    \u003cbeans:bean class=\"org.springframework.web.servlet.view.InternalResourceViewResolver\"\u003e\n        \u003cbeans:property name=\"prefix\" value=\"/WEB-INF/views\" /\u003e\n        \u003cbeans:property name=\"suffix\" value=\".jsp\" /\u003e\n    \u003c/beans:bean\u003e\n\n    \u003c!-- 멀티파트 리졸버 설정 --\u003e\n    \u003cbeans:bean id=\"multipartResolver\" class=\"org.springframework.web.multipart.commons.CommonsMultipartResolver\"\u003e\n        \u003cbeans:property name=\"defaultEncoding\" value=\"UTF-8\"/\u003e \u003c!-- 기본 인코딩 --\u003e\n        \u003cbeans:property name=\"maxUploadSize\" value=\"52428800\"/\u003e \u003c!-- 파일 사이즈 : 50MB --\u003e\n        \u003cbeans:property name=\"maxInMemorySize\" value=\"1048576\"/\u003e \u003c!-- 메모리 사이즈 : 1MB --\u003e\n    \u003c/beans:bean\u003e\n\n    \u003c!-- 멀티파트 업로드 디렉토리 지정 --\u003e\n    \u003cbeans:bean id=\"uploadPath\" class=\"java.lang.String\"\u003e\n        \u003cbeans:constructor-arg value=\"D:\\kim\\springStudy\\study2\\src\\main\\webapp\\resources\\upload\" /\u003e\n    \u003c/beans:bean\u003e\n\n    \u003c!-- 기본 메인 패키지 및 컨트롤러 패키지 설정 --\u003e\n    \u003ccontext:component-scan base-package=\"kr.ed.haebeop.controller\" /\u003e\n    \u003cannotation-driven /\u003e\n\n\n    \u003c!-- 인터셉터 : 글쓰기와 같은 회원권한을 가진 경우는 반드시 로그인 페이지를 거쳐서 시도할 것  --\u003e\n    \u003c!-- \u003cbeans:bean id=\"sampleIntercepter\" class=\"kr.co.teaspoon.util.SampleInterceptor\" /\u003e\n    \u003cbeans:bean id=\"adminIntercepter\" class=\"kr.co.teaspoon.util.AdminInterceptor\" /\u003e\n    \u003cinterceptors\u003e\n        \u003cinterceptor\u003e\n            \u003cmapping path=\"/free/**\"/\u003e\n            \u003cbeans:ref bean=\"sampleIntercepter\" /\u003e\n        \u003c/interceptor\u003e\n        \u003cinterceptor\u003e\n            \u003cmapping path=\"/admin/**\"/\u003e\n            \u003cbeans:ref bean=\"adminIntercepter\" /\u003e\n        \u003c/interceptor\u003e\n    \u003c/interceptors\u003e --\u003e\n    \u003c!-- free 디렉토리의 view(.jsp)를 접근하려면 SampleInterceptor 클래스에\n    제시한 조건이 맞으면 접근 가능하게 할 수 있도록 함 --\u003e\n    \u003c!-- admin 디렉토리의 view(.jsp)를 접근하려면 AdminInterceptor 클래스에\n    제시한 조건이 맞으면 접근 가능하게 할 수 있도록 함 --\u003e\n\u003c/beans:beans\u003e\n```\n\n\u003cbr\u003e\n\n### 2) 서블릿 피스패처에서 설정한 접근 자원에 대한 디렉토리 생성\n\n- D:\\kim\\springStudy\\study2\\src\\main\\webapp\\WEB-INF 디렉토리에서 마우스 오른쪽 버튼 을 누르고 나오는 메뉴에서 [New]-[Directory] 를 선택하고, 입력 란에 views를 입력하고, Enter를 칩니다.\n\n- D:\\kim\\springStudy\\study2\\src\\main\\webapp\\WEB-INF\\views 디렉토리에서 마우스 오른쪽 버튼 을 누르고 나오는 메뉴에서 [New]-[Directory] 를 선택하고, 입력 란에 admin를 입력하고, Enter를 칩니다.\n\n- 위와 같이 views 디렉토리 안에 board, check, guestbook, free, qna, include, member, notice, reservation, util, test, error 디렉토리를 생성합니다.\n\n- D:\\kim\\springStudy\\study2\\src\\main\\webapp 디렉토리에서 마우스 오른쪽 버튼을 누르고 나오는 메뉴에서 [New]-[Directory] 를 선택하고, 입력 란에 resource를 입력하고, Enter를 칩니다.\n\n- 위와 같이 webapp 디렉토리 안에 data 디렉토리를 생성합니다.\n\n\n![dispatcher-servlet.xml 파일 생성](./capture/setting10_2.png)\n\n\n\u003cbr\u003e\u003cbr\u003e\n\n## 02-6. 로그 출력 및 백업 설정\n\n### 1) log4j.xml 생성 및 작성\n\n- D:\\kim\\springStudy\\study2\\src\\main\\resources 디렉토리에서 마우스 오른쪽 버튼을 누르고 나오는 메뉴에서 [New]-[File] 를 선택하고, 입력 란에 log4j.xml을 입력하고, Enter를 칩니다.\n\n![log4j.xml 작성](./capture/setting11.png)\n\n![log4j.xml 작성](./capture/setting11_1.png)\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003c!DOCTYPE log4j:configuration PUBLIC \"-//APACHE//DTD LOG4J 1.2//EN\" \"log4j.dtd\"\u003e\n\u003clog4j:configuration\u003e\n    \u003c!-- Appenders --\u003e\n    \u003cappender name=\"console\" class=\"org.apache.log4j.ConsoleAppender\"\u003e\n        \u003cparam name=\"Target\" value=\"System.out\" /\u003e\n        \u003clayout class=\"org.apache.log4j.PatternLayout\"\u003e\n            \u003cparam name=\"ConversionPattern\" value=\"%-5p: %c - %m%n\" /\u003e\n        \u003c/layout\u003e\n    \u003c/appender\u003e\n\n    \u003clogger name=\"kr.ed.haebeop.controller\"\u003e\n        \u003clevel value=\"info\" /\u003e\n    \u003c/logger\u003e\n\n    \u003clogger name=\"kr.ed.haebeop.domain\"\u003e\n        \u003clevel value=\"info\" /\u003e\n    \u003c/logger\u003e\n\n    \u003clogger name=\"kr.ed.haebeop.persistence\"\u003e\n        \u003clevel value=\"info\" /\u003e\n    \u003c/logger\u003e\n\n    \u003clogger name=\"kr.ed.haebeop.repository\"\u003e\n        \u003clevel value=\"info\" /\u003e\n    \u003c/logger\u003e\n\n    \u003clogger name=\"kr.ed.haebeop.service\"\u003e\n        \u003clevel value=\"info\" /\u003e\n    \u003c/logger\u003e\n\n    \u003clogger name=\"kr.ed.haebeop.util\"\u003e\n        \u003clevel value=\"info\" /\u003e\n    \u003c/logger\u003e\n\n    \u003clogger name=\"kr.ed.haebeop.test\"\u003e\n        \u003clevel value=\"info\" /\u003e\n    \u003c/logger\u003e\n\n    \u003clogger name=\"kr.ed.haebeop\"\u003e\n        \u003clevel value=\"info\" /\u003e\n    \u003c/logger\u003e\n\n    \u003clogger name=\"org.springframework.core\"\u003e\n        \u003clevel value=\"info\" /\u003e\n    \u003c/logger\u003e\n    \u003clogger name=\"org.springframework.beans\"\u003e\n        \u003clevel value=\"info\" /\u003e\n    \u003c/logger\u003e\n    \u003clogger name=\"org.springframework.context\"\u003e\n        \u003clevel value=\"info\" /\u003e\n    \u003c/logger\u003e\n    \u003clogger name=\"org.springframework.web\"\u003e\n        \u003clevel value=\"info\" /\u003e\n    \u003c/logger\u003e\n\n    \u003croot\u003e\n        \u003cpriority value=\"warn\"/\u003e\n        \u003cappender-ref ref=\"console\"/\u003e\n    \u003c/root\u003e\n\u003c/log4j:configuration\u003e\n```\n\n\u003cbr\u003e\n\n### 2) 관련 패키지 생성\n\n- D:\\kim\\springStudy\\study2\\src\\main 디렉토리에서 마우스 오른쪽 버튼을 누르고 나오는 메뉴에서 [New]-[Directory] 를 선택하고, 입력 란에 java를 입력하고, Enter를 칩니다.\n\n- D:\\kim\\springStudy\\study2\\src\\main\\java 디렉토리에서 마우스 오른쪽 버튼을 누르고 나오는 메뉴에서 [New]-[Package] 를 선택하여 아래 그림과 같이 log4j.xml에서 지정한 패키지를 생성합니다.\n\n![관련 패키지 작성](./capture/setting11_2.png)\n\n\u003cbr\u003e\n\n### 3) 로그 백업 파일 작성 - logback.xml 작성\n\n- D:\\kim\\springStudy\\study2\\src\\main\\resources 디렉토리에서 마우스 오른쪽 버튼을 누르고 나오는 메뉴에서 [New]-[File] 를 선택하고, 입력 란에 logback.xml을 입력하고, Enter를 칩니다.\n\n![logback.xml 작성](./capture/setting12.png)\n\n![logback.xml 작성](./capture/setting12_1.png)\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003cconfiguration\u003e\n    \u003clogger name=\"jdbc.sqlonly\" level=\"DEBUG\" /\u003e\n    \u003clogger name=\"jdbc.sqltiming\" level=\"INFO\" /\u003e\n    \u003clogger name=\"jdbc.audit\" level=\"WARN\" /\u003e\n    \u003clogger name=\"jdbc.resultset\" level=\"ERROR\" /\u003e\n    \u003clogger name=\"jdbc.resultsettable\" level=\"ERROR\" /\u003e\n    \u003clogger name=\"jdbc.connection\" level=\"INFO\" /\u003e\n\n    \u003cappender name=\"CONSOLE\" class=\"ch.qos.logback.core.ConsoleAppender\"\u003e\n        \u003clayout class=\"ch.qos.logback.classic.PatternLayout\"\u003e\n            \u003cpattern\u003e%d{HH:mm:ss.SSS} [%thread] %-4level [%logger.%method:%line]-\n                %msg%n\u003c/pattern\u003e\n        \u003c/layout\u003e\n    \u003c/appender\u003e\n\n    \u003cappender name=\"LOGFILE\"\n              class=\"ch.qos.logback.core.rolling.RollingFileAppender\"\u003e\n        \u003cfile\u003e/WEB-INF/logback.log\u003c/file\u003e\n        \u003crollingPolicy class=\"ch.qos.logback.core.rolling.TimeBasedRollingPolicy\"\u003e\n            \u003cfileNamePattern\u003elogback.%d{yyyy-MM-dd}.log\u003c/fileNamePattern\u003e\n            \u003c!-- 30일 지난 파일은 삭제한다. --\u003e\n            \u003cmaxHistory\u003e30\u003c/maxHistory\u003e\n        \u003c/rollingPolicy\u003e\n        \u003cencoder\u003e\n            \u003cpattern\u003e%d{yyyy-MM-dd HH:mm:ss.SSS} %-4level [%logger.%method:%line]\n                - %msg %n\u003c/pattern\u003e\n        \u003c/encoder\u003e\n    \u003c/appender\u003e\n\n    \u003c!-- 로그의 레벨( 지정된 로그 레벨 이상만 수집 ) : DEBUG \u003c INFO \u003c WARN \u003c ERROR \u003c FATAL --\u003e\n    \u003clogger name=\"myweb\" additivity=\"false\"\u003e\n        \u003clevel value=\"INFO\" /\u003e\n        \u003cappender-ref ref=\"LOGFILE\" /\u003e\n        \u003cappender-ref ref=\"CONSOLE\" /\u003e\n    \u003c/logger\u003e\n\n    \u003croot\u003e\n        \u003clevel value=\"INFO\" /\u003e\n        \u003cappender-ref ref=\"CONSOLE\" /\u003e\n    \u003c/root\u003e\n\u003c/configuration\u003e\n```\n\n\u003cbr\u003e\n\n### 4) 데이터베이스 로그 파일 작성 - log4jdbc.log4j2.properties 작성\n\n- D:\\kim\\springStudy\\study2\\src\\main\\resources 디렉토리에서 마우스 오른쪽 버튼을 누르고 나오는 메뉴에서 [New]-[File] 를 선택하고, 입력 란에 log4jdbc.log4j2.properties를 입력하고, Enter를 칩니다.\n\n![log4jdbc.log4j2.properties 작성](./capture/setting13.png)\n\n![log4jdbc.log4j2.properties 작성](./capture/setting13_1.png)\n\n```properties\nlog4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator\n```\n\n\u003cbr\u003e\u003cbr\u003e\n\n## 02-7. 암호화 라이브러리 연결 - spring-security.xml 파일 작성\n\n- D:\\kim\\springStudy\\study2\\src\\main\\webapp\\WEB-INF 디렉토리에서 마우스 오른쪽 버튼을 누르고 나오는 메뉴에서 [New]-[File] 를 선택하고, 입력 란에 spring-security.xml을 입력하고, Enter를 칩니다.\n\n![spring-security.xml 파일 작성](./capture/setting14.png)\n\n![spring-security.xml 파일 작성](./capture/setting14_1.png)\n\n\n## 02-8. 데이터베이스 설정 \n\n- 마리아DB 의 GUI 도구인 HeidiSQL을 실행하고, 접속한 후 아래 그림과 같이 데이터베이스를 생성하고, 테스트용 테이블을 작성한 후 더미 데이터를 입력합니다.\n\n```sql\nCREATE DATABASE haebeop;\n\nUSE haebeop;\n\nCREATE TABLE test(num INT AUTO_INCREMENT PRIMARY KEY,\ntitle VARCHAR(100) NOT NULL);\n\nINSERT INTO test VALUES (DEFAULT, '테스트제목1');\nINSERT INTO test VALUES (DEFAULT, '테스트제목2');\nINSERT INTO test VALUES (DEFAULT, '테스트제목3');\nINSERT INTO test VALUES (DEFAULT, '테스트제목4');\nINSERT INTO test VALUES (DEFAULT, '테스트제목5');\n\nSELECT * from test;\n```\n\n\u003cbr\u003e\u003cbr\u003e\n\n## 02-9. 도메인(dto) 생성\n\n- D:\\kim\\springStudy\\study2\\src\\main\\java\\kr\\ed\\haebeop\\domain 패키지 디렉토리에서 마우스 오른쪽 버튼을 누르고 나오는 메뉴에서 [New]-[Java Class] 를 선택하고, 입력 란에 Test를 입력하고, Enter를 칩니다.\n\n![Test 클래스 작성](./capture/setting15.png)\n\n![Test 클래스 작성](./capture/setting15_1.png)\n\n```java\npackage kr.ed.heabeop.domain;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\n\n@Data\n@NoArgsConstructor\n@AllArgsConstructor\npublic class Test {\n    private int num;\n    private String title;\n}\n```\n\n\u003cbr\u003e\n\u003chr\u003e\n\u003cbr\u003e\n\n# 03. Spring Framework MVC 패턴 구현과 DI 및 IoC 구현\n\n## 03-1. 데이터베이스 테이블 만들기\n\n### 1) 마리아DB 다운로드 및 설치\nhttps://mariadb.org/download/?t=mariadb\u0026p=mariadb\u0026r=11.0.3\u0026os=windows\u0026cpu=x86_64\u0026pkg=msi\u0026m=blendbyte\n\n![마리아DB 다운로드](./capture/spring030102.png)\n\n### 2) HeidiSQL 다운로드 및 설치\nhttps://www.heidisql.com/download.php\n\n![Test 클래스 작성](./capture/spring030101.png)\n\n\u003cbr\u003e\n\n## 03-2. Spring Framework MVC Domain 작성\n\n### 1) domain 패키지 생성\n\n### 2) TestVO.java (클래스) 생성\n\n```java\npackage kr.ed.haebeop.domain;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\n\n@Data\n@NoArgsConstructor\n@AllArgsConstructor\npublic class TestVO {\n    private int num;\n    private String title;\n}\n```\n\n\u003cbr\u003e\n\n## 03-3. Spring Framework MVC Mapper 작성\n\n### 1) testMapper.xml에 새로운 문장 등록\n\n\u003cbr\u003e\n\n## 03-4. Spring Framework MVC Repository 구현\n\n### 1) repository 패키지 생성\n\n### 2) TestRepository.java (인터페이스) 추상체 생성\n\n```java\npackage kr.ed.haebeop.repository;\n\nimport kr.ed.haebeop.domain.TestVO;\n\nimport java.util.List;\n\npublic interface TestRepository {\n    public List\u003cTestVO\u003e testList() throws Exception;\n}\n```\n\n### 3) TestRepositoryImpl.java (클래스) 구현체 생성\n\n```java\npackage kr.ed.haebeop.repository;\nimport kr.ed.haebeop.domain.TestVO;\nimport org.apache.ibatis.session.SqlSession;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Repository;\n\nimport java.util.List;\n\n@Repository\npublic class TestRepositoryImpl implements TestRepository {\n\n    @Autowired\n    private SqlSession sqlSession;\n\n    @Override\n    public List\u003cTestVO\u003e testList() throws Exception {\n        return sqlSession.selectList(\"test.testList\");\n    }\n}\n```\n\n\u003cbr\u003e\n\n## 03-5. Spring Framework MVC Service 구현\n\n### 1) service 패키지 생성\n\n### 2) TestService.java (인터페이스) 추상체 생성\n\n```java\npackage kr.ed.haebeop.service;\nimport kr.ed.haebeop.domain.TestVO;\nimport java.util.List;\n\npublic interface TestService {\n    public List\u003cTestVO\u003e testList() throws Exception;\n}\n```\n\n### 3) TestServiceImpl.java (클래스) 구현체 생성\n\n```java\npackage kr.ed.haebeop.service;\n\nimport kr.ed.haebeop.domain.TestVO;\nimport kr.ed.haebeop.repository.TestRepository;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.List;\n\n@Service\npublic class TestServiceImpl implements TestService {\n\n    @Autowired\n    private TestRepository testRepository2;\n\n    @Override\n    public List\u003cTestVO\u003e testList() throws Exception {\n        return testRepository2.testList();\n    }\n}\n```\n\n\u003cbr\u003e\n\n## 03-6. Spring Framework MVC Bean 설정 및 추가\n\n### 1) ApplicationConfig.java에 TestVO에 대한 Repository 및 Service 빈(Bean) 주입 \n\n```java\npackage kr.ed.haebeop.config;\n\nimport kr.ed.haebeop.repository.TestRepository;\nimport kr.ed.haebeop.repository.TestRepositoryImpl;\nimport kr.ed.haebeop.service.TestService;\nimport kr.ed.haebeop.service.TestServiceImpl;\nimport kr.ed.haebeop.test.transaction.TransactionRepository;\nimport kr.ed.haebeop.test.transaction.TransactionService;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.ComponentScan;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.stereotype.Component;\n\n@Configuration\n@ComponentScan(basePackages = \"kr.ed.haebeop\")\npublic class ApplicationConfig {\n    @Bean\n    public TestService testService3(){\n        return new TestServiceImpl();\n    }\n\n    @Bean\n    public TestRepository testRepository3(){\n        return new TestRepositoryImpl();\n    }\n\n    @Bean\n    public TransactionRepository tranRepository() { return new TransactionRepository(); }\n\n    @Bean\n    public TransactionService tranService() { return new TransactionService(); }\n}\n```\n\n\u003cbr\u003e\n\n## 03-7. Spring Framework MVC View(jsp) 구현\n\n### 1) testLisp.jsp 작성\n\n```jsp\n\u003c%@ page contentType=\"text/html;charset=UTF-8\" pageEncoding=\"UTF-8\" language=\"java\" %\u003e\n\u003c%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\"  %\u003e\n\u003c%@ taglib prefix=\"fmt\" uri=\"http://java.sun.com/jsp/jstl/fmt\" %\u003e\n\u003c%@ taglib prefix=\"fn\" uri = \"http://java.sun.com/jsp/jstl/functions\"%\u003e\n\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n\u003chead\u003e\n    \u003cmeta charset=\"UTF-8\"\u003e\n    \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n    \u003ctitle\u003eTitle\u003c/title\u003e\n\u003c/head\u003e\n\u003cbody\u003e\n\u003cc:forEach var=\"test\" items=\"${testList}\"\u003e\n    \u003cp\u003e${test.num}\u003c/p\u003e\n    \u003cp\u003e${test.title}\u003c/p\u003e\n    \u003chr\u003e\n\u003c/c:forEach\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n```\n\n\u003cbr\u003e\n\n## 03-8. applicationContext.xml에 Bean을 등록하고, 주입 및 구현하기\n\n```xml\n  ... 중략 ...\n    \u003c!-- 트랜잭션 및 DB 패키지 방안 및 각 종 로깅과 보안 설정 --\u003e\n    \u003cbean id=\"transactionManager\" class=\"org.springframework.jdbc.datasource.DataSourceTransactionManager\"\u003e\n        \u003cproperty name=\"dataSource\" ref=\"dataSource\"/\u003e\n    \u003c/bean\u003e\n\n    \u003ccontext:annotation-config/\u003e\n    \u003cbean id=\"testService\" class=\"kr.ed.haebeop.service.TestServiceImpl\" /\u003e\n    \u003cbean id=\"testRepository\" class=\"kr.ed.haebeop.repository.TestRepositoryImpl\" /\u003e\n\n    \u003c!-- @Transactional 어노테이션 처리 --\u003e\n    \u003ctx:annotation-driven transaction-manager=\"transactionManager\"/\u003e\n... 중략 ...    \n```\n\n\u003cbr\u003e\n\n## 03-9. 별도의 GenericXmlApplicationContext.xml에 Bean을 등록하고, 주입 및 구현하기\n\n## 03-10. @Configuration 어노테이션을 활용한 자바 Confirurer를 활용하여 주입 및 구현하기\n\n## 03-11. 주입과 관련한 어노테이션\n\n\u003cbr\u003e\n\u003chr\u003e\n\u003cbr\u003e\n\n\n# 04. Spring Framework 의 AOP(관점지향형) 구현\n\n## 04-1. Spring Framework 에서의 관점지향형을 구현하기 위한 자바 디자인 패턴\n\n## 04-2. Spring Framework AOP를 활용한 관점지향형 구현\n\n## 04-3. 트랜잭션 고립성 레벨의 Sql 실습\n\n## 04-4. Service 및 Repository에서 트랜잭션의 구현 실습\n\n\n\u003cbr\u003e\n\u003chr\u003e\n\u003cbr\u003e\n\n# 05. json과 Api\n\n## 05-1. 데이터 주고 받는 여러 어노테이션\n\n## 05-2. 폼 데이터 검증\n\n## 05-3. json 구현\n\n## 05-4. ajax 구현\n\n## 05-5. api 구현\n\n\u003cbr\u003e\n\u003chr\u003e\n\u003cbr\u003e\n\n# 06. Spring Security 암호화 \n\n\n\n# 07. 인터셉터와 로그인 처리\n\n# 08. Multipart와 FileUpload 기능 구현\n\n# 09. 여러 부가 기능 구현\n\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frosieoh%2Fspringframework_study","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frosieoh%2Fspringframework_study","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frosieoh%2Fspringframework_study/lists"}