근무경력확인서와 건강보험자격득실확인서,국민연금가입자가입증명, 고용보험피보험자격내역서, 근로소득원천징수영수증 중 하나를 제출해야 한다.

 

근무경력확인서는 KOSA에서 다운로드해서 전 회사에 서류를 보내서 작성해달라고 요청해야 하니 번거롭다.

 

이 서류는 경력증명서를 제출해도 된다.

 

그리고 4대보험 관련 서류 역시 발급받는게 번거로운 일이다.

 

기술자 신청 과정 마지막에 행정정보 공동이용 사전동의를 하면 제출하지 않아도 된다.

 

경력증명서만 있으면 신청 가능하다. 경력증명서는 대부분 퇴사할때 1부를 발급받으니 그걸 이용하면 되고,

없으면 전화해서 발급받아야 한다. 보통 3년 정도는 발급 의무가 있다고 들은 것 같다.

 

KOSA 소프트웨어 기술자 경력관리시스템에 접속한다.

 

https://career.sw.or.kr/

 

소프트웨어기술자 경력관리시스템

SW기술자 경력확인 한번으로 두고두고 편리한 경력관리 SW기술자 경력확인제도는 SW기술자의 경력 입증의 어려움을 해소하고, 지속적인 경력관리를 통해 공신력있는 경력증빙 및 권익보호를 위

career.sw.or.kr

사이트에 접속하면 화면중앙에 'SW기술자 경력확인' 메뉴가 있다. 클릭한 후, 로그인을 하도록 한다.

그러면 기술자신청 화면으로 이동한다. 

 

'추가' 버튼을 클릭하면 근무경력을 입력하는 화면이 팝업된다..

근무기간을 정확하게 입력해야 한다. 이게 서류와 맞지 않으면 보완하라고 연락(문자/메일)이 온다.

 

회사검색 버튼을 클릭해서 회사 검색화면이 팝업된다.

회사가 검색되지 않으면 회사 신규등록 버튼을 클릭해서 회사를 등록해야 한다.

 

 

사업자번호 조회는 아래 사이트에서 가능하다.

https://bizno.net/

 

사업자등록번호조회

사업자등록번호조회 사업자등록번호로 사업자정보(회사명,사업자등록번호,주소,전화번호등)찾기 총 사업자 : 5,646,920 오늘 등록 사업자 : 0

bizno.net

 

사업등록상태 조회는 아래 사이트에서 가능하다.

https://teht.hometax.go.kr/websquare/websquare.html?w2xPath=/ui/ab/a/a/UTEABAAA13.xml 

 

국세청 홈택스

 

teht.hometax.go.kr

 

회사가 폐업한 경우, 사실증명(폐업) 이 필요하다.

손택스에서 발급이 가능한데 자세한 방법은 아래 링크로 확인한다.

 

증빙방법은 온라인 제출로 한다. 파일 선택을 클릭하고 경력증명서를 업로드한다.

저장버튼을 클릭한다.

 

https://lumasca.tistory.com/1154

 

신청할 근무경력을 체크한 후, 신청하기 버튼을 클릭한다.

 

이후 과정은 행정정보 이용 동의하고 결제를 하면 된다.

 

비용은 5,000원이 소요된다. 경력이 생길때마다 신청하기는 좀 아까우니 급한 경우가 아니면 경력을 한꺼번에 몰아서 신청하자.

 

 

'개발 > 경력관리' 카테고리의 다른 글

폐업사실증명원 발급  (0) 2022.10.04
Posted by Lumasca
,

경력증명을 위해 보통 건강보험 자격득실확인서로 증빙이 가능한데 폐업사실증명원 제출을 요구하는 경우가 있다.

 

모바일에서 발급받는 방법을 알아보자.

 

먼저 국세청 손택스 앱을 구동하고 로그인을 한다.

 

홈화면 상단 메뉴에서 민원증명을 선택한다.

 

민원증명 메뉴에서 사실증명 신청을 선택한다.

사실증명신청 화면에서 아래로 화면을 스크롤하면  '폐업자에 대한 업종등의 정보내역' 메뉴가 있다.

메뉴를 선택하면 아래와 같은 팝업이 노출된다. 확인을 클릭한다.

 

 

그러면 사실증명 관련 내용을 입력하는 화면이 나타난다.

스크롤을 아래로 이동한 모습이며, 화면 상단에는 개인정보를 입력하는 부분이 있다

사업자번호와 사용용도, 제출처를 선택하고 신청을 하면 된다.

처리결과는 3시간 이내로 나온다고 안내메시지로 알려준다.

 

 

