쿠1팡 알바 중, 무언가를 끌고 천천히 이동하다가 마주보는 방향에서 다른 사람도 천천히 무언가를 끌고 오는 것을 보았다.

상대방도 이를 인지하고 서로 알아서 피해서 갔다.

 

이 모습을 본 "사원A"가, 다른 사람과 충돌할 뻔했다며 안전에 유의하라는 말을 했다.

아니 서로 인지하고 옆에 붙어서 알아서 잘 피해갔는데, 이게 무슨 소리지?

라고 말하면 싸울 것 같으니 일단 알겠다고 답하면서 적당히 넘겼다.

 

아~ 저 사원님은 보고 싶은 대로 보는 사람이구나.

본인이 거짓말을 하는 것도 모르는 상태로 허위보고를 할 사람이니, 중간관리자 같은 거 시키면 절대로 안 될 사람이네.

라는 생각이 오랜만에 들었다. 예전에도 저런 사람을 본 적이 있기 때문

 

 

종종 택배가 출고되는 과정에서, 세제나 섬유유연제 등이 터져서 택배나 바구니 등에 묻는 경우가 있다.

이런 경우를 오염되었다고 표현한다.

 

"사원A"가 내 앞에 있는 바구니에 오염된 택배를 담아놓고 갔다.

5초 정도 뒤에 돌아와서 오염된 택배를 보더니, 나보고 오염된 바구니를 사용했냐고 물어봤다.

 

아니 지가 오염된 택배 담아놓고, 왜 내 탓을 하지?

바구니가 오염된 것이였다면, 택배 위가 아니라 택배 아래나 옆에 이상한 것이 묻어있었겠지.

그 직후에 "사원A"가 걸레를 들고와서 알아서 닦아서 처리하는 것을 보고, 이번에도 사실을 정정하면 싸울 것 같으니 그냥 넘겼다.

 

진짜 보고 싶은 대로 이 세상을 보는구나.

 

 

그날 퇴근하기 전, "사원A"는 정규직이라는 것을 알게 되었다.

쿠2팡 센터에서 정규직 지원들은 계약직&일용직처럼 일을 하면서도, 본인이 담당하는 구역을 보며 관리자처럼 이것저것 지시를 내린다.

"중간관리자 같은 거 시키면 절대로 안 될 사람"이 중간 관리자를 하고 있는 것.

 

그때 이런 나쁜 생각이 떠올랐다.

아하! 저런식으로 남탓을 해서, 본인의 경쟁자들을 다 보내버리고 지 혼자 정규직이 되었나보구나.

저 사람은 수준이 저 정도 밖에 안되어서, "누구나 할 수 있는 일"을 직업으로 가지고 있구나.

직업에 귀천은 없다는 말은 있지만, 그... 아니다. 통계가 존재한다고 하면 편견이라면서 욕먹는다.

 

 

"사원A"는 본인이 정규직이라고 말한 적은 없고, 내가 물어본 적도 없다.

원래 알고 싶으면 다 알 수 있다. 다만, 이번에는 저절로 알게된 것

작년 말에 대만 타이베이에 다녀왔어요.

마침 실시간 열차 위치를 볼 수 있는 공식 앱을 찾았던지라, 제 홈페이지에 타이베이 지하철 실시간 정보도 추가하려고 했어요.

 

 

마침 웹앱이라 F12 딸깍으로 해결할 수 있을 것 같았기에, 귀국 전에 다 뜯어서 추가하는 것을 목표로 삼았으나, 암호화가 섞여있는지라 실패.

하지만 최근에 다시 시도해서 뚫는 것을 성공했어요. 일단 처음으로 접근했던 노선인 단수이·신이선부터 완성.

대만에서 교통카드를 처음으로 샀던 곳이 단수이·신이선의 종점이었어요.

상/하행이 반대로 나오고 있는 것은 기분탓

 

 

node.js로 구현하고 있어요.

