[Spring] 간단한 API 제작
2020. 8. 20. 03:14ㆍSpring/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 클래스를 생성한다.
AOP를 이용한 Log를 찍어줄 클래스를 생성한다. (PointcutCommon, Log)
JSON으로 반환할 때 사용할 VO 클래스를 생성한다. (ResponseVO)
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=
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/>
rest-servlet.xml을 작성한다.
dispatcher-servlet.xml을 작성한다.
5) 구현 화면
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 |