💭/KDT

KDT 20주차 회고(230713~230719)

모팔구 2023. 7. 19. 20:36
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: 로그의 레벨을 지정한다. 로그의 레벨은 다음과 같이 여섯가지가 존재한다.
          1. fatal: 심각한 오류 발생한 상태 출력
          2. error: 요청 처리 중 문제 발생한 상태 출력
          3. 프로그램 실행에는 문제가 없으나 오류 발생 경고 시 상태 출력
          4. info: 상태 변경 등 정보성 메시지 출력
          5. debug: 개발 시 디버그 용도로 사용한 메시지 출력
          6. trace: debug의 범위를 좁혀서 더 상세한 상태 출력
    • 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>
    • 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>
        1. 스키마 헤더: web.xml 파일의 상단에 정의된 태그로, 서블릿 버전마다 다르게 나타난다. 코드의 구조와 요소, 속성의 관계를 정의하여 다양한 자료형을 사용할 수 있도록 정의된 문서 구조(틀)를 의미한다.
        2. xmlns(xml namespace): 코드에서 이름은 같지만 내용이 전혀 다른 요소와 충돌하지 않도록 요소들을 구별하는 데 사용한다.
        3. 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로 이동하게 되는 것이다. 

📆 230719

  • 🌸 Spring
    • pom.xml에 추가할 데이터베이스용 라이브러리
      1. mybatis(https://mvnrepository.com/artifact/org.mybatis/mybatis)
      2. mybatis-spring(https://mvnrepository.com/artifact/org.mybatis/mybatis-spring)
      3. spring-jdbc(spring버전과 동일한 버전, https://mvnrepository.com/artifact/org.springframework/spring-jdbc)
      4. commons-dbcp2(https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2)
      5. 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 어노테이션 사용
      • 스프링 프레임워크는 직접 클래스를 호출을 지양하고, 인터페이스 호출을 지향함. 인터페이스 사용으로 인해 확장성이 커지기 때문에 인터페이스를 통해 접근하는 것을 권장함

 

💭 기록

인텔리제이에 spring legacy project 또는 spring mvc project 생성이 불가능한지 모르고 하루 수업 날리고 검색만 주구장창 했다 결론은 ,, 인텔리제이에서 지원을 멈췄다 그래서 걍 이클립스에서 플젝 만들고 임포트하는 편이 낫겠다 싶다

중간 프로젝트 끝나고 중프에서 이미 다 했던 것들을 또 수업으로 배우자니 지긋지긋했는데 ㅎ.. 스프링 새로 배우니까 좀 낫다 구조 이해하니 약간 재밌는 것 같기도 하궁 ㅎ 오만일지도 ; 아무튼,, 이번주는 좀 알차게 보낸 것 같아서 다행이다 담주도 퐈이랭 ~

 

 

728x90
반응형