//이미지 뷰를 보여줌

ImageView.setVisibility(View.VISIBLE);

//이미지뷰 안보이게(공간은 남음)

ImageView.setVisibility(View.INVISIBLE);

//이미지뷰 아예 숨기기 공간조차 없어짐

ImageView.setVisibility(View.GONE);

2. ViewPage를 이용한 페이지 만들기 : https://yoo-hyeok.tistory.com/58?category=708422

2. Customized RadioButton : https://yoo-hyeok.tistory.com/57?category=708422

2. RadioButton : https://yoo-hyeok.tistory.com/55?category=708422

2. ListView 하기..리스트를 커스컴마이즈.. : https://yoo-hyeok.tistory.com/53?category=708422

2. Customized Dialog 하기 : https://yoo-hyeok.tistory.com/51?category=708422

2. 문자만 표시하는 Dialog 하기 : https://yoo-hyeok.tistory.com/50?category=708422

2. gif 이미지 넣기(동영상보다는 gif가 좋을 듯) : https://yoo-hyeok.tistory.com/48?category=708422

2. 최근 splash 방식 : velog.io/@pish11010/Android-Splash-Screen-%EA%B5%AC%ED%98%84

[Android] Splash Screen 구현

Splash Screen 은 일반적으로 앱이 실행될 때 나타나는 화면입니다.YouTube 앱 실행 시 나오는 잠깐 로고화면이 나오고 앱 메인화면으로 진입되는데, 여기서 로고가 나온 화면이 Splash Screen 입니다.이

velog.io

2. 어플 대표 화면 넣기 : https://yoo-hyeok.tistory.com/31?category=708422

[Android] 안드로이드 Splash Activity (어플 설명 액티비티, 어플 대표 화면) 만들기

카카오톡 실행시켜보면 처음에 카카오톡 이미지가 나오고 1초뒤에 카톡이 실행됩니다. 어플리케이션의 대표 레이아웃을 넣어 어플리케이션의 이미지를 담당하는 액티비티입니다. 만드는 방법은 간단합니다. 프로젝..

yoo-hyeok.tistory.com

3. 백버튼 눌렀을 때 알림창. https://yoo-hyeok.tistory.com/32?category=708422

유혁의 엉터리 개발

소프트웨어 개발자

yoo-hyeok.tistory.com

4. Json 사용 법 : https://yoo-hyeok.tistory.com/37?category=708422

[Android] 안드로이드 JSON 문자열 파싱(parsing)

String JSONData = "{"school":[{"subject1":"math"},{"subject2":"korean"}],"name":"유혁"}" (문법 생략) 안드로이드 스튜디오에서 파싱하기 ArrayList ArrList = new ArrayList(); //어레이 리..

yoo-hyeok.tistory.com

5. firebase push 이용법 : https://yoo-hyeok.tistory.com/43?category=708422

[Android] Firebase(Google Cloud Message) 를 이용한 푸시알림 구현 - (1) 환경설정

휴대폰 게임을 하다보면 중간중간에 아이템이 왔다며 푸시알림을 많이 받아보셨을 겁니다. 안드로이드 개발중에 이런 푸시알림을 주고싶을 때 GCM을 사용합니다. Firebase가 최근에 나온 버전이고 Firebase 만으로..

yoo-hyeok.tistory.com

Posted by 목표를 가지고 달린다
,

1. 스마트폰은 기본적으로 일정 시간동안 아무런 반응이 없으면 자동으로 화면이 꺼지게 됩니다.

원할 경우 실행되는 동안 화면을 안꺼지 게 할수 있습니다.
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
을 추가하게 되면 실행되는 동안 화면이 꺼지지 않습니다.

2. Dialog 타이틀바 없애기.

3. EditText에 이벤트 주기

EditText 이벤트는 addTextChangedListener() 를 사용하면 보다 쉽게 다룰수가 있었다.( setOnClickListener() 보다 좋음.)

et.addTextChangedListener(new TextWatcher(){   

   public void afterTextChanged(Editable arg0) {
    // TODO Auto-generated method stub    
   }   

   public void beforeTextChanged(CharSequence s, int start, int count,
     int after) {
    // TODO Auto-generated method stub    
   }

   public void onTextChanged(CharSequence s, int start, int before,
     int count) {
    // TODO Auto-generated method stub
    
   }
         
});

4. intent : https://yoo-hyeok.tistory.com/15?category=708422 putExtra를 단일 String, ArrayList 모두 가능.

5. 서비스 등록하기

Service는 background에서 처리를 계속할 수 있는 클래스이다.
Service는 기본적으로 activity를 가지지 않는다.

서비스를 구현하기 위한 3가지 절차
-- Service 클래스를 확장한 새로운 클래스 정의
-- Manifest file에 Service 선언 추가
-- App에서 Service 실행



1. 서비스를 실행하는 클래스 - 타이머를 이용한 반복 처리.

public class MyService extends Service implements Runnable {

    // 시작 ID
    private int mStartId;
    // 서비스에 대한 스레드에 연결된 Handler. 타이머 이용한 반복 처리시 사용.
    private Handler mHandler;
    // 서비스 동작여부 flag
    private boolean mRunning;
    // 타이머 설정 (2초)
    private static final int TIMER_PERIOD = 2 * 1000; 
    private static final int COUNT = 10;
    private int mCounter;


    // 서비스를 생성할 때 호출
    public void onCreate() {
        Log.e("MyService", "Service Created.");
        super.onCreate();
        mHandler = new Handler();
        mRunning = false;
    }


    // 서비스 시작할 때 호출. background에서의 처리가 시작됨.
    // startId : 서비스 시작요구 id. stopSelf에서 종료할 때 사용. 

