본문 바로가기

👨‍💻 프로그래밍 82

☁️ AWS에서 무중단 배포 구현하기 ☁️ AWS에서 무중단 배포 구현하기 목표Cloud의 편리함은 최대한 누리면서 AWS에는 종속되지 않게무중단 배포를 구현한다 사실 무중단 배포를 구현하는 거 자체는 간단합니다. 새로운 버전의 서버를 미리 띄워 두고, Health Check를 해서 괜찮으면 트래픽을 전환한다... 하지만 이걸 구현하기 위해 내려야 할 여러 기술적인 결정은 단순하지 않습니다.오늘은 진작에 접었어야 했지만 접지 못 해 계속 하고 있는 제 포트폴리오 사이트 책잇아웃의 무중단 배포를 AWS와 Github Actions로 구현하는 과정에서 했던 여러 기술적인 결정들과 배운 것들을 기록해 보겠습니다.현재상황 (시작점)🐜 AWS 구조현재 상황은 ELB (Elastic Load Balancing)가 가장 앞단에 있어 트래픽을 받는 구조입니다. ELB에는 Public IP .. 2024. 11. 22.
피클 (PKL): 새로운 설정 관리 언어 알아보기 피클 (PKL): 새로운 설정 관리 언어 알아보기 설정 파일?프로그래밍을 하다 보면 여러 설정 값들을 다뤄야 합니다. 서버라면 어떤 포트에 띄울지, API 통신을 한다면 API Key 값, DB의 아이디/비밀번호까지... 이런 값들은 코드에 하드코딩을 해 놔도 되지만 여러 이유로 따로 설정 파일을 둬서 관리합니다.프로그램이 실행되는 환경에 따라 값을 다르게 하기 위해 (개발 환경, 운영 환경 등)코드가 공개된 경우 보안을 위해 민감한 값을 실행 시점에 주입받기 위해코드 수정 없이 설정 값만 빠르게 바꾸기 위해 이런 설정 파일을 위해 보통은 .yml, .properties, .json 이나 아니면 언어별로 특화된 DSL을 각자 만들어 씁니다. 자바 진영에서는 gradle 설정을 위해 Groovy나 Kotlin의 DSL을 사용합니다.하지만... 이런 설정 .. 2024. 11. 2.
🍎 Tipkit을 사용해서 앱의 숨겨진 기능을 유저에게 넛지 주기 🍎 Tipkit을 사용해서 앱의 숨겨진 기능을 유저에게 넛지 주기 TipKit이 뭐고 꼭 필요할까?iOS 17부터 사용 가능한 앱을 쓰면서 새로운 기능, 숨겨진 기능, 꿀팁들을 슬쩍 알려주는 UI를 띄워주는 Framework입니다.아래와 같이 리스트를 꾹 눌러서 순서를 조정할 수 있는 건 보통 알기 힘든 경우가 많기 때문에 슬쩍 알려주는 형식입니다.물론 이걸 직접 구현할 수도 있습니다. Tooltip 정도는 간단한 UI이니 공수도 그렇게 많이 들지 않겠죠? 하지만 Tipkit에서는 저 Tip 언제 어떤 조건으로 보여줘야 하는지, 너무 많은 팁이 노출되면 유저가 피로하니 너무 많이 노출되지 않게 조절하는 등의 편리한 추가 기능이 있어서 굳이 안 쓸 이유는 없습니다.너무 과하게 쓰면 안 됨! 😵애플의 Human Interface Guideline을 보면 Tipkit의 역.. 2024. 9. 23.
🍎 Stanford iOS 강의 (CS193P) 수강 후기 🍎 Stanford iOS 강의 (CS193P) 수강 후기 이게 뭐야?말 그대로 미국의 1류 대학인 스텐포드 대학에서 제공하는 강의입니다. 스텐포드 대학은 실리콘 벨리 근처에 있는데, 그래서 그런지 컴퓨터 과학 학과가 특히 유명합니다. 오죽하면 애플에서는 신입이 스텐포드 출신이 아니면 이력서에서 거른다는 소문이 있을 정도입니다. (사실은 아니겠지만...) 스텐포드 뿐만 아니라 많은 미국 대학이 강의를 공짜로 공개해 놓는데, 코로나 시국을 거치면서 특히 더 활발해 졌습니다. 하지만 인터넷에 공개된 모든 대학 강의가 수강할 가치가 있지는 않습니다. 꼭 내용만을 말하는건 아닌데요. 저는 아래 조건중에 1개라도 해당되면 듣지 않습니다.오디오, 카메라 품질이 좋지 않음강의 자료가 많이 제공되지 않음제 경험상 일류 대학들의 강의는 어렵기 때문에 많은 시간을 들여 수강해야 .. 2024. 9. 14.
다양한 배포 전략 비교 (카나리, 블루그린, 롤링, 그림자) 다양한 배포 전략 비교 (카나리, 블루그린, 롤링, 그림자) 배포에서 중요한 것유저에게 배포가 나갔는지도 모르게 하는 것 규모가 작거나 복잡하지 않은 환경에서는 배포에 대해 크게 신경 쓸 필요가 없습니다. 오히려 그 시간에 MAU를 늘릴 생각을 하는게 더 이득일 지도 모릅니다. 하지만 시스템의 구성요소가 많고 (카프카, 배치 등) 잠깐의 중단도 비즈니스에 악영향을 주는 환경에서는 배포 자체에 많은 리소스를 쓰게 됩니다. 🐜 무중단불과 몇 년 전만 해도 새벽 시간에 점검을 한다고 하고 배포하는 일도 흔했습니다. 하지만 최근에는 어떤 서비스를 쓰든 배포를 한다고 점검을 걸고 서비스를 중단하는 일이 매우 적어졌습니다. 배포의 중요한 소양이 무중단이기 때문입니다. 말 그대로 서비스를 1초도 중단하지 않고 새로운 버전을 내야 합니다.🐜 쉬운 롤백이상적으로는 모든 배포는.. 2024. 8. 24.
B2B vs B2C, 개발자 입장에서 비교해 보기 B2B vs B2C, 개발자 입장에서 비교해 보기 B2B? B2C?회사가 제품을 다른 회사에게 파는지, 대중에게 파는지 먼저 B2B와 B2C에 대해서 간단히 짚고 넘어가겠습니다!B2B는 Business to Business, B2C는 Business to Consumer를 각각 줄인 말 입니다. 여기서 to가 2와 발음이 똑같기 때문에 저렇게 줄여서 씁니다.우리가 살면서 고객으로서 접하는 대부분의 제품은 B2C 제품입니다. 삼성이 만드는 TV, 애플이 만드는 스마트폰... 그래서 특별히 의식하지 않을 수 있지만 우리만 물건을 사는게 아닙니다. 회사도 다른 회사의 제품을 삽니다. 아무리 큰 대기업이라고 해도 회사 운영에 필요한 모든 걸 다 할 수는 없기 때문입니다.사내 메신저만 해도 그렇습니다. 물론 직접 만들 수 있지만 대부분 슬랙 (Slack) 같은 .. 2024. 8. 23.
🍎 Swift Testing: 보기 싫은 XCTest는 이제 안녕!! 🍎 Swift Testing: 보기 싫은 XCTest는 이제 안녕!! Swift Testing이 뭐야?애플이 Object-C를 대체할 Swift를 발표한 이후로 Swift 언어의 기능을 적극 활용하는 새로운 API들을 출시하고 있습니다. SwiftUI나 SwiftData는 기존의 UIKit이나 CoreData에 비하면 쓰기가 매우 편하고 깔끔해서 확실하게 생산성이 올라갔습니다.Swift Testing도 비슷하게 XCTest를 대체하기 위한 Swift에 최적화된 API입니다.하지만 솔직히 SwiftUI나 Swift Data 정도로 다르지는 않고 그냥 더 깔끔하고 빠르다 정도이긴 하지만, 그래도 XCTest 보다는 나으니 사용했습니다. Swift Testing | Apple Developer DocumentationCreate and run tests for your Swif.. 2024. 8. 15.
🍎 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.
🍎 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 freq.. 2024. 8. 5.
영어권에서 자주 쓰는 프로그래밍 신조어 소개 (feat. Programming Slag) 영어권에서 자주 쓰는 프로그래밍 신조어 소개 (feat. Programming Slag) 프로그래밍 신조어 (Programming Slang)? 저는 영어권 프로그래밍 유튜버나 커뮤니티를 자주 보는 편 입니다.이곳을 눈팅 하다 보면 공식 문서나 책에서는 보기 힘든 재밌는 표현이나 과격한 표현이 많은데요.오늘은 재미 삼아, 또 영어권 프로그래밍 유튜버나 커뮤니티를 보시게 된다면 도움이 될 표현들을 몇 가지 소개하겠습니다.제가 느끼기에 자주 쓰이는거나 재밌는 표현 위주로 소개했습니다!한국에서도 많이 알려진 표현한국에 많이 알려진 표현은 이제 이게 신조어가 맞는지 헷갈릴 정도로 자주 쓰이는 표현이 대부분입니다. 하지만 프로그래밍을 잘 모르시는 분들에게는 여전히 이상한 표현처럼 들릴 수 있어 포함 해 봤습니다. 이 표현들을 보면 제가 신조어라 말하는게 어떤 의미인지 감이 잡히실 겁니다! 🐜 Cod.. 2024. 8. 4.
🍎 iOS에서 서버를 거치지 않고 알림 보내기 (UserNotifications) 🍎 iOS에서 서버를 거치지 않고 알림 보내기 (UserNotifications) 뭘 하려는 건지?한 마디로 아래와 같이 앱에서 알림을 보내려 하는 겁니다.  보통 이러한 알림을 보내기 위해서는 APN이라는 서버를 따로 둬서 보내야 하는데요. (참고) 서버쪽에서 로직을 돌려야 하거나 인터넷의 특정 정보를 조건으로 알림을 보내야 한다면 여전히 그렇게 해야 합니다. 예를 들어 특정 책이 나올 때 알림을 보낸다고 하면 인터넷의 특정 정보를 주기적으로 확인해서 그 조건이 만족되면 알림을 보내야 하니 이 경우는 APN을 써야 합니다.하지만 그렇지 않고 간단하게 반복되는 알림이라면 APN을 거치지 않고 비교적 간단하게 처리할 수 있습니다. 매일 특정 시간에 보낸다던가, 유저가 등록한 날짜마다 반복해서 보낸다던가...UserNotification API핵심은 UserNotification이라는 A.. 2024. 8. 2.
🍎 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.
🍎 SwiftUI에서 숫자 입력하면 실시간으로 구분자(,) 붙이기 🍎 SwiftUI에서 숫자 입력하면 실시간으로 구분자(,) 붙이기 하려는 것숫자가 길어지면 읽기가 힘듭니다.1000000000와 1,000,000,000가 있다면 전자는 일십백천만... 하면서 1개씩 세야 겠지만 숫자를 자주 다루신 분들이면 후자가 10억이라는걸 바로 알 수 있습니다.,를 붙여서 보여주는건 간단합니다. 문제는 유저가 숫자를 입력할 때 입니다. 입력할 때는 어떻게 ,를 넣을 수 있을까요?문제를 나눠서 생각해 보자우선, 유저가 입력하는 값은 모두 숫자일지 모르겠지만 보여야 되는 값은 숫자 뿐만 아니라 ,를 포함하기 때문에 문자입니다.가장 단순한 해결책은 유저가 보는 값을 저장하는 변수와 유저가 입력하는 값을 저장하는 변수를 따로 두고, 각자 업데이트를 하면 됩니다. 유저가 입력하면 입력값 저장하는 변수 업데이트 -> 필요하면 , 삽입  후 유저가 보는 값 .. 2024. 7. 21.
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 (Horizontal Sc.. 2024. 7. 10.
🍎 WidgetKit 이용해서 애플 위젯 개발하기 🍎 WidgetKit 이용해서 애플 위젯 개발하기 WidgetKit이 뭐야iOS, iPadOS, MacOS 등에 제공할 Widget을 개발할 수 있는라이브러리 Extension?WidgetKit은 사실 원래 앱에 Library 처럼 단순히 추가되는 추가 기능이 아닙니다. Extension이라는 형태로 추가되는데, 같은 앱이지만 앱과 상호작용할 수 있는 곳을 추가로 제공해 주는 개념이라고 생각하시면 됩니다. Widget 외에도 Siri나 Appclip 같이 앱을 실행하고 상호작용하는 형태 외의 여러 형태의 extension을 사용할 수 있습니다. 문제는 Extension은 애플의 정책상 Sandbox화 돼 있어 다른 앱 처럼 취급 돼 원래 앱의 여러 Class나 데이터를 접근할 수 없다는 겁니다. 이건 뒤에서 자세히 알아보겠습니다. 위젯은 앱이 아니다애플.. 2024. 6. 22.
자주 쓰는 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.
JDBC, 필요한 만큼만 알아보기 JDBC, 필요한 만큼만 알아보기 JDBC, 뭐 하는 거야?JDBC (Java Database Connectivity)는 Java에서 DB에 연결하기 위한 API입니다. 조금이라도 복잡하고 유용한 Application을 만들려면 DB에 연결하는게 필수인데 이를 위해서는 크게 다음과 같은 과정을 따릅니다.DB와 연결 (TCP/IP를 맺고, 암호화 정보 전달하고 등)SQL문 전달(필요하다면) Transaction 처리결과를 받아서 처리 문제는 이 과정이 DB 마다 모두 조금씩 다르다는 겁니다... 새로운 DB를 쓸 때 마다 각 DB의 특성을 공부해서 이 과정을 진행해야 한다면 지옥이 따로 없겠죠? 그렇기 때문에 JDBC라는 표준 API를 제공하고, 각 DB가 이 JDBC를 구현해서 개발자는 JDBC의 사용법만 알면 Application에서 .. 2024. 5. 5.
도메인 모델 풍부하게 만들기 도메인 모델 풍부하게 만들기 문제의 근원 : Fat Service애초에 왜 도메인 모델을 풍부하게 만들어야 할까요? 도메인 모델을 풍부하게 만든다가 절대선이라는 생각은 일단 내려놓고 생각하면, 프로그래밍 설계에서 대부분 무언가를 해야 한다면 2가지 이유가 있습니다.더 이해하기 쉽게 만들기 위해변경에 유연하게 하기 위해 그렇다면 도메인 모델을 풍부하게 만들어야 하는 이유는 왜 때문일까요? 🤔 이건 도메인 모델이 풍부하지 않은 경우 그 로직이 어디에 가는지 생각해 보면 됩니다. 요구사항을 만족시키는 로직은 결국 어딘가에는 있어야 합니다. 보통 도메인 모델에 로직이 없다면, 서비스 계층에 있겠죠? 사실 처음에는 서비스 계층이 통통해도 괜찮습니다. 괜히 이해하기 어려운 패턴이나 아키텍처를 도입하면 이해하기만 어렵고 이득보다 손해가 많습니.. 2024. 5. 4.
Spring의 @Controller, @Repository, @Service, @Component 등 알아보기 Spring의 @Controller, @Repository, @Service, @Component 등 알아보기 스테리오타입 어노테이션 (Sterotype Annotation) 이란?Spring에서는 @로 시작하는 Annotation을 굉장히 많이 사용합니다.Annotation을 많이 사용하기 때문에 여러개를 동시에 쓰는 상황이 반복되거나, 기존 어노테이션의 동작을 약간 수정하면서도 비슷한 역할을 하는 새로운 어노테이션을 만들어야 하는 상황이 발생할 수 있습니다.이 경우에 여러개의 Annotation을 합쳐 스테리오타입 어노테이션 (Sterotype Annotation)을 만들 수 있습니다.스테리오타입 어노테이션 (Sterotype Annotation)을 사용하면 여러 개의 어노테이션을 적용해야 하는 상황을 단순화 하기 때문에 코드의 유지보수성을 높일 수 있습니다. Spring Bean을 만드는 스테리오타입 어노테.. 2024. 5. 1.
반응형