- Bound Resource(한정된 자원): 다중 스레드 환경에서 사용하는 한정적인 자원

- Mutual Exclusion(상호 배제): 한 번에 한 스레드만 공유자원을 사용할 수 있다.

- Starvation(기아): 쓰레드가 오랫동안 자원을 기다리는 상태

- Dead Lock(데드락): 여러 쓰레드가 서로 끝나길 기다리느라 진행하지 못하는 상태

- Live Lock(라이브락): 락을 거는 단계에서 각 스레드가 서로 방해한다.

 

- 세마포어(Semaphore) : 공유된 자원의 데이터를 여러 프로세스가 접근하는 것을 막는 것

 

- 뮤텍스(Mutex) : 공유된 자원의 데이터를 여러 쓰레드가 접근하는 것을 막는 것

 

- 경쟁상태(Race Condition) :  공유 자원에 대해서 여러 개의 프로세스가 동시에 접근을 시도하는 상태

 

- 선점불가(No Preemtion): 한 스레드가 다른 스레드로부터 자원을 빼앗지 못하는 것

 

'기타' 카테고리의 다른 글

nginx configuration  (0) 2020.01.07
DB 순위 비교 사이트  (0) 2019.07.31
Ant vs Maven Vs Gradle  (0) 2019.04.10
Thread 분석  (0) 2018.11.19
Oracle JDK 유료화의 논쟁, OpenJDK와의 차이  (0) 2018.11.03

https://www.digitalocean.com/community/tools/nginx

'기타' 카테고리의 다른 글

동시성 관련 기본 용어  (0) 2020.03.14
DB 순위 비교 사이트  (0) 2019.07.31
Ant vs Maven Vs Gradle  (0) 2019.04.10
Thread 분석  (0) 2018.11.19
Oracle JDK 유료화의 논쟁, OpenJDK와의 차이  (0) 2018.11.03

https://db-engines.com/en/ranking

'기타' 카테고리의 다른 글

동시성 관련 기본 용어  (0) 2020.03.14
nginx configuration  (0) 2020.01.07
Ant vs Maven Vs Gradle  (0) 2019.04.10
Thread 분석  (0) 2018.11.19
Oracle JDK 유료화의 논쟁, OpenJDK와의 차이  (0) 2018.11.03

https://www.baeldung.com/ant-maven-gradle

'기타' 카테고리의 다른 글

nginx configuration  (0) 2020.01.07
DB 순위 비교 사이트  (0) 2019.07.31
Thread 분석  (0) 2018.11.19
Oracle JDK 유료화의 논쟁, OpenJDK와의 차이  (0) 2018.11.03
DDD(Domain Driven Design)  (0) 2018.10.14

https://d2.naver.com/helloworld/10963 

'기타' 카테고리의 다른 글

DB 순위 비교 사이트  (0) 2019.07.31
Ant vs Maven Vs Gradle  (0) 2019.04.10
Oracle JDK 유료화의 논쟁, OpenJDK와의 차이  (0) 2018.11.03
DDD(Domain Driven Design)  (0) 2018.10.14
정규표현식(Regular Expression)  (0) 2018.07.08

https://okky.kr/article/490213


오라클 JDK가 내년부터 유료화 됨에 따라, 미래의 자바는 어떻게 될지.

'기타' 카테고리의 다른 글

Ant vs Maven Vs Gradle  (0) 2019.04.10
Thread 분석  (0) 2018.11.19
DDD(Domain Driven Design)  (0) 2018.10.14
정규표현식(Regular Expression)  (0) 2018.07.08
단축URL 서비스  (0) 2018.07.08

Domain


도메인은 소프트웨어가 취급하는 '어떤 활동이나 관심과 관계가 있는 지식'  즉, 소프트웨어가 해결해야되는 문제이다. 


소프트웨어의 복잡성이 증가하면, 도메인의 복잡성이 증가된다는 말로 직결된다.


예를 들면, 쇼핑몰 사이트를 구축한다고 했을 때 로그인을 해서 상품을 비교하고 주문을 하는 전체 과정이 도메인이 될 수 있다. 


(도메인의 한 루틴안에 비지니스 로직이 포함된다.)


도메인이 어떤 소프트웨어의 기능이라고 생각할 수 있는데 꼭 그렇지는 않다. 소프트웨어 전체가 도메인이 될 수 있고 시스템 자체가 도메인이 될 수 있다.




Domain Model


