미러 트레이딩의 단점

마지막 업데이트: 2022년 3월 7일 | 0개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기
알나롱/Shutterstock.com

1. 음성 인식 STT 전송

그 문제점을 해결하고자 스마트 폰의 앱에서 미러 대신 음성인식(Google Speech API, STT(Speech To Text) 여기서는 시간 리밋 제한이 없습니다.)을 받아 스마트 미러의 웹 서버로 명령어를 전송하는 것입니다. 웹 서버로 전송하기 위해서 미러 쪽에서는 Express를 이용한 웹 서버 에서 GET 으로 통신을 받아야 하며, 앱 단에서는 STT 를 통해 인식 받은 Text를 비동기식 AsyncTask의 HttpURLConnection 으로 연결해 값을 전송해야 합니다. 이후에 다시 언급하도록 하겠습니다.

2. 스마트 폰 Notification 전송(전화,문자,메일,카카오톡,페이스북 알림)

Android에서는 NotificationListenerService 를 통해, 각종 알림의 패키지 정보와 제목과 내용 을 알아낼 수 있습니다. 이를 테면 카톡에서는 보낸 사용자는 누구이며, 내용은 어떠하고, 또한 사용자의 프로필 이미지도 알아 낼 수 있죠. 그러한 정보를 스마트 미러로 보내어, 알림 받는 기능을 구현한 것입니다. 이 또한 미러에서는 GET 으로 데이터를 받으며, 앱에서는 HttpURLConnection 으로 데이터를 전송합니다.

인트로 화면 Splash

Facebook 로그인 화면

유저 정보 화면

앱의 IP설정화면
(스마트 미러IP동일 요구)

음성 인식 화면 부분(STT)
(미러 전송하는 기능)

개발자 정보 화면

actionbarsherlock

slidingmenu_library

위의 import된 두 개의 패키지는 슬라이딩 메뉴를 위한 것입니다.

facebook

facebook api의 LoginButton 및 페이스북 프로필 미러 트레이딩의 단점 정보를 가져오기 위해 사용하였습니다.

AndroidManifest.xml

/* 핸드폰 정보 읽어오는 퍼미션*/

/* 사용자 정보 읽어오는 퍼미션*/

/* 음성 인식을 위한 permission*/

android :allowBackup= "true"

android :icon= "@drawable/smartmirroricon"

android :label= "@string/app_name"

android :supportsRtl= "true"

android :theme= "@style/AppTheme" >

android :name= "com.facebook.sdk.ApplicationId"

android :value= "@string/facebook_app_id" /> // 페이스북 앱 개발 승인 받은 KEY를 넣어주세요

android :name= ".SplashActivity"

android :label= "@string/app_name"

android :theme= "@style/Theme.Sherlock.NoActionBar" >

android :name= ".LoginActivity"

android :label= "@string/app_name"

android :theme= "@style/Theme.Sherlock.NoActionBar" />

android :name= ".MainActivity"

android :label= "@string/app_name" >

android :name= ".NotiListenService"

android :enabled= "true"

android :exported= "true"

android :permission= "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE" >

SplashActivity.java

SharedPreference 환경 변수를 사용해 페이스북 로그인을 했는지 아닌지를 분별합니다.

로그인을 안했다면 LoginActivity, 로그인을 했다면 MainActivity로 이동합니다.

SPLASH_DISPLAY_LENGTH의 2000은 2초를 의미하며, 시간을 조정하실 수 있습니다.

public class SplashActivity extends Activity

/** Duration of wait **/

private final int SPLASH_DISPLAY_LENGTH = 2000 ;

/** Called when the activity is first created. */

public void onCreate(Bundle bundle)

