분류 전체보기

서비스에 k8s 적용 간, 배포 방식에 관하여 관련 레퍼런스를 읽어볼 기회가 생겼습니다.현대 어플리케이션은 높은 가용성과, 빠른 피드백 루프를 요구하기에,이를 위하여 단일 서비스에 대한 전면적 배포방식보다는, 점진적이고 제어 가능한 배포 전략을 채택하는 것이 일반적이게 되었습니다.이번 글에서는 이러한 배포의 대표적인 전략인 Canary, Rolling, Blue-Green을 살펴보도록 하겠습니다. 1. Canary - Canary 배포는 전체 신규 버전을 소수의 인스턴스 혹은 소수의 사용자 그룹에게 먼저 릴리즈하여, 정상 동작 여부와 안정성을 검증한 후 점차 배포 범위를 확대하는 전략입니다.- 이름과 비슷하게 과거, 카나리아 새를 광산에 데리고 갔던 것에서 유래하여 장애 가능성을 사전에 탐지하기 위한 접..
자바 1.8(Java 8)은 자바 언어 역사에서 가장 중요한 업데이트 중 하나로 평가받으며, 특히 람다(Lambda)와 스트림(Stream) API가 도입되면서 자바 언어의 사용성과 생산성이 대폭 향상되었습니다. 특히나, 스트림 API같은 경우에 효율적으로 병렬프로그래밍을 구사할 수 있게됨으로써 자바1.8버전 이상을 사용하시는분들이 더욱 효율적인 코드를 구사할 수 있게되었는데요, 이 글에서는 자바 1.8에서 추가된 람다와 스트림에 대해 알아보고, 각각의 장단점과 성능적인 측면에서의 고려 사항을 설명하는 시간을 가져보도록 하겠습니다.  람다 표현식(Lambda Expression)이란?   람다 표현식은 자바에서 간결하게 함수를 정의하는 방식입니다. 간단히 말해, 람다는 익명 함수(Anonymous Fun..
이제야 Generic을 포스팅 할 시간이 왔습니다.개인적으로 자바에서 가장 좋아하는 기능인데요, 객체지향원칙 중 다형성을 극한으로 치중한듯 한 제네릭은 여러 타입을 같은 클래스 하나로 공유할 수 있다는점이 아주 매력적인 기능인 것 같습니다.이러한 제네릭(Generic)은 같은 동작을 하는 코드이지만, 데이터 타입이 달라 각자의 타입에 맞는 여러 클래스들을 중복 구현하여야 하는 단점을 보완해줄 수 있는 해결사의 역할을 합니다. 제네릭은 Java에서 코드의 중복을 줄이고, 다양한 타입의 데이터에 유연하게 대처할 수 있는 강력한 기능을 제공하는데, 이번 글에서는 제네릭의 개념과 활용법에 대해 깊이 있게 알아보도록 하겠습니다. 제네릭(Generic) 개념  제네릭(Generic)은 Java에서 클래스나 메소드..
지난 시간에는 추상메소드에 대해 알아보았습니다.이번 포스팅에서는 interface에 관한 내용이 주되긴 하지만, 추상 클래스(abstract class)와의 비교를 포함하기도 하였으니, abstract class에 대한 이해가 부족하신 분들은 아래의 링크를 통해 간단하게라도 훑어보시시는것을 추천드립니다. https://hohome-develop.tistory.com/11 이번에 알아볼 Java에서의 '인터페이스'는 Java에서 다형성과 코드의 결합도를 낮추기 위해 중요한 역할을 합니다. 이번 글에서는 인터페이스의 개념과 사용 방법, 그리고 활용 예시를 중심으로 인터페이스에 대해 알아보도록 하겠습니다. 인터페이스(Interface) 인터페이스(Interface)는 Java에서 클래스가 구현해야 하는 메소드..
· Database
데이터베이스는 현대 애플리케이션의 핵심이라고 할 수 있을정도로 아주 중요한데요, 적절한 데이터베이스를 선택하는 것은 성능, 확장성, 유지보수성 등 많은 측면에서 프로젝트의 성공 여부를 좌우할 수 있을정도입니다.이번 포스팅에서는, 이러한 데이터베이스는 무엇인지, 데이터베이스의 종류에는 어떠한것들이 있는지, 또 데이터베이스의 유형은 어떻게 나뉘는지에 대해 다뤄 볼 예정입니다. 데이터베이스란?'데이터베이스(Database)'는 체계적으로 데이터를 저장하고 관리하는 시스템입니다. 이는 데이터의 저장, 수정, 삭제, 조회를 효율적으로 수행할 수 있도록 설계되었으며, 현대 애플리케이션에서 데이터베이스는 정보를 유지하고 관리하는 핵심 역할을 하고, 데이터를 안전하게 저장하고 필요한 순간에 빠르게 접근할 수 있는 기능..
프로그래머스 : 다리를 지나는 트럭 ( Lv-2 )트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 수 있으며, 다리는 weight 이하까지의 무게를 견딜 수 있습니다. 단, 다리에 완전히 오르지 않은 트럭의 무게는 무시합니다. 예를 들어, 트럭 2대가 올라갈 수 있고 무게를 10kg까지 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다. 따라서, 모든 트럭이 다리를 지나려면 최소 8초가 걸립니다. solution 함수의 매개변수로 다리에 올라갈 수 있는 트럭 수 bri..
서론Chatting Server를 구현할 일이 생겼습니다. 기본적으로, Chatting은 서버와 클라이언트 간 세션 수립을 기반으로 작동하며, 양방향 통신에 의해 로직이 이루어지는 Websocket프로토콜을 사용합니다.(Websocekt프로토콜이 나오고, HTTP API를 사용한 Polling은 사실상 실시간 채팅에 사용하는 서비스가 있을지 의문인데,  생각보다 채팅 구현관련 레퍼런스를 찾아보면 Polling과 관련한 내용도 자주 볼 수 있었네요.. why..? 굳이..?)  Chatting Server를 구현하려면 높은 리소스를 잡아먹는 도메인 특성상, 또한 서버와 Connection이 가능한 클라이언트 수가 제한이 되기 때문에 서비스의 규모가 증가함에 따라 'Scale-out'은 필수적이기 때문에, ..
서론상용 IT서비스를 개발하기 위해서는 코드의 품질, 비즈니스적인 면도 중요하지만, 운영또한 매우 중요한 요소입니다.토이프로젝트로 끝날 프로젝트라면 infra 관련한 부분에 힘을 덜 주어도 되겠지만, 24시간 상용 서비스를 만들어야 하는 저의 경우에는 지속적인 운영, 실시간 트러블 슈팅을 위해 도커와 Github Action을 적용한 CI / CD를 도입하도록 하였습니다. 오늘은 여기서 이 CI / CD란 무엇인지 짚고 넘어가도록하겠습니다.    CI (Continuous Integration)CI는 영문 단어 자체를 직역해보자면, '지속적인 통합'이라는 의미를 갖고있습니다.여기서 지속적인 통합은, 개발자 단에서 애플리케이션의 코드 수정이나 추가적인 기능이 구현되었을 경우 새로운 변경 사항들이 정기적으로..
서론 프로젝트 진행 도중 SpringBoot에서 실시간 데이터를 받아오기 위해 외부 API에 웹소켓으로 연동을 하였습니다.외부 api에 소켓 연결을 하여 실시간 데이터를 받아오는 로직은, 기본적으로 마켓 데이터를 실시간으로 제공하는 서비스 특성 상 핵심 기능이었습니다.따라서, 네트워크 연결 실패, 혹은 서버 문제로 인하여 외부 서버에 소켓 연결이 끊길 경우 실시간 데이터를 받아오지 못하는 치명적인 결함이 발견되었습니다.이 문제를 해결하기 위해 연결이 끊길경우 재접속 연결요청을 주기적으로 실행하는 로직이 필요했습니다.  문제 코드public class UpbitWebsocketClient extends WebSocketClient { private final ObjectMapper objectMapp..
서론개인 프로젝트를 진행하던 와중, 메소드의 형식이 중복되며, 추후 확장성을 고려해야 할 클래스를 다루어야 될 일이 생겼습니다.이러한 문제를 해결하기 위한 방법으로 생각하던것은 '추상 클래스', '인터페이스', '제네릭' 이지만, 이번에 다루어볼 내용은 추상클래스로 선택하였습니다.먼저, 추상 클래스의 큰 특징으로는, 추상 클래스를 상속 받으면, 개발자는 프로젝트에서 필요하고 공통적으로 들어가야하는 필드 및 메소드를 오버라이딩을 하여 프로젝트의 큰 틀을 생각하지않고, 주어진 태스크만 집중하여 구현 하면 된다는 점이 있습니다.  Abstract Class ( 추상 클래스 ) 추상클래스 개념Abstract class는 Java의 추상클래스입니다.말 그대로, 클래스의 기능을 추상화한것이라고 볼 수 있는데, cl..
Ho-home
'분류 전체보기' 카테고리의 글 목록