     //onStart는 여러번 호출될 수 있기 때문에 식별자로 사용.

    public void onStart(Intent intent, int startId) {
        Log.e("MyService", "Service startId = " + startId);
        super.onStart(intent, startId);
        mStartId = startId;
        mCounter = COUNT;

        // 동작중이 아니면 run 메소드를 일정 시간 후에 시작
        if (!mRunning) {
              // this : 서비스 처리의 본체인 run 메소드. Runnable 인터페이스를 구현 필요.
              // postDelayed : 일정시간마다 메소드 호출
              mHandler.postDelayed(this, TIMER_PERIOD);
              mRunning = true;
        }
    }

 

    // 서비스의 종료시 호출
    public void onDestroy() {
        // onDestroy가 호출되어 서비스가 종료되어도 
        // postDelayed는 바로 정지되지 않고 다음 번 run 메소드를 호출.
        mRunning = false;
        super.onDestroy();
    }



    // 서비스 처리
    public void run() {
        if (!mRunning) {
            // 서비스 종료 요청이 들어온 경우 그냥 종료
            Log.e("MyService", "run after destory");
            return;
        } else if (--mCounter <= 0) {
            // 지정한 횟수 실행하면 스스로 종료
            Log.e("MyService", "stop Service id = "+mStartId);
            stopSelf(mStartId);
        } else {
            // 다음 작업을 다시 요구
            Log.e("MyService", "mCounter : " + mCounter);
            mHandler.postDelayed(this, TIMER_PERIOD);
        }
    }

    // 원격 메소드 호출을 위해 사용
    // 메서드 호출을 제공하지 않으면 null을 반환
    public IBinder onBind(Intent intent) {
        return null;
    }
}




2. 서비스 실행, 종료를 사용자가 요청하는 클래스

// 서비스 시작과 종료를 요구하는 Activity
public class MyServiceActivity extends Activity {

    ComponentName mService;    // 시작 서비스의 이름
    TextView mTextView;              // 서비스 상태 표시



    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        mTextView = (TextView)findViewById(R.id.text_view);
        
        Button start = (Button)findViewById(R.id.start_button);
        start.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v) {
                startHelloService();
            }});
        
        Button stop = (Button)findViewById(R.id.stop_button);
        stop.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v) {
                stopHelloService();
            }});
    }



    // 서비스 시작 요청
    private void startHelloService() {
        mService = startService(new Intent(this, MyService.class));
        mTextView.append(mService.toShortString()+" started.\n");
    }

 

    // 실행한 서비스 중지 요청

    private void stopHelloService() {
        if (mService == null) {
            mTextView.append("No requested service.\n");
            return;
        }
        
        Intent i = new Intent();
        i.setComponent(mService);
        if (stopService(i))
            mTextView.append(mService.toShortString()+" is stopped.\n");
        else
            mTextView.append(mService.toShortString()+" is alrady stopped.\n");
    }
}


3. 사용자가 서비스 실행, 종료하는 화면 구성

<!-- 시작 -->
<Button android:id="@+id/start_button" android:text="Start"
android:layout_width="fill_parent" android:layout_height="wrap_content" />

<!-- 종료 -->
<Button android:id="@+id/stop_button" android:text="Stop"
android:layout_width="fill_parent" android:layout_height="wrap_content" />

<!-- 상태표시 -->
<TextView android:id="@+id/text_view_id"

android:editable="true"
android:layout_width="fill_parent" android:layout_height="fill_parent" />

6. 컴포넌트의 생명주기
컴포넌트의 생명주기는 컴포넌트를 인스턴스화 할 때 시작해서, 인스턴스가 사라질 때 종료됩니다.
액티비티의 경우 그 사이에 활성화, 비활성화가 될 수 있기 때문에 사용자에게 보이거나 , 또는 보이지 않을 수도 있습니다.

1. 액티비티 생명주기


액티비티는 필수적으로 세 가지의 상태를 가지고 있습니다.

▣ 활성화(activity) 또는 실행 (running) 상태

액티비티가 포그라운드 화면으로 사용자에게 보이는 상태입니다 ( 즉, 현재 태스크에서 스택의 최상위에 위치하는 것).
이 상태는 사용자 액션을 받을 수 있게 됩니다.


▣ 멈춤(paused) 상태

사용자 액션을 받진 못하지만 여전히 보여지고 있는 상태입니다. 즉 다른 액티비티가 그 위에 위치하지만 해당 액티비티가 화면을 전부 채우지 않거나 투명해서 멈춤 상태의 액티비티를 볼 수 있는 상태입니다.
이 상태의 액티비티는 살아있습니다 ( 모든 상태정보와 멤버를 유지 중 )
하지만 , 메모리 부족시엔 시스템에 의해 강제종료 될 수 있습니다.


▣ 정지 (stopped) 상태

완전히 다른 액티비티에 의해 가려진 상태입니다.더 이상 사용자에게 보이진 않지만 여전히 살아서(정보와 멤버유지) 있는 상태이죠.
여전히 보여지진 않기 때문에 메모리 부족시엔 강제종료 될 수 있습니다.



액티비티가 멈춤 또는 정지 상태라면, 시스템은 finish() 메소드를 호출하거나 프로세스를 강제종료 시킴으로서 메모리에서 제거할 수 있습니다.
종료된 액티비티가 다시 실행된다면, 다시 시작되어야 하고 이전 상태로 복구되어야 할 것입니다.



액티비티 상태변화


액티비티의 상태가 변하면 아래의 메소드가 호출됨으로써 변화가 통보되는데요.
이 메소들은 모두 프로텍티드(protected) 메소드 입니다.


