스칼라 서브쿼리 인라인뷰 서브쿼리

Posted by HULIA(휴리아)
2019. 11. 2. 23:52 백엔드개발/데이터베이스

쿼리에서

SELECT 문안에 SELECT 문이 들어갈 수 있는 세곳입니다

1)SELECT 절

2)FROM 절

3)WHERE 절

 

각각의 SELECT절을 지칭하는 명칭이 다릅니다

1)SELECT 문에 SELECT절을 스칼라 서브쿼리라고 합니다

2)SELECT 문에 FROM절 안에 들어가는 SELECT절을 인라인 뷰라고 합니다

3)SELECT 문에 WHERE절 안에 들어가는 SELECT절을 서브쿼리라고 합니다

 

그리고 주의점도 있습니다

1)스칼라 서브쿼리

하나의 레코드만 출력이 가능(두개 이상의 레코드일때는 사용할 수 없음)

일치하는 데이터가 없더라도 NULL값을 출력 가능

성능상 좋지 않기 때문에 사용하지 않는게 좋지만 단순히 코드에 따른 코드명출력할때는 사용하는게 좋을 수 있습니다

 

2)인라인 뷰

일종의 테이블이기 때문에 조인조건을 줄 수 있습니다

그래서 별칭을 주어야 하고 인라인뷰의 컬럼명도 별칭을 주어서 연결을 잘 시켜줘야 합니다

 

3)서브쿼리

기본적으로 단일행 서브쿼리가 있지만

IN, ANY, ALL과 결합되어서 아래와 같은 서브쿼리가 생기기도 합니다~

3.1)다중행 서브쿼리

3.2)다중컬럼 서브쿼리

 

 

JDK 다운 Oracle을 떠나서 AdoptOpenJDK Zulu Java Community 에서 받으세요

Posted by HULIA(휴리아)
2019. 10. 21. 22:41 백엔드개발/자바스프링

윈도우에 JDK를 설치하러 Oracle 사이트에 갔는데 다운 받을려면 회원가입을 하라고 하는것도 싫어져서

드뎌 Oracle JDK에서 벗어날때가 된 것 같네요

 

이참에 다른 JDK로 갈아 탈려고 조사를 해보았습니다

 

서버 구동을 위한 리눅스에서도 openJDK를 쓰고 있기도 하여서 몇가지 JDK가 있을 것 같네요~

 

조사해보니 Oracle JDK를 대체할 수 있는 대안이 몇가지가 있는 것으로 확인 되었습니다

 

OpenJDK

 

https://openjdk.java.net

JDK 오픈화 기구 입니다~

이를 기반으로 만든 JDK는 다음과 같습니다

 

OpenJDK 비교표입니다

https://kr.azul.com/products/zulu-enterprise/jdk-comparison-matrix/#

 

Zulu Comparison Matrix - Azul Systems Inc.

Zulu Comparison Matrix Enterprise FAQ Java SE OpenJDK Support bug fixes security updates JVM Azul Systems Amazon Corretto AdoptOpenJDK Red Hat

www.azul.com

Azul이라는 곳에서 발표해서 편향적인것은 어쩔 수 없지만 그래도 표로 정리해두어서 이용하는 입장에서는 굉장히 편한 부분도 있습니다^^

 

1)AdoptOpenJDK 
AdoptOpenJDK는 2017년부터 출범하였고 AWS, AZUL, GoDaddy, IBM, Microsoft Azure, ocado, packet, pivotal, RedHat, DigitalOcean, CloudFlare, Github 등 스폰서를 가지고 있는 OpenJDK 커뮤니티입니다.

LTS버젼을 제공합니다~

다운로드는 다음의 링크를 이용하세요~
https://adoptopenjdk.net/

 

AdoptOpenJDK

AdoptOpenJDK provides prebuilt OpenJDK binaries from a fully open source set of build scripts and infrastructure. Supported platforms include Linux, macOS, Windows, ARM, Solaris, and AIX.

adoptopenjdk.net

 

 

2)Azul Systems Zulu / Zulu Enterprise
Zulu는 Azul Systems가 제공하는 OpenJDK 빌드입니다. Windows, MacOS, Linux에서 사용 가능한 OpenJDK 기반 Zulu을 무료로 배포하고 있습니다.

LTS버젼을 제공합니다~

 

community 버젼이 무료버젼입니다~

https://www.azul.com/downloads/zulu-community

 

Download OpenJDK Java Linux Windows macOS Alpine Java 11 Java 8

Download Java 11 Zulu OpenJDK Linux Windows macOS Solaris Update Java Alpine Java SE free download Java 8 Java 7 Java 6 JDK