'개발 > 경력관리' 카테고리의 다른 글

한국소프트웨어산업협회(KOSA) 기술자 신청  (1) 2022.10.13
Posted by Lumasca
,

텍스트와 이미지가 함께 구성하는 경우가 종종 발생한다. ImageView를 별도로 구성하지 않고 TextView의 속성을 이용하면 쉽게 처리할 수 있다.

 

아래는 layout XML 의 내용이다.

 

root layout 태그에 xmlns:app="http://schemas.android.com/apk/res-auto" 를 추가한다.

    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

보통 왼쪽 오른쪽에 추가하는 케이스가 많은데 오른쪽은   app:drawableEndCompat, 왼쪽은 app:drawableStartCompat 을 이용하면 된다. 그리고 텍스트와 이미지 사이 간격은  android:drawablePadding 으로 조절한다.

<TextView
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:fontFamily="@font/font_medium"
     android:includeFontPadding="false"
     android:text="더보기"
     android:textAppearance="@style/Text14White"
     app:drawableEndCompat="@drawable/icon_angle_greater"
     app:drawableStartCompat="@drawable/icon_info"
     android:drawablePadding="10dp"
/>

 

소스코드로 설정할 경우, TextView의 setCompoundDrawables(left, top, right, bottom) 메소드를 이용해서 drawable을 원하는 위치에 설정해주면 된다.

val iconInfo = ContextCompat.getDrawable(requireContext(), R.drawable.icon_info)
val iconBracket = ContextCompat.getDrawable(requireContext(), R.drawable.icon_angle_greater)
binding.tvPoint.setCompoundDrawables(icon, null, iconBracket, null)

'개발 > Android' 카테고리의 다른 글

풍선도움말 레이아웃 구현  (1) 2021.03.24
프로젝트에 NDK 모듈 추가하기  (0) 2021.03.05
ViewBinding  (0) 2021.02.25
Android Studio Rename Package  (0) 2021.02.24
Appium 설치  (0) 2021.02.17
Posted by Lumasca
,

Mac을 사용할때 Command(⌘) 를 조합해서 입력하는 경우가 많은데 이 키의 위치때문에 다른키랑 함께 누르기가 참 불편하다.

 

이때 키 맵핑 앱을 사용하면 키보드의 키 설정을 변경할 수 있다.

 

프로그램의 홈페이지로 이동해서 다운로드를 하자.

https://karabiner-elements.pqrs.org/

 

Karabiner-Elements

A powerful and stable keyboard customizer for macOS.

karabiner-elements.pqrs.org

Download 버튼의 아래 화살표를 클릭하면 MacOS 버전정보가 나타난다. 

본인의 OS에 맞는 버전을 선택하면 Karabiner-Elements dmg 파일을 다운로드 한다.

 

설치는 dmg 파일을 더블클릭하면 Karabiner-Elements.pkg 아이콘이 보인다. 더블클릭해서 설치를 진행한다.

 

설치가 완료되면 Karabiner-Elements 를 실행한다.

아래와 같은 화면이 나타나는데 화면 아래쪽에 있는 Add Item 버튼을 클릭하면 키 매핑정보를 추가할 수 있다.

From key는 변경하려는 실제 키, To key는 실제키 대신에 사용할 가상의 키라고 보면 된다.

 

개인적으로 command키가 caps lock 위치에 있는 것을 선호한다. (해피해킹 키보드처럼..) 키조합이 훨씬 편하다.

예) caps_lock 키에 left command 키를 매핑시키고자 한다면 From key 항목을 클릭해서 caps_lock을 선택하고, To key를 선택해서 left_command를 선택해주면 된다. caps lock 기능도 써야하니 left_command 키에는 caps_lock 키를 설정해 주었다.

 

key항목을 누르면 아래와 같이 다양한 키들을 매핑시킬 수 있다. 

F 키(Funcion key)도 설정을 변경할 수 있다.

'개발 > Dev Others' 카테고리의 다른 글

Shell 에서 excutable Jar 만들기  (0) 2020.03.26
Github commit  (0) 2020.01.03
MySQL Config  (0) 2017.07.04
파이어폭스 한글입력 오류  (0) 2016.09.13
PHP for IIS 설치  (2) 2009.11.22
Posted by Lumasca
,

위와 같은 뷰를 구현하려고 보니 기존에 나인패치 이미지를 이용하고 있었다. 

매번 이미지 요청하기도 그렇고 xml을 이용해 할 수 있는 방법을 찾아보았다.

 

