Strategy패턴은 각각의 알고리즘군을 교환이 가능하도록 별도로 정의하고 각각 캡슐화 한 후 서로 교환해서 사용할 수 있는 패턴이며, 아래와 같은 장점이 존재한다.

 

1. 코드 중복 방지

2. 런타임시에 타겟 메소드 변경

3. 확장성 및 알고리즘 변경 용이 

 

위의 말을 쉽게 말하자면 '프로젝트 '전체에서 변경이 일어나지 않는 부분에서 일어나는 부분을 찾아서 따로 캡슐화한다.' 라고 말 할 수 있다.

 

위의 그림은 디자인 패턴을 클래스 다이어그램으로 나타낸 것이다.

위의 이미지는 Strategy 패턴 클래스 다이어그램 이미지이다.

- Starategy: 전략 사용을 위한 인터페이스 생성

- ImplementationOne,Two: Strategy인터페이스를 구현한 실제 알고리즘 구현

- Context: 인스턴스를 생성하여 직접 Strategy를 사용하는 역활

 

 

클래스 다이어그램 및 예제및 실행 

https://niceman.tistory.com/133 

 

Java(자바) 디자인패턴 - 전략(Strategy) 패턴 설명 및 예제소스

Java 디자인패턴 - 전략(Strategy) 패턴 오늘부터 Java 디자인 패턴을 예제와 함께 설명하는 포스팅을 하려고 합니다. 그 중에서 첫 번 째로 실무 프로젝트에서 가장 많이 사용하고 중요한 전략패턴을 설명하려고..

niceman.tistory.com

이 블로그에서 제시한 예제를 보면서 이해하기 쉽게 이해할 수 있었다.

'SpringBoot' 카테고리의 다른 글

JSON & XML  (0) 2019.08.12
Singleton 패턴  (0) 2019.08.08
디자인 패턴  (0) 2019.08.08
AWS RDS 인스턴스 생성 및 설정  (0) 2019.07.30
AWS Lambda & 간단한 Hello from Lambda예제 시작  (0) 2019.07.26

1 )  JSON

개념

JavaScript Object Notation의 약자이다. 이름에서 알 수 있지만 JavaScript기반으로 만들어 졌다.

JSON은 XML의 대안으로 좀 더 쉽게 데이터를 교환하고 저장하기 위하여 만들어진 텍스트 기반의 데이터 교환 표준이다.

또한, JSON은 텍스트 기반이므로 어떠한 프로그래밍 언어에서도 JSON 데이터를 읽을 수 있다.

 

특징

1. JSON은 자바스크립트를 확장하여 만들어졌다.

2. JSON은 자바스크립트 객체 표기법을 따른다.

3. JSON은 사람과 기계가 모두 읽기 편하도록 고안되었다.

4. JSON은 프로그래밍 언어와 운영체제에 독립적이다.

 

1
2
3
4
5
6
{"employees":[
  { "firstName":"John", "lastName":"Doe" },
  { "firstName":"Anna", "lastName":"Smith" },
  { "firstName":"Peter", "lastName":"Jones" }
]}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

2) XML

ML은 EXtensible Markup Language의 약자이다.

이러한 XML은 HTML과 매우 비슷한 문자 기반의 마크업 언어(text-based markup language)이다.

이 언어는 사람과 기계가 동시에 읽기 편한 구조로 되어 있다.

 

XML은 HTML처럼 데이터를 보여주는 목적이 아닌, 데이터를 저장하고 전달할 목적으로만 만들어다.

또한, XML 태그는 HTML 태그처럼 미리 정의되어 있지 않고, 사용자가 직접 정의할 수 있다.

 

1
2
3
4
5
6
7
8
9
10
11
<employees>
  <employee>
    <firstName>John</firstName> <lastName>Doe</lastName>
  </employee>
  <employee>
    <firstName>Anna</firstName> <lastName>Smith</lastName>
  </employee>
  <employee>
    <firstName>Peter</firstName> <lastName>Jones</lastName>
  </employee>
</employees>
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

공통점

1. 둘 다 데이터를 저장하고 전달하기 위해 고안되었다.

2. 둘 다 기계뿐만 아니라 사람도 쉽게 읽을 수 있다.

3. 둘 다 계층적인 데이터 구조를 가진다.