여기의 7가지 메소드들은 오버라이드 할 수 있습니다.
단, 모든 액티비티는 최초 인스턴스 초기화를 위해 onCreate() 메소드는 무조건 구현해야 합니다.

또한, 액티비티 종료직전.... 마지막 기회가 될 수도 있는 시점에선 적절한 데이터 저장을 위해 onPause() 메소드도 구현해주면 좋겠네요.

액티비티 생명주기 메소드를 구현할 땐 항상 슈퍼클래스 버전을 호출하여야 합니다.
protected void onPause() {

super.onPause() ;

}


네스티드 루프(nested loop)


액티비티 생명주기 메소드를 구현하여 볼 수 있는 것은 아래와 같습니다.

▣ 액티비티 인타이어 라이프타임 ( entire lifetime )

onCreate() 와 onDestroy() 메소드 사이에서 발생합니다.
액티비티는 onCreate() 메소드에서 모든 초기 설정을 하고 onDestroy()에서 모든 리소스를 해제하죠.


▣ 액티비티 비지블 라이프타임 ( visible lifetime )

onStart() 메소드에서 onStop() 메소드 사이에서 발생합니다.
onStart() 메소드에서는 사용자 인터페이스의 변화 모니터를 위해 브로드캐스트 리시버를 등록할 수 있고 사용자가 보고있는 화면이 없을때엔 onStop() 메소드에서 제거할 수 있습니다. onStart() 와 onStop()은 액티비티가 사용자에게 보여지고 숨겨지는 상태이므로 여러번 호출 될 수 있습니다.


▣ 액티비티 포그라운드 라이프타임 ( foreground lifetime )

onResume() 메소드와 onPause() 메소드 사이에서 발생합니다.
이 기간동안 액티비티는 화면에서 다른 모든 액티비티보다 앞에 놓이며 사용자에게 보여집니다. onPause()는 기계가 꺼지거나 새로운 액티비티가 시작될 때 호출되고, onResume() 은 액티비티가 다시 복귀되거나 새로운 인텐트가 도착했을때 호출됩니다.
따라서 이 두개의 메소드 내용은 빠르고 가벼울 수록 좋겠네요.



생명주기 메소드가 하는 일

▣ onCreate()

액티비티가 최초 생성시에 호출됩니다. 초기화 설정을 하는 곳이지요. 보관된 상태의 액티비티가 있다면, 그 상태를 저장중인 Bundle 객체를 받습니다.
onStart() 메소드가 이어집니다. 강제종료가 불가능 합니다.


▣ onRestart()

액티비티가 정지 후 다시 시작되기 바로 직전에 호출됩니다.
onStart() 메소드가 이어집니다. 강제종료가 불가능 합니다.


▣ onStart()

액티비티가 사용자에게 보여지기 직전에 호출됩니다.
액티비티가 보여지게되면 onResume() 메소드가, 안보이게 되면 onStop() 메소드가 이어집니다.
강제종료가 불가능 합니다.


▣ onResume()

액티비티가 사용자와 상호작용하기 직전에 호출됩니다 (스택의 최상위에 위치)
onPause() 메소드가 이어집니다. 강제종료가 불가능 합니다.


▣ onPause()

시스템이 다른 액티비티를 시작하려 할 때 호출됩니다.
일반적으로 데이터 저장을 하기에 좋은 곳입니다.
하지만 소스코드의 속도가 빨라야합니다.
왜냐하면 이 메소드가 끝나기 전까진 다음 액티비티가 실행되지 않기 때문인데요,
액티비티가 되돌아오면 onResume(), 보이지않게되면 onStop() 이 이어집니다.
강제종료가 가능 합니다.


▣ onStop()

액티비티가 사용자에게 보이지 않을때 호출 됩니다.
액티비티가 제거되거나 다른 액티비티가 실행되어 해당 액티비티를 덮어버렸을 때, 호출되죠. 액티비티가 되돌아오면 onRestart(), 액티비티가 사라지면 onDestroy() 가 이어집니다.
강제종료가 가능 합니다.


▣ onDestroy()

액티비티 삭제 직전에 호출됩니다. 액티비티가 받는 마지막 호출 메소드가 되죠. 시스템이 메모리 확보를 위해 액티비티 인스턴스를 없애버려고 하거나 , finish() 메소드가 호출되면 호출되는 메소드입니다.

isFinishing() 메소드로 두 가지를 분기할 수 있습니다.



onStart() 메소드가 이어집니다. 강제종료가 불가능 합니다.



☞ 여기에서 onPause() 는 프로세스가 강제종료 되기 전에 호출되는 것입니다. 즉, 프로세스가 강제종료 될 때 onPause() 는 무조건 호출되는 유일한 곳이 됩니다. ( onStop(), onDestroy() 는 호출되지 않을 수 있어요 ), 따라서 이터 저장 등의 작업은 종료되기 직전에 호출되는 onPause() 에 구현해야 되겠네요.


액티비티 상태 저장하기


시스템이 액티비티를 강제종료 했을때, 사용자는 이전의 액티비티로 돌아가고 싶을 수 있습니다. 이럴 경우 액티비티가 강제종료 되기 전에 상태를 저장할 수 있는 onSaveInstanceState() 메소드를 구현하면 저장이 가능해 집니다.



즉, 액티비티가 파괴되기전에 호출되는 메소드 인데요. ( onPause() 호출 이전에 호출됩니다. )
이 메소드는 이름/값 쌍으로 이루어진 번들 객체(Bundle) 를 인수로 가집니다. 액티비티가 다시 시작되면 번들은 onSaveInstanceState() 와 onStart() 이후에 호출되는 onRestoreInstanceState() 에게 전달됩니다.



