기본 콘텐츠로 건너뛰기

AI와 함께 춤을.. 아니, 코딩을..

나는 오랫동안 개발을 업으로 하고 있다. 주로 소규모 기업에서 거의 1인 개발을 해왔다. 다른 개발자가 있더라도 각자 자기 일을 하는 그런 회사였다. 그러다 보니 여러 명이 하나의 프로젝트를 같이 수행하는 형태의 일이 별로 익숙하지 않다. 혼자 개발하고 테스트하다 보니, 체계화된 문서화도 나에겐 익숙하지 않다. 장기간 나만의 룰로 관습적으로 개발을 해왔다. 매번 새로 입사한 개발자 AI를 통해 코딩을 시작한 초기에는 에이전트에게 내가 지금 하고자 하는 일과 현재 상황을 전달하는 방법에 집중할 수밖에 없었다. AI 에이전트와 일하는 것은 매번 새로 입사한 개발자와 일하는 상황과 같다고 느꼈다. 아무것도 모르는 개발자에게 전후 사정 설명 없이 "이걸 해줘" 하면, 원하는 대로 동작하는 것 같지만 제대로 동작하지 않는 결과물을 만들어 내곤 했다. 그리고 이걸 수정하기 위해 대화가 길어지면 에이전트가 맥락을 잃어버리는 경우가 빈번히 발생했다. 문서화라는 해답 그래서 선택한 방법이 문서화였다. 내가 개발하고자 하는 기능을 문서로 정리하고, 이 문서를 기반으로 에이전트에게 개발을 요청하는 방식이다. 비슷한 시기에 AI를 이용한 코딩 관련 콘텐츠를 보면 문서화 이야기가 많았고, 그 시기에 아마존에서 출시한 Kiro라는 IDE는 이런 부분을 아예 내장하기까지 했다. 이야기했듯이 나는 문서화에 익숙하지 않다. 그래서 개발하고자 하는 기능을 문서로 정리하는 작업도 나에게는 그렇게 만만한 작업이 아니었다. 그래서 선택한 방법은 "문서화도 에이전트에게 시키자" 였다. 에이전트와 기획 회의하기 새로운 기능 개발이 필요하면 기획 회의를 에이전트와 진행한다. 보통 대화는 이렇게 시작한다. "지금부터 이런이런 기능을 개발하기 위한 기획 문서를 작성할 예정이다. 아직 코딩을 하지는 않을 것이다." 왜 "아직 코딩을 하지는 않을 것이다"라고 붙였을까 궁금할 텐데, 개발용 에이전트들은...

수경재배 상추 25일차 - 잎이 상추다워지고 물갈이 완료

25일차 성장 상태 - 상추다운 잎 수경 재배기에 상추를 파종한지 25일 되었습니다. 수경 재배기에 딸려 온 수경 포트가 뚤려 있는 구멍에 씨앗을 넣어두는 형태로 되어 있어서, 뿌리와 잎의 경계(줄기??) 부분이 흙에 심었을 때 처럼 잘 잡아주지는 못하는 형태여서 줄기 부분이 아직은 많이 가늘어서 누운 애들도 있고, 빠빳하게 하늘을 향해 서려면 좀 시간이 더 지나야 할 것 같습니다. 그럼에도 불구하고 그 동안 이만큼 자라서, 이제 상추가 좀 상추다워 졌습니다. 다음에는 씨앗을 스폰지에 끼우는 방식으로 해 봐야겠습니다. 2주 전 양액을 추가할 때에는 물이 줄어든것이 거의 눈에 띄지는 않았었습니다. 이번에는 잎이 커지면서 증산 작용도 활발해져서, 수조에 넣어 놓은 물도 700ml 가량이 줄어 들었습니다. 뿌리 성장 현황 이젠 뿌리도 많이 생겼지만, 아직은 갈 길이 먼 것 같습니다. 2주차 물갈이 - 양액 A/B 각 10ml 투입 지난 번에 양액을 넣어주고 2주가 흘러서, 전체 물갈이를 해주었습니다. 양액은 지난번과 같이 4L 수조에 A/B 용액 각 10ml씩 넣었습니다. 빨리 상추 쌈을 싸 먹는 날이 왔으면 좋겠네요..

수경재배 상추 10일차 - 첫 양액 투입과 A/B 용액 배합 방법

