본문 바로가기

분류 전체보기 291

🍎 Swift Package에서 Localization 처리하기 🍎 Swift Package에서 Localization 처리하기 뭘 하려는 걸까?🐜 Package란?여러 개의 iOS 프로젝트를 하다 보면 공통으로 쓰게 되는 코드들이 많아지게 됩니다.예를 들어 저의 경우는 숫자를 입력할 때 실시간으로 ,를 넣어주는 TextField가 필요해서 만든 적이 있는데, 이건 사실 도메인에 상관없이 공통적으로 필요한 기능입니다. 그래서 SwiftUI 자체적으로 있으면 좋겠지만... 아쉽게도 직접 만들어서 써야 합니다. 🍎 SwiftUI에서 숫자 입력하면 실시간으로 구분자(,) 붙이기하려는 것숫자가 길어지면 읽기가 힘듭니다.1000000000와 1,000,000,000가 있다면 전자는 일십백천만... 하면서 1개씩 세야 겠지만 숫자를 자주 다루신 분들이면 후자가 10억이라는걸 바로 알 수 있습니jinkpark.tistory.com물론 직.. 2024. 8. 10.
🍎 나만의 Swift Package 만들기! - 개인 프로젝트에서 중복되는 코드 없애기 🍎 나만의 Swift Package 만들기! - 개인 프로젝트에서 중복되는 코드 없애기 Swift Package가 뭐고 이게 왜 우리 프로젝트에 필요할까코딩을 하다보면 중복되는 코드가 나옵니다. 이럴 경우 일반적으로 함수나 클래스로 나눠서 관심사를 분리하고 중복을 줄입니다. 하지만 문제는 중복되는 코드가 프로젝트 단위로 나올 때 발생합니다. 분명 중복되는 코드인데, 다른 프로젝트니 import 할 수 없고, 결국 복붙을 하게 됩니다. 이 경우 문제가 여러가지 있습니다.당연히 중복되는 코드의 문제가 해결되지 않는다.변경점이 있으면 프로젝트 별로 적용해 줘야 한다.같은 역할을 하는데 미묘하게 변수나 사용법이 다른 경우가 있어 헷갈린다.사실 프로젝트나 1개~2개 정도면 괜찮지만 10개, 20개, 심지어 100개가 된다면? 상상하기도 싫습니다. 제 현재 상황은 앱스토어에 출시 해 판매중인 앱이 2.. 2024. 8. 8.
🐣 과학의 답은!? 닭이 먼저일까? 달걀이 먼저일까? 🐣 과학의 답은!? 닭이 먼저일까? 달걀이 먼저일까? 뭐가 문제야?🐥 닭은 🥚달걀에서 태어납니다.하지만 🥚달걀은 🐥 닭이 낳습니다.그럼 계속 앞으로 가서... 최초의 🐥 닭은 어디서 태어났을까요?최초의 🥚달걀은 어떤 🐥 닭이 낳았을까요?🐥 닭이 먼저일까요 🥚달걀이 먼저일까요?이 문제는 사실 과학적인 답이 있다많은 분들이 이 질문에는 명확한 답이 없다고 합니다. 사실 답이 없긴 합니다. 하지만 명확하게 답이 없다는 답이 있습니다. (❓)답은... 어느쪽도 먼저가 아니다 하지만 이를 이해하기 위해서는 2가지 선수 지식이 있어야 해서 먼저 이걸 이해하기 쉽게 알려 드리겠습니다.본질주의 (Eseentialism)진화론 (Evolution Theory)본질주의 (Essentialism)모든 것이 그 특징을 나타나게 하는 본질을 가지고 있다는 생각. .. 2024. 8. 6.
🍎 Swift UI에서 홈 화면 Context Menu 추가하기 🍎 Swift UI에서 홈 화면 Context Menu 추가하기 하려는 것iOS에서는 앱 아이콘을 길게 누르면 앱 내에서 자주 쓰는 동작들을 바로 실행할 수 있는 기능이 있습니다. 아래 사진은 토스의 Context Menu인데요, 토스에서 가장 자주 쓰는 기능인 소비, 송금, 주식, 만보기 등이 있습니다. 당연하지만 위의 Context Menu는 단축키 일 뿐이라 Context Menu의 존재를 전혀 몰라도 앱을 문제 없이 사용할 수 있습니다. 실제로 애플의 Human Interface Guideline에서도 Context Menu를 앱을 자주 사용하는 헤비 유저들이 편하게 사용하는 기능이 될 수는 있어도 똑같은 동작을 앱에서도 제공할 것을 권고하고 있습니다. 😅 Although a context menu provides convenient access to fre.. 2024. 8. 5.
영어권에서 자주 쓰는 프로그래밍 신조어 소개 (feat. Programming Slag) 영어권에서 자주 쓰는 프로그래밍 신조어 소개 (feat. Programming Slag) 프로그래밍 신조어 (Programming Slang)? 저는 영어권 프로그래밍 유튜버나 커뮤니티를 자주 보는 편 입니다.이곳을 눈팅 하다 보면 공식 문서나 책에서는 보기 힘든 재밌는 표현이나 과격한 표현이 많은데요.오늘은 재미 삼아, 또 영어권 프로그래밍 유튜버나 커뮤니티를 보시게 된다면 도움이 될 표현들을 몇 가지 소개하겠습니다.제가 느끼기에 자주 쓰이는거나 재밌는 표현 위주로 소개했습니다!한국에서도 많이 알려진 표현한국에 많이 알려진 표현은 이제 이게 신조어가 맞는지 헷갈릴 정도로 자주 쓰이는 표현이 대부분입니다. 하지만 프로그래밍을 잘 모르시는 분들에게는 여전히 이상한 표현처럼 들릴 수 있어 포함 해 봤습니다. 이 표현들을 보면 제가 신조어라 말하는게 어떤 의미인지 감이 잡히실 겁니다! 🐜 Cod.. 2024. 8. 4.
여러 AI 서비스 비교해 보기 (ChatGPT, Claude, Genimi, ClovaX) 여러 AI 서비스 비교해 보기 (ChatGPT, Claude, Genimi, ClovaX) 평가에 중요한 요소?일단 가장 중요한 건 당연히 성능입니다. 다른게 아무리 좋아도 AI가 멍청하면 솔직히 별로 쓰고 싶지가 않습니다. 하지만 의외로 성능만큼 중요한 게 서비스로서 얼마나 편리 한가였습니다. 즉, 편리성인데요. 이건 UI/UX를 포함한 다양한 기능들을 말하는 겁니다. 예를 들어 ChatGPT의 경우 여러 용도로 쓸 수 있는데요.웹 검색 하기이미지 생성하기다른 앱에 있는 정보들 복붙해서 물어보기이 모든게 ChatGPT는 채팅에서 별 다른 동작 없이 물어보면 해 줍니다. 만약 웹을 검색하고 싶을 때는 웹을 켜야 하고 이미지를 생성하고 싶을 때는 다른 서비스를 써야 하고... 한다면 굉장히 불편하겠죠? 사실 AI 성능은 점점 높아지고 크게 차이가 없기 때문에 이런 편리함이 AI를 계속 쓰게 하는.. 2024. 8. 3.
🍎 iOS에서 서버를 거치지 않고 알림 보내기 (UserNotifications) 🍎 iOS에서 서버를 거치지 않고 알림 보내기 (UserNotifications) 뭘 하려는 건지?한 마디로 아래와 같이 앱에서 알림을 보내려 하는 겁니다.  보통 이러한 알림을 보내기 위해서는 APN이라는 서버를 따로 둬서 보내야 하는데요. (참고) 서버쪽에서 로직을 돌려야 하거나 인터넷의 특정 정보를 조건으로 알림을 보내야 한다면 여전히 그렇게 해야 합니다. 예를 들어 특정 책이 나올 때 알림을 보낸다고 하면 인터넷의 특정 정보를 주기적으로 확인해서 그 조건이 만족되면 알림을 보내야 하니 이 경우는 APN을 써야 합니다.하지만 그렇지 않고 간단하게 반복되는 알림이라면 APN을 거치지 않고 비교적 간단하게 처리할 수 있습니다. 매일 특정 시간에 보낸다던가, 유저가 등록한 날짜마다 반복해서 보낸다던가...UserNotification API핵심은 UserNotification이라는 A.. 2024. 8. 2.
성능 개선 고민: 데이터를 Map으로 바꾸는 것은 언제 가성비를 갖게 될까? 성능 개선 고민: 데이터를 Map으로 바꾸는 것은 언제 가성비를 갖게 될까? 성능상의 문제리스트에서 특정 조건을 기준으로 데이터를 찾아야 함 일반적으로 데이터가 적을 경우 하나씩 돌면서 검색을 합니다. 데이터가 정렬 돼 있다면 속도가 빠를 수 있겠지만 그래봤자 O(n log n)입니다. 코틀린으로 표현하면 아래와 같은 코드가 됩니다.fun List.findById(id: String): Data? { return this.firstOrNull { it == id }} 하지만 데이터가 늘어나면서 성능 문제가 생기게 되면, 아래와 같이 Map으로 먼저 바꾼 뒤 찾게 됩니다. 그럼 Map을 만드는 데는 O(n)이 걸리겠지만, 접근은 O(1)이 걸리게 되면서 성능상 이점이 있습니다.val dataMap = data .groupBy { it.id } .toMap() fun Map.f.. 2024. 8. 1.
🏠 한국 리츠, ETF로 투자하기 🏠 한국 리츠, ETF로 투자하기 리츠 (REITs)가 뭐임?부동산을 투자하고 거기서 나는 수익을 배당하는 회사 보통은 세재 혜택을 받기 위해 이익의 90%를 모두 배당하고, 일반적인 상장 회사처럼 주식 시장에 상장 돼 있기 때문에 쉽게 거래할 수 있습니다.자세한 건 한국리츠협회에서 쉽게 설명하고 있습니다! 한국리츠협회Korea Association of Real Estate Investment Trustskareit.or.kr한국 리츠에 투자하는 이유,  투자하지 말아야 할 이유🐜 소액주주 이익 침해 이슈가 상대적으로 적음한국 주식의 고질적인 문제는 소액주주에 대한 보호가 매우 약해서 이사회에서 특정 대주주(재벌)들에게만 유리한 결정을 일방적으로 한다는 겁니다. 리츠는 상대적으로 이런 문제에서 자연스럽습니다. 법적으로 이익의 90%를.. 2024. 7. 31.
📖 UI/UX의 10가지 심리학 법칙: 디자인에 근거 가지기 📖 UI/UX의 10가지 심리학 법칙: 디자인에 근거 가지기 🐜 평점  : 1 / 5 (★☆☆☆☆)책 소개는 굉장히 흥미로웠음. 심리학적 내용으로 UI/UX에 근거를 주는 내용일까나?근데 막상 읽어 보니 UI/UX 법칙을 나열하고 관련 심리학적 이론을 나열하는 느낌...기대했던건 심리학 법칙과 UI/UX가 어떻게 연결되는지에 대한 통찰을 얻고 싶었는데 그거랑은 거리가 멈.UI/UX를 잘 모르는 사람은 가볍게 읽어 봐도 좋겠지만 개인적으로는 뻔한 얘기로 들렸음.🐜 UI/UX의 10가지 심리학 법칙를 읽게 된 이유서버 개발자로 일하고 있지만 유저분들이 실제로 쓸 수 있는 제품을 만들고 싶다면 UI/UX를 피할 수 없습니다. 여태까지는 제 눈에 보기 좋게 적당히 만들거나, 간단한 법칙들을 생각하면서 만들어 왔는데요. 법칙이라고 해도 복잡한건 아니고 상식적으로 생각할.. 2024. 7. 29.
🍎 XCTest로 Swift에서 Unit Test 하기 🍎 XCTest로 Swift에서 Unit Test 하기 단위 테스트 (Unit Test)가 뭐임?코딩에서 개발 그 자체만큼 중요한게 테스트입니다. 버그를 1개도 만들지 않으면서 코딩할 수 있는 개발자는 없기 때문에 테스트를 하지 않으면 버그가 많은 질 낮은 소프트웨어를 만들어내는 뱃 개발자 입니다. 💦보통은 가장 기초적인 테스트는 내가 작성한 소프트웨어를 실행해 보면서 요구사항이 맞는지 확인하는 겁니다. 하지만 이 방법에는 치명적인 단점이 있습니다. 노가다라는 겁니다...요구사항이 엄청 많아지면? 100개가 된다면 수정할 때 마다 이 100개의 요구사항이 모두 맞는지 확인해야 합니다.위의 이유로 테스트를 자주할 수 없습니다.재현이 어려운 경우는 테스트 하기가 힘듭니다.여기서 단위 테스트가 나옵니다. 단위 테스트는 소프트웨어를 테스트할 수 있는 가장 작은 단.. 2024. 7. 28.
서버에 API Key를 하드코딩 하면 안 될까? 서버에 API Key를 하드코딩 하면 안 될까? 문제가 되는 부분과 일반적인 해결책일반적으로 API를 호출할 때는 API Key라는 거를 같이 넘겨야 합니다. 아무나 제한없이 API를 호출할 수 있으면 기업 입장에서는 여러 단점이 있기 때문입니다.호출제한을 할 수 없음디도스 (DDos) 공격의 대상이 될 수 있음수익화를 하기 어려움 당장 네이버의 API 문서만 봐도 호출제한이 있고, API를 호출하기 위해서는 회원가입을 한 후 API Key를 발급 받아야 합니다. 문제는 API Key를 어떻게 관리해야 할까입니다. 호출제한 정도만 있으면 API Key가 유출돼도 귀여운 정도에서 끝나지만, 만약에 쓴 만큼 과금되는 API거나 개인정보를 많이 담고 있는 API라면 API Key가 유출되는 거 자체가 너무 큰 위험입니다! 😨이를 위해 애플리케이션이 실행 .. 2024. 7. 27.
🎹 피아노를 효과적으로 연습하기 위해 반드시 지켜야 할 것들 (손가락 번호, 집중연습, 레슨 등) 🎹 피아노를 효과적으로 연습하기 위해 반드시 지켜야 할 것들 (손가락 번호, 집중연습, 레슨 등) 피아노를 다시 시작하며...감수성이 풍부하던 고등학교 때 생전 쳐 본 적 없는 피아노에 갑자기 꽂혀 집 앞 작은 피아노 학원에서 피아노를 시작하게 됐습니다. 그리고 대학에 가기 전 3년 동안 꽤 열심히 꾸준히 피아노를 쳤습니다. 당연히 바이엘부터 시작했기 때문에 엄청 잘 치지는 않지만 그래도 원하던 곡들을 치니 상당히 행복했습니다.그러다 대학생이 되고 타지에 가다 보니 피아노가 없기도 하고, 대학 생활에 집중하고 싶어 피아노는 잊고 살았습니다.하지만 최근 직장인이 되고 다시 피아노를 쳐 보고 싶어 생전 처음으로 새로운 야마하 전자 피아노를 사고 피아노를 다시 치게 됐습니다. (근데 회사 생활을 하면서 피아노를 치는게 쉽지는 않아 사실 방치 중입니다. 😂) 하지만 피아노를 다시 치기 전에 그 동안 피아노.. 2024. 7. 22.
🍎 SwiftUI에서 숫자 입력하면 실시간으로 구분자(,) 붙이기 🍎 SwiftUI에서 숫자 입력하면 실시간으로 구분자(,) 붙이기 하려는 것숫자가 길어지면 읽기가 힘듭니다.1000000000와 1,000,000,000가 있다면 전자는 일십백천만... 하면서 1개씩 세야 겠지만 숫자를 자주 다루신 분들이면 후자가 10억이라는걸 바로 알 수 있습니다.,를 붙여서 보여주는건 간단합니다. 문제는 유저가 숫자를 입력할 때 입니다. 입력할 때는 어떻게 ,를 넣을 수 있을까요?문제를 나눠서 생각해 보자우선, 유저가 입력하는 값은 모두 숫자일지 모르겠지만 보여야 되는 값은 숫자 뿐만 아니라 ,를 포함하기 때문에 문자입니다.가장 단순한 해결책은 유저가 보는 값을 저장하는 변수와 유저가 입력하는 값을 저장하는 변수를 따로 두고, 각자 업데이트를 하면 됩니다. 유저가 입력하면 입력값 저장하는 변수 업데이트 -> 필요하면 , 삽입  후 유저가 보는 값 .. 2024. 7. 21.
📖 우리가 싸우는 이유: MZ 세대 같은 게으른 담론에 지친 사람들을 위한 세대와 갈등에 관한 진지한 고찰 📖 우리가 싸우는 이유: MZ 세대 같은 게으른 담론에 지친 사람들을 위한 세대와 갈등에 관한 진지한 고찰 🐜 평점  : 3 / 5 (★★★☆☆)🐜 우리가 싸우는 이유를 읽게 된 이유인터넷이 발달하고 익명성이 강력히 보장되면서 전세계적으로 갈등이 심화되고 있습니다. 하지만 그 중에서 유독 한국이 갈등이 심하다는 생각을 종종했습니다. 그래서 어쩌다 한국인 같은 유독 한국이 무엇이 다른가에 대한 고찰을 담은 여러 책들을 읽기도 했습니다. 어쩌다 한국인에서는 심리학자 허태균님이 한국인이 보편적으로 공유하고 있는 여러 심리에 대해 고찰하는 내용인데, 어느정도 납득도 되고 궁금증이 해소되기도 했습니다.하지만 갈등 그 자체에 집중한 책은 아니다 보니 여전히 해결되지 않은 궁금증이 남았습니다. 그러던 와중에 서점에서 이 책을 우연히 보고 제 궁금증을 해결해 줄 책이란 확신이 들어 구입하게 됐습니다.🐜 요약한국 사회는.. 2024. 7. 14.
Scale-out이 Scale-up보다 효과적인 이유 Scale-out이 Scale-up보다 효과적인 이유 주의점해당 내용은 100% 검증된 정설이라기 보다는 제가 궁금해서 혼자 고민해 보고 이것 저것 찾아보며 얻은 결론입니다. 평소에 스캐일 아웃 (Scale-out)이  왜 더 효과적인지 의문을 품으셨던 분들이 조금이라도 궁금증이 해소됐으면 좋겠습니다.틀린 내용이나 다른 인사이트가 있으시면 언제든 댓글로 달아 주시면 적극 반영하겠습니다!Scale-Out? Scale-Up? 그게 뭔데 트래픽이 늘어나면 서버를 늘려야 합니다. 여기서 서버를 늘리는 2가지 방법이 있습니다.Scale-up (Vertical Scaling)은 서버 1대의 성능을 늘리는 겁니다. 메모리를 늘리고, CPU를 더 좋은 걸로 바꾸고, 네트워크 대역폭을 늘리고... 등등이 모두 Scale-up이라 할 수 있습니다.Scale-out (Hori.. 2024. 7. 10.
토스에서의 첫 팀 회고 (🏠 주담대팀) 토스에서의 첫 팀 회고 (🏠 주담대팀) 회고를 하는 이유/마음가짐똑같이 회고라 불려도 마음가짐은 굉장히 다를 거라 생각합니다.어떤 회고는 형식적이고, 어떤 회고는 솔직하고, 어떤 회고는 남에게 보여주기 위해 합니다.저는 이 회고가 솔직하고, 객관적이고, 더 나은 사람 (개발자)이 되기 위해 하는 반성의 성격을 띠기를 바랍니다.배경23년 9월 서버 개발자로 토스에 입사해 1달간의 온보딩 기간 후 23년 10월부터 24년 5월까지, 약 8개월간 주담대팀에서 업무를 진행했습니다.개발자로서 첫 활동이기도 했고, (회사 내에서는 적은 편이라고는 해도) 대규모 대고객 트래픽을 처음 받아보는 경험인 만큼 느낀것, 배운 것, 후회하는 것이 넘칩니다.또, 굉장히 드물다 할 수 있는 새로운 제품을 여러 개 출시하면서도 기존 제품을 유지보수하는 경험을 해서 굉장.. 2024. 7. 5.
🍎 WidgetKit 이용해서 애플 위젯 개발하기 🍎 WidgetKit 이용해서 애플 위젯 개발하기 WidgetKit이 뭐야iOS, iPadOS, MacOS 등에 제공할 Widget을 개발할 수 있는라이브러리 Extension?WidgetKit은 사실 원래 앱에 Library 처럼 단순히 추가되는 추가 기능이 아닙니다. Extension이라는 형태로 추가되는데, 같은 앱이지만 앱과 상호작용할 수 있는 곳을 추가로 제공해 주는 개념이라고 생각하시면 됩니다. Widget 외에도 Siri나 Appclip 같이 앱을 실행하고 상호작용하는 형태 외의 여러 형태의 extension을 사용할 수 있습니다. 문제는 Extension은 애플의 정책상 Sandbox화 돼 있어 다른 앱 처럼 취급 돼 원래 앱의 여러 Class나 데이터를 접근할 수 없다는 겁니다. 이건 뒤에서 자세히 알아보겠습니다. 위젯은 앱이 아니다애플.. 2024. 6. 22.
스마트 전등 스위치, 원리 이해해서 교체하기 스마트 전등 스위치, 원리 이해해서 교체하기 문제의 발단... 두둥!새로운 집에 이사 가면 항상 걱정이 스마트 제품들 세팅입니다.기존에 있던 스마트 제품들을 가서도 잘 쓸 수 있을까?새로 사야 하는게 있으면 이거 사면 이 집에서만 쓸까 앞으로도 쓸 수 있을까?특히 조명의 경우 전기 배선이랑 연결 돼 있어 설치도 힘들고, 조명 형태가 워낙 다양해서 항상 걱정이었습니다. 그러던 중... 새로 이사온 거실의 조명을 뜯어보니 아래와 같이 돼 있었습니다.일단 여기서 멘붕이 왔습니다. 여태까지 제가 살던 집은 원룸이라 선 구조가 이렇게 복잡하지 않았습니다. 그런데 취직을 하면서 오피스텔로 오면서 거실이 생겨 이렇게 복잡한 배선 구조를 처음 보게 됐습니다.게다가 제가 가지고 있는 스위치들은 1구~3구까지 있었는데 저거는 4구짜리 스위치였습니다. 2구짜리 스위치.. 2024. 6. 4.
자주 쓰는 Kotlin Live Template 공유 자주 쓰는 Kotlin Live Template 공유 Live Template이 뭐임Jetbrains 계통의 IDEA에서 쓸 수 있는 Code Snippets 코딩을 하다보면 반복되는 패턴을 많이 마주하게 됩니다. 여기서는 거창하게 디자인 패턴 같은 거를 말하는건 아니고, 아래와 같이 사소한 것들을 말한 겁니다.for 문으로 같은 동작 n번 반복하기if 문으로 null 확인하기이런 자주 쓰이는 언어의 패턴을 짧은 단축키로 바로 칠 수 있게 해 주는 걸 Code Snippets이라고 합니다. 가장 유명한 Code Snippets이라면 Emmet이 있겠네요.Emmet은 HTML에서 쓰는 Code Snippets인데, 특히 반복해서 타이핑해야 하는 일이 많은 HTML에서 유용합니다. 예를들어 아래와 같은 HTML 코드를 .. 2024. 6. 2.
Spring에서 DB 예외 처리하는 법 알아보기 Spring에서 DB 예외 처리하는 법 알아보기 기존 DB Exception의 문제점Spring이 있기 전에 DB에서 오류가 나면 크게 3가지 문제가 있었습니다.특정 기술에 종속된 에러가 터짐 (JDBC, JPA, Hibernate, JDO)모두 CheckedException이라 불편함특정 에러를 처리하고 싶으면 에러 코드를 직접 다뤄야 함 🐜 1 - 특정 기술에 종속된 에러가 터짐 (JDBC, JPA, Hibernate, JDO)JDBC를 열심히 쓰고 있어서 코드 곳곳에 SQLException을 처리하고 있었는데 갑자기 JPA를 도입하고자 하면 어떻게 될까요? JPA는 SQLException을 던지지 않고 PersistenceException을 던집니다. 그럼 SQLException을 쓴 모든 곳에 이걸 PersistenceException으로 바.. 2024. 5. 7.