반응형

[IntelliJ] Spring boot war file 만들어 배포하기

어렵지 않습니다. 이미지와 자세한 설명을 했으니 순서대로 하나씩 따라하시면 성공하실 수 있습니다.

build.gradle 파일에 내용 추가

plugins {

   id 'org.springframework.boot' version '2.5.4'

   id 'io.spring.dependency-management' version '1.0.11.RELEASE'

   id 'java'

   id 'war'   // 추가 내용

}


// 아래 모두 추가 내용
apply plugin: 'war'   

bootWar {

   archiveName("project_name.war")

}



Load Gradle Change 실행

(intellij 오른쪽 위에 있는 코끼리 버튼을 클릭

) 변경된 설정을 실제로 적용하는 기능을 한다.


빌드 WAR

$ ./gradlew bootwar

WAR 실행

$ java -jar ./build/libs/project_name.war

실행 확인 방법

$ curl localhost:8080

반응형
반응형
자바 객체지향의 원리와 이해 - 김종민

 

전에 봤던 Good Java 보다 한 단계 수준 높은 책이다. 왜냐하면 Good Java에서는 자세한 설명과 이미지로 이해를 쉽게 하여 입문 개발자를 위한 책이었다.

이책의 제목에서 처럼 자바 입문이 아닌 스프링 입문을 위한 책이다. (스프링 입문을 위한 자바 객체지향의 원리와 이해)

그럼에도 불구하고 객체지향의 원리와 구조적 방법과의 차이 등을 자세하게 설명한다.

특히 객체지향 프로그래밍의 특징중 하나인 추상화를 설명할때 일반적으로 추상하면 떠오르는 피카소와 이집트의 벽화를 예로 들면서 일반적인 개념에서 프로그래밍적인 개념으로의 이해를 돕고 있다.

 

뒷 부분으로 가면서 스프링을 이용한 실질 적인 프로그래밍 패턴과 코드 설명 등이 자세하게 나온다.

뒷부분의 스프링 관련 내용은 많은 내용을 담고 있어서 모두 이해하지는 못했다.

 

 

 

OOP의 4대 특성 = 캡, 상추다.

 

캡술화 - Encapsulation : 정보 은닉(information hiding)

상속 - inheritance : 재사용

추상화 - Abstraction : 모델링

다형성 - Polymorphism : 사용 편의

 

 

객체 지향 설계 5대 원칙 = SOLID

1. SRP (Single Responsibility Principle) : 단일 책임 원칙

   ==> 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다 - 로버트 C. 마틴

 

2. OCP (Open Closed Principle): 개발 폐쇠 원칙

   ==> 소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에 대해서는 열려 있어야 하지만 변경에 대해서는 닫혀 있어야 한다 - 로버트 C. 마틴  -> 다른말로: 자신의 확장에는 열려 있고, 주변의 변화에 대해서는 닫혀 있어야 한다.

 

3. LSP ( Liskov Subsitution Principle) : 리스코프 치환 원칙

  ==> 서브 타입은 언제나 자신의 기반 타입으로 교체할 수 있어야 한다. - 로버트 C. 마틴

  --> 다른말로: 하위 클래스 is a kind of 상위 클래스 - 하위 분류는 상위 분류의 한 종류다.

                    구현 클래스 is able to 인터페이스 - 구현 분류는 인터페이스할 수 있어야 한다.

 

4. ISP (Interface Segregation Principle): 인터페이스 분리 원칙

  ==> 클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안된다 - 로버트 C. 마틴

        다른말로 : 단일 책임원칙(SRP)과 인터페이스 분리원칙(ISP)은 같은 문제에 대한 두 가지 다른 해결책이라고 볼수 있음

        한 남자에게 많은 역할 책임을 주지말고 남자를 역할별로 분리하거나, 역할별로 인터페이스를 만들어서 해결 

 

5. DIP (Dependency Inversion Principle): 의존 역전 원칙

  ==> 고차원 모듈은 저차원 모듈에 의존하면 안된다. 이 두 모듈 모두 다른 추상화된 것에 의존해야 한다.

  ==> 추상화된 것은 구체적인 것에의존하면 안 된다 구체적인 것이 추상화된 것에 의존해야 한다.

  ==> 자주 변경되는 구체(Concrete) 클래스에 의존하지 마라

  --> 다른말로 : 자신보다 변하기 쉬운 것에 의존하지 마라

 

 