- 도메인을 분석하여 모델을 구분하는 일

- 도메인 모델링

- 도메인을 개념적으로 표현



기본 요소


1) Entity

2) Value

3) Aggregate

4) Repository

5) Service



Entity


- 모델을 표현

- 고유 식별값을 가짐

- 스스로의 라이프 사이클 소유


Value


- 고유의 키값을 가지지 않음

- 데이터의 표현

- 속성의 불변성



Aggregate


- 관련된 객체의 묶음



Repository


- Entity의 저장소



Service


- Domain 객체에 위치시키기 어려운 오퍼레이션을 가지는 객체 


- Service Domain의 operation은 일반적으로 Stateless 하다.


- 여러 도메인을 다룰 수도 있다.






출처 : https://www.slipp.net/wiki/pages/viewpage.action?pageId=24641881




=> 전체 큰 틀은 Repository 다.  Custom, Accout 2개의 Entity가 존재하며 Custom Entity는 name, address 등 value를 갖는다.


 => 각각의 집합체(aggregate) 경계를 통해 value를 접근할 수 있으며, root의 기본 값은 entity이다.


 => 서비스는 Entity가 처리할 수 없는 비지니스 로직을 수행한다. 


ex) 사용자에게 계좌정보를 메시지로 전달




Domain Driven Design


 도메인 패턴을 중심에 놓고 설계하는 방식


스프링프레임워크의 모체인 Interface21의 Ramnivas Laddad가 정리한 DDD의 세 가지 특징을 살펴보자.

첫째는 도메인 그 자체와 도메인 로직에 초점을 맞춘다는 것이다. 일반적으로 많이 사용하는 데이터중심의 접근법을 탈피해서 순수한 도메인의 모델과 로직에 집중하는 것을 말한다.

둘째는 보편적인(ubiquitous) 언어의 사용이다. 도메인 전문가와 소프트웨어 개발자 간의 커뮤니케이션 문제를 없애고 상호가 이해할 수 있고 모든 문서와 코드에 이르기까지 동일한 표현과 단어로 구성된 단일화된 언어체계를 구축해나가는 과정을 말한다. 이로서 분석 작업과 설계 그리고 구현에 이르기까지 통일된 방식으로 커뮤니케이션이 가능해진다.

셋째는 소프트웨어 엔티티와 도메인 컨셉트를 가능한 가장 가까이 일치시키는 것이다. 분석모델과 설계가 다르고 그것과 코드가 다른 구조가 아니라 도메인 모델부터 코드까지 항상 함께 움직이는 구조의 모델을 지향하는 것이 DDD의 핵심원리이다.

물론 DDD는 방법론이 아니다. 따라서 이런 경우 이렇게 하라는 식의 접근법 보다는 원칙과 핵심가치를 설명해주고 그것에 어떻게 집중할 것인가에 주목하게 하는 것이다. 모든 애플리케이션의 핵심은 결국 그 애플리케이션을 사용할 도메인과 그 로직이라고 본다면 소프트웨어 설계와 구현도 그 부분이 핵심이 되는 것이 마땅하다는 것이 DDD의 개념이라고 생각하면 된다.



