목록전체 글 (71)
CheerUp_Cheers
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ccIYkb/btsJSNBKRLI/eKduPx1dnj7hQ1aOsZxUm1/img.png)
마리아 DB엔진Mysql, MariaDB는 InnoDB를 사용하고 있음.MVCC(Multi-Version Concurrency Control) 방식으로 인해 논리피터블 리드와 유사한 상황이 발생 가능.MVCC?Multi Version Concurrency Control의 약자로 다중 버전 동시성 제어라고 한다.Locking의 성능 문제 때문에 탄생하게 되었다.Lock을 사용하지 않고 일관된 읽기를 제공하는 것이 주 목적이다.사용자는 MVCC에서 데이터에 접근할 때 Snapshot을 읽는다.이 Snapshot에 대해선 변경이 완료(commit) 될 때 까진 다른 사용자는 볼 수 없다.사용자가 데이터를 업데이트하면 새로운 버전의 데이터를 버퍼에 넣는다.이전 버전의 데이터는 undo영역에 생성된다.사용자는 l..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bsZ5Is/btsI5x7VZs3/XZJ6PHxgRYAhw0kJ6ugvI1/img.png)
목차 개요동시성을 제어하는 방법은 여러가지가 있고, 필자의 회사에서는 주로 @Transactional와 낙관적 락을 사용하여 처리를 하는 편이다. 하지만, 프로젝트를 꽤나 진행이 된 이후에 위의 구조를 사용하는 로직이 많은 오류를 뱉게 되었다.기존에 설계 목적과 다르게 하나의 컬럼에 대해서 지독하게 UPDATE를 진행하게 되었고, 낙관적 락의 특성상 기존의 상태가 변경되면 업데이트 처리를 하지 않고 오류를 발생시키기 때문이었다. '이런 상황에서는 어떻게 개선을 할 수 있을까?''개선을 할 수 있는 시간적, 기술적 여건이 충분할까?'를 시작으로 해당 이슈를 어떻게 처리했는지에 대해서 작성하고 싶어 글을 작성하였다. '어? 이거 이렇게 사용해도 괜찮나요?' 라고 의견이 나올 수 있고, 더 나은 방법도 있..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/3ZH6i/btqUSo7OGrc/WEyNaeWofiGOPZG3dVtuf0/img.png)
AOP의 특징? 1. 공통적인 처리. 2. 코드의 중복을 막고, 따로 관리가 가능 3. 관리가 용이(흐름의 앞, 중간, 뒤 처리가 가능). # 들어가기전 [1] DispacherSevlet? Servlet 해당 어플리케이션에 들어오는 모든 요청을 핸들링 -> 기존에는 web.xml에 등록 모든 요청을 Contorller로 보내 버리기 때문에, Css, Javasciprt등의 파일마저 가로챔 -> 클라이언트의 요청을 2가지로 분리하여 구분하여 해결 1) /apps의 URL로 접근시 디스패처 서블릿이 담당 2) /resources의 URL로 접근시 담당 X [2] HttpServletRequest(extended ServletRequest) 클라이언트의 요청과 관련된 정보와 동작을 가지는 객체 -> 클라이언..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/LhSRj/btqOP40QDdT/XRIXxNu0rxaQCGkrK0RT31/img.png)
상속 OOP의 핵심이라 여기는 특성 상속이 없으면 OO언어라고 안보는게 보통. 부모로 부터 어떤 특징을 물려 받는것. OOP의 매우 중요한 특성인 다형성의 기반 -> 상속없으면 어렵다 #OOP에서의 상속이란? 이미 존재하는 캘르스를 기반으로 새클래스를 만드는 방법 새클래스는 기존 클랙스 동작과 상태를 그대로 물려 받음(유전) 새클래스 만의 동작과 상태를 추가 가능(진화) #초기화 순서? 부모 초기화 -> 자식 초기화 1) 메모리 개체 생성 2) 부모 생성자 호출 3) 자식 생성자 호출 #super super은 현개체의 부모 부분을 가르킴 1) 생성자 : super(매개변수) 2) 메소드 : super.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/T3Sxg/btqOFjrEpoO/DkCom7k40VLDVVLpl2gVoK/img.png)
싱글턴 패턴 어떤 클래스에서 만들 수 있는 인스턴스를 하나로 제한 다음과 같은 조건 충족하는 개체에 적합 1) 프로그램 실행중 하나만 있어야함 ex) 프로그램설정, 파일시스템 2) 이 개체에 전역적으로 접근이 가능해야함 #싱글턴 클래스 다이어그램 - private 생성자 - static 메소드를 통해서만 개체 얻음 - 아직 개체가 없는 경우 개체를 생성 후 static 변수에 저장 static 변수에 저장된 개체를 반환 - 이미 개체가 있는 경우 static 변수에 있는것 반환 #싱글턴 예 #어디쓸까 Configuration(구성) - 프로그램 창의 위치와 크기, 파일에 저장하거나 로딩. #싱글턴 vs Static 다 static으로하면 개체도 안만들어도 되고 괜찬지않나? - static으로 못하는 일 ..
디자인 패턴 반복을 통해 정형화된 문제 해결 방법 비슷한 문제들에 반복적 적용 가능 ex) 110v 콘셉트와 220v 콘셉트, 플라스틱만 들어가게하는 쓰레기통과 병만 들어가는 쓰레기통 -> 사람들은 실수로 잘못 사용하는 경우를 예시처럼 제한. #추상적으로 범용적으로 만든것이 디자인 패턴 - 알고리즘 -(추상)-> 베스트 프랙티스 -(추상)-> 디자인패턴 - 완성된 설계가 아니라 곧바로 코드로 바뀌지 않음. #패턴의 장점(학계) 1) 이미 검증된 개발방법이라 개발 속도 향상 2) 공통 용어 정립으로 개발자간의 빠른 의사소통을 촉진 -> 그건 싱글턴으로 해결해 #패턴의 단점(실무) 1) 곧바로 적용할수 없는 참고가이드를 '패턴'이라 할수 없다. 2) 잘못 사용하는 경우 빈번. 3) 다른 추상화 기법과 크게 ..