본문 바로가기
취업 준비

포트폴리오 분석 및 자료 정리

by 801lhy 2020. 7. 14.

01. 농기계 관리 웹/앱 서비스

농기계 관리 웹/앱 서비스 구성도

- 농기계 상태 분류 ( 정상/경고/위험 )


CoAP( Constrained Application Protocol )

  • 제한된 장치를 위한 특수한 인터넷 응용 프로토콜
  • "노드"(통신을 해주는 단말)라고 하는 제한된 장치가 유사한 프로토콜을 사용하여 더 넓은 인터넷과 통신할 수 있음
  • 동일한 제한 네트워크 장리, 인터넷의 장치와 일반 노드 간, 인터넷이 연결된 다른 제한 네트워크의 장치간에 사용하도록 설계되었다.
  • CoAP은 모바일 통신 네트워크의 SMS와 같은 다른 매커니즘을 통해서도 사용됨
  • 무선 센서 네트워크 노드와 같은 리소스가 제한된 인터넷 장치에 사용하기 위한 서비스 계층 프로토콜
  • 멀티캐스트 지원, 매우 낮은 오버헤드 및 단순성과 같은 특수한 요구사항 축족, 쉽게 HTTP로 변환이 가능함

 


LPWAN ( Long Range Wide Area Network )

  • LoRa 전력소모가 적고, 장거리, 다중센서 가능, 암호화의 장점이 있음
  • 저전력 광대역 네트워크 IoT 디바이스 및 포터플 디바이스의 운용성을 제공하여 IoT 기기가 무선공유기에 종속적인 문제를 해소할 수 잇음
  • 실시간 데이터 보다 특정 주기의 데이터를 전송하는 IoT 기기 및 센서등의 어플리케이션 활용에 특화되어 있음

 


DB UPSERT

- 사용상황 : coap 메세지가 왔을때 차대번호 별로 메세지가 저장되고 쌓이는게 아니라 제일 최근것으로 갱신되셨음 하셨음

값이 없으면 insert, 있으면 update

(MySQL) INSERT INTO ON DUPLICATE KEY UPDATE

INSERT INTO users (name, email)
VALUES ('young', 'young@gmail.com')
ON DUPLICATE KEY UPDATE name='lee', emaile'tezpark@tez.kr' ;

(SQLite) INSERT OR REPLACE INTO

INSERT OR REPLACE INTO caoptable(vin, coap)
VALUES("vin", "coap");

 


Retrofit

  • REST API 로 GET,POST,PUT,DELETE 등을 전달하면 서버에서 처리후 xml, json, text, rss등 여러가지 형식으로 응답을 제공받을수 있다.
  • 보통 HttpURLConnection을 많이 사용하는데 ( java.net 에 내장되어 있어 별도의 라이브러리가 필요업고 원하는 방식으로 커스텀하여 사용할 수 있다. ) 실제로 Http를 개발할려면 고려해야 하는 사항이 많음 ( 연결, 캐싱, 실패요청의 재시도, 스레딩, 응답 분석, 오류 처리 )
  • 그래서 Retrofit, OKhttp, Volley와 같은라이브러리를 사용하게 됨 ( 추가 기능 제공 )

 

장점 

  • Retrofit은 OkHttp의 상위 구현체로서 enqueue 와 excute를 사용하여 동기 비동기 처리를 지원함
  • Retrofit은 Asynctask 를 사용하지 않고 자체적으로 비동기 실행과 스레드 관리를 통해서 속도가 빠르다.
  • 인터페이스내에 어노테이션을 사용해서 HTTP 메소드를 정의하기 때문에 가독성이 좋고, 콜백함수를 통해 결과가 넘어오도록 되어 있어서 직관적인 설계가 장점이다.
  • convert를 사용하여 유지보수에 편리
  • request response설정 등 반복적인 작업을 모두 라이브러리에서 처리하도록 ( 파라미터만 넘기면 되기 때문에 작업량이 줄어듬 )

(+) Volley 는 StringRequest 생성시 파라미터 값을 encoding 해줘야하고, 통신 실패시 ErrorResponse 안에 ResponseBody 가 담기지 않는다.

 

사용법