4. 둘 다 다양한 프로그래밍 언어에 의해 파싱 가능하다.

5. 둘 다 XMLHttpRequest 객체를 이용하여 서버로부터 데이터를 전송받는것이 가능하다.

 

 

차이점

1. JSON은 종료 태그를 사용하지 않는다.

2. JSON의 구문이 XML의 구문보다 더 짧다

3. JSON 데이터가 XML 데이터보다 더 빨리 읽고 쓰는것이 가능하다.

4. XML은 배열을 사용할 수 없지만, JSON은 배열을 사용이 가능하다.

5. XML은 XML 파서로 파싱되며, JSON은 자바스크립트 표준 함수인 eval() 함수로 파싱된다.

'SpringBoot' 카테고리의 다른 글

Java Design 패턴 - Strategy 패턴  (0) 2019.08.16
Singleton 패턴  (0) 2019.08.08
디자인 패턴  (0) 2019.08.08
AWS RDS 인스턴스 생성 및 설정  (0) 2019.07.30
AWS Lambda & 간단한 Hello from Lambda예제 시작  (0) 2019.07.26

Singleton이란?

Singletone 패턴은 애플리케이션이 시작 될 때 어떤 클래스가 최초 한번만 메모리를 할당하고 (Static으로) 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴이다.

또한 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후 호출된 생성자는 최초에 생성한 객체를 반환한다.

단 하나의 인스턴스를 생성해 사용하는 디자인 패턴이다.

(자바에서는 생성자를 Private로 선언하여 생성불가로 막아놓고 getInstance()로 받아서 사용함)