☞ onSaveInstanceState() , onRestoreInstanceState() 메소드는 생명주기 메소드는 아닙니다.
따라서 항상 호출되지는 않으며 특정 상황 ( 액티비티 강제종료전에 onSaveInstance() 호출처럼 ) 에서만 호출됩니다. 단, 사용자 액션에 의해 종료될 때는 ( 사용자가 직접종료 ) 호출되지 않습니다.
- 사용자가 되돌아가지 않을 생각으로 종료한 것으로 판단한 것이겠죠...

onSaveInstanceState() 는 액티비티의 일시적인 상태 저장을 위한 것이므로 , 데이터 등을 안전하게 저장하려면 onPause() 메소드에서 처리해야 합니다.


액티비티 생명주기 메소드의 순서


하나의 액티비티가 다른 액티비티를 시작할 때 하나는 멈추고 정지되며, 다른 하나는 시작되는 구조를 가집니다. 생명주기 메소드의 순서는 두 개의 액티비티가 동일 프로세스 안에 있을 때에 정의됩니다.

1. 현재 액티비티("A") 의 onPause() 가 호출됩니다.
2. 다음 시작되는 액티비티("B") 의 onCreate() -> onStart() -> onResume() 이 차례대로 호출됩니다
3. "B" 액티비티가 더 이상 사용되지 않으면 그것의 onStop() 이 호출됩니다.

7. PHP MySql 설치 등.. https://yoo-hyeok.tistory.com/16?category=708422

Posted by 목표를 가지고 달린다
,

업무 효율 향상을 위한 정말 유용한 프로그램 하나 소개 해드립니다.
여러분의 노가다 작업 시간을 1/10~1/100으로 줄여줄 획기적인 프로그램 입니다.

특히 개발자 분들은 이미 많이 사용하고 계실 텐데요,

IT 에 있지 않으신 분들께도 큰 도움이 될 수 있는 프로그램입니다.

이름은 울트라에디터입니다. (구버전도 충분히 유용합니다.)

한 마디로 아주 기능이 많은 '메모장' 입니다.

주요 특징은 1. 반복 작업을 수행하는 '메크로' 2. 줄편집 3. 파일 비교, 4. 정렬(중복 제거 가능) 입니다.

아마 개발자시면, 반복해서 변경하는 수작업을 쉽게 일괄로 하기 위해 줄편집을 많이 이용하고 계실꺼에요.

일단 프로그램을 먼저 설치해봅시다.

링크 : http://www.ultraeditkorea.com/Download.asp

링크 들어가셔서 PC 환경에 맞는 프로그램 다운 받으시고 '다음 다음' 을 쭉 클릭하시면 끝입니다.

쉬운 이해를 위해 아래 3가지 예제 업무를 통해 설명을 드릴게요 :)

업무 1. 텍스트 파일에서 다음 문구를 찾아서 모두 바꾸세요

(변경 전) > (변경 후)

(1) 다른나라 > 우리나라

(2) Windows > Windows Computer

방법 1. 바꾸기 기능을 활용합니다.

(1) Ctrl + R 를 눌러서 창 띄움 (2) 찾을 내용 / 바꿀 내용 입력 (3) 모두 바꾸기 버튼 클릭

방법 2. 줄편집을 활용한다. (단축키 ALT + C )

* + TIP. 줄편집은 영문/숫자/특수문자는 가능하지만, 한글은 깨지므로, 'XXXX'로 표시한 후, 모두 변경으로 원하는 한글로 변경하면 된다.

* + TIP. 개발자의 경우, 중복되는 표현을 작성하고, 특정 영역만 다른 코딩을 할 경우 엄청난 효율을 발휘한다.

업무 2. 특정 문구(단어)가 포함된 내용만 뽑아내기.

방법 1. 찾기 (CTRL + F) 를 수행한 후, '문자열을 표시하는 줄 나열(G)' 를 체크 한후, 찾기를 하면...해당 문구가 있는 줄만 별도로 표시해 보여준다. 이것을 클립보드로 저장한 후 새글에 저장하면 원하는 문구가 표현된 내용만 쉽게 찾을 수 있다.

업무 3. 정렬하기(중복 제거 가능)

방법 1. 파일 < 정렬 > 파일 정렬(또는 고급 정렬)

최초 고급 정렬로 기준을 잡으면, 이후에는 파일 정렬로 기존 설정값대로 정렬가능하다. 중복 지우기 기능도 있어서 중복 제거도 가능하므로, 엑셀보다 더 편리한 부분도 있다. 해당 메뉴의 위치는 실제 울트라버전에 따라 상이할 수는 있으나 기능이 모든 버전들이 갖추고 있다.

업무 3. 파일 비교하기

방법 1. 메뉴의 파일 > 파일비교 를 클릭하면 비교할 파일을 선택하고, 확인을 누르면... 순차적으로 동일한 내용은 흰색으로 표시하지만, 다른 내용은 붉은색으로 표시해준다.(빈칸, 띄어쓰기)가 달라도 다른 내용으로 표시한다. 내용이 너무 많은 경우 =, =/ 을 클릭하면 다른 것만 표시할 수도 있다.

이정도만 아셔도, 지금 하고 계신 지루한 반복 문서 작업이 많이 단축될 꺼에요.

그리고 문서 검증하는 것도 많이 쉬워질꺼구요..

Posted by 목표를 가지고 달린다
,

캐나다 ARVO학회서 연구결과 첫 발표.."각막 치유-눈물 분비량 개선"

유원상 유유제약 대표이사가 캐나다에서 개막한 ARVO컨퍼런스 현장에서 안구건조증 치료 신약 소개

