본문 바로가기

👨‍💻 프로그래밍63

Kotlin의 inline 함수 알아보기 inline이 뭐하는 걸까? 우리가 코딩을 할 때 적극적으로 의식하지는 않지만, 함수를 호출하는건 어느정도 Overhead를 동반합니다. 보통은 현대 컴퓨터 성능이 워낙 좋고, 컴파일러가 최적화를 최대한 해 줘서 굳이 의식할 필요는 없습니다. 하지만 Kotlin에서는 함수가 일등시민이기 때문에, Parameter에 함수를 Argument로 넘기거나, 함수를 Return Type으로 가지는 함수가 있을 수 있습니다. 이는 자바에서는 FunctionN 객체를 만들거나 Closure를 사용할 경우 함수를 호출하는 방식으로 처리합니다. 이 경우 Kotlin에서 함수형 스타일의 코드가 성능에 어느정도 영향을 줄 수 있겠죠? 그럴때 inline을 쓰면 함수 호출 부분을 없애고 코드안에 함수 내용을 넣어 줍니다. I.. 2023. 10. 9.
Logback 간단하게 알아보기 Logback이 뭐 하는 걸까? Logback은 Java에서 가장 많이 사용되는 Logging 라이브러리입니다. Logback Home Logback Project Logback is intended as a successor to the popular log4j project, picking up where log4j 1.x leaves off. Logback's architecture is quite generic so as to apply under different circumstances. At present time, logback is divided into three mod logback.qos.ch Logback의 간단한 구조 Logback은 크게 3가지로 구성되어 있습니다. Logger.. 2023. 10. 1.
Redis, RabbitMQ, Kafka를 각각 Message Queue로 사용할 때의 장단점 Message Queue를 신중히 선택해야 하는 이유 MSA 환경에서 비동기로 무언가를 처리하거나, Transaction을 처리하기 위해 많이 쓰이는 방식이 바로 Message Queue를 사용하는 방법입니다. Message Queue, 그거 아무거나 대충 쓰면 되지 왜 신중히 선택해야 할까요? 모든 SW 기술들이 그렇지만, 결국 장단점이 있기 때문입니다. 속도-비용-정합성 사이의 아찔한 줄타기를 이어간 결과, 크게 3가지 선택지가 주어지게 됐는데요. 이 3가지를 비교해 보고 어떤걸 선택해야 할지 알아보겠습니다. Redis의 장단점 아무튼 빠름. 근데 잃어도 알빠? Redis하면 보통 Cache를 떠올리시겠지만, Message Queue의 기능도 지원하기 때문에 Message Queue로도 사용할 수 있.. 2023. 9. 30.
🔒 분산 Architecture에서 Redlock으로 Lock 걸기 분산 Architecture에서 Lock 걸기의 어려움 Monolithic Architecture에서도 성능을 고려하면 Lock 걸기가 복잡했습니다. 여러 Transaction Level을 고려하고, 재시도 매커니즘을 고안하고, Deadlock 상황에서 어떻게 해야할지 고려하고.. 근데 여기에 더해 MSA 같은 분산 Architecture에서 Lock을 걸어야 한다면 어떨까요? 성능을 더욱 고려해야 하고, Transaction 거는 것도 훨씬 복잡하고, Deadlock은 밥 먹듯이 있지 않을까요? Redis Instance가 1개일 경우 만약 Redis 1개를 공유하면 Lock을 구현하는건 비교적 간단합니다. Lock 별로 고유한 Key를 정의한 후, setNX를 사용해서 있을 경우 set하고, 없을 경.. 2023. 9. 28.
망분리 (Network Segregation), 왜 필요할까? 망분리는 말 그대로, 망(네트워크)를 분리한다는 것입니다. 보통 우리가 개인적으로 쓰는 컴퓨터는 아무 제한 없이 인터넷을 접속할 수 있습니다. 그렇기 때문에 바이러스에 감염될 수도 있고, 여러 공격의 대상이 될 수도 있습니다. 하지만 보안적으로 매우 중요한 곳에 이런 컴퓨터로 접근한다면 어떨까요? 나도 모르게 감염된 바이러스가 옮겨지거나, 내 컴퓨터를 통해 공격을 할 수 있을 지도 모릅니다. 그래서 망분리라는 개념이 나왔습니다. 망분리라고 인터넷이 안 되는건 아니다 망분리라고 무조건 인터넷이 안 되는건 아닙니다. 망분리의 핵심은 중요한 곳을 접속할 때 보안을 위해 불필요한 네트워크 접근을 차단하는 것이기 때문에, 꼭 필요할 경우 특정 사이트를 허용할 수는 있습니다. 망분리를 적용하는 여러가지 방법 보안이.. 2023. 9. 27.
MSA 환경에서 Circuit Breaker를 쓰는 이유, 그럼에도 발생하는 문제 Bulkhead로 해결하기 Circuit Breaker가 뭘까? Circuit Breaker는 회로 차단기입니다. 말 그대로 내리면 정전이 되는 그 회로 차단기를 의미하는 건 아니고, 일종의 비유입니다. MSA 환경에서는 개별 Application의 복잡도는 내려가지만, 인프라 레벨에서의 복잡도는 늘어납니다. Client에게는 1개의 요청으로 보여도, 그 안에는 여러 MS 끼리 네트워크를 통해 요청을 주고 받습니다. 당연히 이 과정에서 실패 확률이 올라갑니다. 만약, 전기를 내리는 회로 차단기처럼 이런 오류를 방지하는 패턴이 없다면 한 MS의 오류가 다른 MS에게 번지기 때문에 이를 예방하기 위해 Circuit Breaker 패턴을 쓰게 됩니다. Circuit Breaker의 작동 방법 Circuit Breaker는 지속적으로 상.. 2023. 9. 24.
🥳 토스 NEXT 2023 합격 후기 (서버 전형, 신입) 🐜 배경 단순히 수학을 좋아해서 수학과에 입학했지만, 점점 현실을 보게 되면서 내가 어떤 직업을 가져야 할까에 대한 고민이 깊어졌습니다. 후보는 여러개 있었지만 컴퓨터 과학이 적성에 잘 맞아서 다른건 접고 프로그래머가 되기로 결심했습니다. 대학교에서 컴퓨터 과학 수업을 3개 정도 듣고, 휴학을 하고 국비지원학원을 다녔습니다. 국비지원학원에서 배운 내용은 오래된 기술들이고 깊이도 없어 도움이 되지 않는다는 분이 많지만, 저는 국비지원학원을 들으며 제가 학문으로서의 컴퓨터 과학이 아닌 프로그래머라는 직업도 적성에 맞다고 알게 돼서 좋았습니다. 그 후 국비지원학원을 수료하고 1년간의 독학을 한 뒤 최종적으로 정말 꿈꾸던 회사인 토스에 합격하게 됐습니다. 토스는 제가 지원한 많은 회사 중 1곳이 아닌 꼭 가고 .. 2023. 9. 23.
Redux 아키텍처, 사용할 수 있을 정도로만 알아보기 서버 개발자로써 프론트엔드를 자세히 깊게 배울 생각은 없었지만, 프론트엔드 작업을 하면서 자연스럽게 불편함과 필요함을 느껴 하나하나 배우다 보니 Redux까지 쓰게 됐습니다. 처음에는 굳이 Redux까지 도입해야 할까 싶었지만, 여러 Component에 걸쳐 Props를 전달하고, 상태를 관리하다 버그를 만나서 디버깅을 하다 보니, 자연스럽게 상태관리 Library를 쓰지 않으면 코딩이 너무 고통스러워서 Redux를 배우게 됐습니다. Redux, 뭐고 왜 필요할까? 웹 애플리케이션에서는 다양한 상태가 필요합니다. 점점 애플리케이션이 복잡해 지면서 자연스럽게 관리해야 할 상태가 늘어나고, Component들을 분리하면서 상태들을 Props를 통해 전달해야 하는 경우도 많아집니다. 이럴때 상태 관리 Libr.. 2023. 8. 13.
🍎 취미 iOS 앱 개발 후기 최근 너무 웹 개발만 한거 같아 Refresh 겸, 또 평소 iOS 앱을 만들고 싶었기에 취미로 iOS 앱을 만들어 보기로 했습니다. 간단히 공부해 보니 iOS는 Objective-C + UIKit 에서 Swift + SwiftUI로 넘어가고 있는 상태였습니다. 취업을 위해서라면 다 공부해야 하겠지만, 취미로 하는거니 당연히 Swift + SwiftUI 조합을 사용했고, iOS 버전도 가장 최신인 iOS 15를 기준으로 하고, 나머지 솔루션도 애플에서 기본 제공하거나 가장 편한 걸 사용했습니다. (Persistence에 CoreData + CloudKit, CI/CD에 XCode Cloud 등) Apple 제품을 쓰면서 느꼈던 장단점이 개발에서도 나타난다 개발이 아니라 Apple 제품의 장단점이 뭘까요?.. 2023. 8. 3.