diff --git a/src/main/java/com/example/demo/DemoApplication.java b/src/main/java/com/example/demo/DemoApplication.java
index 82e42ecd06a73f43be92db790e2e607fe7dceaff..2dfef3270ea5514c8d1d68a96d5accea07c10a22 100644
--- a/src/main/java/com/example/demo/DemoApplication.java
+++ b/src/main/java/com/example/demo/DemoApplication.java
@@ -1,16 +1,45 @@
 package com.example.demo;
 
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.domain.EntityScan;
+import org.springframework.context.ApplicationContext;
+import java.util.Arrays;
+import com.example.demo.entity.Item;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.mybatis.spring.SqlSessionFactoryBean;
+import org.springframework.context.annotation.Bean;
+import javax.sql.DataSource;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.core.io.Resource;
 
 @RestController
 @SpringBootApplication
-public class DemoApplication {
+// @EntityScan(basePackageClasses = {Item.class})
+public class DemoApplication{// implements CommandLineRunner{
+
+    // @Autowired
+    // private ApplicationContext appContext;
+
+    public static void main(String[] args) {
+        SpringApplication.run(DemoApplication.class, args);
+    }
 
-	public static void main(String[] args) {
-		SpringApplication.run(DemoApplication.class, args);
-	}
  
+    @Bean
+    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
+        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
+        sessionFactory.setDataSource(dataSource);
+        
+        Resource[] res = new PathMatchingResourcePatternResolver().getResources("mappers/UserMapper.xml");
+        sessionFactory.setMapperLocations(res);
+        
+        return sessionFactory.getObject();
+    }
+
 }
+
diff --git a/src/main/java/com/example/demo/controller/UserController.java b/src/main/java/com/example/demo/controller/UserController.java
new file mode 100644
index 0000000000000000000000000000000000000000..8d3c0b94f3c1a7787c9bbf31c3efd6161ab5e329
--- /dev/null
+++ b/src/main/java/com/example/demo/controller/UserController.java
@@ -0,0 +1,27 @@
+package com.example.demo.controller;
+
+import java.util.List;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.example.demo.dao.UserDAO;
+import com.example.demo.dto.UserDTO;
+
+@RestController
+@MapperScan(basePackages="com.example.demo.dao")//탐색할 패키시 설정
+public class UserController {
+    @Autowired
+    private UserDAO userDAO;//UserDAO bean을 자동으로 주입
+    
+    @RequestMapping("/users")
+    public List<UserDTO> users(@RequestParam(value="country", defaultValue = "")String country) throws Exception { //query String으로 country를 받도록 설정
+        final UserDTO param = new UserDTO(0, null, country);
+        final List<UserDTO> userList = userDAO.selectUsers(param);
+        return userList;
+    }
+
+}
diff --git a/src/main/java/com/example/demo/dao/UserDAO.java b/src/main/java/com/example/demo/dao/UserDAO.java
new file mode 100644
index 0000000000000000000000000000000000000000..dd01d3440d35de13895007fdafed1ea46941ab16
--- /dev/null
+++ b/src/main/java/com/example/demo/dao/UserDAO.java
@@ -0,0 +1,9 @@
+package com.example.demo.dao;
+
+import java.util.List;
+import com.example.demo.dto.UserDTO;
+
+public interface UserDAO {
+    List<UserDTO> selectUsers(UserDTO param) throws Exception;
+}
+
diff --git a/src/main/java/com/example/demo/dto/UserDTO.java b/src/main/java/com/example/demo/dto/UserDTO.java
new file mode 100644
index 0000000000000000000000000000000000000000..4fc23cfeea4254c778e8832e1bb673f14b94c0ba
--- /dev/null
+++ b/src/main/java/com/example/demo/dto/UserDTO.java
@@ -0,0 +1,14 @@
+package com.example.demo.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+
+@AllArgsConstructor // 자동으로 모든 매개변수를 받는 생성자를 생성
+@Getter // Getter 생성
+@Setter // Setter 생성
+public class UserDTO {
+    private int seq;
+    private String name;
+    private String country;
+}
diff --git a/src/main/resources/mappers/UserMapper.xml b/src/main/resources/mappers/UserMapper.xml
new file mode 100644
index 0000000000000000000000000000000000000000..28faba55b1a0ae2a2ee4ebe0db0ecc9d974561ce
--- /dev/null
+++ b/src/main/resources/mappers/UserMapper.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+ "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.example.demo.dao.UserDAO"><!--namespace를 통해 UserDAO와 연결합니다. -->
+        
+  <select id="selectUsers" parameterType="com.example.demo.dto.UserDTO"
+resultType="com.example.demo.dto.UserDTO">
+    SELECT `seq`, `name`, `country`  FROM lab03
+    <if test='country != null and country != ""'>
+        WHERE country = #{country}
+    </if>
+  </select>
+
+</mapper>