전체 글 89

[기타] SSO(Single Sign On) 이란?

회사에서 SSO 를 구현하는 단계에 있는데, 마침 개념 정리를 같이 하면 좋을 것 같아 글을 기술한다. 1. 정의- 사용자가 한 번의 로그인으로 여러 애플리케이션이나 시스템을 이용할 수 있도록 하는 인증 방식 2. 주요 개념- 인증(Authentication, 신원 확인) 과 인가(Authorization, 권한 확인) 의 분리- 토큰 기반 인증- 중앙 인증 서버(CAS, Center Authentication Server) 3. 장점- 사용자 편의성 증가 (한 번 로그인하면 여러 시스템에 다시 로그인할 필요 없음)- 보안 및 관리 효율성 강화 (중앙 집중식 인증 관리로 보안 정책 적용 용이) 4. 단점- 단일 장애점(Single Point Of Failure, SPOF)  > 중앙 인증 서버가 다운되면..

[React Native] 모바일 초보자의 트러블 슈팅

React Native 를 더 쉽게 사용할 수 있도록 해주는 프레임워크 및 개발도구인 Expo 를 사용하여 간단한 모바일 앱을 만들고 출시하게 되었다. 이 과정에서 있었던 트러블 슈팅 내용을 기록하려고 한다. 1. 폰트 적용- 현상 > 정해진 폴더에 적용하고자 하는 폰트 파일을 위치시킨 후, 해당 앱에서 폰트를 적용하려고 했으나 생각한대로 되지 않았다. - 해결 방법// App.js 파일에서,import { createContext } from 'react';import { setCustomText } from 'react-native-global-props';const ThemeContext = createContext({ fontFamily: 'concon',});export default f..

IT/Front-End 2025.03.30

[CS] 객체 지향 설계 5가지 원칙 - SOLID

객체 지향 설계에서 사용하는 5가지 원칙에 대해 각각 정리하고자 한다. 1. 단일 책임 원칙 (SRP, Single Responsibility Principle)- 설명 : 클래스는 단 하나의 책임만 가져야 한다.- 의미 : 하나의 클래스가 하나의 기능만 담당해야 하며, 변경이 필요한 이유가 오직 하나여야 한다.  2. 개방-폐쇄 원칙 (OCP, Open/Closed Principle)- 설명 : 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다.- 의미 : 기존 코드를 수정하지 않고 기능을 확장할 수 있도록 설계해야 한다. 3. 리스코프 치환 원칙 (LSP, Liskov Substitution Principle)- 설명 : 자식 클래스는 부모 클래스를 대체할 수 있어야 한다.- 의미 : 부모 클래..

IT/CS 2025.03.16

[DesignPattern] Singleton 패턴

디자인 패턴 중 가장 유명한 것 중 하나인 Singleton 패턴에 대한 정리 글을 작성하고자 한다. 1. 정의- 특정 클래스의 인스턴스를 오직 하나만 생성하도록 보장하는 디자인 패턴 2. 특징 (장단점)- 유일한 인스턴스 보장  > 하나의 객체만 생성되고 공유된다.- 전역 접근 가능  > 어디서든 동일한 객체를 참조할 수 있다.- 메모리 절약  > 불필요한 객체 생성을 방지하여 메모리 낭비를 줄인다.- (전역 상태를 가지므로) 테스트가 어려움  > 싱글톤 객체가 공유되므로 테스트 중 상태를 초기화하기 어렵다.- 멀티스레드 환경에서 동기화 문제 발생 가능- 의존성이 높아져 유지보수가 어려울 수 있음 이외에도 다른 디자인 패턴(예를 들면, 팩토리 메서드 패턴 등)이 많이 있는데, 차례대로 정리하도록 하려고..

IT/DesignPattern 2025.03.16

[Redis] ReactiveRedisTemplate 를 활용한 데이터 동기화 문제 해결의 건

회사에서 Redis 를 활용한 기능을 개발했는데, 그 기능은 같은 화면을 동시에 조회하는 사용자 수가 몇 명인지 확인하는 것이었다.쇼핑몰을 이용하다 보면 "X 명이 보고 있습니다." 등의 내용을 확인했던 기억이 있어서, 레퍼런스 자료로 쇼핑몰 플랫폼의 기술블로그를 활용했다. 그렇게 전체적인 틀을 잡아갔는데 데이터 동기화 측면에서 문제가 발생했다.화면을 떠나 더 이상 조회하지 않는 사용자가 있는데 Redis 의 데이터에는 아직 남아 있어 실제 상황과 일치하지 않는 문제가 있었다.그런데 Redis 데이터의 만료 시간을 따로 설정하지 않았기 때문에 이러한 불일치가 발생하면 수정할 수 없는 상황이었다. (필자의 경우엔 데이터의 만료 시간을 설정하면 그것대로 이슈가 생기기 때문에 설정하지 않았다.)이때 화면을 떠..

IT/Redis 2025.02.24

[DP, DFS] 백준 2533번: 사회망 서비스(SNS)

