Skip to content

subinmun1997/2021_summer_internship

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

43 Commits
ย 
ย 

Repository files navigation

2021_summer_internship

๐Ÿข ์ฃผ์‹ํšŒ์‚ฌ GEOPLAN
๐Ÿ“… ๊ธฐ๊ฐ„ : 2021.07.01 ~ 2021.08.31
โณ AM 09:30 ~ PM 18:30
๐Ÿ“๋ฐฐ์šฐ๊ณ  ์žˆ๋Š”๊ฒƒ... Spring Framework, Android, IoT, MariaDB, UI/UX

1์ผ์ฐจ

  • ๋ถ€์„œ ๋ฐฐ์ •/ ํšŒ์‚ฌ ์†Œ๊ฐœ ๋ฐ ํ”„๋กœ์ ํŠธ ์•„์ด๋””์–ด ์†Œ๊ฐœ
  • Google Smart Home๊ณผ Assistant๊ฐ„์˜ ๊ด€๊ณ„ ๋ฐ ๋™์ž‘์›๋ฆฌ ํŒŒ์•… (์ฐธ๊ณ )
  • AoA(Angle of Arrival), RTLS(Real Time Location System) ๊ธฐ์ˆ  ๊ณต๋ถ€(์ฐธ๊ณ )
  • Location device๋กœ ๋Œ€์ฒดํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์•„์ด๋””์–ด ์ƒ๊ฐ

2์ผ์ฐจ

  • cloud computing study
  • ์ง‘ ์™ธ๋ถ€์—์„œ ์ง‘ ์•ˆ์˜ cloud๋ฅผ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ์ง€ (๊ณ ์ •ip๋งŒ์œผ๋กœ ๋ ๊นŒ?)
  • Smart Home Study
  • ๋‹ค์Œ์ฃผ ๋ฐœํ‘œ PPT ๋งŒ๋“ค๊ธฐ

3์ผ์ฐจ

  • ๊ฐœ๋ฐœ๋ถ€์žฅ๋‹˜ ํ”ผ๋“œ๋ฐฑ
  • Hole Punching ๊ธฐ์ˆ  ๊ณต๋ถ€ (์ฐธ๊ณ )
  • Smart Home Map ๊ธฐ๋Šฅ ๊ตฌํ˜„ (Device์•ˆ์— ์ง‘ ๋„๋ฉด๊ณผ ๊ฐ€๊ตฌ ์œ„์น˜ ํฌํ•จ + ์‚ฌ์šฉ์ž์˜ ์‹ค์‹œ๊ฐ„ ๋™์„ )
  • ๊ธฐ์กด ์Œ์„ฑ ์ œ์–ด์—์„œ ์œ„์น˜ ๊ธฐ๋ฐ˜ ์ž๋™ํ™”๋กœ ๋Œ€์ฒดํ•  ๊ฒƒ์ธ๋ฐ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋ฉด ์ข‹์„์ง€
  • ๋‚ด์ผ ์—ฐ๊ตฌ์›๋‹˜ UI/UX ๊ณ„ํš ์„ค๋ช…

4์ผ์ฐจ

  • ์—ฐ๊ตฌ์›๋‹˜ UI/UX ๊ณ„ํš์•ˆ ์„ค๋ช… ๋ฐ ํ”ผ๋“œ๋ฐฑ
  • Webhook ๊ธฐ์ˆ  ๊ณต๋ถ€
  • UWB, Beacon ๊ฐœ๋… ํŒŒ์•…
  • api ์—ฐ๋™ ๊ฐœ๋ฐœ

5์ผ์ฐจ

  • SYNC, QUERY, EXECUTE, DISCONNECT intent ์‹œ JSON ์ฝ”๋“œ ๋ถ„์„
  • Google API Search
  • SmartThings ์•Œ์•„๋ณด๊ธฐ

6์ผ์ฐจ

  • SmartThings API ๊ณต๋ถ€