웹사이트 소스코드를 분석할 때 q라는 함수와 qo라는 함수가 뭔가 했는데, 알고보니 q는 require고 qo는 CryptoJS였어요.

 

 

이번에 다녀온 대만 패키지 여행이 몹시 만족스럽지 못했기 때문에, 나중에 시간도 많고 돈도 많으면 혼자 다녀올 계획이에요.

타이베이로 입국해서 가오슝으로 나올까 생각 중.

 

다시 대만에 가게 되면 유용하게 사용할 것 같네요. 모든 노선 구현이 완료되면 SinZ로 편입될 예정이에요.

 

깃허브 : https://github.com/sinz32/TaipeiMRT

 

GitHub - sinz32/TaipeiMRT: 대만 타이베이 지하철 실시간 열차 위치

대만 타이베이 지하철 실시간 열차 위치. Contribute to sinz32/TaipeiMRT development by creating an account on GitHub.

github.com

 

2달 동안 글을 올리지 않았네요.

메인화면이 거의 그대로인 것 말고는 사실상 완성했어요.

 

이건 웹에서 접속한 모습

 

 

이건 앱을 실행한 모습. 안드로이드용 앱이고, iOS용 앱은 만들지 않았어요.

 

 

앱 내부에 웹을 띄우는 방식이고, 웹사이트가 본인이 앱 안에서 띄워졌는지 아닌지 감지해서 상단바 부분을 없애는 방식이에요.

웹사이트 그 자체도 앱인 것처럼 작동하도록 구현했는데, 아직 PWA도 구현하지는 않았어요.

 

 

도쿄 도영 지하철

도쿄도 교통국에서 운영하는 도에이 지하철 4곳. 아사쿠사선과 미타선

 

신주쿠선과 오에도선

 

 

오에도선의 경우, 순환선처럼 생겼지만 6자 모양으로 돌아 들어갔다가 반대 방향으로 다시 나오는 방식으로 운행해요.

 

 

교통국에서 운영하는 지하철은 아닌 궤도 노선이 2개 더 있지만, 법적으로 지하철은 아니기 때문에 이번 프로젝트에서는 제외되었어요.

 

도쿄메트로

히비야선, 긴자선, 마루노우치선. 긴자선은 아시아에서 가장 오래된 노선이고, 마루노우치선은 "지하철" 중 유일하게 도쿄역을 지나가요.

 

 

도자이선, 난보쿠선. 각각 동서선, 남북선이라는 뜻

 

 

유라쿠초선, 치요다선

 

 

한조몬선, 후쿠토신선

 

 

도에이(도영) 지하철은 실시간 열차 위치를 알려주는 Open API가 존재하는데, 도쿄메트로는 있었다가 사라졌어요.

그래서 도쿄메트로 열차 위치는 시간표 기반으로 구현된 상태에요.

 

 

웹 버전 주소

https://metro.sinz.me/tokyo/

 

도쿄 지하철 실시간 위치

상단 왼쪽에 있는 버튼을 눌러서 노선을 선택하세요.

metro.sinz.me

 

앱 다운로드

https://github.com/sinz32/TokyoSubway/releases/tag/v1.0

 

Release 도쿄 지하철 실시간 v1.0 · sinz32/TokyoSubway

지원하는 노선 목록 도영 지하철 (실시간 정보) 아사쿠사선 미타선 신주쿠선 오에도선 도쿄메트로 (시간표 기반 정보) 히비야선 긴자선 마루노우치선 도자이선 난보쿠선 유라쿠초선 치요다선

github.com

 

소스코드

앱 : Java 사용

웹 프론트엔드 : HTML, CSS, JavaScript 사용 (바닐라 웹)

웹 백엔드 : php 사용

https://github.com/sinz32/TokyoSubway

 

GitHub - sinz32/TokyoSubway: 도쿄 지하철 운행 정보 (열차 위치)