(1) dependecy 추가

  • 보통 Retrofit 과 gson converter 라이브러리를 같이 등록한다.
  • gson converter 라이브러리를 추가하면 response의 결과를 원하는 객체로 변환하여 받을 수 있음

(2) interface HTTP API 기술

import retrofit2.Call;
import retrofit2.http.GET;

public interface TestService {

    // 인터페이스의 구현체에서 BaseURL을 작성하기 때문에
    // 서버의 자원위치를 나타내는 url만 입력
	@GET("/api/users/2")      
    Call<Object> getTest();
}
  • retrofit이 interface에 기술된 명세를 바탕으로 Http API로 변환해주고, 반환 타임은 Call<원하는 객체 타입>의 형태로 기술
  • 어노테이션을 사용해서 GET, POST, DELETE, PUT 요청을 지정할 수 있음

(3) 인터페이스 구현

public class RetrofitClient {
	private static final String BASE_URL = "https://reqres.in/";
    // Open RESTAPI Test 서버
    
    // getInstance()메소드를 통해 생성한 Retrofit Clien
    // HTTP 명세가 담긴 Interface 구현체를 생성한 뒤 반환
    public static TestService getApiService() {
    	return getInstance().create(TestService.class);
    }
    
    // Gson 객체 생성 Json응답을 객체로 변환하기
    private static Retrofit getInstance(){
    	Gson gson = new GsonBuilder()
        		.setLenient()
                .create();
                
        // GsonConvertor 설정을 통해 REtrofit 객체 생성        
        return new Retrofit.Builder()
        		.baseUrl(BASE_URL)
                .addConvertoerFactory(GsonConverterFactory.create(gson))
                .build();
        }
 }

(4) 결과값 받기 ( 동기 호출 )

public class MainTest{
	public static void main(String[] args){
    	Call<Object> getTest = RetrofitClient.getApiService().getTest();
        try {
        	System.out.println(getTest.execute().body());
        } catch (IOException e) {
        	e.printStackTrace();
        }
	}
}

HTTP Interfacedp getTest() 메소듸의 결과값을 Call<Object>로 지정했기 때문에, Call<Object>로 결과값을 받아주고 getTest의 excuete() 메소드를 호출하여 요청 전송을 수행한다.


네이티브 앱 / 웹 앱 / 하이브리드앱의 차이점

  • 네이티브 앱 : 앱 실행속도가 빠르고, 운영체제 내부의 고유정보 변경가능(주소록, 파일), 센서제어를 통한 카메라 플래시 이용가능
  • 웹 앱 : 모바일 웹 + 네이티브앱, 단말기 기종 관계없이 사용, 웹 언어로 개발해서 비용저렴하지만 통신 환경에 따라 접속장애 발생, 기기의 센서제어 어려움, API 사용의 어려움
  • 하이브리드 앱 : 내부는 웹 앱, 외부를 네이트브 앱으로, 주요 화면 부분은 웹앱의 특성을 살려서 구현, 네이티브 앱의 특성을 살려 하드웨어 접근이 가능하도록 만들어진 형태, 배포후에 웹만 연결되어 있음 수정/보완이 가능하고, 하나의 소스로 안드로이드 IOS에 맞게 전환이 가능, 별도의 하이브리드 앱 프레임 워크가 필요함

02. 전원 장치를 위한 기본관리 앱

(주)코아로직에 PRManager 라는 지능형전원제어장치(NPCU : Network P)를 관리/제어 하는 Window 기반 프로그램이 있었고, 지능형전원제어장치(NPCU) 를 통합관리할수 있는 웹서비스, 현장 점검을 위한 App을 개발하는것이 요구사항이었다.

( 대표 기능 )

  • IP/포트번호/장치식별자를 통해서 장비에 접속
  • 각 상황에 따른 이벤트 UI 설계
  • 주어진 프로토콜 문서를 참고하고, 상황에 맞는 입력값 제어, UI 컨트롤 구현 ( Toast, radio button ... ), 상태값 표시

( 어려웠던 점 )  : 개발을 하고나서 검토요청 할때 구현한것과 맞지않는 프로토콜을 발견해서 추가 수정사항이 생기거나, 추가 프로토콜 요청에 의해서 추가 구현사항이 발생했을 때

