728x90
반응형
🎯 목표
💡 나는 최고의 프로그래머당!
🖋️ 수업 내용
※ 요약 주의
📆 230713~230714
- 코로나 걸림;
📆 230717
- 📃 웹기반 애플리케이션
- 수업 열심히 들음
📆 230718
- 📃 웹기반 애플리케이션
- 수업 열심히 들음
- 🌸 Spring
- 디자인 패턴: 프로그램 개발에서 자주 나타나는 과제를 해결하기 위한 방법 중 하나로, 소프트웨어 개발 과정에서 발견된 노하우를 축적하여 이름을 붙여 이후에 재사용하기 좋은 형태로 특정 규약을 묶어서 정리한 것.
- 프레임워크: 비기능적 요구사항(성능, 보안, 확장성, 안정성 등)을 만족하는 구조와 구현된 기능을 안정적으로 실행하도록 제어해주는 잘 만들어진 구조의 라이브러리 덩어리. 애플리케이션들의 최소한의 공통점을 찾아 하부 구조를 제공함으로써 개발자들로 하여금 시스템의 하부 구조를 구현하는 데 들어가는 노력을 절감하게 해줌
- IoC(Inversion of Control): 제어의 역전 즉, 인스턴스 생성부터 소멸까지의 인스턴스 생명 주기 관리를 개발자가 아닌 컨테이너가 대신함. 컨테이너 역할을 해주는 프레임워크에게 제어하는 권한을 넘겨서 할 일을 줄이는 전략
- 스프링 프레임워크는 IoC를 지원하며 메타데이터(XML설정)를 통해 beans를 관리하고 어플리케이션의 중요 부분을 형성함
- 프레임워크의 종류
- 스프링의 구조
- Eclipse Marketplace에 sts검색해 sts3(standalone) 다운로드 혹은 전자정부프레임워크 3.10버전 사용
Spring legacy project - Spring MVC Project 생성- 아래 xml 파일들은 플젝 생성하면 자동으로 생성됨
- 인텔리제이에서 Spring legacy project를 사용하기는 어렵고 이클립스에서 빈 프로젝트를 생성한 후 임포트해서 사용하는 것을 추천,,
- log4j.xml
- Root Logger(root태그): 모든 Logger의 최상위인 Logger
<root> <appender-ref ref="console"/> <priority value="debug"/> </root>
- appender-ref: 전달된 로그를 어디에 출력할지 결정한다. 콘솔, 파일, 데이터베이스 등 지정할 수 있다.
- priority: 로그의 레벨을 지정한다. 로그의 레벨은 다음과 같이 여섯가지가 존재한다.
- fatal: 심각한 오류 발생한 상태 출력
- error: 요청 처리 중 문제 발생한 상태 출력
- 프로그램 실행에는 문제가 없으나 오류 발생 경고 시 상태 출력
- info: 상태 변경 등 정보성 메시지 출력
- debug: 개발 시 디버그 용도로 사용한 메시지 출력
- trace: debug의 범위를 좁혀서 더 상세한 상태 출력
- Root Logger(root태그): 모든 Logger의 최상위인 Logger
- servlet-context.xml
- 스프링 웹(view) 설정 파일. 뷰(jsp)와 관련 있는 빈(bean) 객체를 설정함. 즉, Controller, MultipartResolver, Intercepter, URI와 관련 설정을 담는 클래스를 설정함.
- @Controller, @RequestMapping과 같은 어노테이션 사용 시 필요한 빈 객체들을 자동으로 등록한다. 또한, 핸들러 어댑터의 빈 객체도 대신 등록한다.
- root-context.xml
- 스프링 설정 파일로, 서블릿과 필터가 공유할 수 있는 루트 스프링 컨테이너를 설정함. Service, DAO, Databse, Log와 bean, 객체를 설정하는 파일로 주로 view 지원을 제외한 bean을 설정함.
- 스프링을 설정한다는 의미는 view(jsp, html 등)와 관련되지 않은 객체를 정의하고 Service(기능), DAO, Databse와 같은 비즈니스 로직과 관련된 설정을 진행한다
- 데이터베이스 설정
- dataSource: 데이터베이스와 관련된 정보를 설정하는 객체(중요❗️). driverClassName, url, username, password 네 매개변수가 필요하다
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/> <property name="username" value="/유저네임입력/"/> <property name="password" value="/비밀번호입력/"/> </bean>
- sqlSession: 데이터베이스와 연결을 맺고 끊어질 때까지 생명주기를 관리해주는 객체. dataSource객체와 mapperLocations, configLocation 세 매개변수를 필요로 한다
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mapperLocations" value="classpath:/sqlmap/**/*_SQL.xml"/> <property name="configLocation" value="/WEB-INF/mybatisAlias/mybatisAlias.xml"/> </bean>
- sqlSessionTemplate: 데이터베이스에 개별적으로 쿼리를 실행시키는 객체. 이 객체를 통해 쿼리를 실행함
<bean id="sqlSessionTemplate"class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory" /> </bean>
- dataSource: 데이터베이스와 관련된 정보를 설정하는 객체(중요❗️). driverClassName, url, username, password 네 매개변수가 필요하다
- web.xml
- 웹 프로젝트의 배포 설명자 및 배치 기술서(deployment description)이며, 웹 프로젝트가 배포되는 데 이용되는 xml형식의 자바 웹 애플리케이션 환경 설정을 담당한다. 스프링 프로젝트가 실행되면 가장 먼저 web.xml 파일을 읽어들이고 상단에 위치한 태그부터 차례로 해석한다.
- web-app의 태그의 구조
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> ... </web-app>
- 스키마 헤더: web.xml 파일의 상단에 정의된 태그로, 서블릿 버전마다 다르게 나타난다. 코드의 구조와 요소, 속성의 관계를 정의하여 다양한 자료형을 사용할 수 있도록 정의된 문서 구조(틀)를 의미한다.
- xmlns(xml namespace): 코드에서 이름은 같지만 내용이 전혀 다른 요소와 충돌하지 않도록 요소들을 구별하는 데 사용한다.
- xsi:schemaLocation: 참고하고자 하는 인스턴스 문서의 URI를 지정한다. 두 개의 속성 값은 공백으로 구분하는데 전자의 속성은 xmlns와 동일한 값을 가지고, 후자는 참조할 스키마 파일의 이름이다.
- 파일 내에서 request.setCharacterEncoding("UTF-8")을 매번 작성하지 않고 한글 처리를 하기 위해서는 아래 태그가 필요하다
<filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
- @Controller: 스프링에게 해당 클래스가 웹 브라우저의 요청을 받아들이는 클래스라고 알리는 어노테이션. 스프링은 servlet-context.xml의 context:component-scan의 설정에 의해 해당 클래스를 자바빈 객체로 등록(메모리에 바인딩)
- @Autowired: 의존성을 주입함. 생성자, setter, 필드에 주입할 수 있다.
- DI(Dependency Injection): 의존성 주입. (sqlSessionTemplate 객체를 BookDAO 객체에 주입함)
- IoC(Inversion of Control): 제어의 역전. new 키워드를 통해 개발자가 직접 객체를 생성하지 않고 스프링이 미리 만들어놓음
- @RequestMapping: 브라우저의 요청에 의해 실행시킬 자바 메서드를 지정한다.
- value: 브라우저의 주소를 지정하는 속성
- method: http 요청 메서드를 지정하는 속성
- ModelAndView: 컨트롤러가 반환할 데이터를 담당하는 모델과 화면을 담당하는 뷰(ModelAndView)의 경로를 합쳐놓은 객체. ModelAndView의 생성자에 문자열 타입 파라미터가 입력되면 뷰(jsp)의 경로라고 간주한다. ex) new ModelAndView("뷰의 경로")
// 예시 public ModelAndView create() { ModelAndView mav = new ModelAndView(); mav.setViewName("book/create"); return mav; }
- 생성자에 뷰의 경로를 입력하는 방법도 있지만 기본 생성자로 객체를 생성한 후, setViewName()메서드로 뷰의 경로를 지정할 수 있다.
- void setViewName(String path): 포워드 방식으로 페이지를 이동하는 메서드. jsp를 컴파일해 html로 만들어 리턴한다. 접두어는 '/WEB-INF/views/', 접미어는 '.jsp'이다. 즉 위 예시에 따르면 mav.setViewName()으로 인해 /WEB-INF/views/book/create.jsp로 이동하게 되는 것이다.
- @Autowired: 의존성을 주입함. 생성자, setter, 필드에 주입할 수 있다.
📆 230719
- 🌸 Spring
- pom.xml에 추가할 데이터베이스용 라이브러리
- mybatis(https://mvnrepository.com/artifact/org.mybatis/mybatis)
- mybatis-spring(https://mvnrepository.com/artifact/org.mybatis/mybatis-spring)
- spring-jdbc(spring버전과 동일한 버전, https://mvnrepository.com/artifact/org.springframework/spring-jdbc)
- commons-dbcp2(https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2)
- ojdbc6(https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc6)
- 커넥션 풀: 데이터베이스와 연결된 커넥션을 미리 만들어서 풀(pool)속에 저장해두고 풀에 저장해 두고 있다가 필요할 때 커넥션을 풀에서 가져다 쓰고, 사용이 끝나면 다시 풀에 반환하는 기법. 커넥션 풀의 오픈소스에는 대표적으로 DBCP와 C3P0이 있는데 본 수업에서는 DBCP를 사용한다. 부가적으로 commons-logging도 필요하다
- pom.xml에 위 라이브러리의 dependency들을 추가하고 root-context.xml에 xmlns와 xsi:schemaLocation에 추가한다
- DAO클래스: mapper.xml을 실행함.
- @Repository: 데이트에 접근하는 클래스(DAO)라고 스프링에게 알려줌. 스프링이 자바빈으로 등록해서 관리함
- Service 클래스: 비즈니스 로직(기능)을 구현함. 스프링 MVC 구조에서 Controller와 DAO를 연결하는 역할
- @Service 어노테이션 사용
- 스프링 프레임워크는 직접 클래스를 호출을 지양하고, 인터페이스 호출을 지향함. 인터페이스 사용으로 인해 확장성이 커지기 때문에 인터페이스를 통해 접근하는 것을 권장함
- pom.xml에 추가할 데이터베이스용 라이브러리
💭 기록
인텔리제이에 spring legacy project 또는 spring mvc project 생성이 불가능한지 모르고 하루 수업 날리고 검색만 주구장창 했다 결론은 ,, 인텔리제이에서 지원을 멈췄다 그래서 걍 이클립스에서 플젝 만들고 임포트하는 편이 낫겠다 싶다
중간 프로젝트 끝나고 중프에서 이미 다 했던 것들을 또 수업으로 배우자니 지긋지긋했는데 ㅎ.. 스프링 새로 배우니까 좀 낫다 구조 이해하니 약간 재밌는 것 같기도 하궁 ㅎ 오만일지도 ; 아무튼,, 이번주는 좀 알차게 보낸 것 같아서 다행이다 담주도 퐈이랭 ~
728x90
반응형