[Spring] 간단한 API 제작

2020. 8. 20. 03:14Spring/Spring

1. DATABASE, TABLE 생성

SHOW DATABASES ;

CREATE DATABASE `SPRINGTEST`;
USE `SPRINGTEST`;

DROP TABLE IF EXISTS `USER`;
CREATE TABLE `USER` (
    `id` INT(10) AUTO_INCREMENT NOT NULL,
    `username` VARCHAR(45) NOT NULL ,
    `password` VARCHAR(100) NOT NULL ,
    `createdAt` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
);

DROP TABLE IF EXISTS `TOKEN`;
CREATE TABLE `TOKEN` (
    `token` VARCHAR(100) UNIQUE NOT NULL ,
    `userId` INT(11) NOT NULL ,
    `createdAt` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`token`)
);

 

 

 

2. 간단한 API 제작

1) web.xml

dispatcher-servlet.xml은 Web 화면에 대한 처리, rest-servlet.xml은 API 처리용으로 분리할 수 있도록 web.xml 파일을 수정한다. 그리고 인코딩 설정도 적용해준다.

    <!-- CharacterEncodingFilter -->
    <filter>
        <filter-name>characterEncoding</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>EUC-KR</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncoding</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>

    <!-- ContextLoaderListener -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- DispatcherServlet -->
    <servlet>
        <servlet-name>rest</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/rest-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>rest</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!-- DispatcherServlet -->
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

2) 클래스 생성

VO, Service, DAO, ServiceImpl 클래스를 생성한다.

VO, Service, DAO, ServiceImpl 클래스 생성

AOP를 이용한 Log를 찍어줄 클래스를 생성한다. (PointcutCommon, Log)

PointcutCommon, Log 클래스 생성

JSON으로 반환할 때 사용할 VO 클래스를 생성한다. (ResponseVO)

ResponseVO 클래스 생성

Controller 클래스를 생성한다.

Controller 클래스 생성

3) DataSource 프로퍼티 파일 생성

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/[DB명]?characterEncoding=UTF-8&serverTimezone=UTC
jdbc.username=root
jdbc.password=

db.properties

4) 설정 파일

applicationContext.xml

    <context:component-scan base-package="org.springTest.www"/>

    <!-- DataSource -->
    <context:property-placeholder location="classpath:config/db.properties"/>

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}"/>
    </bean>

    <!-- Spring JPA -->
    <bean id="jpaVendorAdapter"	class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
    <bean id="entityManagerFactory"	class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaVendorAdapter" ref="jpaVendorAdapter"/>
        <property name="packagesToScan">
            <array>
                <value>org.springTest.www.user</value>
            </array>
        </property>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.use_sql_comments">true</prop>
                <prop key="hibernate.id.new_generator_mappings">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>
    </bean>

    <!-- Transaction -->
    <bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean>

    <tx:advice id="txAdvice" transaction-manager="txManager">
        <tx:attributes>
            <tx:method name="insert*" rollback-for="Exception"/>
            <tx:method name="create*" rollback-for="Exception"/>
        </tx:attributes>
    </tx:advice>

    <aop:config>
        <aop:pointcut id="txPointcut" expression="execution(* org.springTest.www..*Impl.*(..))"/>
        <aop:advisor pointcut-ref="txPointcut" advice-ref="txAdvice"/>
    </aop:config>


    <!-- Log -->
    <aop:aspectj-autoproxy/>

applicationContext.xml

rest-servlet.xml을 작성한다.

rest-servlet.xml

dispatcher-servlet.xml을 작성한다.

dispatcher-servlet.xml

5) 구현 화면

구현 화면


[참고] https://github.com/ozofweird/Spring_SpringTest

728x90

'Spring > Spring' 카테고리의 다른 글

[Spring] 참고 사항  (0) 2020.08.24
[Spring] AWS 배포  (0) 2020.08.23
[Spring] IntelliJ Tomcat, MySQL, SpringMVC 설정  (0) 2020.08.20
[Spring] 어노테이션 기반 프로젝트 진행 순서  (0) 2020.08.13