( 기술적 특징 ) : 싱글톤 패턴을 사용하여 연결정보를 유지 / UI 관련 작업 스레드와 네트워크 작업 스레드의 분리

안드로이드의 Thread

  • 안드로이드는 크게 두가지의 Thread로 분류되는데 Main Thread(UI Thread) 와 Worker Thread로 분리된다.
  • Main Thread는 액티비티와 컴포넌트의 사용을 담당하고 연동하는 역할을 한다. System Call-Back Method 와 LifeCycle과 관련된 메소드는 반드시 MainThread에서 관리해야 한다.
  • ANR(Application Not Responding) : 다른 작업에 의해 Main Thread와 UI 가 동기화되지 못하고 지연되는 경우 발생하는 오류
  • ANR 문제를 해결하기 위해 UI 관련 작업이나 비동기 작업(애니메이션), 데이터베이스 처리(high cost) 는 Thread를 따로 만들어 처리하도록 한다.

AsyncTask

UI 관련 컴포넌트를 업데이트 할때 ( 애니메이션과 같은 비동기 작업을 진행하면서 UI를 수정해야 할때 ) 사용

UI Thread와 Handler 의 처리를 위한 Helper Class 및 추상클래스 ( 긴 백그라운드 작업시에는 적합하지 않음 )로써, background 값에서 계산된 결과값을 UI thread에 넘길때 사용

  • onPreExecute( ) : 백그라운드에서 실행하기전 사전 작업 정의
  • doInBackground( ) : 백그라운드에서 수행할 작업, UI Thread
  • onProgressUpdate( ) : doInBackground의 진행상황을 publishProgress()라는 메소들르 통해 OnProgressUpdate 에서 value를 리턴받아 진행상태를 표시할 수 잇음
  • onPostExcute( ) : 백그라운드 작업이 끝난후 동작해야 할 내용을 입력해 준다. 보통 백그라운드에서 수행한 결과물을 패킹 or 이벤트를 날려줌

(+) AsynTask의 취소 : cancel(boolean)을 통해 취소가 되고, 취소시 onPostExcute가 호출되는것이 아니라 oncancelled가 호출됨

 

싱글톤 패턴을 사용한 객체 연결정보 유지

  • 싱글톤 패턴 : 클래스가 최초 한번만 메모리를 할당하고 그 메모리에 인스턴스를 만들어 사용함
  • 생성자가 여러번 호출되더라도 실제로 생성되는 객체는 하나, 최초생성 이후 호출된 생성자는 최초 생성한 객체 반환 즉 하나의 인스턴스를 생성해 사용하는 패턴 ( 하나의 소켓정보를 그대로 유지 했다 )

03. 딥러닝 기반의 키워드 분석 및 시각화 웹 서비스

키워드 기반 검색을 통해 원하는 플랫폼의 데이터를 대량으로 수집하여 분석한 시각화 데이터를 제공하고, 수집한 데이터의 긍-부정을 판단하는 감성분석, 악성 명예 훼손을 유무를 판단하는 서비스 제공

( 사용한 기술 )

1) 데이터 크롤링

  • Selenium : 웹 자동제어 패키지
  • Beautifulsoup : 웹 데이터 크롤링 및 스크래핑 할떄 사용하는 python 라이브러리
  • 검색 API 사용

2) 모델 학습

  • KonLpy : 학습 시킬 데이터의 문장에 대한 품사 태킹 ( 형태소 분석 )
  • bow 인코딩 사용
  • 신경망 모델 : 64개의 은닉층을 가진 Dense Layer 2개, 1개의 출력층
  • Chart.js / HTML2canvas : 수치를 차트 및 그래프로 표현하고 PDF 로 저장하는 기능 구현

( 모델링 과정 ) 파이썬 웹 크롤링 > 형태소 분리/품사 태깅 > bow인코딩을 사용한 countvectorizaion 수행 > modeling

 bow  ( bag of words) 인코딩을 사용한 이유

one-hot 인코딩이 대중적으로 단어를 학습시킬때 많이 사용하는 방식 ( 단어를 벡터화 시키고 학습 ) 이지만 N개의 단어를 N차원의 벡터로 표현하기 때문에 단어의 갯수가 많아 질수록 어느 시점부터 표현해야할 차원이 많아지면서 성능이 떨어짐