유유제약이 항염증 기전의 새로운 안구건조증 신약후보물질을 첫 공개했다. 유유제약은 28일(현지시간) 캐나다 밴쿠버에서 개막한 국제 안과학회 ARVO(The Association for Research in Vision and Ophthalmology)에서 안구건조증 치료 펩타이드 신약(프로젝트명: YDE)의 연구 결과를 발표했다. YDE는 유유제약이 국내 임상 2상 승인을 받은 YY-101과는 별도로 개발중인 프로젝트다.

이번에 발표된 연구는 안구건조증 유발 마우스 모델을 이용해 YDE와 기존 치료제 성분인 사이클로스포린A, 디쿠아포솔, 히알루론산, 리피테그라스트와의 치료 효과를 비교하기 위해 진행됐다. 그 결과 YDE가 우수한 항염증(Anti-inflammation) 기전에 따라 각막 상피세포 치유 효과 뿐 아니라 눈물 분비량 개선을 확인했다.

ARVO가 공개한 발표자료에 따르면 안구건조는 각막 상피 병변 및 염증이 발생하는 질환으로 복잡한 다중 인자적 병리학적 특성을 가진다. 유유제약은 통제된 환경에서 스코폴라민(scopolamine)에 의해 유발된 안구건조 설치류 모델의 연골세포 유래 세포외기질(chondrocyte derived extracellular matrix)에서 YDE-010, YDE-011, YDE-043 세가지 합성 펩타이드의 효과를 확인하는 실험을 진행했다.

연구진은 6~9주령의 암컷 C57BL6 마우스의 꼬리에 스코폴라민 패치를 적용하고 10일동안 건성 안구를 유발하기 위해 습도가 25% 이하인 통제된 환경실에서 사육했다. 스코폴라민 패치의 경우 격일 단위로 교체 적용됐다.

스트레스가 유발된 후, 10마리로 구성된 각각의 그룹에게 10일동안 3가지 펩타이드 중 하나 또는 대조군(vehicle), 리피테그라스트(lifitegrast; Xiidra), 사이클로스포린 A(cyclosporine A; Restasis), 디쿠아포솔나트륨(diquafosol sodium; Diquas), 히알루론산 나트륨(sodium hyaloronate; Vismed) 등을 하루 4~5회 양쪽 안구에 5µl씩 적용했다.

이들은 스트레스 유발 10일째와 치료 후 3,5,7,10일 이후의 눈물의 양(volume)과 각막 염색 점수(corneal staining score)의 변화를 평가했다.

10일간의 건조 스트레스가 주어진 모든 동물에게서 안구의 건조 징후가 관찰됐다. 스트레스가 해제된 이후 모든 그룹이 시간이 지남에 따라 눈물 생산이 향상됐다.

YDE-010, YDE-001, YDE-043가 각각 국소 투여된 마우스는 각막 염색에서 대조군 대비 유의미한 개선이 확인됐다. 대조군과 비교해 TDE-011 펩타이드의 경우 치료 3일, 5일 후 CFS(Cornea Fluorescein staining; 각막염색검사)에서 각막의 상처가 각각 30%, 47% 감소하는 등 관련성 있는 개선이 관찰됐다.

효과를 비교하기 위해 적용된 싸이클로스포린 A와 디쿠아포솔 나트륨, 히알루론산 나트륨 및 리피테그라스트 적용군은 각막 염색 결과에서 유의미한 개선이 없었다. 유유제약 측은 이러한 전임상 결과를 토대로 안구건조 설치류 동물모델에서 YDE-010, YDE-011, YDE-043이 기존의 처방약제들과 비교해 더 뛰어난 각막 상태 개선를 보였다고 발표했다.

백태곤 유유제약 연구소장은 "ARVO 사무국에 이번 연구결과에 대한 초록을 제출했으며, 사무국으로부터 발표자로 선정돼 연구결과를 처음으로 선보이게 됐다"면서 "이번 연구결과를 바탕으로 국제저널 발표 및 글로벌 임상을 준비 할 예정"이라고 말했다.


[현재 개발중인 프로젝트] 유유제약은 3월 12일 자사가 개발 중인 안구건조증 치료 펩타이드 신약 후보물질 YY-101에 대한 임상 2상 진입을 식품의약품안전처로부터 승인을 받았다고 3월 13일 밝혔다.

이번 임상시험은 국내 안구건조증 환자 30명을 대상으로 YY-101 점안액의 내약성, 안전성 및 유효성을 평가하기 위해 진행됐다.

유유제약의 YY-101은 한국산업기술평가관리원이 주관하는 바이오의료기기산업 핵심기술개발사업의 유망바이오IP사업화촉진사업으로 선정돼 지원을 받고 있다. 안과질환 T2B(Technology to Business) 기반구축센터인 부산 백병원과 비임상시험을 진행했으며, 임상 1상은 정재용 분당서울대병원 임상약리학과 교수가 맡았다.

백태곤 유유제약 연구소장은 "YY-101의 주성분인 콜라겐 타입 펩타이드는 연골 세포 유래 세포 외기질에서 분리된 물질로서 안전성이 확인됐다"며 "이번 임상2상 승인을 통해 개발 속도에 박차를 가할 예정"이라고 말했다.

실제 스마트폰의 영향으로 안구건조증 발생빈도가 높아져서 시장도 좋지만, 현재 개발중인 프로젝트외에도 더욱더 개발에 노력하고 있는 건실한 바이오 업체로 고려됨

Posted by 목표를 가지고 달린다
,

코오롱티슈진에 공문 발송..

주요성분 변경 사유, 환자 장기추적계획 등 광범위한 자료제출 요구

미국 식품의약국(FDA)이 코오롱티슈진에 인보사의 미국 3상 중단과 주요성분 변경 사유 등을 포함한 관련 자료 제출을 요구했다.