www.azul.com

 

저는 위의 2개 JDK중에 한곳을 쓸 것 같습니다^^

다운 받았을때의 용량 입니다

참고로 둘다 1.8버젼입니다~ㅎ

스프링부트 pom.xml 빌드된 jar파일명 날짜 설정하기

Posted by HULIA(휴리아)
2019. 9. 1. 00:09 백엔드개발/스프링부트

REST API 설계하기

Posted by HULIA(휴리아)
2019. 8. 16. 13:04 백엔드개발/스프링부트

REST API

1. 자원(resource) : URI

2. 행위(verb) : HTTP 메서드

3. 표현(representations) : 리소스에 대한 표현(HTTP Message Body)

 

1. URI 설계

URI는 URL을 포함하는 개념입니다

URL이 리소스를 가져오는 방법에 대한 위치라면 URI는 문자열을 식별하기 위한 표준입니다

 

URI는 명사를 사용해야 하며 동사를 피해야 합니다.

모든 경우에 완벽하게 호환되지는 않습니다. 세부적인 동사의 경우 URI에 포함될 수 밖에 없습니다.

가령 모바일 결제라는 REST API를 설계한다고 가정할 경우 OTP발행, 결제 진행, 기타 API 동작에 대해 HTTP메서드만으로는 대응하기 힘듭니다. 앞의 URI 설계에 대한 원칙은 어디까지나 불필요한 동사를 URI에 포함하는 것을 지양해야 한다는 것이지 완전히 배제시킨다는 것은 아닙니다

 

URI에서는 명사에 단수형보다는 복수형을 사용해야 합니다

컬렉션으로 URI를 사용할 경우 컬렉션을 한번 더 감싼 충첨 형식으로 사용하는 것이 종습니다

_embedded:[

   {

    books:....

   },

   {

    stores:....

   },

   {....}

]

 

 

2. 행위 설계

Resource GET(read) POST(create) PUT(update) DELETE(delete)
/books book 목록 보기 해당 book 추가    
/books/1 ID가 1인 book 보기   ID가 1인 book 수정 ID가 1인 book 삭제

/books의 경우 book의 목록을 표현한다는 기본 전제가 깔려 있습니다.

/books 자체가 복수의 book을 의미하므로 books를 게시판에 표현할 때 페이징을 처리하는 값을 추가로 제공할 수도 있습니다.

ex) /books?page=0&size=10&sort=desc

 

page, size, sort 파라미터를 따로 지정하지 않으면 서버에서 기본으로 설정한 값으로 반환됩니다

 

 

 

메이븐보다 Gradle을 사용하는 이유 및 Gradle 설치 및 기본 구조

Posted by HULIA(휴리아)
2019. 8. 15. 21:53 백엔드개발/스프링부트

처음 배우는 스프링 부트2에서 참고

 

메이븐은 pom.xml로 XML기반으로 작성되어 있어서 동적인 행위에 제약이 있어서 대안으로 나온 그루비 기반의 Gradle이 주목받고 있습니다

 

Gradle은 Ant로부터 기본적인 빌드 도구의 기능을, 메이븐으로부터 의존 라이브러리 관리 기능을 차용했습니다.

 

멀티 프로젝트 구성 시에는 메이븐처럼 상속 구조가 아닌 설정 주입 방식을 사용하여 훨씬 유연하게 빌드 환경을 구성할 수 있습니다.

 

 

 

https://gradle.org/install/

 

Gradle | Installation

Install the Gradle build tool on Linux, macOS or Windows, either manually or using a package manager like SDKMAN! or Homebrew.

gradle.org

 

https://gradle.org/guides/#getting-started

 

Gradle | Gradle Tutorials and Guides

Learn Gradle through tutorials and topical guides.

gradle.org

 

 

 

Gradle 설정 관련 기본 구조

1. gradlew : 리눅스 및 맥OS 용 쉘 스크립트

2. gradlew.bat : 원도우용 배치 스크립트

3. gradle/wrapper/gradle-wrapper.jar : Wrapper JAR

4. gradle/wrapper/gradle-wrapper.properties : Gradle 설정 정보 프로퍼티 파일(버전 정보 등)

 

 

스프링부트 특징 및 장단점 및 spring boot starters 목록

Posted by HULIA(휴리아)
2019. 8. 15. 19:32 백엔드개발/스프링부트

처음 배우는 스프링부트 2 책에서 참고

 

스프링 부트 특징

1. 임베디드 톰캣(Embed Tomcat), 제티, 언더토우를 사용하여 독립 실행이 가능한 스프링 어플리케이션 개발