먼저 우측하단 모서리를 제외한 코너에 라운드가 적용된 사각형 모양을 작성한다. (drawable/bg_banner.xml)

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <solid android:color="#462c94"></solid>

    <corners android:topLeftRadius="8dp" android:topRightRadius="8dp"
        android:bottomLeftRadius="8dp" android:bottomRightRadius="0dp" />

</shape>

 


다음은 사각형 아래에 붙는 꼬리 삼각형 모양을 작성한다. (drawable/bg_banner_tail.xml)

 

크기는 width, height

위치는 item 태그내부의 gravity

모양은 path 태그의 pathData

M x,y 는 (x,y)로 이동하여서 새로운 경로를 시작

Z 는 시작 경로지점으로 선을 그려서 경로를 닫음

 

위 속성을 적절히 수정해가면 삼각형 모양을 만들 수 있다.

 

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" >
<item
    android:width="8dp"
    android:height="8dp"
    android:gravity="bottom|left">
    <vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="8dp"
        android:height="8dp"
        android:viewportWidth="8.0"
        android:viewportHeight="8.0">
        <path
            android:pathData="M 0,8 8,8 0,0z"
            android:fillColor="#462c94"/>
    </vector>
</item>
</layer-list>

 


이제 위에서 작성한 2개의 drawable을 이용해 레이아웃을 작성한다. (layout.xml )

관리 편의상 TextView와 ImageView를 하나의 Layout에 넣는다. 

 

 

<androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/layoutBanner"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:visibility="visible"
            >

            <TextView
                android:id="@+id/txtBanner"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/bg_banner"
                android:gravity="center"
                android:paddingStart="8dp"
                android:paddingTop="8dp"
                android:paddingEnd="8dp"
                android:paddingBottom="8dp"
                android:text="풍선도움말"
                android:textColor="#ffffff"
                />

            <ImageView
                android:id="@+id/txtBannerTail"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/bg_banner_tail"
                app:layout_constraintBottom_toBottomOf="@+id/txtBanner"
                app:layout_constraintLeft_toRightOf="@+id/txtBanner" />
        </androidx.constraintlayout.widget.ConstraintLayout>

'개발 > Android' 카테고리의 다른 글

TextView 에 이미지 포함하기  (0) 2021.08.26
프로젝트에 NDK 모듈 추가하기  (0) 2021.03.05
ViewBinding  (0) 2021.02.25
Android Studio Rename Package  (0) 2021.02.24
Appium 설치  (0) 2021.02.17
Posted by Lumasca
,

NDK는 아래 링크에서 다운로드해서 설치하면 된다.

 

developer.android.com/ndk/downloads

 

NDK 다운로드  |  Android NDK  |  Android Developers

개발 플랫폼에 맞는 NDK 패키지를 선택합니다. NDK 최신 버전 및 이전 버전의 변경사항에 관한 정보는 NDK 버전 기록을 참조하세요. macOS용 공증된 NDK가 필요하다면 ZIP 파일이 아닌 App Bundle을 다운

developer.android.com

프로젝트의 local.properties에 경로를 설정해주면 된다. 

 

ndk.dir=/Users/계정/Library/Android/sdk/ndk
sdk.dir=/Users/계정/Library/Android/sdk

 

NDK 모듈은 보통 c++로 작성된 라이브러리를 사용하거나 보안을 위해서 사용하곤 한다.

JNI(Java Native Interface)는 자바기반의 클래스에서 Native 코드에 접근하기 위한 인터페이스이다.

 

Java <-> JNI <-> C/C++


이제 NDK 모듈을 추가해보자.

 

스튜디오의 File -> New -> New Module ... 메뉴를 선택한다.

 

 

모듈 타입을 정하는 화면이 나오는데 Android Library 를 선택하고 Next 버튼을 클릭한다.

모듈명, 패키지명을 적절히 입력하고 Finish를 클릭하면 모듈이 생성된다.

 

모듈의 main 폴더를 우클릭하고 신규 디렉토리를 생성한다.

 

새 디렉토리 이름은 jni를 입력하고 Enter 키를 누른다. 보통 jni 폴더를 생성해서 cpp나 mk 파일을 그 폴더 내부에 넣는다.

 

이제 make 파일을 생성하자.

jni 폴더를 우클릭하고 새 파일을 생성한다. 

 

 

 

Android.mk 내용

#소스파일 위치: 현재 디렉터리
LOCAL_PATH := $(call my-dir)

#동일한 변수가 중복 사용되는 것을 방지
include $(CLEAR_VARS)