1
2
3
4
5
6
7
8
9
public class Singleton {
    private static Singleton singleton = new Singleton();
    private Singleton() {
        System.out.println("Singleton Instance Created..");
    }
    public static Singleton getInstance() {
        return singleton;
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

 

Singleton을 사용하는 이유

고정된 메모리 영역을 얻으면서 한번의 new를 사용하여 인스턴스를 사용하기 때문에 메모리 낭비를 방지할 수 있고 다른 클랫스의 인스턴스들이 데이터를 공유하기 쉽다는 장점이 존재한다.

 

Singletone의 문제점

Singleton 채턴을 사용하게 되면 인스턴스 자체가 하는 역활이 너무 많아질 뿐만아니라 데이터를 공유 시킬 경우 다른 클래스의 인스턴스들 간에 결합도가 높아지는 단점을 가지고 있다.

 

이와같은 단점으로 수정이 어려워 지고 테스트가 힘들어 지는 결과가 발생한다. 또한 멀티쓰레드 환경에서 동기화 처리를 하지 않는다면 인스턴스가 두개 생성이 되는 상황일 발생할 수 있다.

 

해결책

1. 정적 변수에 인스턴스를 만들어 바로 초기화하는 방법 (Eager Initialization)

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Printer {
   // static 변수에 외부에 제공할 자기 자신의 인스턴스를 만들어 초기화
   private static Printer printer = new Printer();
   private Printer() { }
   // 자기 자신의 인스턴스를 외부에 제공
   public static Printer getPrinter(){
     return printer;
   }
   public void print(String str) {
     System.out.println(str);
   }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

2. 인스턴스를 만드는 메서드에 동기화는 하는 방법(Thread-Safe Initialization)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Printer {
   // 외부에 제공할 자기 자신의 인스턴스
   private static Printer printer = null;
   private int counter = 0;
   private Printer() { }
   // 인스턴스를 만드는 메서드 동기화 (임계 구역)
   public synchronized static Printer getPrinter(){
     if (printer == null) {
       printer = new Printer(); // Printer 인스턴스 생성
     }
     return printer;
   }
   public void print(String str) {
     // 오직 하나의 스레드만 접근을 허용함 (임계 구역)
     // 성능을 위해 필요한 부분만을 임계 구역으로 설정한다.
     synchronized(this) {
       counter++;
       System.out.println(str + counter);
     }
   }
}

 

 

 

[Design Pattern] 싱글턴 패턴이란 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

'SpringBoot' 카테고리의 다른 글

Java Design 패턴 - Strategy 패턴  (0) 2019.08.16
JSON & XML  (0) 2019.08.12
디자인 패턴  (0) 2019.08.08
AWS RDS 인스턴스 생성 및 설정  (0) 2019.07.30
AWS Lambda & 간단한 Hello from Lambda예제 시작  (0) 2019.07.26

디자인 패턴이란?

소프트웨어를 설계할 때 특정 맥락에서 자주 발생하는 고질적인 문제들이 또 발생했을 때 재사용할 수 있는 훌륭한 해결책을 의미한다. (이미 만들어져서 잘 되는것으 ㄴ처음부터 만들 필요가 없다는 의미)

 

패턴이란?

각기 다른 소프트웨어 모듈이나 기능을 가진 다양한 응용 소프트웨어 시스템들을 개발할 때도 서로 간에 공통되는 설계 문제가 존재하며 이를 처리하는 해결책 사이에도 공통점이 존재하는데 이러한 유사점을 패턴이라고 한다.

패턴은 공통의 언어를 만들어 주며 팀원 사이의 의사 소통을 원할하게 해주는 아주 중요한 역활을 한다.

 

GoF 디자인 패턴

 

생성(Creational) 패턴

객체 생성에 관련 된 패턴, 객체의 생성과 조합을 캡슐화해 특정 객체가 생성되거나 변경되어도 프로그램 구조에 영향을 크게 받지 않도록 유연성을 제공한다.

 

구조(Structural) 패턴

클래스나 객체를 조합해 더 큰 구조를 만드는 패턴 ex)서로 다른 인터페이스를 지닌 2개의 객체를 묶어 단일 인터페이스로 제공하는 경우

 

행위(Behavioral) 패턴

객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴

 

 

'SpringBoot' 카테고리의 다른 글

JSON & XML  (0) 2019.08.12
Singleton 패턴  (0) 2019.08.08
AWS RDS 인스턴스 생성 및 설정  (0) 2019.07.30
AWS Lambda & 간단한 Hello from Lambda예제 시작  (0) 2019.07.26
파일 서버에 복사하여 올리기  (0) 2019.07.25

AWS RDS란?

AWS RDS는 인프라 및 데이터베이스 업데이트를 관리해주는 것 뿐만 아니라 까다로운 관계형 데이터베이스의 설치, 운영 그리고 관리를 지원하는 서비스이다. 

AWS RDS는 현재 MySQL, Oracle, SQL server, PostgreSQL, MariaDB, Aurora를 비롯한 총 5가지의 데이터베이스 엔진을 지원하고 있다.

 

특징

각 RDS 인스턴스에서 “Multi-AZ” 옵션을 설정하면, 다른 가용영역(Availability Zone)에 복제된 데이터베이스를 필요할 때 바로 사용할 수 있습니다. 이는 주로 프로덕션 데이터베이스에 사용됩니다. 한쪽 가용영역에서 장애 및 에러가 발생할 경우, 문제에 영향을 받지 않게 독립된 다른 가용영역에 미리 복제된 데이터베이스를 자동으로 사용해서 복구(Failover)시키는 기능입니다. 이 뿐만 아니라, Amazon은 Aurora라는 자체 데이터베이스를 제공합니다. 이는 장애(fault) 발생에도 더 안전하고 가용영역을 통해 자체 복구가 가능하며 또한 추가적인 퍼포먼스 기능들을 제공합니다.

 

 

인스턴스 생성

1. AWS Service 선택에서 RDS를 선택하면 다음과 같은 화면을 볼 수 있다.

2. 엔진옵션중에 사용 할 데이터베이스 엔진을 선택한다.

3. 템플렛에서 프리티어를 선택하여 준다.

4. DB세부정보에서 다른것은 설정하지 않고 설정부분에서 DB 인스턴스 식별자, 마스터 사용자 이름, 암호, 암호확인을 설정하여 준다.

5. 퍼블릭 액세스 기능을 '예'로 변경하여 준다.

6. 데이터베이스 생성을 클릭하여준다. 클릭하여 주면 '생성중'이라는 화면을 볼 수 있다. 완료가 되면 생성중이 '사용중'으로 변경된다.

7. '사용중'으로 변경되면 다음과 같은 정보를 볼 수 있다.

8. VPC 보안그룹에 있는 'default'를 클릭하여서 들어가면 이전에 만들어 놓은 EC2 인스턴스의 보안그룹을 찾아서 그룹 ID를 복사합니다.

9. 보안그룹을 생성하여 다음과 같이 설정하여 준다.

10. RDS Instance로 들어가 보안그룹을 변경하여 준다

11. 변경사항을 다음과 같이 확인 할 수 있다.

12. Sequel Pro를 다운하면 다음과 같은 화면을 볼 수 있다.

https://sequelpro.com/download

 

Downloads

 

sequelpro.com

Host부분은 RDS 상세정보에서 보여지는 엔드포인트를 복사하고 Username은 이전에 설정한 이름과 비밀번호를 입력하면 된다.

13. 입력이 완료되면 다음과 같은 화면을 볼 수있다. 접소을 완료한 후 command로 show variables lke 'c%'을 입력하면 다음과 같은 결과값을 얻을 수 있다.

latin1으로 되어있다. 이 상태로 입력값이 들어가게 된다면 입력값이 한글로 들어갈 때 깨지기 때문에 latin1이 아닌 utf8로 변경을 해준다.

 

14. 파라미터 그룹을 생성하는 패이지로 들어가 이름과 설명을 기입을 한다.

15.  UTF-8로 변경하기 위해 다음과 같이 수정하여 줍니다.

15. 인스턴스 수정에 들어가서 DB 파라미터 그룹에서 이전에 만든 파라미터를 입력하여 줍니다.

16. 적용시 다음과 같이 UTF_8로 변경된것을 확인 할 수 있다.

(변경이 안되었을 시 직접 변경해야한다!)

https://jojoldu.tistory.com/259

 

4) 스프링부트로 웹 서비스 출시하기 - 4. AWS EC2 & RDS 구축하기

이번 시간엔 SpringBoot를 운영할 AWS 환경을 구축하겠습니다. (모든 코드는 Github에 있습니다.) Tip) 운영 서버는 크게 클라우드 서비스(AWS, Azure 등) 과 호스팅 서비스(Cafe24, 코리아호스팅 등)을 이용하시..