06장 스프링이 사랑한 디자인 패턴

스프링 : 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크

 

디자인 패턴은 객체 지향의 특성 중 상속(extends), 인터페이스(interface/implements), 합성(객체를 속성으로 사용)을 이용한다.

 

어댑터 패턴(Adapter Pattern)

   데이터베이스 시스템을 공통의 인터페이스인 ODBC 또는 JDBC를 이용해 조작하는 것과 같은 구조 패턴

 

프록시 패턴(Proxy Pattern)

   다른 누군가를 대신해서 그 역할을 수행하는 대리자/대변인을 만들어 사용하는 구조

 

데코레이터 패턴(Decorator Pattern)

   메서드 호출의 반환값에 변화를 주기 위해 중간에 장식자를 두는 패턴

 

싱글턴 패턴(Singleton Pattern)

   인스턴스를 하나만 만들어 사용하기 위한 패턴

 

템플릿 메서드 패턴(Template Method Pattern)

   상위 클래스의 견본 메서드에서 하위 클래스가 오버라이딩한 메서드를 호출하는 패턴

 

팩터리 메서드 패턴(Factory Method Pattern)

   팩터리 메서드란 객체를 생성해서 반환 하는 메서드

   오버라이드 된 메서드가 객체를 반환하는 패턴

 

전략 패턴(Strategy Pattern)

   클라이언트가 전략을 생성해 전략을 실행할 컨텍스트에 주입하는 패턴

   패턴의 3요소 (전략 객체, 컨텍스트, 클라이언트)

     : 전략 메서드를 가진 전략 객체, 전략 객체를 사용하는 컨텍스트, 전략 객체를 생성해 컨텍스트에 주입하는 클라이언트(제3자)

 

템플릿 콜백 패턴(Template Callback Pattern-견본/회신 패턴)

   전략을 익명 내부 클래스로 구현한 전략 패턴

 

그밖에

  스프링의 MVC의 경우 프론트 컨트롤러 패턴(Front Controller Pattern) 과 MVC 패턴(Model-View-Controller)을 활용하고 있다

 

 

 

 

07 스프링 삼각형과 설정 정보

 

POJO (Plain Old Java Object) 기반의 IoC/DI, AOP, PSA

IoC(Inversion of Control / 제어의 역전), DI(Dependency Injection / 의존성 주입)

 

AOP : Aspect-Oriented Programming : 관점/핵심 지향 프로그래밍

 

PSA : Portable Service Abstraction : 일관성 있는 서비스 추상화

 

 

 

08 자바8 람다와 인터페이스 스팩 변화

 

빅데이터 지원을 위한 멀리코어 병렬분산 프로그래밍을 위한 개선 필요

 

빅데이터 지원을 위한 자바8변경사항

   빅데이터 지원 -> 병렬화 강화 -> 컬렉션 강화  -> 스트림 강화 -> 람다 도입 -> 인터페이스 명세 변경 -> 함수형 인터페이스 도입

 

람다란 코드블럭, 이를 변수로 활용 가능

람다 = 변수에 저장 가능한 로직

기존의 자바에서 로직은 메서드를 통해서만 구현이 가능했는데 이제 람다로 표현할 수도 있게 됨

 

 

반응형
반응형

Good Java / 우재남

Good Java

작가
우재남
출판
한빛아카데미
발매
2016.02.12.

리뷰보기


역시 한국사람이 지은 책이어서 읽기가 편안했습니다. 번역은 가끔 발로한 것들이 있어서..^^


오랫만에 Java 프로그래밍 책을 잡으니 감회가 세로웠습니다.


사실 프로그래밍 언어를 이것 저것 배우고 할줄 알고 있어서 어렵게 생각되지는 않았습니다.

주요 개념과 방법은 전부터 알고 있었고 가벼운 마음에서 보았기 때문이죠. 더욱이 번역서가 아니어서 그냥 죽~ 읽어 내려갔습니다.


예전에 C 프로그래밍을 생각하면서 쉽게 쉽게 책장을 넘겨 갔습니다.


객체지향 언어의 개념도 알고 있던 터라 어렵지는 않았네요...

단지 JAVA로 구체적인 구현방법에 대해서는 새롭게 느껴졌습니다.


그러면서도 신선하게 다가오는 (사소할 수도 있는) 내용이나 기억에 남기고 싶은 내용을 적어봤습니다.