7์ผ์ฐจ

  • 7์ผ๊ฐ„ ์Šคํ„ฐ๋”” & ๊ฐœ๋ฐœ ๋‚ด์šฉ ๋ฐœํ‘œ ๋ฐ ํ”ผ๋“œ๋ฐฑ(๋ถ€์žฅ๋‹˜, ๋Œ€ํ‘œ๋‹˜, ๊ฐœ๋ฐœํŒ€์žฅ๋‹˜)
  • UI/UX ์ˆ˜์ •์•ˆ ํ™•์ธ
  • OAuth, SmartThings Rooms ๋ด๋ณด๊ธฐ
  • API ์—ฐ๋™ ๋ฐ DB

8์ผ์ฐจ

  • Google Open API ๊ฐ€์ ธ์™€ ํ™”๋ฉด์— ๋„์šฐ๊ธฐ
  • ๋ฐ์ดํ„ฐ DB ์ €์žฅ ๋ฐ ์—ฐ๋™
  • Spring Server ๊ฐœ๋ฐœ์— ์•ž์„œ ๊ธฐ์ดˆ์ ์ธ ๋ถ€๋ถ„ ๋‹ค์‹œ ๊ณต๋ถ€ํ•ด์˜ค๊ธฐ

9์ผ์ฐจ

10์ผ์ฐจ

  • Android UI ์ž‘์—…
  • DB ์„ค๊ณ„

11์ผ์ฐจ

  • Android UI ์ž‘์—…
  • MariDB ์„ค์น˜

12์ผ์ฐจ

  • Android UI ์ž‘์—…
  • DB Table ์„ค๊ณ„ ์ „ ์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„

13์ผ์ฐจ

  • Database ํ…Œ์ด๋ธ” ์„ค๊ณ„
  • DB ๊ฐœ๋… ๊ณต๋ถ€ํ•˜๊ธฐ

ํ”„๋กœ์ ํŠธ ์‹œ์ž‘

๐Ÿ–ฅ๏ธ Spring Code
Tool(IDE) ๊ฐœ๋ฐœ ๋‚ด์šฉ ํ‚ค์›Œ๋“œ
STS Spring jdbc๋ฅผ ์ด์šฉํ•ด์„œ mariaDB(HeidiSQL)๊ฐ’ JSon ํ˜•ํƒœ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ Spring STS gradle JDBC JSON
Android Studio STS์™€ App ์—ฐ๋™(๊ณ„ํš) .
MariaDB(HeidiSQL) table์„ค๊ณ„(์ง„ํ–‰์ค‘) ํ”„๋กœ์ ํŠธ ์š”๊ตฌ์‚ฌํ•ญ

โค๏ธํ”ผ๋“œ๋ฐฑ(DAO ์ฝ”๋“œ, Controller ์ฝ”๋“œ, @Configuration, MariaDB ์—ฐ๊ฒฐ)

1) DAO code
  • ๋‚ด ์ฝ”๋“œ
    @Component
    public class UserDao {
      
      @Autowired
      private JdbcTemplate jdbcTemplate;
      
      public Map<String, Object> getName(int seq) throws Exception {
      	String sql = "SELCET * FROM smart_home";
      	return jdbcTemplate.queryForMap(sql);
      }
    }
    
    @Autowired
        public void setDataSource(DataSource dataSource) {
          this.jdbcTemplate = new JdbcTemplate(dataSource);
        }
    
2) Controller code
  • ๋‚ด ์ฝ”๋“œ
    @Controller
    @RequiredArgsConstructor
    @RequestMapping(value="/test2")
    public class Test2Controller {
    
      @Autowired
      UserDao userdao;
      
      @RequestMapping(method={RequestMethod.GET, RequestMethod.POST})
      public @ResponseBody String isTest() {
      	
      	return "Test";
      }
      
      @RequestMapping(value="/checkNetwork", method={RequestMethod.GET, RequestMethod.POST})
      public @ResponseBody String checkNetwork() {
      	
      	return "Network Connection";
      }
    
      @RequestMapping(value="/checkUserDao", method={RequestMethod.GET, RequestMethod.POST})
      public @ResponseBody String checkNetwork() {
      	
      	return userdao.getName(0);
      }
    }
    