jojoldu.tistory.com

이후 쿼리문을 던져주면 Table이 생성되는것을 확인 할 수 있다.

'SpringBoot' 카테고리의 다른 글

Singleton 패턴  (0) 2019.08.08
디자인 패턴  (0) 2019.08.08
AWS Lambda & 간단한 Hello from Lambda예제 시작  (0) 2019.07.26
파일 서버에 복사하여 올리기  (0) 2019.07.25
Instance에 접속하기, JDK설치  (1) 2019.07.25

AWS Lambda에 대한 정보를 찾아보면서 가장 많이 본 단어는 'Serverless'이다. 이 말대로 해석하자면 서버가 없는 상태를 의미한다.

한 마디로 쉽게 표현하자면 내 서버가 없어도 AWS 서버가 알아서 처리해준다는 방식이다.

Lambda를 사용하는 목적은 서버에 대한 걱정 없이 코드를 실행하고 사용한 컴퓨팅 시간에 대해서만 비용을 지불하는 방식이다.

 

AWS Lambda란?

 1. 서버를 프로버저닝하거나 관리할 필요없이 코드를 실행

(프로버저닝: 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 시스템을 즉시 사용할 수 있는 상태로 미리 준비하는것)

 2. 모든 유형의 애플리케이션이나 백엔드 서비스에 대한 코드를 별도의 관리 없이 실행 가능 

 3. 코드를 업로드하면 Lambda에서 높은 가용성으로 코드를 실행 및 확장하는 데 필요한 부분 처리함

 4. 다른 AWS 서비스에서 코드를 자동적으로 트리거 하도록 설정하거나 웹 또는 모바일 웹에서 직접 코드를 호출할 수 있음 

 

https://aws.amazon.com/ko/lambda/?nc2=h_m1

 

클라우드 컴퓨팅 PaaS | Amazon Web Services

AWS Lambda를 사용하면 데이터 변경, 시스템 상태 변화 또는 사용자 행동과 같은 트리거에 대한 응답으로 코드를 실행할 수 있습니다. Lambda는 S3, DynamoDB, Kinesis, SNS 및 CloudWatch와 같은 AWS 서비스로 트리거하거나 AWS Step Functions를 사용하여 워크플로로 오케스트레이션할 수 있습니다. 이를 통해 다양한 실시간 서버리스 데이터 처리 시스템을 구축할 수 있습니다. Amazon S3를 사용하여 업로드

aws.amazon.com

 