new Handler().postDelayed( new Runnable()

public void run()

/** SharedPreference 환경 변수 사용 **/

SharedPreferences prefs = getSharedPreferences( "login" , 0 ) ;

/** prefs.getString() return값이 null이라면 2번째 함수를 대입한다. **/

String facebook_login = prefs.getString( "FACEBOOK_LOGIN" , "LOGOUT" ) ;

Log.d( "FACEBOOK_LOGIN. " , facebook_login) ;

/** 환경 변수 중 로그인 부분을 체킹하여 Activity 전환 */

if (facebook_login.equals( "LOGIN" ))

Intent mainIntent = new Intent(SplashActivity. this , MainActivity. class ) ;

SplashActivity. this .startActivity(mainIntent) ;

SplashActivity. this .finish() ;

else if (facebook_login.equals( "LOGOUT" ))

Intent loginIntent = new Intent(SplashActivity. this , LoginActivity. class ) ;

SplashActivity. this .startActivity(loginIntent) ;

SplashActivity. this .finish() ;

LoginActivity.java

페이스북 로그인 버튼을 만들어, 페이스북 로그인을 구현하였습니다.

자세한 사항은 페이스북 개발 Doc을 참고하시면 이해가 가실 것입니다.

사용자 디바이스 핸드폰 정보를 가져와 핸드폰 번호를 알 수 있으며,

사용자 핸드폰의 동기화된 구글 메일 주소도 가져올 수 있습니다.

자체 가입 기능을 만드신다면 참고해주세요 :D

public class LoginActivity extends Activity

private CallbackManager mCallbackManger ;

protected void onCreate(Bundle savedInstanceState)

FacebookSdk. sdkInitialize (getApplicationContext()) ;

mCallbackManger = CallbackManager.Factory. create () ;

LoginButton loginButton = (LoginButton) findViewById (R.id. login_button ) ;

loginButton.registerCallback( mCallbackManger , new FacebookCallback()

public void onSuccess(LoginResult loginResult)

AccessToken. setCurrentAccessToken (loginResult.getAccessToken()) ;

profile = Profile. getCurrentProfile () ;

String userId = profile .getId() ;

String user_name = profile .getName() ;

/* 사용 디바이스 핸드폰 번호 알아오기*/

TelephonyManager systemService = (TelephonyManager)getSystemService(Context. TELEPHONY_SERVICE ) ;

String user_phone = systemService.getLine1Number() ;

user_phone = user_phone.substring(user_phone.length() - 10 , user_phone.length()) ;

user_phone = "0" + user_phone ;

/* 안드로이드 기기 구글 동기화 이메일 주소 가져오기 */

Pattern emailPattern = Patterns. EMAIL_ADDRESS ;

AccountManager am = (AccountManager)getSystemService(Context. ACCOUNT_SERVICE ) ;

Account[] accounts = am.getAccounts() ;

for (Account account : accounts)

if (emailPattern.matcher(account. name ).matches())

user_email = account. name ;

/** SharedPreferences로 Facbook 정보 저장*/

/* 로그인될 시 세션을 유지하기 위해 환경 변수에 facebook login session 관리를 저장한다. */

SharedPreferences prefs = getSharedPreferences( "login" , 0 ) ;

SharedPreferences.Editor editor = prefs.edit() ;

editor.putString( "FACEBOOK_LOGIN" , "LOGIN" ) ;

/* 페이스 북 로그인이 처음이라면 SharedPreferences와 DB에 저장해야 한다.*/

String facebookFirstLogin = prefs.getString( "FACEBOOK_FIRST_LOGIN" , "TRUE" ) ;

Log. d ( "Facebook . " , "First Login ? " + facebookFirstLogin) ;

if (facebookFirstLogin.equals( "TRUE" ))

editor.putString( "FACEBOOK_FIRST_LOGIN" , "FALSE" ) ;

editor.putString( "USER_ID" , userId) ;

editor.putString( "USER_NAME" , user_name) ;

editor.putString( "USER_PASSWORD" , user_password) ;

editor.putString( "USER_PHONE" , user_phone) ;

editor.putString( "USER_EMAIL" , user_email) ;

Log. d ( "FaceBook . " , "id : " + userId) ;

Log. d ( "FaceBook . " , "name : " + user_name) ;

Log. d ( "FaceBook . " , "phone : " + user_phone) ;

Log. d ( "FaceBook . " , "email : " + user_email) ;

Intent mainIntent = new Intent(LoginActivity. this , MainActivity. class ) ;

public void onCancel()

Toast. makeText (LoginActivity. this , "페이스북 로그인이 취소 되었습니다." , Toast. LENGTH_SHORT ).show() ;

public void onError(FacebookException error)

Toast. makeText (LoginActivity. this , "페이스북 로그인이 취소 되었습니다." , Toast. LENGTH_SHORT ).show() ;

public void onActivityResult( int requestCode , int resultCode , Intent data)

super .onActivityResult(requestCode , resultCode , data) ;

mCallbackManger .onActivityResult(requestCode , resultCode , data) ;

NotiListenService.java

핵심 기능 중에 한 부분으로서, 스마트 미러로 Notification 알림을 전송하는 부분입니다.

사용자가 앱에 설정해놓은 ip주소를 통해 데이터를 보내며,

여기서의 데이터는 알람으로 온 앱에 대한 패키지 이름과, 제목, 내용입니다. 문자열이며

앱 단에서 메일, 전화, 문자, 카카오톡, 페이스북 패키지 이름과 비교하여, 해당하는 것만 전송합니다.

HttpURLConnection을 이용해 스마트 미러로 GET통신을 이용해 전송합니다.

public class NotiListenService extends NotificationListenerService

private String smartmirror_ip ; // 스마트 미러의 할당받은 ip 주소

private SharedPreferences prefs ;

public void onNotificationPosted(StatusBarNotification sbn)

* 보안 / 알림 액세스 / 알림 설정해야함!

Notification noti = sbn.getNotification() ;

Bundle bundle = noti. extras ;

prefs = getSharedPreferences( "login" , 0 ) ;

smartmirror_ip = prefs .getString( "SMARTMIRROR_IP" , "0.0.0.0" ) ;

Log. d ( "smartmirror IP : " , smartmirror_ip ) ;

int icon = bundle.getInt(Notification.EXTRA_SMALL_ICON);

Bitmap notificationLargeIcon = ((Bitmap) bundle.getParcelable(Notification.EXTRA_LARGE_ICON));

* strPacakge : 패캐지 이름

* title : 이름, 사용자, 전화번호 등.

String strPackage = sbn.getPackageName() ;

String title = bundle.getString(Notification. EXTRA_TITLE ) ;

CharSequence text = bundle.getCharSequence(Notification. EXTRA_TEXT ) ;

if (title == null ) title = "" ;

if (text == null ) text = "" ;

Log. d ( "[noti] get :" , "package : " +strPackage+ " // title : " +title+ " // text : " +text) ;

/* 페이스북, 구글 메일, 카카오톡, 전화, 문자 패키지만 라즈베리파이 알림으로 전송 */

if (strPackage.equals( "com.facebook.orca" ) || strPackage.equals( "com.facebook.katana" ) || strPackage.equals( "com.android.mms" )

|| strPackage.equals( "com.kakao.talk" ) || strPackage.equals( "com.google.android.gm" ) || strPackage.equals( "com.lge.ltecall" ))

/** 라즈베리 파이2 전송하는 부분 */

String enPackage = URLEncoder. encode (strPackage , "UTF-8" ) ;

String enTitle = URLEncoder. encode (title , "UTF-8" ) ;

String enText = URLEncoder. encode (text.toString() , "UTF-8" ) ;

/* 라즈베리 파이 IP : 9090 (port) */

String urlRasp = "http://" + smartmirror_ip + ":9090/noti.do?package font-size: 10.6667px; font-family: 'Malgun Gothic'; vertical-align: baseline; white-space: pre-wrap;">+ enPackage + "&title font-size: 10.6667px; font-family: 'Malgun Gothic'; vertical-align: baseline; white-space: pre-wrap;">+ enTitle + "&text font-size: 10.6667px; font-family: 'Malgun Gothic'; vertical-align: baseline; white-space: pre-wrap;">+ enText ;

Log. d ( "smartmirror url : " , urlRasp) ;

URL url = new URL(urlRasp) ;

HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection() ;

BufferedReader br = new BufferedReader( new InputStreamReader(urlConnection.getInputStream())) ;

String response = null ;

if (response == null ) break ;

Log. d ( "[noti] 미러 트레이딩의 단점 response :" , response) ;

> catch (Exception e)

public void onNotificationRemoved(StatusBarNotification sbn)

MainActivity.java

메인 액티비티에서는 전반적인 슬라이딩 메뉴에 대한 구성을 만들어
각각의 메뉴에 대한 Fragment를 호출하는 부분입니다.

public class MainActivity extends SherlockFragmentActivity

private DrawerLayout mDrawerLayout ;

private ListView mDrawerList ;

private ActionBarDrawerToggle mDrawerToggle ;

// nav drawer title

private CharSequence mDrawerTitle ;

// used to store app title

private CharSequence mTitle ;

// slide menu items

private String[] navMenuTitles ;

private TypedArray navMenuIcons ;

private ArrayList navDrawerItems ;

private NavDrawerListAdapter adapter ;

protected void onCreate(Bundle savedInstanceState)

FacebookSdk. sdkInitialize (getApplicationContext()) ;

mTitle = mDrawerTitle = getTitle() ;

// load slide menu items

navMenuTitles = getResources().getStringArray(R.array. nav_drawer_items ) ;

// nav drawer icons from resources

mDrawerLayout = (DrawerLayout) findViewById(R.id. drawer_layout ) ;

mDrawerList = (ListView) findViewById(R.id. list_slidermenu ) ;

navDrawerItems = new ArrayList() ;

// adding nav drawer items to array

navDrawerItems .add( new NavDrawerItem( navMenuTitles [ 0 ] , navMenuIcons .getResourceId( 0 , - 1 ) )) ;

navDrawerItems .add( new NavDrawerItem( navMenuTitles [ 1 ] , navMenuIcons .getResourceId( 1 , - 1 ))) ;

navDrawerItems .add( new NavDrawerItem( navMenuTitles [ 2 ] , navMenuIcons .getResourceId( 2 , - 1 ))) ;

navDrawerItems .add( new NavDrawerItem( navMenuTitles [ 3 ] , navMenuIcons .getResourceId( 3 , - 1 ))) ;

// Recycle the typed array

mDrawerList .setOnItemClickListener( new SlideMenuClickListener()) ;

// setting the nav drawer list adapter

adapter = new NavDrawerListAdapter(getApplicationContext() ,

mDrawerList .setAdapter( adapter ) ;

// enabling action bar app icon and behaving it as toggle button

ActionBar actionBar = getActionBar() ;

mDrawerToggle = new ActionBarDrawerToggle( this , mDrawerLayout ,

R.drawable. apptheme_ic_navigation_drawer , //nav menu toggle icon

R.string. app_name , // nav drawer open

R.string. app_name // nav drawer close

public void onDrawerClosed(View view)

// calling onPrepareOptionsMenu() to show action bar icons

public void onDrawerOpened(View drawerView)

// calling onPrepareOptionsMenu() to hide action bar icons

mDrawerLayout .setDrawerListener( mDrawerToggle ) ;

if (savedInstanceState == null )

// on first time display view for first nav item

private class SlideMenuClickListener implements ListView.OnItemClickListener

public void onItemClick(AdapterView parent , View view , int position ,

// display view for selected nav drawer item

/** 슬라이딩 메뉴 오픈 / 클로즈 미러 트레이딩의 단점 */

public boolean onOptionsItemSelected(MenuItem item)

FragmentTransaction ft = getSupportFragmentManager().beginTransaction() ;

case android.R.id. home :

if ( mDrawerLayout .isDrawerOpen( mDrawerList ))

mDrawerLayout .closeDrawer( mDrawerList ) ;

mDrawerLayout .openDrawer( mDrawerList ) ;

return super .onOptionsItemSelected(item) ;

* Diplaying fragment view for selected nav drawer list item

* 슬라이딩 메뉴를 프래그먼트와 연동

private void displayView( int position)

// update the main content by replacing fragments

FragmentTransaction ft = getSupportFragmentManager().beginTransaction() ;

네트워크(Packet)를 제어하는 기술 (Mirroring / Inline / Proxy)

오늘은 네트워크(Packet)를 제어하는 기술 중의 하나인 Mirroring / Inline / Proxy에 대해 말씀드리려고 합니다.

위 3가지 용어를 들어보신 분들도 계시고, 처음 접하시는 분들도 계실 것이라 생각됩니다.

위와 같은 네트워크(Packet)를 제어하는 기술들은 주로 네트워크 모니터링 솔루션, 접근통제 솔루션, 네트워크를 통한 컨텐츠 보호 솔루션, DB 보안, 방화벽, IDS(침입탐지), IPS(침입방지) 등의 네트워크를 제어하는 솔루션에서 많이 사용하는 기술입니다.

그럼, 이제부터 본격적으로 살펴보도록 하겠습니다.

위에서 말한 솔루션들은 네트워크 상에서 무언가를 제어 및 통제하기 위한 솔루션들입니다. 다시 말해, 네트워크 상의 Packet들을 가지고 조합하여 내용을 확인한 후에 제어 및 통제를 하는 솔루션들입니다.

미러링, 말 그대로 Packet을 복사하여 하나는 원래 가려던 곳에 또 하나는 제어 및 통제 미러 트레이딩의 단점 솔루션으로 받는 것입니다.

미러링은 2가지로 많이들 사용하는데요.

네트워크 장비인 스위치의 설정에 의해 스위치 포트로 들어오고 나가는 패킷들의 특정 한 포트에 미러링 시킬 수 있습니다.

제어 및 통제 솔루션은 해당 미러링 포트에서 복사된 Packet을 전달받게 됩니다.

■ 단점

스위치를 통한 미러링의 경우 스위치 자체에 부하가 심해지면, 미러링 패킷이 유실될 수 있습니다. 스위치 자체 내에서 소프트웨어적인 미러링을 하게 때문에 스위치의 부하가 심해지면 미러링보다는 스위치 본연의 임무가 더 우선시 되기 때문에 미러링은 우선순위에서 밀릴 수밖에 없습니다.

그러나, 별도의 장비(미러링 탭)가 추가되지 않는다는 점에서 스위치 미러링을 사용하는 경우도 있습니다.

남자 손바닥만 한 장비로 input 포트 1개, output 포트 2개로 (기본) 구성되어 있습니다.

스위치 미러링과 다르게 물리적(기계적)으로 복사가 이루어지기 때문에 Packet 유실률은 거의 없습니다.

■ 단점

네트워크 라인(선) 중간에 들어가야 하는 것이기 때문에 어디에 설치할지 포인트를 잘 잡아야 한다는 것입니다.

즉, 어느 위치에 설치해야 회사 내의 원하는 Packet 트래픽 또는 전체 Packet 트래픽을 모두 받아볼 수 있는지 판단해야 합니다

그럼, Packet 미러링을 통해 무엇을 할 수 있느냐?

제어 및 통제 솔루션에서는 미러링 된 패킷을 솔루션 장비의 NIC 카드에서 솔루션으로 받아야 하는데요.

이때 사용하는 것이 Packet Capture 미러 트레이딩의 단점 모듈입니다. 많은 분들이 사용하는 것으로 pcap 라이브러리(무료), PCAUSA(상용), 등의 대표 라이브러리들이 있습니다. NDIS라는 용어와도 무관하지는 않습니다, 네트워크 디바이스 드라이버 제작은 나중에 기회가 된다면 설명드리겠습니다. 최근에는 Intel에서도 Packet Capture 라이브러리가 나왔습니다.

해당 라이브러리를 통해 Packet 을 모두 받을 수도 있고, 특정 Packet만 필터링해서 받을 수도 있습니다. 이 필터링 시에 이용하는 것이 BPF (Berkeley Packet Filter)입니다. 형식은 어셈블리와 비슷하게 되어있습니다.

Packet를 솔루션으로 가져왔다면, Packet 조합과 Session 관리를 해야 합니다.

위 두 가지가 기술입니다. 즉, 네트워크 보안 솔루션들을 살펴보면 1G 처리 가능, 3G 처리 가능, 10G 처리 가능 등과 같이 이야기하는데요. 그러한 성능은 두 가지 기술에서 대부분 좌지우지됩니다.

Packet 조합과 Session 관리를 통해 원하는 정보를 뽑았다고 가정하겠습니다. 그럼, 저장만 하고 끝날 수도 있고요 (모니터링만 하는 경우) 특정 Session 을 차단하고 싶으면 어떻게 할까요?

RST 패킷 또는 FIN 패킷을 시퀀스 번호에 맞게 만들어서 목적지에 패킷을 전송합니다.

여기서도 기술이 필요합니다. 빠르게 만들어서 원래 시퀀스 번호의 패킷이 목적지에 도달하기 전에 RST 패킷 또는 FIN 패킷을 먼저 보내야 하기 때문입니다.

가까운 예로 회사에서 웹서핑을 하다 보면, 웹브라우저에 “해당 웹사이트에 접근이 차단되었습니다”라는 영어 문구가 뜰 때가 있습니다. (주)미러 트레이딩의 단점 소만사의 WebKeeper라는 제품인데요, 바로 FIN 패킷의 패이로드(데이터 영역)에 해당 문구를 넣어 보내는 것입니다. FIN 패킷에도 데이터를 넣는 것이 가능합니다.

위와 같은 방식들을 미러링 방식에서는 많이들 사용합니다.

인라인, 말 그대로 날 통해서 지나가라는 말입니다.

인라인 방식은 그림에서 보는 것과 같이 구성을 가지게 되는데요, FOD(Fail Over Device)라는 네트워크 탭 장비를 사용하게 됩니다.

FOD의 동작 방식은 그림에서 보듯 A — B 구간 사이에 FOD가 들어가게 됩니다.

FOD는 4개의 포트로 구성되는데요, 4개의 포트를 임의로 A, B, C, D로 부르겠습니다.

A, B는 보시는 것과 같이 원래 구간이고, 해당 구간의 라인을 A, B 포트에 연결합니다.

C, D는 솔루션 장비의 라인에 연결합니다.

A → C (솔루션에서 받고 분석 후) → D (패킷 전송) → B 이렇게 패킷이 진행.

B → D (솔루션에서 받고 분석 후) → C (패킷 전송) → A 이렇게 패킷이 진행.

Health Check를 통해 솔루션 또는 솔루션의 장비가 문제인 경우, FOD 장비 자체에서 C, D를 거치지 않고 바로 A — B 간 통신할 수 있도록 해줍니다.

제어 및 통제 솔루션에서는 미러링과 같은 Packet Capture 라이브러리를 통해 패킷을 가져오고, 또한 전송할 수도 있습니다.

인라인 방식은 주로 강력한 Session 차단을 위해 많이 사용합니다.

차단은 패킷을 안 보내거나 (거의 사용하지 않습니다), RST 패킷 / FIN 패킷을 만들어 원래 패킷 대신 보냅니다.

차단 방식은 미러링과 동일하나, 패킷을 가로막은 상태에서 하는 것이기 때문에 강력할 수밖에 없습니다.

인라인에서는 차단뿐만 아니라, 특정 데이터를 보이지 않게도 합니다.

즉, 마스킹이라고 하는데요, 네트워크 상에 주민등록번호가 흘러간다고 한다면,

이를 탐지하여 해당 주민번호가 있는 패킷의 데이터(패이로드) 부분에 xxxxxx-xxxxxxx 식으로 마스킹을 합니다.

인라인 방식의 한계점은 미러링 방식에 비해 처리할 수 있는 용량이 작다는 것입니다.

미러링 방식은 필터링을 통해 원하는 패킷을 걸러가면서 받아 처리할 수 있는데 반해 인라인 방식은 일단 모든 패킷을 받아야 한다는 것입니다. 필요 없으면 그냥 통과를 시키더라도 제어 및 통제 솔루션에서 처리를 해주어야 합니다.

이렇다 보니, 이 처리 용량을 늘리는 것이 기술입니다. 전용 카드를 사용하고 NIC 카드 제작 업체와 콜라보 해서 전용 FOD 카드 및 전용 솔루션 장비를 만들기도 합니다.

일명, Socket Proxy 방식이라고도 불리는데요, 네트워크 장비 없이 순수하게 프로그램만으로 구동되는 방식입니다.

프로그래머라면 Proxy 가 어떤 것인지는 다들 아실거라고 생각합니다. (HTTP Proxy, HTTPs(SSL) Proxy, SSH Proxy 등등)

Proxy를 만들어서 클라이언트에겐 내가 서버인 것처럼 나한테 접속하게 하고 서버에겐 내가 클라이언트인 것처럼 서버에 접속합니다.

왜 그렇게 할까요?

위에서 언급한 HTTPs / SSL / SSH 등은 데이터를 암호화해서 전송하게 되어 있습니다.

그래서, 미러링 / Inline으로 패킷을 받아도 해당 내용을 확인할 수 없습니다. Key가 있어야 하는데 이것은 고유 Key여서 제3자가 암호를 풀 수가 없습니다. 그렇기 때문에 Proxy를 만들어 클라이언트는 내가 서버인 줄 알고 나한테 접속하여 서로 key를 교환하고 나는 내가 클라이언트인 것처럼 서버에 접속하여 서로 key 교환을 하여 데이트를 릴레이 시켜 주는 것입니다.

그럼, 클라이언트가 어떻게 나한테 접속하게 만들까요?

Socket Injection이라는 기술을 통해 드라이버를 만든 후 미러 트레이딩의 단점 사용자 PC에 설치시킵니다.

그럼 이 드라이버에서 Socket 이 Open 할 때 후킹 하여, 실행시킨 프로그램이 웹브라우저인지, 터미널 프로그램인지, DB 접속툴인지 구분한 후 목적지의 IP 주소를 Proxy 주소로 바꾸어 줍니다.

요즘은 DB 보안 솔루션에서도 Proxy 방식을 이용하여 DB 쿼리를 제어한다든지, DB 쿼리를 결재를 한 후 수행 시킨다든지, 쿼리 응답 데이터에 개인 정보가 있으면 마스킹 처리한다든지 하는 방식을 많이들 사용합니다.

끝으로 미러링 / 인라인 방식에서 DMA라는 용어가 자주 등장합니다.

이전 설명에서 보면 솔루션 장비의 NIC 카드에서 패킷을 제어 및 통제 솔루션으로 가져오기 위해 Packet Capture 라이브러리 등을 많이 이용하는데요. 장비의 NIC 카드 버퍼 메모리에 있는 패킷을 커널 메모리에 복사한 후 솔루션의 버퍼에 가져오게 됩니다.

즉, NIC 카드 버퍼 (패킷) => 커널 메모리 (패킷) => 솔루션 버퍼 (패킷) 이렇게 동일 패킷에 대하여 몇 번의 복사가 발생되게 됩니다.

OS에서 할 일도 많고 버퍼도 낭비가 생길수밖에 없습니다. 그래서 Direct Memory Access라는 것이 나옵니다. 통제 및 제어 솔루션에서 버퍼를 생성하여 NIC 카드에 주면 NIC 카드는 해당 버퍼에 직접 패킷을 쓰는 방식입니다.​

미러리스 대 DSLR 카메라: 차이점은 무엇입니까?

캐논 EOS RP 미러리스 카메라

알나롱/Shutterstock.com

몇 년 동안 사진 작가로 일해 오셨든 이제 막 입문하시든 간에 미러리스 카메라에 대한 대화를 피할 수 없습니다. 미러리스는 미래인가? 미러리스 카메라가 일반 DSLR(디지털 일안 반사식) 카메라보다 낫습니까?

누구에게 물어보느냐에 따라 답이 달라집니다. 여기에서 우리의 목적은 어떤 식으로든 여러분을 설득하는 것이 아니라 차이점을 설명하는 것입니다. 미러리스 카메라가 어떻게 작동하는지 살펴보고 기존 DSLR과 어떻게 다른지 살펴보고 두 카메라의 장단점을 살펴보겠습니다.

미러리스 SLR이 DSLR과 다른 점은 무엇입니까?

미러리스 카메라가 DSLR 카메라와 다른 가장 분명한 점은 미러가 없다는 것입니다. 그러나 이 두 카메라 시스템 사이에는 고려할 가치가 있는 몇 가지 다른 대조가 있습니다.

미러박스/펜타프리즘 없음

DSLR은 카메라의 디지털 센서 위에 위치한 거울을 사용하여 카메라 렌즈를 통해 들어오는 빛을 눈으로 반사합니다. DSLR의 광학 뷰파인더를 통해 볼 때 보고 있는 것은 렌즈를 통해 들어오는 이미지가 미러에 의해 뷰파인더의 프리즘과 눈으로 반사되는 것입니다. 셔터를 누르면 미러가 아래로 내려와 카메라의 센서를 빛에 ​​노출시켜 보는 이미지를 기록합니다.

미러리스 카메라는 미러를 없애고 대신 전자식 뷰파인더(EVF)를 사용합니다. 즉, 보는 이미지가 렌즈를 통해 반사되는 것이 아닙니다. 그것은 카메라가 보는 것을 전자 미리보기입니다. 어떤 사람들은 뷰파인더를 통해 보면서 카메라 설정을 변경할 때 노출 변화를 실시간으로 볼 수 있기 때문에 이 시스템을 선호합니다. 셔터를 누르면 카메라 센서가 빛에 노출되고 이미지가 기록되기 위해 셔터가 열립니다.

더 작은 플랜지 거리

미러리스 카메라는 또한 DSLR보다 플랜지 거리가 더 짧습니다. 플랜지 거리는 카메라에 부착한 렌즈 뒷면과 센서 사이의 공간입니다. DSLR은 미러박스를 위한 공간을 확보해야 하기 때문에 바디 내부에 렌즈와 센서 사이의 공간이 더 많습니다. 플랜지 거리가 작을수록 더 선명한 사진을 생성할 수 있지만 일반 DSLR에서 여전히 압정 선명한 이미지를 얻을 수 있습니다.

더 작은 몸

미러리스 카메라는 DSLR에 있는 모든 기계적 구성 요소를 만들 필요가 없습니다. 미러나 오각기둥이 없기 때문에 미러리스 SLR 바디는 더 작고 컴팩트한 경향이 있습니다. 이것은 또한 신체의 더 많은 전자 부품을 의미합니다.

작은 크기는 DSLR보다 미러리스 카메라 본체에 더 적은 수의 버튼과 컨트롤이 내장되어 있음을 의미했지만 오늘날의 카메라는 대부분 이를 따라 잡았습니다. 미러리스 및 DSLR 카메라 시스템에는 거의 동일한 컨트롤과 버튼 옵션이 내장되어 있습니다.

미러리스 카메라는 크기가 작기 미러 트레이딩의 단점 때문에 일반적으로 DSLR 카메라보다 가볍습니다. 카메라를 찾을 때 무게가 문제인 경우 중요할 수 있습니다.

배터리 수명 단축

미러리스 카메라는 기본적으로 항상 광학 뷰파인더로 이미지를 전송하기 때문에 표준 DSLR보다 배터리 전원을 더 많이 사용합니다. 이러한 이유로 일반적으로 DSLR보다 배터리 수명이 짧습니다. 미러리스 카메라를 사용하는 것은 DSLR을 켤 때마다 비디오 녹화 모드 또는 라이브 뷰로 설정하는 것과 같습니다.

2015/2016년 미러리스 초기에는 특히 그랬습니다. 그러나 오늘날 미러리스는 다시 기계적 대응물을 따라잡고 있습니다. 약 1시간 후에 배터리가 다 떨어지기 전에 최신 미러리스 카메라는 한 번의 충전으로 약 1,000개의 이미지를 얻고 비디오를 녹화할 수 있습니다.

자동 초점

미러리스 카메라는 항상 전자적으로 수신한 시각 정보를 표시하므로 이미지를 찍든 동영상을 찍든 동일한 자동 초점 모드를 사용할 수 있습니다. 이는 두 모드에서 피사체를 고정하고 추적할 수 있는 눈 자동 초점과 같은 기술에 허용됩니다. 최신 미러리스 카메라는 매우 빠르고 매우 정확한 자동 초점 시스템을 사용하는 경향이 있습니다.

그러나 DSLR은 자동 초점과 관련하여 여전히 매우 좋습니다. 특히 스틸 사진을 촬영할 때 일부 최신 모델의 DSLR에는 프레임의 대부분을 차지하는 매우 고급 자동 초점 기능이 있습니다. 동영상을 녹화할 때와 스틸 사진을 촬영할 때 서로 다른 자동 미러 트레이딩의 단점 초점 모드를 사용해야 하므로 약점이 될 수 있습니다. 비디오를 촬영할 때 DSLR 자동 초점은 그렇게 고급되지는 않지만 확실히 작업을 완료합니다.

DSLR과 미러리스 카메라의 장단점

DSLR과 미러리스 카메라 시스템은 모두 장단점이 있습니다. 기술의 발전으로 인해 어느 쪽 진영에서든 나쁜 카메라를 찾기가 어렵지만 알고 있어야 할 몇 가지 사항이 있습니다.

DSLR: 좋은

DSLR은 렌즈가 보는 것을 정확하게 보여주기 위해 만들어졌습니다. 당신은 전자 스크린을 보고 있는 것이 아니라 유리 조각을 통해 보고 있습니다. 이 때문에 DSLR의 뷰파인더는 미러리스 SLR의 EVF보다 다양한 조명 조건에서 더 밝고 보기 쉽습니다.

DSLR 카메라는 수년간의 엔지니어링과 혁신을 바탕으로 오늘날 우리가 보고 있는 본체는 디자인의 정점에 가깝습니다. 미러리스 기술은 여전히 ​​새로운 기술이며 일부에서는 여전히 문제를 해결하고 있다고 주장합니다.

입장료도 확연히 다릅니다. 출시된지 오래되었기 때문에 DSLR 바디의 중고 시장이 훨씬 커서 중고 미러리스 카메라보다 구하기 쉽습니다. 렌즈의 경우도 마찬가지입니다. 주요 카메라 제조업체에는 완벽한 결과를 얻기 위해 DSLR과 함께 사용할 수 있는 매우 다양한 브랜드 및 타사 렌즈가 있습니다.

미러리스(Mirrorless) 카메라는 무엇인가?

요즘 여행,결혼에 필수품으로 대두되는 물품중 하나는 카메라 입니다. 한때는 DSLR이 유행이었지만 무겁고 큰 DSLR에 단점을 보완해 요즘은 가볍고 작은 미러리스 (Mirrorless) 가 대세가 되었습니다. 미러리스(Mirrorless)가 DSLR과 어떤차이가 있는지 미러리스 카메라에 대해서 알아보겠습니다.

DSLR 과 미러리스( Mirrorless) 의 구조

카메라의 광학기술은 거울로 이루어진 기술이라고도 할 수 있습니다. 그래서 우리는 최소한 거울이 어디에 어떻게 있는지 알아야 합니다.

렌즈에서 정면에서 빛이 들어오면 45도로 거울에서 반사를 시키고 위로 올립니다. 위에서 단순거울 한개로 뷰파인더로 바로 쏘게되면 뷰파인더에 반대로 보이게 될 것입니다. 그래서 펜타프리즘이라는 것을 넣고 두번 반사되어 나오게 만들어서 제대로 보이게 되는 것입니다. 그리고 빛이 들어올때 90도 각도의 거울이 또 있는데 이 빛은 AF모듈로 보내져 자동초점 센서에서 초점을 정확하게 잡는데 사용을 합니다. 이 두개의 복합 거울을 아주 빨리 올렸다 내렸다 해서 거울뒤에 이미지 센서가 받아들여지는 것이 DSLR의 핵심기술 입니다. 그 순간에 찰칵 소리를 내면서 이미지를 잡아내는 겁니다.

이 광학기술력이 없는 회사는 DSLR을 만들수가 없었습니다. 삼성전자도 그래서 펜탁스의 기술을 받아서 사업을 시작한 것도 기술력이 부족해서 였습니다. 노하우와 기술력을 필요로 하는 이 거울관련 기술과 그리고 큰 공간을 차지하는 부분을 빼버리고 가볍고 작게 만들자는 취지로 미러리스 (Mirrorless) 를 만들게 되었습니다. 대신 똑딱이와 차별화 하기 위해서 이미지센서를 가져가게 되었습니다. 작아지게 된 이유중 한부분 으로는 거울이 없어지니까 이미지센서와 렌즈가 상당히 가까워 지게 된 이유가 있습니다. 즉 정리하자면 미러리스 (Mirrorless) 렌즈 교환식 카메라는 기존의 디지털 일안 반사식 카메라(DSLR)에서 미러와 광학식 뷰파인더를 전자식 시스템으로 간소화한 형태의 렌즈교환식 카메라 입니다.

2008/08/05 파나소닉과 올림푸스가 포서드와 그 규격을 같이하는 마이크로 포서즈 시스템(Micro Four Thirds System, μ4/3)을 공개한 것이 시초입니다. 마이크로 포서드는 기존의 포서즈와 같은 센서를 사용하나, 미러와 광학식 구동계를 삭제하고, 렌즈와 찰상면 센서 사이의 거리를 줄임으로써 부피와 무게를 줄일 수 있었습니다. 기존의 DSLR 카메라는 미러박스와 펜타프리즘을 필요로 하기 때문에 소형 경량화에 한계가 있는데, 미러리스 (Mirrorless) 는 소형, 경량화의 트렌드에 따라서, 기술적으로 전자식으로 교체 가능한 모든 부품을 교체한 것을 기본으로 합니다.

미러리스 (Mirrorless) 를 표현하는 여러가지 단어를 보면 미러리스 (Mirrorless) 의 특징을 바로 알수 있습니다 또한 아래에 설명된 특징은 모든 미러리스 (Mirrorless) 의 공통점 입니다

1. 렌즈 교환을 통해서 다양한 화각을 구사 할 수 있다. 이부분은 SLR 의 특징을 이어 받은것이다.

3. 기존의 광학식 뷰 파인더는 SLR 의 특징에 따라서 필름이나 센서의 크기에 따라 미러와 뷰파인더의 크기가 결정되어기 때문에 뷰파인더의 크기가 작았지만 이런 과정을 모두 전자식으로 처리하는 미러리스는 뷰 파인더를 큰 화면으로 대체 할 수 있다. 그래서 뷰파인더가 후면 LCD 로 대체 하였다.

4. 광학식 뷰 파인더에 익숙한 사용자를 위해 별도의 전자식 뷰 파인더 장착도 가능해 졌다.

5. 이런 모든 과정이 라이브 뷰 (Live View)화 되기때문에 사진에 기록되기전의 이미지를 그대로 실시간 촬영이 가능하다.

가공할 속도의 AF-C 능력을 가진 SONY A6000

1. 미러와 펜타프리즘을 제거하기 때문에 미러 트레이딩의 단점 무게와 부피 면에서 상당한 경량화가 가능하다.

2. 미러의 제거로 플랜지 백이 짧아지기 때문에, 상대적으로 플랜지 백이 큰 기존의 SLR 카메라용 렌즈는 물론 기존 DSLR 카메라에서 사용할 수 없었던 RF카메라용 렌즈도 렌즈의 마운트 변환 어댑터를 통해 사용할 수 있다.

3. 백포커스가 짧기 때문에 광각에서의 왜곡이 매우 적다.

4. 미러를 제거함으로써 렌즈와 미러의 충돌 가능성을 고려하지 않아도 되기 때문에, 광각렌즈들의 고가의 레트로포커스 타입 렌즈 설계가 불필요해진다. 더불어 광각렌즈의 부피 역시 줄일 수 있다.

5. 기계적 요소가 제거됨으로써 미러쇼크 같은 충격과 동시에 발생하던 소음이 없다. 다만 물리적인 셔터를 탑재하는 것은 DSLR과 동일하기 때문에 셔터음까지 없어진 것은 아니다.

1. 2013년 12월을 기준으로 DSLR 제품군과 비슷한 수준의 폭 넓은 렌즈 선택권을 제공하고 있다. 하지만 소니의 칼자이스 렌즈와 파나소닉의 라이카렌즈를 제외하곤, 최상급 렌즈군은 여전히 부족하다.

2. 망원렌즈를 사용하기가 어렵다. 이는 짧은 플렌지백으로 인해 망원렌즈의 설계가 어렵기 때문이다. 또한 올림푸스에 한해서 올림푸스 OMD E-M1용 PRO 렌즈군에서 망원렌즈가 나오지만, DSLR에 비해 느리고 불편하기 때문에 망원렌즈군 사용이 많다면 DSLR을 사용하는 것이 낫다.

3. 미러를 없애면서 AF식을 콤팩트 카메라에서 쓰는 촬상면 컨트라스트 검출식 AF방식으로 채용했다. 현재로써는 그 속도면에서 DSLR에 크게 뒤떨어지지는 않으나, 여전히 물리적인 AF 시스템을 뛰어넘지는 못하고 있다.

4. 미러를 사용하지 않으므로 렌즈와 연동되는 광학식 뷰파인더가 없다. 현재로써는 이를 보완하기 위해 상급기종들의 경우 전자식 뷰파인더를 탑재하여 출시하는 경우가 많으며, 전자식 뷰 파인더 외의 파인더로는 후지필름의 미러리스 카메라에 탑재된 하이브리드 뷰파인더(전자식 + 갈릴레안식)가 있다.

크기대 미러 트레이딩의 단점 화질, 휴대기능을 생각해보면 아주 전문적인 촬영요소가 아니라는 가정하에 현재는 미러리스 (Mirrorless) 가 잘팔리고 있습니다. 전문가들은 대부분 그래도 DSLR이 최고라고 이야기 하고 있으나 예전에 PDP,LCD 시장에서도 볼 수 있듯이 초기에 LCD는 절대 PDP의 화질을 쫒아올 수 없다고 했지만 LCD의 기술 발달로 PDP를 제치고 한층 더 발전해 나가는 예도 보았습니다. 이런 예로 볼때 나중에 미러리스가 DSLR을 추월 할 수 없다고 말은 못하겠습니다. 1:1 센서크기도 나왔고 이제 렌즈크기를 작게하면서 화질을 좋게 할 방법이 문제가 되겠군요. 아마도 똑딱이 시장은 죽을거라 예상되고 앞으로 나날이 발전하는 광학기술의 발달은 지켜봐야 겠습니다.

미러 트레이딩의 단점

약 2달간 사용해본 니콘 J5의 단점과 장점 그리고 총평 ♥

니콘1 J5 서포터즈를 하면서 기존에 쓰던 미러리스와 DSLR은 사용하지 않고 니콘 J5만 쭉 사용을 했다.

5월 9일 니콘 J5 발대식 이후 오늘까지 사진을 5000장이 좀 넘게 사진을 찍었다.

여자를 위한 미러리스 니콘 J5는 셀카를 찍어서 뷰티모드로 수정까지 되는 부분이 너무 신기하고 재미있었다.

셀카를 찍을 때 꼭 필요한 멀티 앵글 액정 모니터~

​ 셀카 뿐 아니라 요새 음식점 리뷰에서 한 컷씩은 들어가 있는 항공샷!!

항공샷에도 멀티 앵글 액정은 정말 유용했다.

그리고 니콘 J5의 다양한 동영상 기능들 덕에 요샌 동영상을 찍는 재미에도 빠져있다 !

슬로우모션과 패스트모션 두 가지 동영상 기능은 찍을 때마다 참 만족스럽다 ~

​ 캐논과 소니는 사용을 해봤지만 니콘은 처음 써보는 나.

니콘을 처음 쓰면서 좀 불편했던 것도 사실이다.

카메라 충전

기존에는 핸드폰과 같은 5핀 케이블 충전기로 충전이 가능해서 베터리가 없을 경우 바로 바로 충전을 할 수 있었다.

니콘은 베터리로만 되어 있고 케이블로는 충전이 되지 않아서

사진을 많이 찍게되는 여행을 갔을 경우엔 저녁때 쯤 되서 베터리가 소모되면 충전을 할 곳이 없을 때 좀 난감하긴 했다.

보조베터리를 하나 사서 번갈아가면서 사용하는 방법밖엔 없다는게 아쉽

플래쉬

플래쉬가 장착이 되어 있는 모델이라서 야간 촬영시에 참 편해서 좋은 점도 있었지만,

매번 니콘 J5를 켤 때마다 플래쉬 꺼짐을 체크해 줘야 하는 게 좀 번거로웠다.

가끔 까먹고 그냥 사진을 찍을 때 플래쉬가 터져서 당황한적도 ㅋㅋㅋㅋㅋ

위에 쓴 니콘 J5 단점이라기 보다는 뭐 내가 사용하기 불편했던 점을 쓰긴 미러 트레이딩의 단점 했는데

단점보다는 장점이 더 많았던 미러리스 카메라기에 외출시엔 꼭 들고 나갔던 것 같다.

무게

가볍다. 이게 제일 큰 장점인 것 같다.

450D를 쓰다가 작고 가볍다는 이유로 100D를 구매, 그 뒤에 더 가볍고 여러가지 기능이 있는 소니 미러리스를 구매

가벼운걸 선호하는 나로서는 니콘1 J5가 정말 가벼워서 좋다 !

색감, 선명도

기존에 쓰던 미러리스 카메라보다 색감이 참 선명하고 예쁘게 나와서 참 마음에 들었다.

액정도 큼지막해서 사진찍기 딱 좋음!

초점

한곳에 초점을 잡아서 뒷 배경을 날리는 아웃포커싱, 초점에 따라서 사진의 느낌이 달라지기 때문에 사진찍을 때 신경을 쓰는 부분이다.

니콘 J5는 터치 한번으로 초점을 간단하게 잡아서 사진을 찍을 수 있다.

기존 미러리스들도 다 터치로 초점이 되지 않냐? 라고 하겠지만 니콘 J5가 반응속도가 훨씬 빠르고 잘 찍힌다는 점.

기존 미러리스를 사용할 때는 터치를 했지만 초점을 못잡고 사진이 찍히는 경우도 좀 있었기 때문에 난 니콘 J5가 참 만족스러웠다.

와이파이, 미러 트레이딩의 단점 리모콘기능

이건 거의 미러리스들에 다 있는 기능이긴 하지만 와이파이와 어플로 사진촬영이 된다는 것도 장점

폰포스팅이나 실시간 SNS에 사진을 올리기 편해서 좋았다.

렌즈캡

니콘 J5에는 렌즈캡이 없어서 잃어버릴걱정도 렌즈캡을 닫고 사진을 찍을 일도 없다 .

NIKON1 J5 서포터즈를 하면서 미러리스의 많은 기능들을 공부하면서 기존에는 몰라서 사용하지 않았던 것들 도 많이 알게 되서 참 좋았다.

분명 소니에도 있는 기능인데 왜 난 여태 몰랐지? 왜 사용을 못했지? 이런 자책도 ㅋㅋㅋㅋㅋㅋㅋ

니콘 J5의 총평은 참 만족스럽다. 니콘만 쓰는 매니아층이 왜 있는지 조금은 알 듯도 하고~

처음엔 충전이나 설정해야되는 부분들로 좀 불편했는데 이 또한 쓰다보니 적응이 된다는거 ㅋㅋㅋㅋㅋ

니콘을 한번도 안써보신분들은 한번쯤 써보시고 아.. 이게 다른 미러리스와 다르다는 거구나? 느껴보셔도 좋을 듯하다.

2개월 동안 여러가지 사진과 동영상이 기능들을 포스팅했는데 그 외에도 더 많은 기능이 있어서 계속 좀 공부해야겠다 !

디자인 빈티지하면서 감각적이여서 좋고 무엇보다 가벼운게 최고

개인적인 생각으로 10점만점에 8.5점


0 개 댓글

답장을 남겨주세요