3) @Configuration
  • ๋‚ด ์ฝ”๋“œ
    package kr.co.geoplan.smarthome.config;
    
    import org.apache.commons.dbcp2.BasicDataSource;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.env.Environment;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    
    import lombok.AllArgsConstructor;
    
    @AllArgsConstructor
    @Configuration
    public class DBConfig {
      
      private final String DRIVER = "com.mariadb.jdbc.Driver";
      private final String URL = "geoplan.iptime.org";
      private String username = "****";
      private String password = "****";
    
      @Bean
      public DataSource dataSource() {
      	BasicDataSource dataSource = new BasicDataSource();
      	dataSource.setDriverClassName(DRIVER);
      	dataSource.setUrl(URL);
      	dataSource.setUsername(username);
      	dataSource.setPassword(password);
      	return dataSource;
      }
    }
    

JSON ํ˜•ํƒœ๋กœ ๊ฒฐ๊ณผ ์ถœ๋ ฅํ•˜๊ธฐ

Inkedjsonํ˜•์‹_LI

๐Ÿ’™ Annotation

Annotation(@)์€ ์‚ฌ์ „์  ์˜๋ฏธ๋กœ๋Š” ์ฃผ์„์ด๋ผ๋Š” ๋œป์ด๋‹ค.
์ž๋ฐ”์—์„œ Annotation์€ ์ฝ”๋“œ ์‚ฌ์ด์— ์ฃผ์„์ฒ˜๋Ÿผ ์“ฐ์ด๋ฉฐ ํŠน๋ณ„ํ•œ ์˜๋ฏธ, ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.
์ฆ‰, ํ”„๋กœ๊ทธ๋žจ์—๊ฒŒ ์ถ”๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿฅ‘ ์šฉ๋„

  • ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ ์ฝ”๋“œ ์ž‘์„ฑ ๋ฌธ๋ฒ• ์—๋Ÿฌ๋ฅผ ์ฒดํฌํ•˜๋„๋ก ์ •๋ณด๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
  • ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํˆด์ด ๋นŒ๋“œ๋‚˜ ๋ฐฐ์น˜์‹œ ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •๋ณด๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
  • ์‹คํ–‰์‹œ(๋Ÿฐํƒ€์ž„์‹œ) ํŠน์ • ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•˜๋„๋ก ์ •๋ณด๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

๐Ÿ‰ Annotation ์ข…๋ฅ˜

@ComponentScan

  • ์–ด๋…ธํ…Œ์ด์…˜ @Autowired @Bean @Repository ๊ฒ€์ƒ‰ํ•ด๋ณด๊ธฐ
  • ์˜ค๋ฅ˜ํ•ด๊ฒฐ? DAO ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ถ€๋ถ„ UserDao userdao = new UserDao() x -> ์ „์—ญ๋ณ€์ˆ˜๋กœ ๋นผ๊ณ  @Autowired ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€ UserDao userdao; ์œผ๋กœ ์ˆ˜์ •ํ•˜๋‹ˆ๊นŒ Bean ์ธ์ ์…˜ ์ž˜ ๋จ (์ฐธ๊ณ )
๐Ÿ–ฅ๏ธ Cookie & Spring Security
Tool(IDE) ๊ฐœ๋ฐœ ๋‚ด์šฉ ํ‚ค์›Œ๋“œ
Postman Cookie ์ƒ์„ฑํ•ด์„œ ๋ณด์•ˆ ์ธ์ฆ์š”์ฒญ ์—†์ด Controller ์ ‘๊ทผํ•˜๋„๋ก ํ•˜๊ธฐ Cookie Session Config Http
MariaDB(HeidiSQL) LoginController ๊ฐ’ JSON ํ˜•์‹์œผ๋กœ ์ž…๋ ฅํ•ด์„œ DB์— ๋กœ๊ทธ์ธ ์ •๋ณด ์ €์žฅํžˆ๊ธฐ Controller Postman HeidiSQL UserDTO

โค๏ธํ”ผ๋“œ๋ฐฑ(Controller ์ฝ”๋“œ, SecurityConfig ์ฝ”๋“œ, Postman Cookie)

