전체보기
Rocky Linux 9.x 미러서버 변경하기
Rocky Linux 9.x 미러서버 변경하기
2024.10.26Rocky Linux 9.x 미러서버 변경하기rocky리눅스를 업데이트 하는 과정에서 자동으로 미러 사이트가 변경되면서 방화벽에 IP를 주기적으로 등록하고 수정하는 과정이 너무 불편해 국내 미러 사이트로 맘먹어서 변경하는 과정에서 복잡한 문제를 겪었습니다. 미러서버 직접 변경..?온라인에서 다양한 미러 사이트 변경 스크립트를 찾을 수 있었습니다. 그러나 최신 버전 Rocky 9.x에서 작동하는 스크립트가 없어 이것을 수동으로 추가하는 것을 생각했지만, 컨테이너 12개를 직접 다 수정하는 것은 너무 비효율적이라 직접 스크립트를 짜보았습니다. 미러서버 변경방법제가 Gist에 업로드 해두어 손쉽게 다들 사용할 수 있도록 하였습니다. 변경 가능한 미러는 현재 Navercloud와 Kaist 서버 두개를 지..
ONE STEP AWAY 관람후기
ONE STEP AWAY 관람후기
2024.08.08ONE STEP AWAY어느 날 크게 할 게 없어 주변에 뭐가 있을까 찾던 중 재미있는 사진 전시회를 하나 찾았습니다. 이경준의 사진전 원 스텝 어웨이 라는 뉴욕에서 사진을 찍고 도심 속에 있는 패턴을 보여주는 전시회라 해서 전시회에 다녀왔습니다. 《이경준 사진전: 원 스텝 어웨이》는 뉴욕 기반의 포토그래퍼 이경준의 렌즈에 비친 거대한 도심 속 패턴을 조명합니다. 석양에 빛나는 황금빛 빌딩 숲, 작열하는 햇살에 눈이 부신 초록빛의 공원, 그리고 그 안에 작은 사람들. 도시 곳곳을 담은 그의 작품을 바라보고 있으면, 어느새 그 속의 주인공이 되어있는 스스로를 발견하게 됩니다. 복잡하면서도 평화롭고, 익숙하면서도 낯선 그의 시선을 따라가보세요. 일정한 거리를 두고 바라본 우리 삶 속에서, 시야는 넓어지고, ..
SOLID의 중요성과 아키텍처 설계
SOLID의 중요성과 아키텍처 설계
2024.07.18SOLID의 중요성과 레이어 설계작은 프로젝트에서는 크게 문제가 없었지만, 기능이 많아지고 비즈니스 로직이 많아 지면서 스파게티 코드가 생기기 시작하였습니다. 그래서 이러한 문제들을 해결하고자 멀티 모듈을 도입을 하면서 Layerd architecture를 도입하게 된 스토리를 풀어보려고 합니다. 설계를 진행하다 보면 문제들이 많이 생기는데 우아한형제들 기술 블로그에서 작성한 멀티모듈설계이야기 를 참고하면서 설계를 했습니다. 여러분들도 보시면 도움이 많이 될 거 같습니다. SOLID의 부재Spring을 공부하면 MVC 패턴에 대해서 배우게 됩니다. 저희 팀도 이를 기반으로 Controller, Service, Repository로 레이어를 구분하여 개발을 시작했습니다. 초기에는 기능이 한두 개 있을 때는..
패턴을 조합하여 코드를 줄이고 가독성을 개선하자!
패턴을 조합하여 코드를 줄이고 가독성을 개선하자!
2024.07.08중복되는 코드를 줄이고 가독성을 개선하자서버를 개발하면서 인트라넷 관련 정보를 호출하거나 데이터를 요청하고 처리하는 과정에서 비슷한코드들이 반복되는 경우가 많았습니다. 이러한 문제를 조금 해결해보기 위해 다양한 패턴을 적용해보았습니다. strategy 패턴을 이용하여 큰 틀을 만들자public interface ParserDocument { String getURL() ; default Document getDocument() throws IOException{ Connection connection = Jsoup.connect(getURL()) .timeout(1000 * 60) .header("Accept", "*/*") .header("Content-T..
Fragment간 데이터 전달 방법에 대해서..
Fragment간 데이터 전달 방법에 대해서..
2024.06.26Fragment간 데이터 전달 방법에 대해서..안드로이드를 개발하다 보면 서로 다른 Activity와 Fragment간 데이터를 주고 받아야하는 경우가 있습니다. 저는 대표적으로 상태 값이나 처리에 필요한 데이터들이 많았습니다. 기존에는 Bundle을 활용하여 데이터 값을 주고 받았습니다. Stirng 타입의 데이터를 하나 보낸다면 크게 문제는 없었지만, 2개 이상부터 이름다른 Key 값과 중복되는 코드가 증가되고 가독성이 떨어지는 문제가 있었습니다. 그래서 이를 개선하기 위해 다양한 시도를 해보았습니다. Fragment Result 테스트해보기사진과 같이 Fragment Manager에서 처리할 수 있어서 간단하다 생각하였습니다. 특히나 setFragmentResultListener 통해 다른 Frag..
Firebase crashlytics으로 앱 안정성 확보하기
Firebase crashlytics으로 앱 안정성 확보하기
2024.06.26Firebase analytics 및 crashlytics으로 앱 안정성 확보하기개발을 하다보면 문제가 발생할 곳이라 생각해서 예외처리를 해두지만,실제는 다른 곳에서 발생하는 경우가 많았습니다. 어느날 평화롭게 Firebase에서 사용자의 앱 안정성 확보를 위해 crashlytics 모니터링중 예상치 못한 버그가 발생하는 것을 확인했습니다. 백업 너어는 정말…안드로이드에서는 개발을 할때 백업 기능이 기본적으로 활성화 되어 있었습니다. Android security를 통해 암호화를 진행하고 EncryptedSharedPreferences에 저장을 하고나서 복보화키는 Android KeyStore에 저장되는 구조였습니다. 그러나 여기서 문제가 발생합니다. 안드로이드에서 백업이 이루어질때 SharedPref..
Python에서 Java로 마이그레이션하게 된 이유
Python에서 Java로 마이그레이션하게 된 이유
2024.06.23Python에서 Java로 마이그레이션하게 된 이유 최근 큰 고민거리가 하나 생겼습니다. 약 2500개의 데이터를 30분마다 갱신하고 검증하며 캐시화하는 애플리케이션을 빠르게 개발하기 위해 Python으로 만들었고, 이를 AWS Lambda에 올려 데이터를 처리하고 있었습니다.그러나 백엔드 테스트 중에 뭔가 이상한 점을 느꼈습니다. 데이터 자체는 서버에서 가공하고 캐시를 만들기 때문에 클라이언트는 큰 문제를 체감하지 않았으나, 데이터 처리 시간이 길게 소요되는 점이 이상했습니다. 얼마나 느리길래…??Python으로 작성된 코드가 느리게 동작하는 것이 언어와 알고리즘 문제인지 확인하기 위해 동일한 기능을 하는 코드를 Java로 작성하여 Lambda에 올려 테스트해보았습니다.테스트는 AWS Lambda에서 ..
잘못된 에러 핸들링과 로그에 관하여
잘못된 에러 핸들링과 로그에 관하여
2024.04.16로그레벨에 관하여 개발을 진행하다보면 로그를 테스트나 서비스 상태나 장애 파악을 위해 많이 쓰게 됩니다. 그래서 단계에 따른 레벨을 사용하게 됩니다. log4j 기준으로 RACE, DEBUG,INFO, WARN, ERROR, FATAL 으로 구분을 지어 사용합니다. ⭐ 로그레벨 정의 TRACE : 추적 레벨은 DEBUG보다 좀 더 상세한 정보를 나타낸다. DEBUG : 프로그램을 디버깅하기 위한 정보를 지정한다 INFO : 상태변경과 같은 정보성 메세지를 나타낸다. WARN : 처리 가능한 문제, 향후 시스템 에러의 원인이 될 수 있는 경고성 메세지를 나타낸다. ERROR : 요청을 처리하는 중 문제가 발생한 경우이다. FATAL : 아주 심각한 에러가 발생한 상태로 시스템적으로 심각한 문제가 발생해 어..
직접 클라우드 서버 제작 및 서버 인프라 설계
직접 클라우드 서버 제작 및 서버 인프라 설계
2023.12.18서버구축에 있어서올해 프로젝트를 진행하면서 팀장 역할과 Android와 BackEnd 개발을 하게 되었습니다. Spring을 공부하고 있어 서버 개발은 할 수 있었지만, 서버 인프라 설계에 대해 잘모르고 있었습니다. AWS, GCP를 이용하면 시간 절약이 가능했지만 비용문제로 Local 서버로 만들어야 하는 상황이라 학교에서 배운 네트워크 기반과 보안 지식을 꺼내야만 했습니다. 한정적인 자원을 효율적으로로컬 컴퓨터에 서비스를 설치해서 사용할 수 있지만, 만약 서버가 문제가 생기면 다른 서비스에 영향이 갈 수 있고, 백업이 불편하다는 점이 있었습니다. 그래서 다른 방법을 찾게 되었습니다. 특히 한정적인 로컬 자원을 잘 활용하며 백업이 유연해야 했습니다. 주변에 어떤 방법이 찾아보던중 이미 자원을 효율적으로..
WebRTC란?
WebRTC란?
2023.04.10WebRTC란WebRTC(Web Real-Time Communication)는 웹과 애플리케이션에서 별다른 소프트웨어 없이 카메라, 마이크 등을 사용하여 실시간 커뮤니케이션을 제공해주는 기술이다 WebRTC의 기술 시그널링SDP(Session Description Protocol)은 멀티미디어 커뮤니케이션 세션을 설명하기 위한 포맷이다. SDP 자체는 미디어 스트림을 전달하지 않지만, 엔드 포인트 간에 네트워크 메트릭, 미디어 유형 및 기타 관련 속성의 연결에 사용된다. 연결STUN(Session Traversal Utilities for NAT)은 실시간 음성, 비디오, 메시징 애플리케이션 및 기타 상호작용 통신 부문에서 네트워크 주소 변환(NAT)과 통신하여 Peer의 공인IP 주소를 보내는 것을 말..
Kotlin Coroutines 이란 무엇인가요?
Kotlin Coroutines 이란 무엇인가요?
2023.02.06Coroutines 이란 무엇인가? Kotlin coroutines은 비동적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동시 실행 설계된 패턴이다. 코루틴은 Kotlin 1.3 버전에 추가되었습니다. 코루틴의 장점 경량화 코루틴은 실행 중인 스레드를 차단하지 않은 “정지”를 지원하므로 단일 스레드에서 많은 코루틴을 실행할 수 있다.(정지 하는것은 동시 작업을 지원하므로 차단보다 메모리를 절약합니다.) 기본으로 제공되는 취소 지원 실행 중인 코루틴 계층 구조를 통해 자동으로 취소가 전달됩니다. Jetpack통합 많은 Jetpack라이브러리에 코루틴을 완전히 지원하는 확장 프로그램이 포함되어있습니다. Coroutines와 Thread Process와 Thread 프로세스(Proce..
객체지향 코드 설계 5가지 원칙(SOLID)
객체지향 코드 설계 5가지 원칙(SOLID)
2022.09.27코드 설계 원칙(SOLID) SOLID은 SRP(단일책임원칙), OCP(개방 폐쇄 원칙), LSP(리스코프 치환원칙), DIP(의존역전 원칙), ISP(인터페이스 분리 원칙)의 앞글자를 따서 만들어졌다. SOLID를 지키고 설계를 한다면 시간이 지나고 유지보수와 확장이 쉬운 소프트웨어로 개발할 수있고 프로그램 설계에서는 어떠한 원칙을 정하고 그것을 기반으로 프로그램을 작성한다면 원칙 없이 작성한 코드보다 좋은 결과를 볼 수 있다. 단일 책임 원칙 (Single Responsibility Principle) 객체 지향 프로그래밍에서 단일 책임 원칙(Single Responsibility Principle)은 모든 클래스는 하나의 책임만 가지며 클래스는 그 책임을 완전히 캡슐화 해야한다. 클래스가 제공하는 ..