처음 프로그래밍을 배우시는 분들은 하나 하나 따라가면서 연습하시기 좋은 책인 것 같습니다.

특히, 자세한 소스코드와 개념 설명을 위한 그림을 통해 이해하기 쉽게 친절하게 설명되어 있습니다.

 

 

이하 주요내용 입니다.


printf() method의 유형 : 

%d : 정수형    %d ,   100

%f : 실수형     %5.1f , 12345.6

%c : 문자형    %c ,  'c'

%s : 문장형    %s , "itot"


(int) 12345,6  ==> 12345 ( (int)가 정수형으로 바꾸어준다)




예외 타입의 종류


Exception

    -----------> ClassNotFoundException

    -----------> IllegalAccessException

    -----------> RunTimeException

                            ----------> ArithmeticException

                            ----------> NullPointerException

                            ----------> IndexOutOfBoundsException

                                                     ----------> ArrayIndexOutOfBoundsException

                                                     ----------> StringIndexOutOfBoundsException

     -----------> IOException

                           ----------> EOFException

                           ----------> FileNotFoundException





표준 입출력 

    입력 :  System.in         Scanner         BufferedReader

    출력  : System.out    System.err


파일 입출력

   입력 : FileInputStream     BufferedReader   FileReader

   출력 : FileOutputStream    BufferedWriter     FileWriter


(Tip : 한글은 BufferedReader/Writer 사용이 용이 왜냐하면 2바이트 문자 스트림이기때문에...)



접근 제어 수식어별 접근 가능 여부

 수식어

같은 클래스

같은 패키지 

하위 클래스 

외부 클래스 

public

protected 

o

default 

private 



생성자 : 클래스의 이름과 동일한 메소드를 말하며, 주로 인스턴스 생성시 초기값을 정해주기 위해 사용


메소드 오버로딩(Overloading) : 같은 클래스 내에서 메소드의 이름이 같아도 파라미터의 개수나 데이터 형식만 다르면 여러개를 선언 할 수 있는것 (생성자도 메소드 오버로딩 가능) 클래스를 활용 인스턴스 생성 시 초기 값 설정에 효과적임.ㅎ


인스턴스 변수와 클래스 변수

클래스 변수는 클래스 안에 공간이 할당되어 (인스턴스에는 공간이 없고) 여러 인스턴스에서 같이 사용하는 변수

static 키워드를 사용하여 생성


인스턴스 메소드와 클래스 메소드

클래스 메소드를 사용하면 클래스 변수에 직접 접근하지 않고 클래스 메소드를 이용하여 값을 바꿀 수 있다.

(다시말하면 혹시 모를 버그를 방지할 수 있다)



클레스의 상속

기존 클래스가 가지고 있는 필드와 메소드를 그대로 물려받은 새로운 클래스를 만드는 것

public으로 정의된 것만 상속됨 , private으로 정의된 것은 상속 안됨

protected로 정의된 것은 자신의 클래스 또는 패키지에서만 접근 가능(패키지는 클래스를 모아놓은 묶음)

extends 키워드를 사용

class Sedan extends Car {

}


생성자의 상속

수퍼 클래스의 생성자가 먼저 생성, 후 서브 클래스의 생성자 생성


오버라이딩

상위 클래스의 메소드를 하위 클래스에서 재정의 하는 것


메소드 오버라이딩의 제한 : final 키워드 사용



추상 클래스

직접 인스턴스를 생성할 수 없는 클래스

서브 클래스에서 상속 받은 후 서브 클래스에서 인스턴스 생성 가능

abstract 키워드 사용


추상 메소드

본체가 없는 빈껍데기 메소드로 서브 클래스에서 오버라이딩하여 사용하도록 하기 위해 사용

(무조건 오버라이딩해야함, 안하면 문법오류 발생)

메소드 앞에 abstract 키워드 사용


인터페이스

추상 클래스와 비슷하지만 인터페이스는 필드, 추상 메소드를 가질수 있고, 일반 메소드, 상생자는 가질 수 없다.

필드도 static final을 붙인 상수화한 필드만 사용가능하며 반드시 초기화 해야함.

implements 키워드 사용


다중상속

논리적으로 가능하나 JAVA는 다중상속 불가, 그러나 인터페이스를 이용하여 다중상속한 것으로 구현 가능.

 

 

반응형

+ Recent posts