728x90
728x90
스프링 버전
톰캣 버전
https://hyunah030.tistory.com/2 (맥에서 톰캣 설치하기)
데이터베이스 구조
테이블, 계정 생성
...더보기
create user shop identified by 1234;
grant connect, dba, resource to shop;
--------------------------------------------------------
-- DDL for Table T_GOODS_DETAIL_IMAGE
--------------------------------------------------------
CREATE TABLE "T_GOODS_DETAIL_IMAGE"
( "IMAGE_ID" NUMBER(20,0) primary key,
"GOODS_ID" NUMBER(20,0),
"FILENAME" VARCHAR2(50 BYTE),
"REG_ID" VARCHAR2(20 BYTE),
"FILETYPE" VARCHAR2(40 BYTE),
"CREDATE" DATE DEFAULT sysdate
) ;
--------------------------------------------------------
-- DDL for Table T_SHOPPING_GOODS
--------------------------------------------------------
CREATE TABLE "T_SHOPPING_GOODS"
( "GOODS_ID" NUMBER(20,0) primary key,
"GOODS_SORT" VARCHAR2(50 BYTE),
"GOODS_TITLE" VARCHAR2(100 BYTE),
"GOODS_WRITER" VARCHAR2(50 BYTE),
"GOODS_PUBLISHER" VARCHAR2(50 BYTE),
"GOODS_PRICE" NUMBER(10,0),
"GOODS_SALES_PRICE" NUMBER(10,0),
"GOODS_POINT" NUMBER(10,0),
"GOODS_PUBLISHED_DATE" DATE,
"GOODS_TOTAL_PAGE" NUMBER(5,0),
"GOODS_ISBN" VARCHAR2(50 BYTE),
"GOODS_DELIVERY_PRICE" NUMBER(10,0),
"GOODS_DELIVERY_DATE" DATE,
"GOODS_STATUS" VARCHAR2(50 BYTE),
"GOODS_INTRO" VARCHAR2(2000 BYTE),
"GOODS_WRITER_INTRO" VARCHAR2(2000 BYTE),
"GOODS_PUBLISHER_COMMENT" VARCHAR2(2000 BYTE),
"GOODS_RECOMMENDATION" VARCHAR2(2000 BYTE),
"GOODS_CONTENTS_ORDER" CLOB,
"GOODS_CREDATE" DATE DEFAULT sysdate
) ;
--------------------------------------------------------
-- DDL for Table T_SHOPPING_MEMBER
--------------------------------------------------------
CREATE TABLE "T_SHOPPING_MEMBER"
( "MEMBER_ID" VARCHAR2(20 BYTE) primary key,
"MEMBER_PW" VARCHAR2(30 BYTE),
"MEMBER_NAME" VARCHAR2(50 BYTE),
"MEMBER_GENDER" VARCHAR2(10 BYTE),
"TEL1" VARCHAR2(20 BYTE),
"TEL2" VARCHAR2(20 BYTE),
"TEL3" VARCHAR2(20 BYTE),
"HP1" VARCHAR2(20 BYTE),
"HP2" VARCHAR2(20 BYTE),
"HP3" VARCHAR2(20 BYTE),
"SMSSTS_YN" VARCHAR2(20 BYTE),
"EMAIL1" VARCHAR2(20 BYTE),
"EMAIL2" VARCHAR2(20 BYTE),
"EMAILSTS_YN" VARCHAR2(20 BYTE),
"ZIPCODE" VARCHAR2(20 BYTE),
"ROADADDRESS" VARCHAR2(500 BYTE),
"JIBUNADDRESS" VARCHAR2(500 BYTE),
"NAMUJIADDRESS" VARCHAR2(500 BYTE),
"MEMBER_BIRTH_Y" VARCHAR2(20 BYTE),
"MEMBER_BIRTH_M" VARCHAR2(20 BYTE),
"MEMBER_BIRTH_D" VARCHAR2(20 BYTE),
"MEMBER_BIRTH_GN" VARCHAR2(20 BYTE),
"JOINDATE" DATE DEFAULT sysdate,
"DEL_YN" VARCHAR2(20 BYTE) DEFAULT 'N'
) ;
--------------------------------------------------------
-- DDL for Table T_SHOPPING_ORDER
--------------------------------------------------------
CREATE TABLE "T_SHOPPING_ORDER"
( "ORDER_SEQ_NUM" NUMBER(20,0) primary key,
"ORDER_ID" NUMBER(20,0),
"MEMBER_ID" VARCHAR2(20 BYTE),
"GOODS_ID" NUMBER(20,0),
"ORDERER_NAME" VARCHAR2(50 BYTE),
"GOODS_TITLE" VARCHAR2(100 BYTE),
"ORDER_GOODS_QTY" NUMBER(5,0),
"GOODS_SALES_PRICE" NUMBER(5,0),
"GOODS_FILENAME" VARCHAR2(60 BYTE),
"RECEIVER_NAME" VARCHAR2(50 BYTE),
"RECEIVER_HP1" VARCHAR2(20 BYTE),
"RECEIVER_HP2" VARCHAR2(20 BYTE),
"RECEIVER_HP3" VARCHAR2(20 BYTE),
"RECEIVER_TEL1" VARCHAR2(20 BYTE),
"RECEIVER_TEL2" VARCHAR2(20 BYTE),
"RECEIVER_TEL3" VARCHAR2(20 BYTE),
"DELIVERY_ADDRESS" VARCHAR2(500 BYTE),
"DELIVERY_METHOD" VARCHAR2(40 BYTE),
"DELIVERY_MESSAGE" VARCHAR2(300 BYTE),
"GIFT_WRAPPING" VARCHAR2(20 BYTE),
"PAY_METHOD" VARCHAR2(200 BYTE),
"CARD_COM_NAME" VARCHAR2(50 BYTE),
"CARD_PAY_MONTH" VARCHAR2(20 BYTE),
"PAY_ORDERER_HP_NUM" VARCHAR2(20 BYTE),
"DELIVERY_STATE" VARCHAR2(20 BYTE) DEFAULT 'delivery_prepared',
"PAY_ORDER_TIME" DATE DEFAULT sysdate,
"ORDERER_HP" VARCHAR2(50 BYTE)
) ;
--------------------------------------------------------
-- DDL for Table T_SHOPPING_CART
--------------------------------------------------------
CREATE TABLE "T_SHOPPING_CART"
( "CART_ID" NUMBER(10,0) primary key,
"GOODS_ID" NUMBER(20,0),
"MEMBER_ID" VARCHAR2(20 BYTE),
"DEL_YN" VARCHAR2(20 BYTE) DEFAULT 'N',
"CREDATE" DATE DEFAULT sysdate,
"CART_GOODS_QTY" NUMBER(4,0) DEFAULT 1
) ;
REM INSERTING into T_GOODS_DETAIL_IMAGE
SET DEFINE OFF;
Insert into T_GOODS_DETAIL_IMAGE (IMAGE_ID,GOODS_ID,FILENAME,REG_ID,FILETYPE,CREDATE) values (346,394,'test.jpg','admin','main_image',to_date('19/09/01','RR/MM/DD'));
drop sequence ORDER_SEQ_NUM;
drop sequence SEQ_GOODS_ID;
drop sequence SEQ_IMAGE_ID;
drop sequence SEQ_ORDER_ID;
--------------------------------------------------------
-- DDL for Sequence ORDER_SEQ_NUM
--------------------------------------------------------
CREATE SEQUENCE "ORDER_SEQ_NUM" MINVALUE 0 MAXVALUE 10000000 INCREMENT BY 1 START WITH 400 CACHE 20 NOORDER NOCYCLE ;
--------------------------------------------------------
-- DDL for Sequence SEQ_GOODS_ID
--------------------------------------------------------
CREATE SEQUENCE "SEQ_GOODS_ID" MINVALUE 100 MAXVALUE 1000000 INCREMENT BY 1 START WITH 400 CACHE 20 ORDER NOCYCLE ;
--------------------------------------------------------
-- DDL for Sequence SEQ_IMAGE_ID
--------------------------------------------------------
CREATE SEQUENCE "SEQ_IMAGE_ID" MINVALUE 1 MAXVALUE 11111111 INCREMENT BY 1 START WITH 400 NOCACHE NOORDER NOCYCLE ;
--------------------------------------------------------
-- DDL for Sequence SEQ_ORDER_ID
--------------------------------------------------------
CREATE SEQUENCE "SEQ_ORDER_ID" MINVALUE 0 MAXVALUE 10000000 INCREMENT BY 1 START WITH 400 NOCACHE ORDER NOCYCLE ;
jar파일 준비
- ojdbc6.jar
https://www.oracle.com/database/technologies/jdbcdriver-ucp-downloads.html
- lombok
https://projectlombok.org/download
프로젝트 환경설정
- Configure Build path 로 jar파일 연결
- 톰캣 서버 포트번호 이상 등 체크 (8080이 겹쳐서 8000으로 수정)
- xml 환경설정 : pom, app-servlet, root-context 설정
...더보기
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lje</groupId>
<artifactId>myshop</artifactId>
<name>myshop</name>
<packaging>war</packaging>
<version>1.0.0-BUILD-SNAPSHOT</version>
<properties>
<java-version>1.8</java-version>
<org.springframework-version>5.1.9.RELEASE</org.springframework-version>
<org.aspectj-version>1.9.4</org.aspectj-version>
<org.slf4j-version>1.7.25</org.slf4j-version>
</properties>
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- AspectJ -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<exclusions>
<exclusion>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</exclusion>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
</exclusions>
<scope>runtime</scope>
</dependency>
<!-- @Inject -->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<!-- Servlet -->
<!-- <dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency> -->
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<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>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.1.9.RELEASE</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4 -->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
<version>1.16</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.7.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tiles/tiles-core -->
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-core</artifactId>
<version>3.0.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tiles/tiles-jsp -->
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>3.0.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tiles/tiles-servlet -->
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-servlet</artifactId>
<version>3.0.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.webjars.bower/jquery -->
<dependency>
<groupId>org.webjars.bower</groupId>
<artifactId>jquery</artifactId>
<version>3.4.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/net.coobird/thumbnailator -->
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjrt -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.9.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
<!-- json -->
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.9</version>
<configuration>
<additionalProjectnatures>
<projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
</additionalProjectnatures>
<additionalBuildcommands>
<buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
</additionalBuildcommands>
<downloadSources>true</downloadSources>
<downloadJavadocs>true</downloadJavadocs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<mainClass>org.test.int1.Main</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
servlet-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd
http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
<beans:bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
<beans:property name="definitions">
<beans:list>
<beans:value>classpath:tiles/tiles*.xml</beans:value>
</beans:list>
</beans:property>
<beans:property name="preparerFactoryClass" value="org.springframework.web.servlet.view.tiles3.SpringBeanPreparerFactory"/>
</beans:bean>
<beans:bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<beans:property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"/>
<beans:property name="order" value="1" />
</beans:bean>
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
<beans:property name="order" value="2" />
</beans:bean>
<context:component-scan base-package="com.lje.myshop" />
<interceptors>
<interceptor>
<mapping path="/*/*.do"/>
<mapping path="/*/*/*.do"/>
<beans:bean class="com.lje.myshop.interceptor.ViewNameInterceptor" />
</interceptor>
</interceptors>
<beans:bean id="multipartResoulver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver">
</beans:bean>
</beans:beans>
root-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy" />
<property name="url" value="jdbc:log4jdbc:oracle:thin:@localhost:1521:XE"/>
<property name="username" value="shop"></property>
<property name="password" value="1234"></property>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:/models/modelConfig.xml" />
</bean>
<mybatis-spring:scan base-package="com.lje.myshop.mapper"/>
<context:component-scan base-package="com.lje.myshop"/>
</beans>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- The definition of the Root Spring Container shared by all Servlets
and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<multipart-config>
<location>/Users/lee/Documents/java/spring/myshop/shop</location>
<max-file-size>20971520</max-file-size>
<max-request-size>41943040</max-request-size>
<file-size-threshold>20971520</file-size-threshold>
</multipart-config>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<filter>
<filter-name>encoding</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>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
환경설정은 마쳤습니다. 이제 기능과 디자인을 구현해야겠죠.
다음 2편으로 이어집니다.
728x90
728x90
'Project > Web' 카테고리의 다른 글
전자정부 규격 코드 검사 (일부 JS 파일 체크) (0) | 2020.10.27 |
---|---|
호스팅 후 워드프레스 admin 비밀번호 재설정 (0) | 2020.07.16 |
JavaScript 30 프로젝트 (2) JS and CSS Clock (0) | 2020.06.03 |
JavaScript 30 으로 30일간 매일 하나씩 만들어보기 (0) | 2020.01.01 |
워드프레스로 제작했던 웹사이트 (0) | 2019.10.22 |