도쿄 지하철 운행 정보 (열차 위치). Contribute to sinz32/TokyoSubway development by creating an account on GitHub.

github.com

 

 


그리고 이제 이 프로젝트는 SinZ로 편입됩니다. 제외된 노선 2곳도 이미 SinZ에서는 구현 완료된 상태

 

 

음성 인식이 시작되면, 이런식으로 화면에 무언가가 나오는 것을 구현했어요.

 

 

옛날에는 메모장으로 이런 거 만드는 굇수들이 가끔 있었는데, 인공능지한테 대충 자비스 비슷한거 만들어달라고 하니까 바로 초안 나오네요.

저거 HTML이랑 CSS만 사용해서 구현한거예요.

 

동영상으로 올리고 싶었는데, 티스토리에 있던 동영상 업로드 기능이 사라졌네요.

기존에 올렸던 영상들도 다 삭제될 예정.

'프로젝트 > SinZ' 카테고리의 다른 글

새로운 고민  (0) 2026.02.14
SinZ, Main Project : AI assistant since 2016  (1) 2026.02.14
고민 중  (0) 2026.02.12

OKICA는 유이레일(오키나와 모노레일) 등에서 사용할 수 있는 비표준 일본 교통카드에요.

최근에 오키나와에 놀러갔었는데, 가는 김에 기계에서 뽑아왔어요.

 

일본 오키나와 교통카드 OKICA (오키카)

 

 

OKICA 카드에 저장된 내용을 읽는 방법은 Suica 읽는 방법과 거의 동일해요.

서비스 코드 빼고는 전부 동일.

 

앱 실행 모습. 스마트폰의 NFC 기능을 활성화시키고, NFC 모듈 부분에 카드를 접촉하면 이렇게 카드에 기록된 잔액을 불러와요.

 

 

소스코드 : https://github.com/sinz32/OKICA-Reader

 

GitHub - sinz32/OKICA-Reader: OKICA (Okinawa IC Card) balance reader android app / 沖縄

OKICA (Okinawa IC Card) balance reader android app / 沖縄 - sinz32/OKICA-Reader

github.com

 

 

예전에 만들었던 한국&일본 교통카드 잔액조회 앱과 함께 SinZ로 흡수될 예정.

https://sinzdev.tistory.com/13

 

한국, 일본 교통카드 잔액조회 앱 완성

예전에 자바로 만들었던 앱을 코틀린을 사용해서 다시 만들어보았어요.여러가지 이유로, Play 스토어에 올릴 계획은 없어요. 스마트폰 자체에 있는 NFC 기능을 통해 교통카드에 저장된 잔액 정보

sinzdev.tistory.com

 

Android 15 (SDK 레벨 35) 이상을 타겟팅하는 앱은 안드로이드 15 이상인 기기에서 무조건 전체화면으로 실행되어요.

전체화면에 맞는 UI인지 아닌지는 알 바 아니고 무조건 전체화면으로 실행이 되는지라, 앱 디자인이 개판이 되거나, 일부 요소가 보이지 않는 현상이 발생해요.

 

Jetpack Compose에 있는 TopAppBar 같은 것을 사용하고 계셨다면, 아래에 있는 방법3이 자동으로 적용되고 있는 상태에요.

그래서 아마 디자인이 개판나지는 않을거예요.


방법 1. 대충 땜빵

안드로이드 15 미만을 타겟팅하도록 설정하면 되지만, 그러면 Play 스토어에 앱을 올리지 못해요.

"현재 출시된 안드로이드 최신버전으로부터 1년 이내에 출시된 버전"을 타겟팅해야 앱을 올릴 수 있어요.

기존에 올린 앱들도 최신 안드로이드를 타겟팅하는 업데이트를 출시하지 않으면, 검색해도 나오지 않거나 설치하지 못하게 구글이 막아버려요.

아주 잘 작동하고 아무런 문제가 없어도, 아무튼 구버전용이라 작동 안한다는 헛소리와 함께 설치나 검색 불가능

 

