본문 바로가기

기타

MSA 하는데까지 만들어보기 - (1) 1. MSA 란? MicroService Architecture 로 하나의 거대한 Monolithic 한 앱을 작은 단위의 서비스로 쪼개서 개발하는 것이다. 기존의 서비스들은 대부분 Monolithic하게 개발되어 있고 작은 규모에서는 Monolithic 한 구조가 오히려 더 나을수도 있습니다. (서비스 구성이 간단하기 떄문이죠.) 하지만 서비스가 커지게 되면 Monolithic 한 아키텍처로는 다음과 같은 문제점이 발생합니다. 1) 빌드, 배포, 테스트 시간이 기하급수적으로 증가합니다. (당연히 코드가 커질테니) 2) 서비스를 부분적으로 Scale-up 하기 힘듭니다. (예를 들어 내 사이트의 A ,B ,C 기능 중 C를 사용하는 사용자가 많으면 C만 증가하기 싶어도 그렇게 할수 없다. 즉, Mutli.. 더보기
MySQL AUTO_INCREMENT의 문제점 당연하게 AUTO_INCREMENT를 써왔는데, 이 전략이 안좋다는 이야기가 있어서 조사해봤다. 1. AUTO_INCREMENT란? MySQL에서 기본 키를 생성하는 전략이다. INSERT할떄마다 키를 1씩 증가시켜준다. 2. AUTO_INCREMENT 의 문제점 1) 분산형 시스템에서 문제가 발생한다. (실제 규모 있는 시스템은 아래 그림과 같이 여러개의 웹서버와 웹 어플리케이션 서버가 여러개의 데이터베이스로 구성된 분산형 시스템으로 구성되어진다.) 여러 데이터베이스가 있는 상황에서 insert를 한다고 생각하자. 별다른 동기화가 되어있지 않다면, 데이터베이스 A 가 insert를 받으면 1,2,3,4,5,6으로 키가 증가할거고, 데이터베이스 B 또한 insert 쿼리를 받으면 1,2,3,4,5,6으로.. 더보기
JUnit - 1 1. 유닛 테스트의 필요성 - 유닛 테스트는 모듈이나 어플리케이션 안에 있는 개별적인 코드 단위(메소드 단위)가 예상대로 작동하는지 확인하는 것 위와 같이 컨트롤러 코드를 작성하고 이 코드가 잘 동작하는지 테스트한다고 생각해보자. 우리는 Swagger나 PostMan 같은 툴을 이용해보기도 하고 중간중간 로그를 찍어보는 등 각자의 방법으로 테스트 해봤을 것이다. 하지만 이렇게 테스트 단위가 커지고 모호하게 되면, 버그가 어디에서 발생했는지 찾기 힘들뿐만 아니라 중간에 코드가 수정되기라도 하면 어느 부분을 다시 테스트 해야되는지 조차 불분명해진다. 심지어, 테스트용으로 썼던 데이터들이 DB에 무분별하게 삽입되고 수정되어 기존 배포된 것과 섞이게 된다는 단점 또한 가지고 있다. 2. JUnit 다음은 자바 .. 더보기