백준 알고리즘 문제를 풀이하고 있는 요즘, 그 과정에서 있었던 내용들을 정리하고자 한다. 예전 수험 생활 때 많이 하던 오답노트 느낌으로 작성해두면 좋겠다는 생각이 들어서 시작하게 되었다. 1. 개요동적 프로그래밍(Dynamic Programming) & DFS(Depth-First-Search) 의 두 가지 개념을 적용하여 해결하는 문제 2. 문제페이스북, 트위터, 카카오톡과 같은 사회망 서비스(SNS)가 널리 사용됨에 따라, 사회망을 통하여 사람들이 어떻게 새로운 아이디어를 받아들이게 되는가를 이해하는 문제가 중요해졌다. 사회망에서 사람들의 친구 관계는 그래프로 표현할 수 있는데, 이 그래프에서 사람은 정점으로 표현되고, 두 정점을 잇는 에지는 두 정점으로 표현되는 두 사람이 서로 친구 관계임을 표현..

IT/Algorithm 2025.01.31

[DB] Optimizer

SQL 쿼리 성능 개선을 위한 방법이 여럿 있는데, 이 중 핵심적인 역할을 담당하는 구성 요소 중 하나인 Optimizer 에 대해 정리하고자 한다.  1. 역할- SQL 쿼리 분석- 다양한 실행 경로를 비교하여 가장 효율적인 실행 계획 선택- 리소스 최적화- 결과 반환 속도 개선 2. 종류1) 규칙 기반 옵티마이저- 단순한 구조를 가지며, 우선순위 명확 2) 비용 기반 옵티마이저- 데이터베이스의 통계 정보를 활용하여 실행 계획의 비용(ex. I/O, CPU 사용량 등) 계산- 최신 데이터베이스 시스템에서 주로 사용 3) 힙 옵티마이저- 특정한 경험적 규칙을 활용하여 실행 계획 생성- 주로 간단한 쿼리에서 사용 3. 주요 요소- 통계 정보  > 테이블 크기, 인덱스 존재 여부, 컬럼 분포, 데이터 밀도 ..

IT/DB 2025.01.20

[DB] SQL vs. NoSQL

개발할 때 사용하는 데이터베이스의 종류는 크게 SQL 과 No-SQL 로 나눌 수 있다. 차후 오픈할 서비스의 특징에 더 적합한 데이터베이스를 선택한다고 할 때 각각의 장점을 잘 알고 있어야 하기 때문에 정리 글을 쓰게 되었다. 1. 개념1) SQL (Structured Query Language)- 관계형 데이터베이스(RDBMS) 에서 데이터를 관리하기 위해 설계된 언어- 데이터는 테이블 형식으로 저장되며, 고정된 스키마를 기반으로 구조화 됨2) NoSQL (Not only SQL)- 비관계형 데이터베이스로, 다양한 데이터 저장 모델 지원 (ex. 키-값, 문서, 그래프 등)- 유연한 스키마를 제공하며, 비정형 데이터를 처리하는데 적합 2. 사용 목적1) SQL- 구조화된 데이터를 효율적으로 관리하고,..

IT/DB 2025.01.20

[Kafka] Apache Kafka 도입기

회사에서 개발 중 수시로 호출하는 API 가 있는데 이를 호출하여 처리하는 수단으로 Kafka 를 고려하게 되었다.그리고 회사 서비스의 성장을 기대하며 대규모 트래픽에 대비한 목적 역시 갖고 있다.그래서 이를 도입할 때의 내용을 정리하고자 한다. 1. 환경 설정 & 실행- build.gradle 에 의존성(dependency) 추가 implementation 'org.springframework.kafka:spring-kafka' - application.properties 에 추가spring.kafka.bootstrap-servers=localhost:9092spring.kafka.template.default-topic=my-topicspring.kafka.consumer.group-id=XXXXX ..

IT/Kafka 2025.01.20

[DB] Sharding

대용량 트래픽을 처리하는 개발자라면 고려해 볼 DB Sharding 에 대해 정리하고자 한다. 1. 개념- 데이터를 논리적으로 나누는 작업으로, 각 분할된 데이터는 독립적으로 관리됨 2. 장점- 성능 향상  > 읽기 및 쓰기 작업이 여러 샤드로 분산되어 병렬 처리 가능- 확장성  > 필요에 따라 샤드와 서버를 추가하여 수평적 확장 가능- 고가용성  > 특정 샤드에 장애가 발생해도 나머지 샤드가 동작 유지 가능 3. 단점- 운영 복잡성- 쿼리 복잡성  > 분산된 샤드에 걸친 데이터를 조회하기 위해 추가 로직(ex. 애플리케이션에서 집계 쿼리) 필요- 데이터 재분배 비용  > 샤드 키가 잘못 설계되었거나 데이터 불균형 시 샤드 간 데이터 재분배가 필요한데 이는 많은 자원과 시간 소모 4. 기타- 적절한 키 ..

IT/DB 2025.01.15