방법 2. 임시 땜빵

<style> 부분에 이런걸 적어주면 안드로이드 15까지는 대충 땜빵할 수 있어요.

<style 어쩌고저쩌고>
    <item name="android:windowOptOutEdgeToEdgeEnforcement">true</item>
</style>

 

문제는 저건 안드로이드 16을 타겟팅하는 앱이 안드로이드 16에서 실행되는 경우는 작동하지 않아요.

게시글 작성 시점 기준으로, 안드로이드 15가 작년에 나왔고 요즘 폰들은 16이 설치되니 이제는 더 이상 사용하기에는 힘든 임시 땜빵 방식이에요.

 

방법 3. 시스템 영역 만큼 여백 넣기

 

건들면 알림창이 내려오고, 시간 등이 표시되는 윗부분은 status bar, 홉버튼, 뒤로가기 버튼 등이 있는 아래 부분은 navigation bar.

setContentView를 할 때 사용하는 view에다가 그 크기 만큼의 여백을 위아래에 넣으면 해결.

여기서 시스템 UI와 겹치지 않도록 필요한 화면 가장자리 여백을 대충 인셋이라고 불러요.

참고로, 앱과 겹치는 네이게이션 바의 불투명도는 80%

방법 3-1. ActionBar를 사용하는 경우

원래는 왼쪽 모습처럼 나와야 하지만, 오른쪽처럼 돼요.

액티비티의 내용물 윗부분이 액션바 아래로 들어가버리고, 네이게이션 바와 겹치게 표시되는 중

 

액티비티 안에 있는 view에 인셋만큼 여백을 넣어주면 해결

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(1);
        layout.setBackgroundColor(Color.CYAN);
        TextView txt = new TextView(this);
        txt.setText("TEST\nTEST\nTEST\nTEST\nTEST");
        txt.setTextSize(32);
        txt.setTextColor(Color.BLACK);
        txt.setGravity(Gravity.CENTER);
        layout.addView(txt);
        setContentView(layout);
        preventEdgeToEdge();
    }

    public void preventEdgeToEdge() {
        View rootView = findViewById(android.R.id.content);
        if (Build.VERSION.SDK_INT >= 35) rootView.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
            @Override
            public WindowInsets onApplyWindowInsets(View view, WindowInsets windowInsets) {
                Insets sb = windowInsets.getInsets(WindowInsets.Type.systemBars());
                view.setPadding(sb.left, sb.top, sb.right, sb.bottom);
                return WindowInsets.CONSUMED;
            }
        });
    }
}

 

 

setContentView(); 메서드의 인자로 넘긴 view가 액티비티 안에 바로 들어가는 것은 아니고, 액티비티 안에 뭐 안에 ... view 안에 넘긴 view가 들어가요.

액티비티와 넘긴 view 사이에 들어가는 것들은 Activity인지, AppCompatActivity인지에 따라 달라져요.

 

findViewById(android.R.id.content);은 FrameLayout를 반환하고, setContentView(); 메서드의 인자로 넘켰던 view가 그 안에 들어가있어요.

방법 3-2. ToolBar를 사용하는 경우

ToolBar는 왼쪽 사진처럼 위 아래가 싹 다 시스템 영역과 겹치는 상태로 나와요.

위에서 언급한 소스코드를 사용하면 오른쪽 사진처럼 ToolBar의 위가 비어버려요. 정확히는 기본 배경식인 흰색이 들어간거예요.

 

 

저 윗부분은 status bar가 아니기 때문에, status bar를 바꿀 때 사용하는 방식들은 전부 작동하지 않을거예요.

저 영역까지 findViewById(android.R.id.content);니까, findViewById(android.R.id.content);의 배경색을 설정하면 ToolBar 윗부분의 색을 설정할 수 있어요.

 

문제는 그러면 navigation bar 부분의 색도 함께 바뀌어요.