#모듈 이름
LOCAL_MODULE    := crypto
#소스파일 목록(c, cpp)
LOCAL_SRC_FILES := crypto.cpp

#LOCAL_CPPFLAGS := -fexceptions
#LOCAL_DEFAULT_CPP_EXTENSION := cpp
#LOCAL_LDLIBS += -llog

#빌드적용. 이게 정의 안되면 빌드할 모듈이 없다고 함
include $(BUILD_SHARED_LIBRARY)

아래 파일은 컴파일시 추가적으로 설정이 필요할때 사용한다. 없어도 무관..

Application.mk

#NDK 프로젝트 위치
#APP_PROJECT_PATH
#모듈이름
#APP_MODULES

#debug, release(기본)
APP_OPTIM := debug

#C소스 컴파일 플래그
#APP_CFLAGS
#C++소스 컴파일 플래그
#APP_CXXFLAGS
#C/C++ 컴파일 플래그
APP_CPPFLAGS := -frtti -fexceptions

#지원할 ABI, 모두는 all
APP_ABI := arm64-v8a armeabi-v7a

#사용할 library
APP_STL := c++_static

#APP_PLATFORM := android-29
NDK_TOOLCHAIN_VERSION := clang

#특정 Android.mk를 지정. 기본은 jni 밑에 Android.mk 파일 사용.
#APP_BUID_SCRIPT

 

자바 클래스를 생성한다.

public class Crypto {

	//crypto.cpp 에 정의할 함수, native 키워드가 붙는다.
    public static native byte[] getKey();

    static {
    //라이브러리 로딩, LOCAL_MODULE에 작성한 이름(so 파일명 앞에 lib만 제거된 이름과 동일)
        System.loadLibrary("crypto");
    }
}

 

이제 c/c++ 함수를 작성할 소스파일( cpp) 파일을 생성한다.

jni 폴더를 우클릭하고 C/C++ Source File을 클릭한다.

 

cpp 소스파일에 테스트할 코드를 간단히 작성한다.

 

함수명 작성 규칙은 JNIEXPORT $리턴타입 JNICALL Java_$패키지명_$클래스명_$함수명 이다.

리턴타입은 JNI 타입인데 자바에서 사용하는 데이터 타입 앞에 j를 붙인다.

byte -> jbyte

배열은 뒤에 Array를 붙인다. jbyteArray

 

패키지명은 현재 NDK 모듈의 패키지명이다. 

클래스명은 위에서 생성한 자바 클래스 명이다. 함수명은 자바 클래스에 정의된 함수명이다.

자바클래스와 cpp 함수간에 규약이 맞지 않으면 오류로 표시된다.

#include <jni.h>
  
  const char key[] = {
		0x10, 0x12, 0x49, 0x51,
		0x55, 0x48, 0x76, 0x5F,
		0x65, 0x6A, 0x6C, 0x33,
		0x6E, 0x6K, 0x77, 0x44
	};
    
  extern "C"
  
  JNIEXPORT jbyteArray JNICALL Java_com_test_cryptolib_Crypto_getKey(
		JNIEnv* env, jobject){
    jbyteArray array = env->NewByteArray(16);

    jbyte *bytes = env->GetByteArrayElements(array, 0);
    for(int i =0; i < sizeof(key); i++){
        bytes[i] = key[i];
    }
    env->SetByteArrayRegion(array, 0, 16, bytes);

    env->ReleaseByteArrayElements(array, bytes, 0);

    return array;
  }

$cd src/main

이 폴더에서 빌드하지 않으면 Your APP_BUILD_SCRIPT points to an unknown file: 오류가 발생한다.

 

이제 빌드를 하면...

$ndk-build

 

src/main/libs 폴더에 APP_ABI 에 정의한 이름( arm64-v8a, armeabi-v7a) 으로 폴더별로 so 파일이 생성된다.

 

 

생성된 so 파일들은 사용할 프로젝트의 src/main/jniLibs/ 폴더에 복사한다. 폴더구조는 그대로 유지한다.

src/main/jniLibs/arm64-v8a, src/main/jniLibs/armeabi-v7a 

 

이제 라이브러리를 사용할 자바 클래스를 생성한다. 패키지 경로는 NDK 모듈의 경로를 그대로 사용해야 한다. 

위에서 생성한 자바 클래스를 패키지 경로 그대로 복사하도록 한다.

 

 

사용할때는 Crypto.getKey(); 처럼 호출하면 된다.

 

'개발 > Android' 카테고리의 다른 글