코오롱생명과학은 3일 "코오롱티슈진이 FDA로부터 인보사 임상 중단에 관한 공문을 접수했다”고 밝혔다. 코오롱티슈진은 지난 3월 30일 인보사의 형질전환세포 변경 사실을 FDA에 통보하고 미국 내 인보사 3상 임상시험 환자 모집을 잠정 보류한 바 있다.

FDA는 이번 공문에서 인보사의 미국 3상 중단을 통보했다.

FDA는 이어 임상 중단 해제를 위한 요구사항으로 △임상 시험용 의약품의 구성 성분에 대한 특성 분석△구성 성분 변화 발생 경위△향후 조치사항 등을 포함하는 보고서 제출을 명시했다.

FDA는 임상중단 해제 사유로 특정하지는 않은 △종양원성 여부 판단에 사용한 방법론△종양관련 임상데이터△임상참여 환자들에 대한 투여정보△장기추적 계획△미국 임상기관 및 환자 통지문 제출을 요구했다.

인보사의 형질전환세포가 연골유래세포에서 태아신장유래세포로 바뀌게 된 경위부터 태아신장유래세포를 사용한데 따른 종양원성 발생 우려, 환자 안전보장 계획 등까지 광범위한 자료제출을 요구한 것이다.

코오롱생명과학은 "미국 FDA가 요청한 자료를 제출하고 필요시 대면 미팅 등을 신청해 미국 FDA와 추가적으로 협의 할 예정"이라고 밝혔다. 다만 그 시기는 이달 내 인보사와 관련 추가자료 제출하라는 국내 식품의약품안전처의 요청을 이행한 이후가 될 것이라는 설명이다. 이에 따라 FDA와의 협의와 임상재개 여부 결정까지는 시간이 걸릴 전망이다.

한편 코오롱생명과학은 2016년 인보사 기술수출계약 취소와 함께 계약금 250억원 반환을 요구하며 국제상업회의소(International Chamber of Commerce) 중재 절차를 진행중인 일본 미츠비시타나베제약이 계약취소사유로 형질전환세포의 유래와 관련된 내용을 추가했다고 밝혔다.

2017년 기사를 확인해보면, 미쓰비시 타나베는 가장 큰 계약 해지 이유로 "코오롱생명과학은 계약 당시 인보사의 개발사이자 자회사인 티슈진이 미국 3상을 위한 임상시료 생산처의 변경을 고려하고 있다는 점을 설명하지 않았다"는 점을 들었다. 또 코오롱생명과학이 미국 식품의약처(FDA)로부터 임상 3상 시료에 대한 사용 승인을 받은 후 임상을 개시해야 한다는 내용의 설명문을 미쓰비시 측에 제대로 전달하지 않은 것도 문제가 됐다.

당시 표면적으로는 기술과 무관한 임상절차나 생산처 변경에 대한 이슈였으나, 최근 그 당시 해지사유로 기술적인 부분역시 있는 것으로 확인되었다.

2019/05/06 - [분류 전체보기] - [코오롱생명과확] 코오롱티슈진, 인보사 성분 변경 2년전 인지

Posted by 목표를 가지고 달린다
,

'인보사' 파문을 일으킨 코오롱생명과학[102940]의 미국 자회사 코오롱티슈진[950160]이 이미 2년 전에 의약품 성분이 뒤바뀐 사실을 알았다는 정황이 나왔다.


최근에야 인보사 성분이 바뀐 사실을 알았다는 코오롱생명과학의 주장과는 전면 배치되는 내용이다. 이런 상황에서도 코오롱생명과학은 "몰랐다"는 입장을 고수하고 있다.

코오롱티슈진은 지난 3일 저녁 공시에서 "(인보사의) 위탁생산 업체(론자)가 자체 내부 기준으로 2017년 3월 1액과 2액에 대해 생산 가능 여부를 점검하는 과정에서 STR(유전학적 계통검사) 위탁 검사를 해 2액이 사람 단일세포주(293유래세포)이며 생산에 문제가 없음을 확인하고 생산한 사실이 있다는 사실을 코오롱생명과학에 통지했다"고 했다.

인보사는 사람 연골세포(HC)가 담긴 1액과 연골세포 성장인자(TGF-β1)를 도입한 형질전환세포(TC)가 담긴 2액으로 구성된 골관절염 유전자치료제 주사액이다. 최근 2액의 형질전환세포가 허가 당시 제출한 자료에 기재된 연골세포가 아닌 293유래세포로 드러났다.

공시에 따르면 코오롱티슈진은 인보사의 2액이 293유래세포라는 사실을 이미 2017년 3월에 알고 있었다는 얘기가 된다. 당시 STR 검사는 인보사의 임상 시약을 위탁 생산하던 론자가 진행했다. 특히 이 시기는 인보사가 국내에서 식품의약품안전처의 허가를 받은 2017년 7월보다 약 4개월 앞선 때다.

즉, 코오롱티슈진이 인보사의 성분이 2004년 특성 검사에서 밝혀진 연골세포가 아닌 293유래세포인 걸 알고 있으면서도 허가 당국인 식약처에 알리지 않은 셈이 된다.

코오롱생명과학은 코오롱티슈진이 이런 사실을 알고 있었다는 것조차 "몰랐다"는 입장을 유지하고 있다.

관련 업계에서는 코오롱생명과학의 주장이 사실이라면 자회사와의 내부 커뮤니케이션에 심각한 문제가 있는 셈이고, 알고 있었는데도 은폐했다면 '대국민 사기극'에 준하는 일이라고 지적하고 있다.