findViewById(android.R.id.content);의 아래 부분에 navigation bar 만큼의 margin을 주는 방식으로 해결하면 되긴 해요.

 

하지만, status bar와 크기가 동일한 뷰를 status bar 위치에 넣는 방식을 사용할거예요.

 

요약

액티비티 안에 있는 view에 인셋만큼 여백을 넣기. 상단 여백 제외

 - 상단 여백도 넣으면 ToolBar 위가 비어버림

액티비티 안에 있는 view의 안에 있는 view에 인셋만큼 상단 여백 넣기

 - 여기서 건드는 view는 setContentView의 인자로 넘겼던 view

status bar와 크기가 동일한 view를 ToolBar 위에 넣기

 - 넣지 않는다면, ToolBar 윗부분의 색은 setContentView의 인자로 넘겼던 view의 배경색이 됨

public class TestActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(1);
        layout.setBackgroundColor(Color.CYAN);
        Toolbar title = new Toolbar(this);
        title.setTitle("test");
        title.setTitleTextColor(Color.WHITE);
        title.setBackgroundColor(Color.parseColor("#212121"));
        setActionBar(title);
        layout.addView(title);

        TextView txt = new TextView(this);
        txt.setText("TEST\nTEST\nTEST\nTEST\nTEST");
        txt.setTextSize(32);
        txt.setTextColor(Color.BLACK);
        txt.setGravity(Gravity.CENTER);
        layout.addView(txt);
        setContentView(layout);
        preventEdgeToEdge();
    }

    public void preventEdgeToEdge() {
        FrameLayout rootView = (FrameLayout)findViewById(android.R.id.content);
        View contentView = rootView.getChildAt(0);  //setContentView의 인자로 넘겼던 view

        //status bar의 자리에 들어갈 view
        View fakeStatusBar = new View(this);
        fakeStatusBar.setBackgroundColor(Color.BLACK);
        rootView.addView(fakeStatusBar, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0));

        if (Build.VERSION.SDK_INT >= 35) rootView.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
            @Override
            public WindowInsets onApplyWindowInsets(View view, WindowInsets windowInsets) {
                Insets sb = windowInsets.getInsets(WindowInsets.Type.systemBars());

                ViewGroup.LayoutParams params = fakeStatusBar.getLayoutParams();
                params.height = sb.top; //status bar와 높이가 동일하도록 설정
                fakeStatusBar.setLayoutParams(params);

                //상단 여백 빼고 설정 - 여기에 여백이 들어가면 status bar 부분이 비어버림
                rootView.setPadding(sb.left, rootView.getPaddingTop(), sb.right, sb.bottom);

                //상단 여백만 설정 - 위에서 여백 설정했던 view의 자식 view
                contentView.setPadding(contentView.getPaddingLeft(), sb.top, contentView.getPaddingRight(), contentView.getPaddingBottom());
                return WindowInsets.CONSUMED;
            }
        });
    }
}

 

 

setContentView();를 먼저 호출한 뒤에 preventEdgeToEdge();를 호출해야 해요.

 

실행 결과.

 

옛날에 colorPrimary로 ActionBar 배경색 넣고 colorPrimaryDark로 status bar 배경색을 조금 어둠게 설정하던 그 시절처럼 사용할 수 있어요.

대충 코틀린이 안드로이드 공식 개발 언어로 지정되기 이전 시절 이야기.

앱 용량을 줄이기 위해 Java 언어만 사용할지, 아니면 Kotlin도 섞어서 사용할지 고민이 되네요.

Kotlin 섞는 순간 앱 용량이 0.7MB 정도는 증가할텐데, 어차피 androidx 넣은 시점에서 1MB 넘어서 의미가 없으려나.

 

기능 1~2개 정도만 있는 간단한 앱을 만들 때,

없어도 되는 것들을 다 빼고나서 만들면 .apk 파일 용량이 0.1MB도 안되게 만든 적이 종종 있어요.

 