2. 통합 스타터를 제공하여 메이븐/그래들 구성 간소화

3. 스타터를 통한 자동화된 스프링 설정 제공

4. 번거로운 XML설정을 요구하지 않음

5. JAR을 사용하여 자바 옵션만으로도 배포 가능

6. 애플리케이션의 모니터링과 관리를 위한 스프링 액츄에이터(Spring Actuator) 제공

 

스프링 부트 장점

1. 각각의 의존성 버전을 올리는 것이 좀 더 수월합니다.

스프링 부트의 버전이 올라갈때마다 각 버전 간의 호환성에 대해 충분한 테스트를 거치고 릴리스되기 때문에 기존에 하나씩 수동으로 설정했던 버전 관리에 비해 안정된 버전이 제공된다는 최소한의 보장을 얻을 수 있습니다.

2. 특정 라이브러리에 버그가 있다 하더라도 스프링팀에서 버그픽스한 버전을 받기 편리합니다

3. 간단한 어노테이션 설정이나 프로퍼티 설정으로 세부적인 설정 없이 원하는 기능을 빠르게 적용할수 있습니다.

4. 별도의 외장 톰캣을 설치할 필요가 없으며 위와 동일한 이유로 톰캣 버전도 더욱 편리하게 관리합니다.

 

스프링 부트 단점

1. 설정을 개인화(커스터마이징)하면 버전을 올릴 때 기존 스프링 프레임워크를 사용하는 것과 동일한 불편함을 겪을 수 있습니다.

2. 특정 설정을 개인화 혹은 설정 자체를 변경하고 싶다면 내부의 설정 코드를 살펴봐야 하는 불편함이 있을 수 있습니다.

 

 

 

spring boot starters 목록

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using-boot-starter

 

Spring Boot Reference Guide

This section dives into the details of Spring Boot. Here you can learn about the key features that you may want to use and customize. If you have not already done so, you might want to read the "Part II, “Getting Started”" and "Part III, “Using Spring Boot

docs.spring.io

 

스프링 템플릿 엔진 종류 및 성능 및 비교

Posted by HULIA(휴리아)
2019. 8. 4. 18:47 백엔드개발/자바스프링

스프링에서 사용가능한 템플릿 엔진 종류들

https://www.baeldung.com/spring-template-engines

 

Template Engines for Spring | Baeldung

Discover Spring-compatible template engines and see simple examples.

www.baeldung.com

 

위의 스프링에서 사용가능한 템플릿 엔진 성능순위(비교)

https://github.com/jreijn/spring-comparing-template-engines

 

jreijn/spring-comparing-template-engines

Demo project to show different Java templating engines in combination with Spring MVC - jreijn/spring-comparing-template-engines

github.com

 

결과는 다음과 같습니다~ㅎ

 

Freemarker나 Mustache 나 Thymeleaf 쓰는 것이 좋아보이네요~ㅎ

REST API 란

Posted by HULIA(휴리아)
2019. 8. 4. 17:24 백엔드개발/자바스프링

스프링 부트로 배우는 자바 웹 개발 책과 처음 배우는 스프링 부트2 책에서 참고

 

REST는

-Representational State Transfer의 약자

-분산 네트워크 프로그래밍의 아키텍쳐 스타일

-웹과 같은 분산 하이퍼미디어 시스템에서 사용하는 통신 네트워크 아키텍처로, 네트워크 아키텍처의 원리 모음입니다

웹은 전송 방식으로 HTTP를, 식별방법으로 URI를 사용합니다

HTTP는 웹에서 GET, POST, PUT, DELETE 등의 메서드를 사용하여 정보를 주고받는 프로토톨입니다

REST는 HTTP와 URI의 단순하고 간결한 장점을 계승한 네트워크 아키텍처입니다

따라서 다양한 요구사항에 대응하여 때로는 단순하게, 때로는 서버와 클라이언트가 서로 통신하는 리소스에 대해 복잡한 방식으로 상호작용할 수 있습니다

 

REST의 목적

1. 구성요소 상호작용의 규모 확장성

2. 인터페이스의 범용성

3. 구성요소의 독립적인 배포

4. 중간적 구성요소를 이용한 응답 지연 감소, 보안 강화, 레거시 시스템 인캠슐레이션

 

RESTful의 제약 조건

REST의 구현 원칙을 제대로 지키면서 REST 아키텍처를 만드는 것을 RESTful이라고 함

 

1. 클라이언트/서버

: 클라이언트와 서버가 서로 독립적으로 구분되어야 하고 서버 또는 클라이언트 증설 시에 서로간의 의존성 때문에 확장에 문제가 되는 일이 없어야 한다

2. 상태 없음