코오롱티슈진과 코오롱생명과학이 론자의 STR 검사 결과를 이제야 알린 것도 자의가 아니라는 점에서 석연치 않다.

이 사실을 공개한 건 지난해부터 진행 중인 일본 제약사 '미쓰비시다나베'와의 소송 때문이었다. 코오롱생명과학은 2016년 미쓰비시다나베와 총 5000억원 규모의 인보사 기술 수출 계약을 맺었다가 2017년 12월 파기됐다.

미쓰비디사다베는 계약 의무 불이행을 이유로 들었고, 지난해 4월 코오롱생명과학을 상대로 계약금 250억원을 돌려달라는 소송을 냈다.

미쓰비시다나베가 론자의 STR 검사에서 2액이 293유래세포였다는 사실이 드러났다는 내용을 계약 취소 사유에 추가하면서 외부에도 알려진 것이다.

이런 상황에서도 코오롱생명과학은 합리적인 해명을 내놓지 못하고 있다.

코오롱생명과학 관계자는 "2017년 론자가 STR 검사를 코오롱티슈진에 전달한 건 맞지만 당시 담당자들이 '생산이 가능하다'는 내용에만 집중해 내부 보고를 처리한 것으로 알고 있다"며 "코오롱생명과학에서는 해당 사실을 이제야 파악하게 돼 구체적인 경위를 파악 중"이라고 말했다.

코오롱생명과학은 실제 위의 기사를 부정하고 있다. 코오롱생명과학은 2019년 2월말 미국 BioReliance 社의 STR 분석 중 일부 데이터에서 293 유래세포의 가능성을 유선으로 전달 받았다고 했다. 그리고 당시 시점은 시험 과정 및 데이터에 대한 검증 절차가 완료되지 않은 단계였기 때문에, 해당 데이터가 신뢰성 있는 정보인지에 대한 고려가 필요했다고 한다.

임상결과가 의도한바 대로 나왔고, 부작용이 없었다면 성분이 다른 것이 큰 문제가 될까? 실제 비아그라 역시 탈모 방지를 위해 치료약을 개발하는 과정에서 나온 희대의 역작이었다.

결국 5월~6월중에 한국식약청에서 요구한 자료를 제출하고, 미국 FDA의 요구에 대응하면서 진실은 드러날 것이다.

Kolon_20190410150445.pdf
0.24MB

위 파일은 코오롱생명과확에서 게시한 해명자료이다.

Posted by 목표를 가지고 달린다
,
역사란 도전과 응전의 반복이다. - 토인비(영국의 역사학자)

 

인간의 역사는 도전으로 시작해 응전으로 한 라운드를 끝냅니다. 그리고 그 라운드는 계속 후대를 이어 반복되죠. 이렇게 한 라운드를 승리로 이끌며 시대를 바꾸는 위인들은 한가지 공통적인 특징이 있습니다. 바로 집안 배경, 백그라운드가 상대적으로 남들보다 좋다는 것입니다.

백그라운드의 형태가 정치적인 것이든 경제나 문화적인 것이든 아무 상관이 없습니다. 그저 남들보다 백그라운드가 좋은 사람들은 도전해도, 도전해도, 또 도전해도 쉽게 제로점으로 떨어지지 않습니다. 연속적인 도전 끝에 한 번만 성공하면 꾸준함의 승리라고 칭송 받습니다. 그리고 자서전도 쓰면서 이렇게 얘기하죠. "여러분 꿈과 희망을 가지세요!". 개 풀 뜯어먹는 소리.

반대로 흙수저들은 쉽게 시도조차 하지 못합니다. 실패하면 다시 제로점으로 내려가 처음부터 다시 시작해야 되거든요. 제로점이 뭡니까. 빚쟁이로 살 수도 있습니다. 본전 치기도 못할 수 있는데 도전해서 어디에 써먹겠습니까. 그냥 가만히 앉아서 얇고 길게 사는게 나을 수도 있습니다. 겨우 스펙쌓아 취업하고 일년에 천 만원씩 열심히 저축해서 3년 뒤에 삼 천만원 모았는데, 옆 친구는 대충 살면서도 부모님이 사준 아파트가 올라 2억을 버는게 현실입니다.

그럼에도 계속 시도를 해야하는 이유는 무엇일까요. 답은 의외로 간단합니다. 가만히 있으면, 평생 제자리이기 때문입니다. 세상은 증명으로 인정받는 시대고 증명하지 않으면 누군가 내 잠재력을 알아채 이끌어주지 않습니다. 오로지 내 스스로 나의 가치를 외부로 증명해 올라가야합니다. 계속적인 시도가 없다면 능력은 커녕 내가 누군지도 입증할 수가 없겠죠. 울면 우유주고 기저귀 갈아주는 아이처럼 징징거리며 살고 싶지만 이제 아무도 우리를 그렇게 케어해주지는 않습니다.

흙수저 DNA를 평생 후손들에게 대물림 하고 싶은 사람은 아무도 없습니다. 나 까지는 운명이라고 받아들이고 나 부터 흙수저 DNA에서 탈피해야 됩니다. 듀스 형님들의 가사처럼 나에게 씌워진 굴레를 벗어야 할 때는 어제도 아니고, 내일도 아닌 바로 지금이지 않을까요. 그렇지 않으면 평생 흙수저의 속박에서 벗어나지 못하게 될 겁니다.

큰 것을 투자하라는 것이 아닙니다. 지금 소비하는 시간들을 투자하십시요. 그리고 그것을 증명할 수 있는 자격증, 학위, 재테크로 결과를 만들어가세요.