Kotlin은 사용해도, Compose는 절대로 사용하지 않을 예정.

Compose를 사용한다는 사실만으로, 용량이 너무 많이 늘어나요.

다른 앱을 만들 때에 Compose를 사용할 일은 있어도, SinZ를 만들 때는 Compose를 사용하지 않을 듯

 

사실 자바 숙련도가 나름 높고 Compose는 Hello World 말고는 써본 적이 없는지라, 자바로 만드는게 더 빨라요.

Compose가 더 간결하고 선언형 어쩌고라면서 더 빠르다곤 하는데,

어차피 전 xml 없이 자바로만 만드는지라 선언형인건 사실상 똑같고, 자바 숙련도 + 자동완성 조합이면 Compose랑 개발 속도는 비슷할 듯.

오히려 이거 머드라 하면서 Compose 관련 지식 검색하는 시간 때문에 더 느릴 수도 있어요.

 

xml을 사용하지 않는 이유는 폰마크 비공식 모드의 영향 때문

폰마크 비공식 모드에서 GUI를 만드는 방법이, 안드로이드 앱에서 자바로 GUI를 만드는 것을 문법만 자바스크립트로 바꿔서 작성하는 방식

그래서 폰마크 비공식 모드 만들 때 하던거 그대로 문법만 자바로 바꿔서 앱 개발에 사용하고 있어요.

 

'프로젝트 > SinZ' 카테고리의 다른 글

음성 인식 애니메이션 구현  (0) 2026.02.17
SinZ, Main Project : AI assistant since 2016  (1) 2026.02.14
고민 중  (0) 2026.02.12

중간 과정이 조금 많이 복잡하고 형태도 다르지만, 아무튼 프로토타입 최초 실행 시점은 2016년이니 Since 2016.

 

음성 인식을 통해 여러가지 기능 실행 가능

시리는 있었지만 빅스비는 없던 시절부터 만들어진 기능

 

게임 내에서 요소를 음성 인식을 통해 조작 가능한 모드 형식으로 존재하다가, 2017년에 앱으로 개발 시작

부가 기능들 중 하나를 분리해서 별도의 앱으로 출시 가능할 정도로, 여러가지 기능 탑재

 - Play 스토어에 출시하여 1만 다운로드 달성한 앱이 있음

 

GPT-3.5가 탑재되어 공개된 ChatGPT가 없던 시절부터, 사용자의 질문에 대한 적당한 답변을 생성하는 기능 탑재

아예 GPT-1도 존재하지 않던 시절에도, 문장 생성은 아니지만 사전에 저장된 문장들 중, 사용자의 질문에 대한 적절한 답변을 꺼내오는 대화 기능 탑재

 

 

2017년에 시작된 앱도 여전히 계속 유지보수 하는 중 (이하 본체)

SinZ라는 이름으로 새로 개발할 계획. 형식상으로는 2016년 최초버전의 새로운 포크지만, 형태는 완전히 다름

"본체를 만든 사람"과 "SinZ를 만든 사람"이 마치 다른 인물인 것처럼 하는 것이 목적.

내가 본체를 만들었다는 말을 하면, 노출되는 정보가 너무 많음.

 

디지털 어시스턴트로 개발될 예정

메인 화면에는 탑재된 기능들을 직접 눌러서 실행 가능한 목록이 들어갈 예정

본체와의 공존을 위해, 별도의 방식으로 호출 가능한 잔기술도 함께 들어갈 예정

 

탑재 확정 기능

 - 한국 전철 실시간 위치

 - 일본 도쿄 지하철 실시간 위치

 - 교통카드 잔액조회

 - 여자친구 노래방번호 목록

 - 손전등

 - 국내 날씨 (기상청)

 