Lambda를 이용한 Hello from Lambda!

1. 아래의 사진과 같이 AWS Management Console에서 Lambda를 선택해준다.

2. 시작하기 박스에서 '함수 만들기' 클릭!

3.  함수이름을 작성하여주고 런타임은 Node.js 8.10으로 설정하였다.(변경가능)  함수생성 '클릭'

4. 함수를 생성한 후 성공적으로 생성되었으면 아래와 같은 결과값을 볼 수 있다.

5. 이벤트 선택 옆에 있는 테스트를 클릭한다. 클릭을 하면 아래와 같은 페이지를 볼 수있다. 

이벤트 이름을 입력한 후 생성버튼 클릭!

6. 이후 테스트를 한번 더 누르면 실행결과: 성공(로그) 메세지가 등장한다.

Lambda에 HTTP 주소 부여하기

7. 다음으로는 특정 주소에 요청이되면 함수가 실행이 되는것을 확인하겠다. Designer에서 '+트리거 추가'를 볼 수 있다. 

8. 트리거 추가를 누루면 트리거 구성 페이지로 넘어간다.

9. API 게이트웨이를 선택하여 준다. 그리고 다음페이지로 넘어가 API를 생성해주고 배포단계에 입력을 해주고 보안은 '열기'로 설정을 한다.

10. 이후 추가를 누르면 Lambda에 API GateWay가 붙을 것을 확인 할 수 있다.

11. API 게이트웨이 클릭하면 상세정보를 볼수 있다 여기서 API 엔드포인트를 클릭해준다.

12. 성공적으로 'Hello from Lambda!'가 출력이 되는것을 볼 수 있다.

'SpringBoot' 카테고리의 다른 글

디자인 패턴  (0) 2019.08.08
AWS RDS 인스턴스 생성 및 설정  (0) 2019.07.30
파일 서버에 복사하여 올리기  (0) 2019.07.25
Instance에 접속하기, JDK설치  (1) 2019.07.25
탄력적 IP 설정하기  (0) 2019.07.25

 

scp 명령어를 사용한다.

scp -i 'Location of pemkey/pemkeyName' 'Name of .jar file' ubuntu@ ip adress ~/name of file 

'SpringBoot' 카테고리의 다른 글

AWS RDS 인스턴스 생성 및 설정  (0) 2019.07.30
AWS Lambda & 간단한 Hello from Lambda예제 시작  (0) 2019.07.26
Instance에 접속하기, JDK설치  (1) 2019.07.25
탄력적 IP 설정하기  (0) 2019.07.25
AWS & AWS EC2 Instance생성  (0) 2019.07.25

1. 인스턴스에 접속하기 

.pem 파일이 있는 directory로 이동을 한다. (나의 .pem 파일은 현재 다운로드에 존재한다.)

Download파일로 이동뒤 .pem키를 이용하여 Instance에 접속을 한다.

Command는 sudo ssh -i ./.pem키 이름 ubuntu@탄력적 IP이다. (여기에서 탄력적 IP를 사용하는 이유 : public DNS는 값이 복잡하기 때문에 탄력적 IP를 꼭 연결해주어야 한다.) (이전 게시물 탄력적 IP 할당받는 방법 있습니다!)

 

 

Command를 친다 - 패스워드를 묻는다 -Yes를 입력한다 -Ubuntu에 잘 접속이 된것을 확인 할 수 있다.

 

2. JDK

$ sudo apt-get install openjdk-8-jdk 이명령어를 계속 입력하였더니 설치 할수가 없었다.

해결방안으로

sudo add-apt-repository ppa:webupd8team/java이것을 첫번째로 입력해준다.

그다음 sudo apt-get install openjdk-8-jdk를 입력하였더니 설치가 완료가 되었다.

잘 설치가 되었는지 확인하여보자.

java -version   아래 이미지를 보면 잘 설치 되었는지 알수 있다.

 

 

'SpringBoot' 카테고리의 다른 글

AWS Lambda & 간단한 Hello from Lambda예제 시작  (0) 2019.07.26
파일 서버에 복사하여 올리기  (0) 2019.07.25
탄력적 IP 설정하기  (0) 2019.07.25
AWS & AWS EC2 Instance생성  (0) 2019.07.25
.jar 파일 만들기 및 실행  (0) 2019.07.23

+ Recent posts