돈을 투자할 때는, 공부하고 고민하고 심사숙고하여 결단하십시요. 돈이 없다. 청약이 확률이 낮다고 시도조차 하지 않는 사람보다 청약 피라도 팔아서 얼마라도 버는 사람이 결국에는 승리하는 것입니다. 움직이세요.

가만히 있으면 제자리입니다.

관련글

믿는다면, 될 때까지 허슬(Hustle)하라

Posted by 목표를 가지고 달린다
,

네이버 등 IT그룹도 외형 커지자 규제대상 포함

IT업계 "문어발 재벌 규제용 잣대로 IT기업 재단" 지적

자산기준으로 대기업집단 지정여부 결정

실제 기존 대기업 재벌과는 무관하게 규모가 커지고, 각각 독립적으로 운영하고 있어서, 재벌로 분류되는 것 자체는 부정적임에 반론의 여지가 없으나, 실제 악영향이 미비할지? 클지?는 조금더 지켜봐야 한다.

비록 카카오의 경우, '재벌' 분류는 있었으나, 최근 카카오톡 내의 "광고 도입"으로 최근 12만원을 드디어 넘겼다. 약 1년가까이 12만원에 몰린 매도량을 못 이기고, 계속 11만원 이하를 유지하던 것이 드디어 깨진 것이다.

최근 여러 커뮤니티에서는 비록 카카오 광고가 보기 싫더라도 카카오톡을 버리지 못할 것이며, 귀찮으면 '프리미엄'으로 월 X,000원이면 광고없는 카카오톡을 사용할 수 있다면 이번 결정에도 불구하고 한동안 상승세를 유지할 것으로 본다.(유투브 프리미엄 참조)

공정거래위원회의 5조원 이상 대기업집단(재벌) 지정 현황 발표를 앞두고 IT기업에 대한 별도 규정을 마련해야 한다는 목소리가 다시 나오고 있다. 신흥 IT기업과 과거 정부로부터 혜택을 받아 성장해 온 제조업 기반 재벌과는 규제 잣대를 달리해야 한다는 것이다. 공정위는 그러나 현 규정을 당분간 유지할 계획이다.

(앞서 대기업집단 기준 변경을 위해 연구용역을 맡기려는 시도도 했으나 입찰이 들어오지 않아 무산되기도 했다. )


이 같은 논의가 본격적으로 나온 건 2017년 전후다. 공정위는 그해 8월 네이버와 넥슨 2개 IT기업을 새로이 공시대상 기업집단(준대기업집단)으로 지정했다. 특히 네이버 측의 부인에도 이해진 네이버 글로벌투자책임자(GIO)를 네이버의 동일인(총수)으로 지정했다. 지난해도 넷마블이 새로이 준대기업집단에 들어가면서 현재 카카오를 포함해 총 4개 인터넷, 게임기업이 "재벌"로 분류된다.

공시대상기업집단이 되면 계열사 현황 및 거래내역 등 기업집단 정보를 의무 공시해야 한다. 또 특수관계인(총수일가)에 대한 부당한 이익제공(일감몰아주기)도 금지된다. 경제력 집중에 대한 시장과 경쟁당국의 감시망에 들어가는 것이다.

이 과정에서 단순히 자산 규모가 커졌다고 해서 과거 정부의 지원 아래 문어발식으로 성장한 제조업 기반의 재벌과 자수성가형 IT기업에 똑같은 규제를 적용하는 게 맞느냐는 지적도 꾸준히 나온다.

실제 네이버나 카카오 등 IT기업은 과거 재벌과 달리 총수일가 일감몰아주기나 순환출자 등 문제가 거의 없다. 지배구조도 투명하게 운영된다. 특히 4차 산업혁명 시

대에 다양한 대기업 형태가 나오고 있는데 특정 자산 기준만으로 재벌을 규제하는 데 현실적인 한계가 있다는 지적이 나온다. 인터넷·게임업계 특성상 재벌이라는 이미지가 붙기를 꺼리는 측면도 강하다.

그러나 당분간 대기업집단 기준 변경은 없을 전망이다. (앞서 대기업집단 기준 변경을 위해 연구용역 입찰 무산)

공정위는 2016년 자산 5조~10조원의 공시대상 기업집단과 10조원 이상 상호출자제한 기업집단을 구분해 규제 수준을 달리했다. 그러나 현 IT기업을 자산 100조원이 넘는 대기업과 같은 잣대로 규제한다는 점에는 변함이 없다.

최근 공정거래법 개편안을 내는 과정에서 현 상호출자제한기업 기준인 10조원을 국내총생산(GDP) 0.5% 이상으로 변경하는 내용을 담기는 했으나 획기적인 변화라고는 할 수 없다. 김 위원장이 4차산업혁명시대를 대비하는 공정거래법 개편이라고 강조한 것과는 차이가 있다.


이 가운데 네이버와 카카오는 올해 IT업계 최초로 자산총액 10조원 이상인 상호출자제한 기업집단으로 지정될 전망이다. 공정위는 현 기준에 따라 직전 사업연도 재무상태표상 자산총액 10조원 이상인 기업을 지정한다.

네이버와 카카오의 자산총액은 지난해 말 기준 각각 9조8811억원, 7조9595억원으로 계열사 자산까지 합치면 10조원이 넘을 전망이다. 이렇게 되면 기존 규제 외에 추가적으로 상호, 순환출자금지, 채무 보증금지, 금융, 보험사 의결권 제한 등을 적용 받는다.

IT업계 한 관계자는 "총수나 재벌이라는 단어 자체에 거부감이 있다"며 "이 법이 원래 문어발식 확장을 하던 기존 재벌을 감시하기 위해 출발했는데 IT업종에 적용하는 건 맞지 않는 측면이 있다"고 말했다.

Posted by 목표를 가지고 달린다
,