:클라이언트와 서버 간의 통신시에 상태가 없어야 한다. 단순히 들어오는 요청만 처리하여 구현을 더 단순화한다. 단 클라이언트의 모든 요청은 서버가 알아듣는 데 필요한 모든 정보를 담고 있어야 한다.

3. 레이어드 아키텍쳐(Layered Architecture)

:서버와 클라이언트 사이에 중개서버(게이트웨이, 방화벽, 프록시)나 로드밸런싱, 공유캐시가 있는 것처럼 다계층 형태로 레이어를 추가하거나 수정하거나 제거할 수 있고 확장성이 있어야 한다

4. 캐시가능(cacheable)

:서버의 응답들은 캐시를 가지고 있거나 없거나 둘 중의 하나인데, 캐시를 가지고 있을 경우에는 클라이언트가 캐시를 통해서 응답을 재사용할 수 있고 이를 통해서 서버의 부하를 낮추어서 서버의 성능이 향상될 수 있다. HTTP장점을 그대로 계승한 아키텍쳐가 REST라서 HTTP의 캐시 기능을 적용할 수도 있습니다

5. 코드 온 디멘드(Code On Demand)

:요청이 오면 코드를 준다는 의미로 특정 시점에 서버가 특정 기능을 수행하는 스크립트 또는 플러그인을 클라이언트에 전달해서 해당 기능을 동작하도록 하는 것이다. 코드 온 디멘드의 예로는 애플릿, 자바스크립트, 플래시가 있다. 이 제약조건은 선택가능합니다.

6. 통합 인터페이스

서버와 클라이언트 간의 상호 작용은 일관된 인터페이스들 위에서 이뤄져야 한다

 

통합 인터페이스 규칙

1. 리소스 식별

:웹 안에서 서로 구분할 수 있는 개념으로 URI와 같은 고유 식별자를 통해 표현할 수 있다

2. 표현을 통한 리소스 처리

:사람의 말에 강세가 있어서 같은 문장을 말하더라도 말한 사람의 강세나 어조에 따라 의도가 달라질 수 있듯이 같은 데이터에 대해서 표현할 때 JSON, XML, HTML 페이지와 같이 다양한 콘텐츠 유형으로 표현할 수 있다. 그렇지만 말의 강세나 어조가 바뀌어도 문장 자체는 그대로인 것처럼 데이터는 변경되지 않는다.

3. 자기 묘사 메시지

:일반적으로 네트워크 통신을 할 때는 헤더부분에 현재 보내고 있는 데이터 패킷에 대한 메타 정보를 담아서 본문을 읽을 때 해당 본문이 어떤 의도로 쓰여진 것인지 알 수 있다. 마찬가지로 HTTP 통신을 할때도 HTTP header에 메타 데이터 정보를 추가해서 실제 데이터와는 관련 없지만 데이터에 대한 설명을 나타내는 정보를 담을 수 있다

4. 애플리케이션의 상태에 대한 하이퍼미디어(HETEOAS, Hypermedia As The Engine Of Application State)

간단히 말해서 웹은 여러 페이지들과 그 페이지들을 이동할 수 있는 링크 정보들로 구성되어 있다. REST API를 개발할때도 단순히 데이터만 전달하지 않고 링크 정보까지 포함한다면 좀 더 웹에 친숙한 API가 될 것이다

 

 

적어놓고도 어려워서 다른 블로그 글을 아래에 첨부하였음

 

https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

 

[Network] REST란? REST API란? RESTful이란? - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

https://meetup.toast.com/posts/92

파이썬 아나콘다 배포판 조사

Posted by HULIA(휴리아)
2019. 4. 29. 01:30 백엔드개발/파이썬

이번에 파이썬 관련 수업을 듣게 되면서 아나콘다를 설치하게 되어서 조사하였다

아나콘다란

아나콘다(Anaconda)는 수학과 과학 분야에서 사용되는 여러 패키지들을 묶어 놓은 파이썬 배포판으로서 SciPy, Numpy, Matplotlib, Pandas 등을 비롯한 많은 패키지들을 포함하고 있다.
Anaconda는 특히 최근에 데이타 사이언스와 머신 러닝 분야에서 파이썬을 사용하기 위해 기본적으로 설치하는 배포판이 되었다(데이터 과학 및 기계학습을 수행하는 가장 쉬운 파이썬 배포판이다)

Anaconda는 패키지 관리자, 환경 관리자, Python / R 데이터 과학 배포판 및 1,500 개 이상의 오픈 소스 패키지 모음입니다