탑재 보류 기능

 - 철도 노선도

     - 내가 직접 그린 노선도는 현재 본체에서 사용 중

 - 대만 타이베이 지하철 실시간 위치

     - 실시간 열차 위치를 획득할 수 있는 경로는 이미 분석이 끝났으나, 획득한 정보를 보여주는 앱 등은 아직 완성하지 않음

 - 웹 브라우저

     - 그냥 기기에 설치된 기본 웹 브라우저 사용 예정

     - 혹시라도 웹 화면을 바로 보여주어야 할 기능이 있다면, F12와 함께 구현되어 탑재 예정

 - 해외 날씨

 - LLM 연결

 - 기기에 설치된 앱 실행

 

미탑재 확정 기능

 - 뮤직 플레이어

     - 잘 쓰고 있는 삼성 뮤직 실행시킬 계획

 - 음성 출력 (TTS)

     - 어차피 사실상 폰은 무음모드로 해두고 있어서, 음성 피드백을 받을 필요가 없음

 - 번역기

     - 평소에 그냥 구글 번역 쓰는 중

 

특이사항

 - Google Play 정책을 의도적으로 위반할 예정

 - 내가 배포한 .apk 파일 주워다가 멋대로 스토어에 올리는 것 방지.

'프로젝트 > SinZ' 카테고리의 다른 글

음성 인식 애니메이션 구현  (0) 2026.02.17
새로운 고민  (0) 2026.02.14
고민 중  (0) 2026.02.12

2021년에 시작했던 프로젝트를 기반으로 만들었다고 정할지,

2017년에 시작했던 프로젝트를 기반으로 만들었다고 정할지 고민 중

 

둘 다 비슷한 기능 구현한건데, 포폴용이면 2017년부터 시작했다고 말하는게 더 좋겠지.

사실 2021년에 시작한 프로젝트도, 2017년에 시작했던 것 기반으로 새로 만든거긴 한데

 

프로그래밍 관련된 것들은 주로 온라인에서의 활동이 위주였어서, 온라인 활동 공개하지 않는다면 정작 현실세계에서 뭐 자랑할게 없어요.


 

고민 끝났으니, 카테고리 이동

고민 결론 : https://sinzdev.tistory.com/45

 

SinZ, Main Project : AI assistant since 2016

중간 과정이 조금 많이 복잡하고 형태도 다르지만, 아무튼 프로토타입 최초 실행 시점은 2016년이니 Since 2016. 음성 인식을 통해 여러가지 기능 실행 가능시리는 있었지만 빅스비는 없던 시절부터

sinzdev.tistory.com

'프로젝트 > SinZ' 카테고리의 다른 글

음성 인식 애니메이션 구현  (0) 2026.02.17
새로운 고민  (0) 2026.02.14
SinZ, Main Project : AI assistant since 2016  (1) 2026.02.14

동일 모델을 새로 살지 최근 모델로 갈아탈지 계속 고민 중

 

"접히는 폰 + S펜 내장 + 아주 좋은 카메라 + Micro SD 카드 지원"를 원하는데, 그런 스마트폰은 이 세상에 존재하지 않아요.

갤럭시 노트 20 울트라를 아직도 쓰는 중인데, 이게 접히는 것만 제외하면 모든 조건을 만족 중

나중에 갤럭시 Z폴드에 S펜이 내장되기 시작할 때까지 버티려고 했는데, 폰이 고장나버릴 줄은 몰랐지.

 

접히는 폰

 - S펜을 지원하지 않거나

 - 지원해도 기기 내부에 S펜이 내장되지 않음

 

S펜이 내장되는 폰

 - Micro SD 카드 미지원

 

아주 좋은 카메라가 있는 폰

 - Micro SD 카드 미지원

 

Micro SD 카드가 있는 폰

 - 지금 사용 중인 스마트폰이 Micro SD 카드를 지원하는 마지막 갤럭시

 - 내장메모리 용량으로 장사를 하려고 하는지, 클라우드 장사를 하려고 하는지 모르겠으나 미지원


 