파종 10일 후 성장 현황 상추를 파종한지 10일이 지나서 상추들이 이만큼 자랐습니다. 뿌리 성장 상태 상추의 뿌리가 포트 밖으로 빠져나올 정도로 길게 자랐습니다. 그래도 아직은 뿌리의 가닥 수도 작고, 가늘고 약합니다. 사무실에 사람이 있는 동안은 난방을 하니까 괜찮은데, 저녁에는 아직도 기온이 많이 내려가기 때문에 성장이 더딘것 같습니다. 이제 낮기온도 꽤 올라가고 꽃도 피기 시작하니까 멀지 않아서 폭풍 성장을 할 것 같습니다. 양액 A/B 용액 배합 방법 수경재배기 메뉴얼에서는 2주에 한 번 전체 물을 갈아주고, 그 외에는 보충을 해주라고 되어 있습니다. 아직 상추가 싹이 작기도 하고, 10일 밖에 지나지 않았지만, 그 동안 물로만 키우고 있었기 때문에 오늘은 양액을 넣어 주기로 했습니다. 그래서 전체 물갈이를 할 예정입니다. 우선 양액을 준비합니다. 국내에서 많이 판매되는 양액이 있기는 합니다만, 수경재배기에 포함되어 있는 양액을 먼저 사용하려고 합니다. 수경재배기에 포함되어 있는 양액은 액체 상태가 아닌 알갱이 상태로 두 개의 병에 담겨 있습니다. 각 병에 물 100ml 씩을 넣고 알갱이가 다 녹을 때까지 섞어 줍니다. 병에 100ml 눈금이 표시되어 있기 때문에 눈금까지 넣어 주면 됩니다. 메뉴얼 상에는 역삼투압 방식으로 정수된 물을 사용하라고 하는데, 전 그냥 수돗물을 사용했습니다. 순수한 물을 사용하면 아무래도 양액의 농도나 같은 것들이 좀 더 정확해 지지 않을까 싶긴 합니다만, 사무실에 정수기도 없고.... 그렇다고 약국에 증류수를 사러가기도 뭐하고.. 근처에 약국도 없고.. ^^;;;;;;; 여튼, 알갱이가 다 녹을 때까지 섞어 줍니다. A용액은 약간 노란빛이 드는 액체가 되고, B용액은 투명색을 그대로 유지합니다. 양액 희석과 수조 채우기 2L 생수병에 물 2L를 채우고, A용액을 10ml 넣어준 다음에 B용액 10ml 를 추가하였습니다. A/B용액이 직접 만나게 되면 화학 반응이 일어날 수 있는 모양입...

[iOS] iOS App Store 유럽 연합(EU) 디지털 서비스법(DSA) 규정 준수 - 거래자 제공업체 계정?

