100일 챌린지/빅데이터기반 인공지능 융합 서비스 개발자

Day 53 - java 17을 이용한, xml을 사용하지 않는 프로그램 만들기

ksyke 2024. 10. 11. 16:19

목차

    1. pom.xml 업데이트

    1-1. java version upgrade

        ...
        <properties>
            <java-version>17</java-version>
            ...
        </properties>
        ...
        <build>
            <plugins>
            ...
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>2.5.1</version>
                    <configuration>
                        <source>17</source>
                        <target>17</target>
                        <compilerArgument>-Xlint:all</compilerArgument>
                        <showWarnings>true</showWarnings>
                        <showDeprecation>true</showDeprecation>
                    </configuration>
                </plugin>
            </plugins>
        </build>

    1-2. spring upgrade

    <org.springframework-version>5.3.39</org.springframework-version>

    1-3. spring-mvc,jdbc,aop,test,tx 추가

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${org.springframework-version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>${org.springframework-version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>${org.springframework-version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${org.springframework-version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>${org.springframework-version}</version>
            </dependency>

    1-4. aspectj 추가(scope 지우기)

            <!-- AspectJ -->
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjrt</artifactId>
                <version>${org.aspectj-version}</version>
            </dependency>    
            <!-- aspectjweaver -->
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>${org.aspectj-version}</version>
            </dependency>

    1-5. Servlet Upgrade

            <!-- Servlet -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>javax.servlet.jsp-api</artifactId>
                <version>2.3.0</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>

    1-6. JUnit verion 업그레이드

            <!-- Test -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.13</version>
                <scope>test</scope>
            </dependency>   

    1-7. lombok 추가

            <!-- lombok -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.34</version>
                <scope>provided</scope>
            </dependency>

    1-8. h2 추가 (1.4.200)

            <!-- h2 -->
            <dependency>
                <groupId>com.h2database</groupId>
                <artifactId>h2</artifactId>
                <version>2.3.232</version>
                <scope>test</scope>
            </dependency>

    1-9. dbcp 추가

            <!-- commons-dbcp -->
            <dependency>
                <groupId>commons-dbcp</groupId>
                <artifactId>commons-dbcp</artifactId>
                <version>1.4</version>
            </dependency>

    ->maven update


    2. web.xml 없애기

    2-1. pom.xml에 다음 추가

            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>

    ->maven update

    ->서버가 작동이 안된다면 Tomcat ver 9.x 로 업그레이드

    2-2. WebConfig.java

    package com.gimhae.day54.config;
    
    public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer{
    
        @Override
        protected Class<?>[] getRootConfigClasses() {
            return new Class[] {RootConfig.class};
        }
    
        @Override
        protected Class<?>[] getServletConfigClasses() {
            return new Class[] {ServletConfig.class};
        }
    
        @Override
        protected String[] getServletMappings() {
            return new String[] {"/"};
        }
    
    }

    2-3. ServletConfig.java

    package com.gimhae.day54.config;
    
    @EnableWebMvc
    @ComponentScan(basePackages = {"com.gimhae.day54"})
    public class ServletConfig implements WebMvcConfigurer{
        @Override
        public void configureViewResolvers(ViewResolverRegistry reg) {
            InternalResourceViewResolver viewResolver=new InternalResourceViewResolver();
            viewResolver.setPrefix("/WEB-INF/views/");
            viewResolver.setSuffix(".jsp");
            reg.viewResolver(viewResolver);
        }
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry reg) {
            reg.addResourceHandler("/resources/**")
            .addResourceLocations("/resources/");
        }
    }

    2-4. RootConfig.java

    package com.gimhae.day54.config;
    
    import javax.sql.DataSource;
    
    @Configuration
    @ComponentScan(basePackages = {"com.gimhae.day54"})
    public class RootConfig {
    
        // dataSource Bean 만들기
        @Bean
        public DataSource dataSource() {
            BasicDataSource dataSource=new BasicDataSource();
            dataSource.setDriverClassName("org.h2.Driver");
            dataSource.setUrl("jdbc:h2:tcp://localhost/~/xe");
            dataSource.setUsername("root");
            dataSource.setPassword("");
            return dataSource;
        }
        // jdbcTemplate 만들기
        @Bean
        public JdbcTemplate jdbcTemplate() {
            JdbcTemplate template=new JdbcTemplate();
            template.setDataSource(dataSource());
            return template;
        }
        // transactionManager 만들기
        @Bean
        public TransactionManager transactionManager() {
            DataSourceTransactionManager transaction=new DataSourceTransactionManager(dataSource());
            return transaction;
        }
    
        @Bean
        public SqlSessionFactory sqlSessionFactory() throws Exception {
            SqlSessionFactoryBean factory=new SqlSessionFactoryBean();
            factory.setDataSource(dataSource());
            return factory.getObject();
        }
    }

    2-5. TestConfig

    package com.gimhae.day54.config;
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes = {RootConfig.class})
    public class TestConfig {
        @Autowired
        DataSource dataSource;
        @Autowired
        JdbcTemplate jdbcTemplate;
    
        @Test
        public void testDataSource() {
            assertNotNull(dataSource);
        }
    
        @Test
        public void testJdbcTemplate() {
            assertNotNull(jdbcTemplate);
        }
    
    }

    3. MyBatis 사용하기

    3-1. pom.xml 라이브러리 추가

            <!-- mybatis -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.6</version>
            </dependency>
            <!-- mybatis-spring -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>2.0.6</version>
            </dependency>

    4. Model 만들기

    4-1. DeptVo

    package com.gimhae.day54.model;
    
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    public class DeptVo {
        int deptno;
        String dname,loc;
    }

    4-2. DeptDao

    package com.gimhae.day54.model;
    
    @Mapper
    public interface DeptDao {
    
        @Select("SELECT * FROM DEPT ORDER BY DEPTNO")
        List<DeptVo> pullList();
    
        @Insert("INSERT INTO DEPT (DEPTNO,DNAME,LOC) VALUES (#{deptno},#{dname},#{loc})")
        void addList(DeptVo bean);
    
        @Select("SELECT * FROM DEPT WHERE DEPTNO=#{int}")
        DeptVo getList(int deptno);
    
        @Update("UPDATE DEPT SET DNAME=#{dname},LOC=#{loc} WHERE DEPTNO=#{deptno}")
        int setList(DeptVo bean);
    
        @Delete("DELETE FROM DEPT WHERE DEPTNO=#{int}")
        int rmList(int deptno);
    }

    5. HomeController

    package com.gimhae.day54;
    
    @Controller
    public class HomeController {
        @Autowired
        DeptDao deptDao;
    
        public HomeController() {
            System.out.println("new Controller...");
        }
    
        @RequestMapping(value = "/", method = RequestMethod.GET)
        public ResponseEntity<?> home() {
            return ResponseEntity.ok(deptDao.getList());
        }
    
        @PostMapping("/")
        public ResponseEntity<?> add(@ModelAttribute DeptVo bean){
            deptDao.insert(bean);
            return ResponseEntity.ok().build();
        }
    }

    6. pom.xml - jacksonbind 추가

            <!-- jackson-databind -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.15.2</version>
            </dependency>

    7. Aop

    7-1. DeptAdvice

    7-2. RootConfig