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

 
 
 

Contributors