(http://www.zdnet.co.kr/news/news_view.asp?artice_id=00000039170214&from=Mobile)




http://domainlanguage.com/ddd/

https://www.slideshare.net/baejjae93/ss-27536729

https://www.slideshare.net/madvirus/ddd-final



'기타' 카테고리의 다른 글

Thread 분석  (0) 2018.11.19
Oracle JDK 유료화의 논쟁, OpenJDK와의 차이  (0) 2018.11.03
정규표현식(Regular Expression)  (0) 2018.07.08
단축URL 서비스  (0) 2018.07.08
Cheat Sheet  (0) 2018.06.13


정규표현식(正規表現式, Regular Expression)은 문자열을 처리하는 방법 중의 하나로 특정한 조건의 문자를 '검색'하거나 '추출', '치환'하는 과정을 매우 간편하게 처리 할 수 있도록 하는 수단이다.


- 문자열에 나타는 특정 문자 조합과 대응시키기 위해 사용되는 패턴






 분류

 

관련 문법 내용

기  호

의  미

기본 메타 문자

.

 모든 문자와 일치 (한 문자)

|(버티컬 바)

 왼쪽 혹은 오른쪽과 일치

[^]

 문자 집합 구성원 중 하나와 일치

-

 문자 집합 구성원을 제외하고 일치

\

 다음에 오는 문자를 이스케이프

수량자

*

 문자가 없는 경우나 하나 이상 연속하는 문자 찾기

*?

 게으른 * 문자

+

 문자 하나 이상 찾기

+?

 게으른 + 문자

?

 문자가 없거나 하나인 문자 찾기

{n}

 정확히 요소와 n번 일치

{m, n}

 요소와 m에서 n번 일치

{n, }

 요소와 n번 이상 일치

{n, }?

 게으른 {n, }

위치 지정

^

 문자열의 시작과 일치

\A

 문자열의 시작과 일치

$

 문자열의 끝과 일치

\Z

 문자열의 끝과 일치

\<

 단어의 시작과 일치

\>

 단어의 끝과 일치

\b

 단어의 경계와 일치

\B

 \b와 반대로 일치

특수한 문자

[\b]

 역 스페이스

\c

 제어문자와 일치

\d

 모든 숫자와 일치

\D

 /d와 반대

\f

 페이지 넘기기 (form feed)

\n

 줄바꿈

\r

 캐리지 리턴

\s

 공백 문자와 일치

\S

 \s와 반대로 일치

\t

 탭

\v

 수직 탭

\w

 영숫자 문자나 밑줄과 일치

\W

 \w와 반대로 일치

\x

 16진수 숫자와 일치

\0 (숫자)

 8진수 숫자와 일치

     역참조와

   전후방 탐색

( )

 하위 표현식 정의

\1(숫자)

 첫번째 일치한 하위 표현식,

 두번째로 일치한 하위 표현식은 \2로 표기하는 방식

?=

 전방탐색

?<=

 후방탐색

?!

 부정형 전방탐색

?<!

 부정형 후방탐색

?(backreference)true

 조건 지정

?(backreference)true|false

 else 표현식 조건 지정 

대소문자 변환

\E

 \L 혹은 \U 변환을 끝냄

\I

 다음에 오는 글자를 소문자로 변환

\L

 \E를 만날 때까지 모든 문자를 소문자로 변환

\u

 다음에 오는 글자를 대문자로 변환

\U

 \E를 만날 때까지 모든 문자를 대문자로 변환

변경자

(?m)

 다중행 모드
















































































자주 사용되는 정규표현식



숫자[ 0 ~ 9 ]

 ^[0-9]+$

 이메일 형식만 가능

 ^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$

 한글

 ^[가-힣]+$

 한글+공백

 ^[가-힣]\s+$

 영문

^[a-zA-Z]+$

 한글+영문

^[가-힣a-zA-Z]+$

 영문+숫자

 ^[a-zA-Z0-9]+$

 휴대폰 번호

^[0-9]{2,3}-[0-9]{3,4}-[0-9]{4}$

 주민번호 (- 포함)

 ^(?:[0-9]{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[1,2][0-9]|3[0,1]))-[1-4][0-9]{6}$

 url ( protocol 포함)

 /^((http(s?))\:\/\/)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$

 주석

 \/\/.*

 적어도 소문자 하나대문자 하나숫자 하나가 포함되어 있는 문자열(8글자 이상 15글자 이하)

 (?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,15}








Java  Example



자바에서 정규표현식과 함께 사용할 수 있는 클래스 및 인터페이스 다음과 같다.


(1) Pattern class

(2) Matcher class

(3) Match Result Interface



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class Regex {
 
    public static void  main(String[] args) {
        //영문+공
        String regex = "^[a-zA-Z\\s]+$";
        
        String input = "Hello World";
        
        boolean matches = Pattern.matches(regex,input);
        
        //true
        System.out.println(matches);
        
        //찾고자하는 문자 + 공백 
        String findRegex = "Hello\\s";
        
        Matcher matcher = Pattern.compile(findRegex).matcher(input);
        
        while(matcher.find()) {
            System.out.println(matcher.group()); // Hello + 공백 출력
            
            String changeData = matcher.replaceAll("Change");
            System.out.println(changeData);
        }
    }
}
 
cs



>>true

>>Hello 

>>ChangeWorld





http://blog.daum.net/creazier/15309380

https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

'기타' 카테고리의 다른 글

Thread 분석  (0) 2018.11.19
Oracle JDK 유료화의 논쟁, OpenJDK와의 차이  (0) 2018.11.03
DDD(Domain Driven Design)  (0) 2018.10.14
단축URL 서비스  (0) 2018.07.08
Cheat Sheet  (0) 2018.06.13

+ Recent posts