구성된 패키지

  • 라이브러리 관리

    • Conda
  • 시각화

    • Matlpotlib, Bokeh, Datashader, HoloViews
  • 데이터 분석

    • Numba, pandas, DASK, numPy, sciPy
  • 기계학습

    • TensorFlow,
  • Jupyter

  • spyder

  • H2o.ai

아나콘다 구성요소

4개의 구성요소

  • 아나콘다 네이게이터
  • 아나콘다 프로젝트
  • 데이터 사이언스 라이브러리
  • Conda(라이브러리, 종속성 및 환경 관리)

Data Science 라이브러리는 (a) Jupyter와 같은 IDE 개발도구, (b) Numpy, SciPy 같은 과학 분석용 라이브러리, (c) Matplotlib 같은 데이타 시각화 (Data Visualization) 라이브러리, (d) TensorFlow 같은 머신 러닝(Machine Learning) 라이브러리 등을 포함하고 있다.

Anaconda Navigator는 UI 클라이언트로서 하부 컴포넌트를 쉽게 사용하도록 한 데스크탑 포털 기능을 담당한다. 예를 들어, Jupyter나 Spyder 같은 개발도구를 이곳에서 Launch할 수 있다.

주피터 노트북

주피터 노트북(Jupyter Notebook)은 웹 브라우저에서 파이썬 코드를 작성하고 실행해 볼 수 있는 개발도구이다. 일반적으로 아나콘다(Anaconda)를 설치하면 Jupyter Notebook이 함께 설치되어 Jupyter를 사용할 수 있다. 물론 Anaconda를 사용하지 않는 경우 pip 을 통해 Jupyter 패키지를 설치할 수도 있지만, 통상 Anaconda를 설치해서 사용할 것을 권장한다.

Anaconda가 설치된 후, Anaconda 메뉴중 Jupyter Notebook을 선택하거나 Anaconda Navigator에서 Jupyter Notebook 메뉴를 선택하면 Jupyter를 실행할 수 있다.

Anaconda 메뉴중 Jupyter Notebook을 선택한 경우, Jupyter Notebook 서버 (콘솔 프로그램)와 클라이언트로 사용되는 웹 브라우저 등 2개의 프로그램이 실행된다. Notebook 서버 프로그램은 백그라운드에서 실행되는 파이썬 프로그램으로 웹 브라우저 클라이언트가 접속하는 서버 프로그램이며 실제 파이썬 코드 실행은 여기에서 일어난다. 그리고, 웹 브라우저는 파이썬 코드를 입력받고, 실행해 볼 수 있는 UI를 제공하는 클라이언트로서 코드를 Notebook 서버에 보내 결과를 다시 웹 브라우저에 뿌려 주게 된다.

Anaconda Navigator에서 Jupyter Notebook 메뉴를 선택한 경우에는 윈도우즈의 경우 Notebook 서버 콘솔 프로그램이 백그운드 프로세스로 실행되어 화면에 보이지 않으며, 클라이언트인 웹 브라우저만 화면에 나타난다. 하지만, 동작 방식은 기본적으로 동일하다

주피터노트북스공유사이트

파이썬 배우는 이유 특징 활용

Posted by HULIA(휴리아)
2019. 4. 28. 22:11 백엔드개발/파이썬

파이썬 왜 배워야 하는가?

  • 생산성이 높기 때문(빠르게 개발이 가능하다)
  • 먼저 개발하라 그리고 나서 성능을 개선하라

파이썬의 특징

  • 인터프리터 언어
  • 동적인 데이터 타입 결정 지원
  • 플랫폼 독립적 언어
  • 개발 기간 단축에 초점을 둔 언어
  • 간단하고 쉬운 문법
  • 고수준의 내장 객체 자료형 제공
  • 메모리 자동 관리
  • 쉬운 유지 보수
  • 많은 수의 라이브러리 제공
  • 짧아지는 코드
  • 높은 확장성

파이썬의 활용

  • 시스템 유틸리티
  • GUI
    • wxpython, tkinter
  • 게임 프로그래밍
    • 파이썬 게임엔진 : PyOpenGL, PySDL, PyGame, Kivy, PyOgre, Panda3D, Cocos2D, PySoy
  • 웹 프로그래밍
    -django 프레임워크
  • 수치 프로그래밍
    • nextworkx 모듈
  • 데이터베이스 프로그래밍
  • 데이터분석(빅데이터)
    • pandas 모듈

파이썬으로 만들어진 프로그래밍
파이썬으로 할 수 있는 것들

파이썬 장점

  • 들여쓰기를 강조한 언어(가독성을 높여준다)
  • {}괄호를 넣지 않았기 때문에 프로그램을 좀 더 깔끔하게 만들어 준다