본문 바로가기

전체 글

(49)
[Infra] MSA 개념편 왜 MSA 를 사용해야할까? 다양한 이유가 있을테지만, 그 이유는 차근차근 공부해나가면서 알아보기로하고 이론적으로 바로 느껴지는 이유들을 나열해보자. 모노리스한 서버라면 특정 부분을 조금만 수정해도 다른부분에 영향이 가는것이 있는지 알아봐야한다. 특정부분에서만 리소스가 필요한데, 어쩔 수 없이 다른 기능들도 스케일 업, 스케일 아웃을 해야한다. 특정 서비스만 패치가되어 배포를 해야하는데 다른 모든 서비스들도 배포가 되어야한다. 위에서 말한 내용은 비용적인 면에서도 개발적인 면에서도 둘다 효율적이지 못합니다. MSA의 정의 어플리케이션이 여러개의 서비스조각으로 구성된 서비스를 의미합니다. 여기서 말하는 서비스는 각각 독립적인 서비스를 제공합니다. 서비스가 사용하는 저장소는 다른 서비스와 완벽히 격리됩니다...
[Spring] WebSocket WebSocketWebSocket(RFC 6455)은 TCP 연결을 통해 클라이언트와 서버간의 양방향통신을 사용할 수 있게 해줍니다. 일반적인 Http 프로토콜과는 다른 프로토콜이지만 80, 443 을 사용하고, Http와 호환되게 설계하여 기존 방화벽 규칙을 재사용할 수도 있습니다. HTTP 와의 차이점Http 통신은 애플리케이션이 다수의 URL로 모델링됩니다. 또한 클라이언트는 Req-Res 스타일로 해당 URL에 액세스합니다. 서버는 HTTP URL, 메서드, 헤더를 기반으로 라우팅합니다. 하지만 WebSocket 은 초기연결에 대한 URL이 1개만 존재합니다. 이후 모든 애플리케이션 메시지가 동일한 TCP 연결을 통해 전달됩니다. 이는 비동기식 이벤트 중심 메시지 아키텍쳐를 의미합니다. ** We..
[DataBase] DBMS 기본 용어 스토리지 엔진 스토리지 엔진은 예를들어 InnoDB, MyISAM, Memory 등이 존재합니다. 사용자가 요청한 SQL 문을 토대로 DB 에 저장된 디스크나 메모리에서 필요한 데이터를 가져옵니다. 이후 해당 데이터를 MySQL 엔진으로 보내줍니다. 일반적으로 온라인상의 트랜잭션 발생으로 데이터를 처리하는 OnlineTractionProcessing 환경이 대다수이므로 InnoDB 엔진을 사용합니다. MySQL 엔진 사용자가 요청한 SQL 문을 넘겨받은 뒤 SQL 검사를 하고 SQL 문을 최소단위로 분리하여 원하는 데이터를 빠르게 찾는 경로를 모색합니다. 이후 스토리지 엔진으로부터 전달받은 데이터 대상으로 불필요한 데이터를 제거하거나 가공하는 역할도 합니다. 파서 사용자가 요청한 SQL 문을 쪼개 최소단..
[DataBase] MySQL vs Oracle 스프링으로 서버를 구축하며 모든 프로젝트에는 DB를 사용했습니다. 아무런 고민없이 H2, Mysql 같은 DB들을 사용하였는데 을 공부하며 Oracle에 대한 내용을 접했을 때, 왜 Oracle을 이제까지 사용해보지 않았는지 의문이 들었습니다. 따라서 을 제대로 공부하기 전, Mysql과 많이 비교되는 Oracle에 대해서 비교해보는 포스팅을 작성하겠습니다. 비용 MySQL MySQL은 기본적으로 오픈소스 라이선스이기 때문에 무료입니다. 따라서 보통 중소규모의 프로젝트에 사용됩니다. MySQL은 차지하는 용량도 정말 적기때문에 비용면에서 크게 이득입니다. 1MB 메모리 환경에서도 데이터베이스를 운영할 수 있을만큼 오버해드가 작습니다. Oracle "페이스북이 가진 데이터를 모두 오라클 RDBMS에 저장하..
[DataBase] 사용자 사용자 식별 MySQL 에서 사용자의 계정은 사용자가 설정한 아이디 + 사용자의 접속지점(호스트명이나 ip 주소)입니다. 따라서 'user'@'127.0.0.1' 의 계정은 로컬에서 user라는 아이디로 접속할 때만 사용할 수 있습니다. 만일 접속지점과 관계없이 계정을 생성하고 싶다면 'user'@'%' 으로 사용할 수 있습니다. 만일 동일한 아이디가 있을 때 MySQL 서버가 어떤 계정을 선택할까요? 'user'@'192.168.0.10' (password : 123) 'user'@'%' (password : abc) 이런 경우에는 범위가 가장 작은것을 선택하게 됩니다. 즉, 1번을 선택할 것이고 abc 로 로그인을 시도하게된다면 로그인 실패로 이어질 것입니다. 시스템 계정과 일반 계정 시스템 계정은 ..
[DataBase] MySQL 시스템 변수 MySQL 시스템 변수 MySQL 서버는 설정파일(my.ini or my.cnf)의 내용을 읽어 메모리나 작동방식을 초기화하고, 접속된 사용자를 제어하기 위해서 이런 값들을 별도로 저장해둡니다. 이러한 값들을 시스템 변수라고 부릅니다. 해당 값들은 다음과 같이 SHOW VARIABLES 또는 SHOW GLOBAL VARIABLES 라는 명령어로 확인할 수 있습니다. 글로벌 변수와 세션변수 일반적으로 시스템 변수가 가지는 속성 중 대표적으로 Var Scope 라는 옵션이 존재합니다. 이는 시스템 변수의 적용범위를 나타내는 것인데, 서버 전체에 영향을 미치는지 아니면 세션(MySQL 서버와 클라이언트 간의 커넥션)에만 적용되는것인지 구분합니다. 둘다 적용이 된다면 Both 라고 구분이 됩니다. 글로벌 변수는..
[DataBase] Select 쿼리 실행순서 Select 쿼리 실행순서 Select 쿼리를 실행하게되면 따라오는 쿼리들의 실행순서가 존재합니다. 사실 당연히 DB 내에서 실행순서가 존재는 하겠지만, 이것이 개발자에게 중요한 개념이라는 것을 인지하지 못하였습니다. 따라서 이번글에서는 실행과정과 왜 중요한지에 대해 글을 작성하겠습니다. Select 쿼리 실행순서 과정 종류 : SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY 1. FROM 절 제일 처음 FROM 절에 명시되어있는 테이블의 데이터를 가져옵니다. 2. WHERE 절 FROM 절에서 읽어온 테이블의 데이터에서 조건에 맞는 결과만 필터링합니다. 3. GROUP BY 절 GROUP BY로 명시된 컬럼(열)을 기준으로 공통된 값들끼리 그룹화 시킵니다. 4. H..
[Spring] AOP * 해당 블로그의 모든 내용과 사진은 글 제일 아래 참고자료를 작성하였습니다. 간단한 AOP 맛보기에 이어 이번 글은 AOP의 다양한 사용에 대해 정리하는 글입니다. [Spring] Rest API와 AOP Rest API 다양한 Client들이 나오면서 브라우저는 그에 맞는 적절한 응답을 해주어야합니다. 이를 해결하기위해 Rest Api가 등장하였습니다. Rest Api란 웹서버의 자원을 클라이언트에게 구애받지 않고 mirr-coding.tistory.com AOP 사용 방법 위의 작업은 Advise 와 PointCut이 들어간 Advisor를 빈 후처리기에 등록 시키는 것과 같습니다. 위의 작업은 AspectV1와 비교해보면 하나의 함수안에 PointCut 그대로 적용하지않고, 분리하여 사용하는 방법..