대안1) 일단 그냥 살기

 - 사용은 할 수 있으니, 일단 그냥 살기

 - C타입 포트가 죽어서 핸드폰 충전이 안됨. 무선충전은 된다는 뜻

 - 해당 단자 문제가 아니라, 메인보드 고장이라 수리비가 50만원을 넘어서 사실상 수리 불가능

 - 이곳저곳 고장난 곳 많아서, 수리 과정에서 수리비가 더 올라갈 수도 있음.

 - 메인보드, 뒷판, 액정 유리, 액정 내부, 폰 분해해야 보이는 내부 부품 등 대충 계산해보니 100만원 넘길 듯.

 

대안2) 당근에서 똑같은 폰 구매

 - 말끔한 폰은 30만원에 구매 가능, 어디 찍힌 폰은 20만원에 구매 가능

 - 일단 그냥 살거나, 당근에서 사와서 원하는 폰이 나올 때까지 버티기.

 - 2월 말에 갤럭시 S26이 공개된다는 소문이 있으니, 일단 그때까지라도 버티기

 

대안3) 갤럭시 S25 울트라

 - 지금 사용중인 폰에서 Micro SD 카드를 제외한 모든 조건 만족

 - 너무 크고 무겁게 생겼지만, 실제로는 지금 쓰는 폰이랑 크기와 무게 모두 비슷

 

대안4) 갤럭시 Z플립 7

 - 문득 작은 폰이 쓰고 싶어짐

 - S펜은 아주 잘 쓰고 있지만, 손가락으로도 어케어케 가능은 한 상태

 - 내장메모리 512GB짜리로 사서 Micro SD 카드 없이 잘 버티고,

 - 이전 폰을 카메라 전용으로 가끔 따로 들고다니면 해결

 

대안5) 갤럭시 Z폴드 7

 - S펜이 내장되거나 계속 지원했다면 좋았을 폰 (폴드7의 두께가 반으로 줄어들었으나, S펜 미지원)

 - S펜은 화면 터치와는 무관하게, 펜과 폰이 별도로 통신하는 방식. 폰에 관련 부품이 없다면 S펜 아예 사용 불가능

 - 내장메모리 512GB나 1TB짜리로 사서 Micro SD 카드 없이 잘 버티고,

 - 카메라는 이제 울트라급으로 좋아졌으니 그냥 쓰면 됨

 

 

결론부터 말하자면 플립으로 바꿨어요.

 

 

플립으로 결정한 뒤에 실물 플립을 보니, 생각보다 별로라서 다시 고민 시작

 

갤럭시 S25 울트라로 갈아탄 뒤에 버틸까 생각했는데, 남은 재고가 256GB 밖에 없어요.

512GB랑 1TB는 사실상 출시 직후부터 사거나 예약해아 획득 가능. 삼성스토어 전체에 재고가 없을 확률이 99.9%인 상태라서 울트라는 패스

 

폴드도 256GB만 있을 확률이 높고, 플립은 어딘가에 512GB가 있을 확률이 높았던지라, 플립으로 강제로 정해졌어요.

근처 삼성 매장에 마침 재고가 있었어서, 거기에 있는 재고를 이쪽으로 옮겨서 개통.

 

이전폰에서 내장메모리 256GB랑 Micro SD 카드 512GB 다 채운 상태인지라, 내장메모리 512GB만 가지고는 모든 파일 백업이 불가능할 듯

SD 카드에 갤럭시 S2 시절에 쓰던 사진부터 다 있어서 그런지 DCIM 폴더만 300GB가 넘어가요.

'게시판' 카테고리의 다른 글

Z플립 힌지 보호 필름을 쓸까 말까 고민 중  (0) 2026.04.03
남탓하는 정규직 사원님  (0) 2026.03.07
쿠팡 센터 일주일 후기  (3) 2026.01.17
후기글 올릴게 3개나 있네  (0) 2026.01.12
할로윈이라서 그런지  (0) 2025.10.31

+ Recent posts