bow 인코딩을 사용해 (각 단어 토큰의 등장횟수를 기록한 벡터 사용) 적은메모리와 적은 시간으로도 학습을 시킬수 있고, 단어의 갯수와 비례하게 정확도를 확보할 수 있도록 함.

대신 단어의 어순을 파악하기 힘든것과, 작은 데이터가 전체의 결과에 영향을 줄 수 있음


4. 레시피 공유 웹 페이지

MVC 패턴 JSP 기반의 웹 페이지 제작, 레시피 페이지 기능 구현

( 특징 )

  • Oracle DB, Connection Pool 설정을 통한 속도 향상
  • DAO 클래스 사용한 SQL 실해
  • JavaBean 클래스 Set/Get 메소드를 통한 데이터 처리
  • HTML, CSS 뷰
  • Session 객체를 사용한 로그인 세션 처리
  • JSTL <c:if> 태그를 사용한 사용자 관리자 페이지 구분
  • JavaScript를 활용한 페이징 처리, JQuery를 사용한 입력양식 유효성 검사

 DBCP ( Database Connection Pool )

- 일반적인 DB 데이터 처리 과정 ( HTTP request에 따른 Thread 생성과 데이터 획득 )

JDBC 드라이버 로드 > DB Conneciton 객체 생성 > 쿼리 수행을 위한 PreparedStatement 객체 > executeQuery수행 > 결과 ResultSet에 받아서 데이터처리 > 리소스 close

- 위의 단계를 거치지 않는 방법 Conncetion Pool 라이브러리 사용

( 커넥션 풀 사용 과정 )

  • WAS 일정량의 미리 DB Connection 객체를 만들고 Pool 이라는 공간에 저장하고
  • request 에 따라서 필요할때 Pool에서 Connetion 객체를 가져다가 쓰고 반환
  • 이런 방식으로 요청마다 DB 드라이버 로드하고 물리적 연결을 위한 비용을 줄여줌

MVC 패턴

: 비지니스 처리 로직과 사용자 인터페이스 요소를 분리 시켜 서로 영향없이 갭발하는 방법론

 


5. R을 활용한 Wine data 분석

 R 을 활용한 Wine Data 분석, 분석한 데이터를 통해 와인 등급을 예측하는 모델

( 특징 )

  • 데이터 전처리 ( 데이터 변수 라벨링), 타겟 변수의 factor 처리, 범주형 데이터로 표현
  • 와인 종류를 구분하기 위한 속성 추가, red wine과 white 데이터 병합
  • 전처리 데이터 DB 저장
  • ggplot 그래프를 활용한 와인 성분의 연관성 파악
  • SVM 모델링 ( 와인데이터를 하급/중급/상급으로 분류 )

SVM 모델

2019/07/25 - [R을 활용한 데이터 분석] - 서포터 벡터 머신(SVM) 발표자료

 

서포터 벡터 머신(SVM) 발표자료

참고 포스팅 / 참고자료 / 사진출처 : https://m.blog.naver.com/PostView.nhn?blogId=tjdudwo93&logNo=221051481147&proxyReferer=https%3A%2F%2Fwww.google.com%2F SVM(Suppot Vector Machine)으로 분류(Classi..

hyunyt.tistory.com


6. 화장품 이미지 분류

키워드 기반 검색을 통해 우너하는 플랫폼의 데이터 수집/분석/시각화 서비스 제공, 감성분석, 욕설분석

  • CNN 을 사용한 이미지 학습 과 분류 모델
  • 웹 크롤링후 데이터 전처리 ( 이미지 크기 일괄 수정, 이미지 벡터화, 제품별 라벨링 )
  • 계층, 필터수, 커널, 활성화 함수, 경계처리, 학습과정, 손실함수 등 파라미터 설정
  • ImageDataGenerator 를 사용한 학습데이터 추가생성 ( 사진의 회전 각도, 상하이동 비율, 확대축소 비율 등을 조정)

( 어려웠던 점 ) : 제품의 정면사진 위주로 인한 데이터 과적합 문제