1) Controller ์ฝ”๋“œ
  • ๋‚ด ์ฝ”๋“œ
    Map<String, Object> result = Maps.newHashMap();
      	try	{
      		LoginResult loginResult = userService.checkLogin(loginDTO);
      		
      		//๋กœ๊ทธ์ธ SUCCESS์‹œ ์„ธ์…˜์ƒ์„ฑ
      		if (loginResult == LoginResult.SUCCESS)
      		{
      			UserSessionDTO session = userService.makeSessionId(loginDTO.getEmail());
      			
      			Cookie cookie = new Cookie(Const.SESSION_KEY, session.getSessionId());
      			res.addCookie(cookie);
      		}
      		
      		//๋กœ๊ทธ์ธ SUCCESS์™ธ ๋Š” ๋กœ๊ทธ์ธ๊ฒฐ๊ณผ๋ฅผ ์ „๋‹ฌ๋งŒํ•œ๋‹ค.
      		result.put("data", loginResult);
      	}
      	catch (Exception e) {
      		e.printStackTrace();
      		result.put("error", "SERVER ERROR");
      	}
      	
      	return result;
    
2) SecurityConfig ์ฝ”๋“œ
  • ๋‚ด ์ฝ”๋“œ
    http
      .authorizeRequests()
      .antMatchers("/").permitAll()
      .antMatchers("/login/**").permitAll()
      //.antMatchers("/test/**").permitAll()
      	
      .anyRequest()
      .fullyAuthenticated();
    
3) Postman Cookie

Inkedcookie1_LI

Inkedcookie2_LI

Inkedcookie3_LI

Inkedcookie4_LI

cookie5

๐Ÿ–ฅ๏ธ Android Spring Connection
Tool(IDE) ๊ฐœ๋ฐœ ๋‚ด์šฉ ํ‚ค์›Œ๋“œ
Android Studio retrofit library ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„์—์„œ dto ์ •๋ณด ๋ถˆ๋Ÿฌ์™€ android app์— ์ถœ๋ ฅํ•˜๊ธฐ retrofit spring android
Android Studio UI์ œ์ž‘

โค๏ธํ”ผ๋“œ๋ฐฑ(android ์ฝ”๋“œ)

1) Android ์ฝ”๋“œ
  • ๋‚ด ์ฝ”๋“œ

    @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_json_test);
          tv = findViewById(R.id.tvResult1);
          b =  findViewById(R.id.button2);
          b.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  doJSONParser();
              }
          });
      }
    
    void doJSONParser() {
         LoginDTO loginInfo = getLoginInfo();
         retrofitService = RetrofitClient.getClient().create(RetrofitService.class);
    
         retrofitService.login(loginInfo).enqueue(new ResultDataCallback(this) {
    
             @Override
             public void onFailure(Call<ResultData> call, Throwable t) {
                 //int j = 0; dubug test
             }
    
             @Override
             public void onSuccess(Call<ResultData> call, Response<ResultData> response) {
                 ResultData result = response.body();
                 //assert result != null;
                 String vs = (String) result.getData();
    
                 LoginResult rs = LoginResult.valueOf(vs);
                 if(true) {
                     tv.setText(loginInfo.toString());
                 }
             }
         });
    
         //tv.setText(loginInfo.toString());
     }
    
    private LoginDTO getLoginInfo() {
        LoginDTO loginDTO = new LoginDTO();
        loginDTO.setEmail(email);
        loginDTO.setPassword(pw);
        loginDTO.setJoinType(joinType);
    
        //tv.setText(loginDTO.toString());
    
        return loginDTO;
        
    }
    
2) UI
  • ๊ธฐ๋ณธ ํ‹€

    UI

  • ์‹คํ–‰ ๊ฒฐ๊ณผ

    android

๐Ÿ’ฅ๐Ÿ’ฅ ์ฃผ์˜์‚ฌํ•ญ

  • ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ipํ™•์ธ
  • Debug ํ•˜๋ฉด์„œ ํ™•์ธํ•˜๊ธฐ!!
๐Ÿ–ฅ๏ธ Android Spring Connection & Alert DB values
Tool(IDE) ๊ฐœ๋ฐœ ๋‚ด์šฉ ํ‚ค์›Œ๋“œ
Android Studio retrofit library ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜๋Œ€๋กœ ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด DB์— ์ ‘๊ทผํ•˜์—ฌ ๊ฐ’ ๋ณ€๊ฒฝํ•˜๊ธฐ retrofit spring android
Android Studio UI์ œ์ž‘

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published