TextView 에 이미지 포함하기  (0) 2021.08.26
풍선도움말 레이아웃 구현  (1) 2021.03.24
ViewBinding  (0) 2021.02.25
Android Studio Rename Package  (0) 2021.02.24
Appium 설치  (0) 2021.02.17
Posted by Lumasca
,

ViewBinding

개발/Android 2021. 2. 25. 10:26

app모듈 build.gradle 파일에 viewBinding 사용 설정을 한다.

 

android {

    buildFeatures{
        viewBinding = true
    }
}

 

Binding 클래스이름은 레이아웃 xml 파일명을 파스칼케이스(단어 첫글자를 대문자표기)로 변환하여 Binding을 붙인다.

 

예)

activity_main.xml => ActivityMainBinding

fragment_menu.xml => FragmentMenuBinding

contact_list_item.xml => ContactListItemBinding

 

Activity

//바인딩 변수 생성할때 초기화
val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
 
 	//기존
    //setContentView(R.layout.activity_main) 
    
    //변경 binding.root로 전달
	setContentView(binding.root)
}

fun initView(){
	binding.txtName.text = "Name" //사용은 기존코드에 binding. 만 앞에 추가하면 된다.
}

 

Fragment

//바인딩 변수
private lateinit var binding:FragmentMenuBinding

override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {

    //기존
    //val view = inflater.inflate(R.layout.fragment_menu, container, false)		   
    //return view
    
    //변경
    binding = FragmentMenuBinding.inflate(inflater, container, false)
    return binding.root
}

fun initEvent(){
    binding.btnUp.setOnclickListener{v:View? -> //TODO }
}

 

Adapter

class ContactListAdapter(val contacts: ArrayList<Contact>) : RecyclerView.Adapter<ContactListAdapter.ViewHolder>() {

	//기존
    //class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){
    //변경 binding.root로 전달
    class ViewHolder(val binding: ContactListItemBinding) : RecyclerView.ViewHolder(binding.root){

        fun bindItems(contact:Contact){
        	//기존
            //val tvName = itemView.findViewById(R.id.tvName) as TextView
            //val tvNumber = itemView.findViewById(R.id.tvNumber) as TextView
            
            //변경 binding 추가
            binding.tvName.text = "("+ contact.id +") "+ contact.name
            binding.tvNumber.text = contact.number
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ContactListAdapter.ViewHolder {

		//기존
		//val v = LayoutInflater.from(parent.context).inflate(R.layout.contact_list_item, parent, false)
		//return ViewHolder(v)

		//변경
		val binding = ContactListItemBinding.inflate(LayoutInflater.from(parent.context), parent, false))
        return ViewHolder(binding)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.bindItems(contacts[position])
    }

    override fun getItemCount(): Int {
        return contacts.size
    }
}

'개발 > Android' 카테고리의 다른 글

풍선도움말 레이아웃 구현  (1) 2021.03.24
프로젝트에 NDK 모듈 추가하기  (0) 2021.03.05
Android Studio Rename Package  (0) 2021.02.24
Appium 설치  (0) 2021.02.17
Appium 실행  (0) 2021.02.17
Posted by Lumasca
,

 

Studio의 Project view에서 Android 로 변경한다.

 

옵션메뉴(톱니바퀴모양) 버튼을 누르고, Compact Middle Packages 에 체크가 해제되었는지 확인한다. 체크되었으면 클릭해서 선택해제한다.  이 옵션이 체크되어 있으면 중간 패키지명을 변경할 수 없다.

그러면 아래와같이 패키지 경로를 계층적으로 표시한다.

변경하고자 하는 계층에서 마우스를 우클릭해서 Refactor 메뉴로 이동한다.

Reactor 서브메뉴에서 Rename을 선택한다.

 

그러면 아래와 같은 경고창이 팝업된다.

Rename package를 클릭한다. Rename directory는 디렉터리 이름만 변경하는 기능이다.

 

변경하고싶은 이름을 입력하고 Refactor 버튼을 클릭한다.

 

상황에 따라서 Studio 하단에 Find Refactoring Preview 창이 노출될 수 있는데 'Do Refactor' 버튼을 클릭하면 되겠다.

 

마지막으로 app 모듈의 build.gradle 파일의 applicationId를 수정하면 끝이다.

 

 

'개발 > Android' 카테고리의 다른 글

프로젝트에 NDK 모듈 추가하기  (0) 2021.03.05
ViewBinding  (0) 2021.02.25
Appium 설치  (0) 2021.02.17
Appium 실행  (0) 2021.02.17
Android Screen Capture(화면캡쳐)  (0) 2021.02.16
Posted by Lumasca
,