CNN 모델

  • 입력한 데이터로 부터 특징을 추출해서 분류하는 모델
  • CNN은 Convolution Pooling을 반복적으로 사용하면서 불변하는 특징을 찾고, 그 특징을 입력데이터로 Fully-connected 신경망에 보내 Classification을 수행하는 모델

(1) 특징 추출 단계

  • Convolution Layer : filter 를 사용해서 이미지의 feature을 뽑아서 학습시킴 ( Convolution )
  • Pooling Layer : 이미지의 크기를 줄이고 특정 feature를 강조하는 역할 ( CNN 에서 주로 Max Pooling 사용 )

(+) channel : 흑백이 일경우에는 channel 을 1로 설정하고, 컬러이미지일 경우 3개의 채널(RGB) 값을 사용한다. ( Multi Channel CNN의 경우에 input Data의 channel 수와 filter 의 channel수가 같아야함 )

(+)padding 을 통해 입력데이터가 filter을 통해서 출력데이터가 작아지는것을 방지함 ( zero padding )

(2) 이미지 분류 단계

  • Flatten Layer : 데이터 타입을 FC 네트원크 형태로 변경, 입력데이터의 shape 변경 수행
  • softmax Layer : 분류 수행

(어려웠던 점) : 데이터를 학습시킬때 제품의 정면사진 위주로 인한 데이터 과적합 문제와, 화장품 용기의 특이점이 없어서 분류 시키기가 어려웠던거 같다.

7. 설계 프로젝트

 클라우드 및 IOT 기반의 상호 작용형 지능식물 재배 시스템

 


신호등을 이용한 교통흐름 시스템


참고자료 & 블로그

https://woovictory.github.io/2019/01/03/Android-What-is-retrofit/

 

[안드로이드] Retrofit

안드로이드 통신 라이브러리 요약 저는 안드로이드 앱을 개발하면 서버와 통신을 하기 위해서 편리한 방법인 Retrofit은 사용했다. 하지만 이러한 편리함을 알기 전에 왜 이렇게 편리하게 사용하�

woovictory.github.io

https://thdev.tech/androiddev/2016/11/13/Android-Retrofit-Intro/

 

Android HTTP 통신을 위한 Retrofit 사용하기 |

I’m an Android Developer.

thdev.tech

https://galid1.tistory.com/617

 

Java - Retrofit이란? (retrofit 사용법 자세한 설명)

1. Retrofit이란 BackEnd 또는 FrontEnd 를 개발하다보면 거의 필수적으로, 다른 서버에 데이터를 요청할 일이 생기게 됩니다. 특히나 FrontEnd 의 경우에는 서버로부터 데이터를 받아와 출력하는 경우가 �

galid1.tistory.com

https://teddylee777.github.io/android/Android-AsyncTask

 

안드로이드(Android) - AsyncTask

Android 개발을 하다보면 자주 보이지만, 아직 익숙하지는 않은 내용들을 다룰 다소 생소하고 어렵다고 생각하고 깊게 파보지 못한 내용을 선정해 한 번 파볼 예정입니다. 이번 주제는 AsyncTask입니

teddylee777.github.io

https://www.crocus.co.kr/1651

 

Android AsyncTask 동작 원리

AsyncTask는 백그라운드 작업을 하는데 Worker thread와 UI thread를 서로 분리하여 코드를 관리하지 않고 해당 클래스 내부에서 쉽게 다룰 수 있게 도와주는 추상 클래스이다. 이 AsyncTask를 사용하기 위��

www.crocus.co.kr

https://gruuuuu.github.io/machine-learning/cnn-doc/#

 

호다닥 공부해보는 CNN(Convolutional Neural Networks)

CNN?CNN은 이미지를 인식하기위해 패턴을 찾는데 특히 유용합니다. 데이터에서 직접 학습하고 패턴을 사용해 이미지를 분류합니다. 즉, 특징을 수동으로 추출할 필요가 없습니다.이러한 장점때문

gruuuuu.github.io

 

'취업 준비' 카테고리의 다른 글

면접리뷰 - web개발 Front/Back end_ 2019년7월10일  (0) 2020.07.11
참고  (0) 2020.07.08