Computer Science

HAProxy를 사용한 리버스 프록시 서버와 무중단 배포 환경 구축(1)
🏁 들어가기 전 프로젝트를 진행하며 Nginx를 사용해 리버스 프록시 서버를 구축해 본 경험이 있다. Nginx를 사용해 간단하게 리버스 프록시 세팅과 로드 밸런스 서버를 구축할 수 있었지만 2% 아쉬운 부분이 존재했다. 이에 대한 대안으로 HAProxy를 사용하여 로드밸런싱이 가능한 고가용성 리버스 프록시 서버를 구축하고 더 나아가 무중단 배포환경까지 만들어보고자 한다. ✅ HAProxy HAProxy는 고가용성 로드밸런서와 리버스 프록시 서버를 지원하는 오픈소스 소프트웨어이다. Nginx 일반 버전과 차별화된 HAProxy의 강력한 기능은 health check 그리고 failover 기능이다. 간단히 설명하면, HAProxy 서버가 백엔드 서버의 상태를 지속적으로 확인하고 문제가 있는 노드(서버)가..

[Java] deep copy, shallow copy 문법 정리
deep copy, shallow copy 자바의 배열, collection을 다룰 때 값을 복사하는 작업을 수행해야할 경우가 있다. 이때 유의해야할 점은 java는 두가지 방법의 복사방법이 있다는 것이다. 얕은 복사(shallow copy) : 메모리 참조 주소를 복사한다. 깊은 복사(deep copy) : 실제 값 자체를 메모리에 복사한다. 예시를 통해 두가지 복사 방법을 정리해보자 shallow copy shallow copy는 값이 아닌 주소 값을 복사한다 복사 후 원본이 달라지면 복사한 값도 같이 달라진다(같은 주소를 바라보기 때문) equal(=) 연산자는 얕은 복사를 수행한다. Cloneable 인터페이스의 clone이 구현되지 않은 Custom 객체의 .clone() import java...

SQL syntax의 정리 - SELECT문
SQL Syntax 정리 - SELECT 구문 이번 포스팅에서는 DML(Data Manufulation Language) 중 하나인 SELECT 구문의 문법에 대해 알아보겠습니다. SELECT 문의 문법 구조와 제공되는 함수를 이해한다면 데이터베이스에서 필요한 정보를 원하는 형태로 조회할 수 있습니다. 예시의 쿼리는 MYSQL 문법을 기준으로 작성되었습니다. 쿼리의 구조 SELECT 컬럼명 FROM 테이블명 WHERE 조건식 GROUP BY 컬럼명 HAVING 조건식 ORDER BY 컬럼명 SELECT 쿼리는 일반적으로 위와 같은 구조로 작성됩니다. 각 명령어의 역할은 다음과 같습니다. SELECT :추출된 데이터들을 조회 FROM : 조회하고자 하는 테이블을 지정 WHERE : 테이블에서 WHERE절에..

[Pythonic Code] 파이썬스러운 코드!
Pythonic code? 파이썬의 기능을 최대한 살려서 코드를 짜는 것! 읽기 편하고 유지보수를 쉽게하는 클린코드! 좋은 가독성과 코드 일관성을 유지할 수 있다! list comprehension 파이썬스럽게 list를 생성하는 방법 가장 많이 사용되는 기법중 하나 for + append 보다 빠른속도로 리스트를 생성할 수 있다 Unpythonic result =[] for i in range(0,10): result.append(i) Pythonic result = [i for i in range(10)] result = [i for i in range(10) if i % 2 == 0] ✅ append와 속도 비교를 비교해보면 실행 성능 차이를 확실히 알 수 있다! split & join split ..

[Network] REST API란?
REST API 란 무엇인가? REST는 서비스의 인터페이스(uri)를 설계하는 원칙이다. 여기서 REST 란 Representational State Transfer의 줄임말이고, 웹의 장점을 최대한 활용할 수 있는 아키텍쳐이다. REST API란 REST 원칙에 입각하여 서비스의 API를 구현한 것을 의미한다. REST란? 자원(Resource)을 URI에 명시하고 GET, POST, PUT, DELTET 와 같은 http 메서드 사용하여 해당 자원의 CRUD를 적용하는 것 REST의 구조와 특징 REST는 다음과 같은 3가지 구조로 이루어진다 자원(Resource) - URI 자원의 행위(verb) - http Method 자원에 대한 행위의 내용(Representation) - Pay Load(B..

[DB] JPA(Java Persistence API) 란 무엇인가?
JPA(Java Persistence API) 란 무엇인가? JPA는 JAVA 진영에서 ORM(Object-Relational Mapping) 기술의 표준으로 사용되는 인터페이스의 모음이다. JPA를 구현한 대표적인 오픈소스로는 Hibernate가 있다. ORM 기술에 대한 자바 진영의 API 표준 명세 JPA의 구현체는 Hibernate, OpenJPA 와 같은 프레임워크가 존재함 ORM(Object-Relational Mapping)은 객체 관계 맵핑 기술 장점 SQL 이 아닌 Method로 DB를 조작할 수 있어, 개발자가 비지니스 로직을 구성하는데만 집중할 수 있다 재사용 및 유지보수의 편리성이 증가한다 DBMS에 대한 종속성이 줄어든다 단점 JPA를 제대로 사용하기까지 걸리는 시간이 오래걸린다 ..

[DB] 정규화(Normalization)에 대해서
정규화(Normalization)? 데이터베이스는 Entity, Tuple, Table 등 여러 요소들의 집합으로 구성되어 있다. 데이터베이스의 요소들이 중복되지 않고 CRUD 쿼리 수행시 이상현상(Anomaly)를 최소화 하기 위해 테이블을 구성하는 정규화(Normalization)을 수행한다. 정규화의 목적 중복된 데이터(redundancy)의 제거 논리적 데이터 저장 DB 구조확장 시 테이블 변경 최소화 정규화는 1NF, 2NF, 3NF, BCNF, 4NF, 5NF, 6NF 까지 정의되어 있으며 관계형 데이터베이스가 제3정규화(3NF)까지 정규화가 되어있일반적으로 정규화 되었다고 한다. 이번 포스팅에서는 제1 정규화 부터 BCNF 정규화까지 정리해보고자 한다. 제 1 정규화 (1 NF) - 컬럼에 ..