앱에 대한 고객 리뷰를 보기 위해서 App Store Connect 에 접속을 하니, 불안감을 조성하는 붉은색 알림이 하나 표시되고 있었습니다. 디지털 서비스법에 따라 정보를 제공 하라는 메시지입니다. 일단, 무슨 법에 따라서 변경 하라는 메시지는 법을 잘모르는 입장에서는 괜히 부담이 많이 갑니다. 용어도 잘 모르겠고, 이것으로 인하여 나에게 미치는 영향도 잘 모르겠는 경우가 많아서 입니다. 그렇다고 무시하면 앱 배포가 중단될 수 있다는 협박성(?) 내용이 항상 뒤 따르기 때문에 잘 모르더라도 해야만 합니다. 그래서 규정 준수를 위하여 링크를 타고 들어가면 아래와 같은 절차를 만나게 됩니다. 디지털 서비스법은 유럽 연합(EU)에서 정한 법인 것은 알겠고, "거래자 제공업체 계정", "비거래자 제공업체 계정" 둘 중에 하나를 고르면 되는 것으로 보입니다. 심리적으로는 왠지 모르게 "거래자 제공업체 계정"에 해당할 것 같은데, 거래자가 뭔지 모르겠으니, "거래자 자격이 있는지 더 알아보기"를 클릭해서 해당 설명이 있는 페이지로 이동합니다. (불친절한) 애플 가이드 페이지가 보여지고, 거래자에 대한 설명은 아래와 같이 되어 있고, EU에서 제공하는 홈페이지 링크가 하나 걸려 있습니다. DSA에서는 거래자를 “개인 또는 공공 소유 여부와 무관하게 자신의 명의로 또는 자신을 대신하여 행동하는 사람 또는 모든 자연인,  그리고 무역, 비즈니스(Business), 기술 또는 직업과 관련된 목적을 위해 행동하는 모든 사람” 으로 정의합니다. 귀하가 거래자에 해당되는지 여부는 법률 고문과 상담하십시오.( # ) 위 문장을 제가 이해하기에는 앱스토어에 앱을 배포하는 모든 사람/회사는 거래자에 해당할 것 같습니다. 그럼 나는 "거래자 제공업체 계정"을 선택하면 될 것 같은데, 그럼 "비거래자 제공업체 계정" 선택이 필요 없지 않은가라는 의문이 들었습니다. 아니면 애플에서 ...

수경재배 상추 파종 3일차 - 싹이 돋았습니다

12포트 중 8포트 발아 성공 사무실 수경 재배기에 뿌려 놓은 상추 씨앗이 주말 동안 싹을 틔웠습니다. 오래된 씨앗이라서 싹이 날지 걱정했는데, 12 포트 중에서 8포트가 싹이 났습니다. 남은 포트와 뿌리 노출 문제 4포트가 아직 소식이 없는데, 조금 더 지켜보고 다시 파종 해야 겠습니다. 씨앗이 흙에 묻히는 구조가 아니라서 뿌리가 LED 빛에 노출되는 구조인데, 문제 없는지 모르겠네요. 뿌리에는 빛이 안가는게 좋을 것 같은데...

가정용 수경재배기 구매 후기 - 사무실에서 상추 키우기 시작

식집사가 되기로 결심한 이유 식집사라는 말이 요즘 유행하는 것 같습니다. 저는 식집사까지는 아니고, 화분에 뭔가를 키우는 걸 좋아합니다. 다만, 애써 뭔가를 사서 하거나 하지는 않고, 생기면 물주고 최대한 안죽이고 키운다 정도였습니다. 집에서 키우는 호야, 벤자민고무나무 같으면 누나가 주고.. 형이 주고.. 해서 한식구가 되었고, 죽이지 않고 10 수년째 키우고 있는 중입니다. 단지, 분갈이도 안해주고, 물만 주고, 가끔 다이소 같은데서 파는 비료 조금 넣어주는 정말 죽지 않고 버티게만 하고 있다는 표현이 맞을 것 같습니다. 그리고, 상추, 고추 같은걸 화분에 키워서 먹는걸 좋아합니다. 키우는 기간도 짧고 뭔가 결과물도 있고.. ^^; 그런데, 집이 아파트이다 보니 햇볕도 부족하고 키울 공간도 부족해서 부족함을 느끼다가, 2~3년 전에 사무실 근처에 텃밭을 조금 빌려서 상추를 기른 적이 있는데, 저랑은 좀 맞지 않더군요.. 너무 열심히 가꿔야 한다라는 제약이 있더군요. 하루 이틀만 게을리하면 잡초가 상추보다 더 많이 나고.. 땅은 정말 조금인데 수확물은 감당할 수 없고.. 해서 이후로는 상추 같은건 그냥 사먹는 걸로 하고... 농사(?)는 안하는 걸로 했습니다. 요근래 뭔가를 다시 키우고 싶다는 생각이 들었습니다. 좀 열심히.. 그래서 저도 식집사가 되어 보기로 했습니다. 돈도 좀 쓰고.. ㅡ.ㅡ;; 알리익스프레스 12포트 수경재배기 선택 그 첫번째 시도로 사무실에 농장을 만들어 보기로 했습니다. 바로 가정용 수경 재배기라는 것을 구매해 보았습니다. G마켓, 알리 같은데 보면 많은 종류의 수경재배기를 판매하고 있습니다. 작은 것 부터 큰 것 까지 종류가 참 많더군요.. 가격도 싼것 부터 비싼것 까지 다양하게 있더군요.. 전 알리에서 $43정도 하는 12포트짜리 수경 재배기를 구매하였습니다. 이걸 선택한 이유는 사무실 책상에 놓고 키우기에 크기도 적당하고, 자체 조명도 있어서 햇볕 걱정도 하지 않아도 되고, 보기도 나름 나쁘지 않고, 처음 시도부...

[flutter] deep link

 개발하고 있는 앱에서 다른 사용자를 앱으로 초대하는 기능을 추가하게 되어 앱에 deep link 기능을 앱에 구현하게 되었습니다. 구현에 필요한 자료는 이미 더 잘 정리되어 있는 많은 자료들이 있으니 그것들을 참고하면 될 것 같아서 여기에서는 특별히 설명하지 않습니다. 다만 내 앱에 해당 기능을 넣기 위해서 자료를 찾고 구현하는 과정에서 헷갈렸던 것들과 구현중 문제가 있었던 부분에 대해서 프로젝트를 정리하는 차원에서 메모를 남기기로 해서 글을 쓰고 있습니다. 참고:  - https://itnext.io/deep-linking-in-flutter-boost-user-experience-in-apps-29dd25842757  - https://docs.flutter.dev/ui/navigation/deep-linking 용어 deep link는 보통 웹에서 인덱스 페이지가 아닌 상세 페이지에 대한 다이렉트 링크를 생성하는 것을 말합니다. 예를 들어서 어떤 웹페이지를 사용하기 위해서는 홈 화면에서 로그인을 하고 몇 단계를 거쳐서 특정 페이지로 들어가야하는데, 이 기능에 대한 지름길을 만드는걸 deep link로 이해하면 되겠습니다. 그리고 deep link 구현관련하여 모바일에서는 OS에 따라서 custom scheme(url scheme), universal link, app link 등의 용어가 튀어 나오는데, 표준 URI 형식을 이용하여 앱을 실행시키기 위한 방법을 말한다고 이해하면 간단하겠다. 기술에 대한 상세로 들어가면 약간의 차이가 있으나 큰 틀에서 차이는 없기 때문에 deep link를 구현하기 위해서 app을 실행(lunch)하기 위한 기술이라고 보면 됩니다. 그리고, 검색하다가 보면 dynamic link라는 용어가 나오는데, firebase에서 제공하던 서비스인데 현재는 서비스 종료되었으니 무시하면 됩니다. Navigator / Router flutter로 deep link를 구현할 때 현재 앱이 Navigator를 이용...

[flutter] textScaleFactor

노안이 있는 사람이나 시각 장애가 있는 사람들은 모바일 환경의 기본 글자 크기에 불편함을 느끼는 사용자들을 위해서 iOS와 안드로이드에서는 접근성 설정을 통해서 글자 크기를 크게 또는 작게 설정할 수 있도록 지원하고 있습니다. 그리고, 앱 개발시에도 이를 고려하여 개발하라고 가이드하고 있습니다. 그렇지만 앱 개발 단계에서 이런 부분이 몰라서, 귀찮아서 또는 디자인과 같은 현실적 한계로 인하여 가이드를 무시하고 개발되는 경우가 종종 발생하게 됩니다. 이렇게 접근성 설정을 무시하고 앱을 개발하면 앱 접근성 설정을 이용하는 사용자 환경에서 화면이 깨지거나, 사용상의 문제를 발생시키는 경우가 발생합니다. 또는 앱 심사 과정에서 거부되기도 합니다. 그런데 이런 문제가 인식된 시점에 디자인 변경이 어렵거나, 변경해야 하는 범위가 커서 접근성 설정을 무시하고 기본 글자크기로 나오도록 하여 문제를 회피하여 해결해야하는 방법을 알아보겠습니다. 아래 방법은 flutter에서 문자의 비율을 시스템에서 설정하는 값이 아닌 개발자가 기본 비율로 강제하도록 하여 접근성 설정이 무시되도록 하는 방법입니다. Widget build(BuildContext context) { // 사용자가 OS에서 제공하는 접근성 설정을 변경할 경우, 앱의 폰트 크기가 변경되는 것을 방지한다. // 폰트 크기가 크게 변경되면 다이얼로그의 레이아웃이 깨져서 다음 단계로 진행하지 못하는 경우가 발생함. final mediaQueryData = MediaQuery.of(context); final newMediaQueryData = mediaQueryData.copyWith(textScaleFactor: 1.0); return MediaQuery( data: newMediaQueryData, child: Container() ) } 내용이 잘못되었거나, 더 좋은 방법이 있으면 댓글 남겨주시기 바랍니다.