[스프링] 1. SQL & JDBC 프로그래밍 - SQL과 자바 개발환경 세팅

JM·2022년 10월 11일
1
post-thumbnail

강의 링크
https://www.boostcourse.org/web326/joinLectures/28304?isDesc=false

학습할 것

  • MySQL
  • SQL
  • 개발환경 설정
  • Maven

MySQL

  • Mysql 5.7.21 community edition installer
    다운링크 : https://downloads.mysql.com/archives/installer/
  • 환경 변수란?
    프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값들의 모임이다. 즉, OS가 가지고 있는 변수들이다. 설정 값이나 경로 값을 시스템에서 사용하기 쉽게 변수로 지정해놓은 것이다.
    환경 변수에 대표적으로 Path가 있다. Path를 통해 cmd창에서 단순한 명령어만으로 해당 프로세스를 실행할 수 있다.일반적으로 윈도우에서 프로그램을 실행할 때는 해당 실행파일이 있는 디렉토리에 접근하여 실행시킨다.
    그런데 매번 직접 해당 디렉토리까지 들어가서 혹은 경로를 입력하여 실행시키는 것은 매우 귀찮은 일이다. 시스템 환경 변수 Path는 이러한 경로를 변수로서 저장해두어 쉽게 접근할 수 있도록 한다.

SQL

  • SQL은 데이터를 보다 쉽게 검색하고 추가, 삭제, 수정 같은 조작을 할 수 있도록 고안된 컴퓨터 언어이다.
  • 관계형 데이터베이스에서 데이터를 조작하고 쿼리하는 표준 수단이다.
  • DML(Data Manipulation Language) : 데이터를 조작하기 위해 사용한다. INSERT, UPDATE, DELETE, SELECT 등이 여기에 해당한다.
  • DDL(Data Definition Language) : 데이터베이스의 스키마를 정의 하거나 조작하기 위해 사용한다. CREATE, DROP, ALTER 등이 여기에 해당한다.
  • DCL(Data Control Language) : 데이터를 제어하는 언어이다. 권한을 관리하고, 데이터의 보안, 무결성등을 정의한다. GRANT, REVOKE 등이 여기에 해당한다.

데이터베이스

데이터베이스 생성하기

create database connectdb

데이터베이스 사용자 생성과 권한 주기

  • Database를 생성했다면, 해당 데이터베이스를 사용하는 계정을 생성해야 한다. 또한, 해당 계정이 데이터베이스를 이용할 수 있는 권한을 줘야 한다. 다음와 같은 명령을 이용해서 사용자 생성과 권한을 줄 수 있다. db이름 뒤의 * 는 모든 권한을 의미한다. @'%' 는 어떤 클라이언트에서든 접근가능하다는 의미이고, @'localhost'는 해당 컴퓨터에서만 접근가능하다는 의미이다.
  • flush privileges는 DBMS에게 적용을 하라는 의미이다. 해당 명령을 반드시 실행해줘야 한다.
  • 사용자 계정 : connectuser, 암호 : connect123!@# 인 경우의 grant 명령어 이다.
    grant all privileges on connectdb.* to connectuser@'%'identified by 'connect123!@#';
    flush privilegees;

생성한 db에 접속하기

mysql -h127.0.0.1 -uconnectuser -p connectdb

MYSQL 연결 끊기

quit

MYSQL 버전과 현재 날짜 구하기

SELECT VERSION(), CURRENT_DATE;

쿼리를 이용해서 계산식의 결과도 구할 수 있다.

SELECT SIN(PI()/4), (4+1)*5


테이블

테이블의 구성요소

  • 테이블 : RDBMS에서 기본이 되는 저장구조이다. 한 개 이상의 column과 0개 이상의 row로 구성된다.
  • 열 : 테이블 상에서의 단일 종류의 데이터를 나타낸다. 특정 데이터 타입 및 크기를 가지고 있다.
  • 행 : Column들의 값의 조합이다. 레코드라고 불린다. 기본키에 의해 구분되며 기본키는 중복될 수 없다.
  • 필드 : 행과 열의 교차점으로, 데이터를 포함할 수 있고 없을 때는 NULL을 가질 수 있다.

examples.sql 파일을 가져와 데이터베이스에 저장하기

cmd창에서 해당 파일의 경로로 들어간다. 이후 아래 명령어를 실행한다.
mysql -uconnectuser -p connectdb < examples.sql

컬럼의 합성(Concatenation) - concat

SELECT concat(컬럼명,'-',컬럼명) AS '별명' FROM 테이블명

중복행의 제거(Distinct) - distinct

SELECT distinct(컬럼명) from 테이블명

문자열 자르기 - substring

SELECT substring('Happy Day',3,2) => pp
mysql과 같은 DB에서 인덱스번호는 0이 아닌 1부터 시작한다
따라서 위 쿼리는 해당 문장의 3번 인덱스부터 다음 2개의 문자를 선택하라는 의미이다.

비어있는 공백 채우기 - LPAD,RPAD

왼쪽 공백 채우기 : SELECT LPAD('hi',5,'?') => ???hi
오른쪽 공백 채우기 : 'SELECT RPAD('joe',5,'?')' => joe??

공백 지우기 - TRIM

SELECT LTRIM(' hello ') => 'hello '

SELECT TRIM(BOTH 'x' FROM 'xxxhixxx') => hi

CAST 형변환 - cast, convert

cast 함수는 type을 변경하는데 사용된다.
cast 함수의 사용법 : CAST(expression AS type) or CONVERT(expression,type)

  • SELECT cast(now() as date) => 2021-11-12
  • SELECT convert(now(),date) => 2021-11-12

그룹함수와 groupby절

SELECT deptno, AVG(salary), SUM(salary) FROM employee group by deptno
group by절을 사용할 때 그룹핑의 기준이 되는 컬럼을 select절에 추가해야한다.
그룹핑과 상관없는 컬럼을 넣을 경우 정상적으로 출력되지만, 올바를 결과가 아니므로, 반드시 group by에서 사용하는 컬럼명을 select절에 넣어야 한다.


개발환경 설정

JDK & JRE

  • 자바언어로 작성된 프로그램을 실행하기 위해서는 JRE(Java SE Runtime Environment)가 필요하다.
  • 만약 자바언어로 개발하는 개발자가 아니라, 자바로 만들어진 프로그램을 사용하는 사용자라면 JRE만 설치하면 된다.
  • 사용자 입장에서 자바를 설치하는다는 것은 보통 JRE를 설치하는 것을 말한다.
  • 자바를 사용하는 개발자는 자바로 작성된 소스를 컴파일하고 관리할 필요가 있다.
  • 이때 사용하는 도구를 JDK(Java SE Development Kit)라고 말한다.
  • JDK안에는 JRE도 포함되어 있다(JDK > JRE). 왜냐하면 컴파일된 결과를 실행하기 위해서 JRE가 필요하기 때문이다.

    JDK가 운영체제별로 설치파일을 제공하는 이유는 무엇일까?

    자바 프로그램은 플랫폼에 구속받지 않고 JVM위에서 구동된다. 즉, 실행 환경에 구속받지 않고 실행가능하다는 장점을 갖는다.
    하지만, 자바 프로그램이 구동되는 JVM은 OS에 종속적이기 때문에 각각의 OS에 맞게 JVM을 포함한 JDK는 운영체제 별로 설치 파일이 제공되어야 한다.

JAVA 환경설정

JDK설치가 완료되면, JDK에 대한 시스템 환경설정을 수행해야 한다.
설정해야 할 환경변수의 이름은 다음과 같다.

  • JAVA_HOME : JAVA가 설치된 경로를 지정
  • CLASSPATH : JAVA클래스가 있는 경로들을 지정
  • PATH : JAVA 실행파일이 있는 경로를 추가

생각해보기

  1. 자바로 작성된 프로그램을 실행하려면 JRE만 설치하면 됩니다. 이때는 환경변수를 설정할 필요가 없습니다.
  2. 그런데, JDK를 설치할 때는 환경변수를 설정해야 합니다. 환경변수를 설정하는 이유는 무엇일까요?
    환경변수를 설정하지 않는다면, 콘솔창에서 자바를 실행할 때 매번 JDK가 있는 폴더에 들어가서 실행할 수 있다. 이러한 번거로움을 없애기 위해 JDK의 경로를 환경변수로 설정하는 것이다.
  3. 현재 설치된 JDK보다 높은 버전의 JDK를 설치했습니다. 이때 수정해야 할 환경변수는 무엇일까요?
    JAVA_HOME만 수정하면된다. 왜냐하면, 다른 환경변수들이 JAVA_HOME을 참조하고 있기 떄문이다.
    (하지만, 필자의 경우 위 방식으로 했을 때 콘솔창에서 javac가 실행되지 않아 절대경로를 환경변수로 등록하였다.)

자바 코딩 규칙 링크


Maven

참고링크 : https://junghn.tistory.com/entry/SPRINGMaven-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-groupId-artifactId-version-%EC%9D%B4%EB%9E%80

Maven의 정의

  • 애플리케이션 개발을 위해 반복적으로 진행해왔던 작업들을 지원하기 위한 도구
  • 빌드, 패키징, 문서화, 테스트와 테스트 리포팅, git, 의존성관리, svn등과 같은 형상관리서버와 연동 및 배포 등의 작업을 손쉽게 할 수 있다.
  • Maven을 이해하기 위한 Coc
    Coc : 일종의 관습을 말한다. 프로그램의 소스파일은 어떤 위치에 있어야 하고, 소스가 컴파일된 파일들은 어떤 위치에 있어야 하고 등을 미리 정해놓은 것.
  • Maven을 사용한다는 것은 Coc를 알아가는 것이라고 말할 수 있다.

Maven의 이점

  • 의존성 라이브러리 관리
  • 설정 파일에 몇 줄 적어줌으로써 직접 다운로드 받지 않아도 라이브러리를 사용 가능
  • Maven을 사용하게 되면 Maven에 설정한 대로 모든 개발자가 일관된 방식으로 빌드를 수행 가능
  • 또한 다양한 플러그인을 제공하여, 많은 일들을 자동화 가능

Maven 기본

Archetype을 이용하여 Maven기반 프로젝트를 생성하면, 프로젝트 하위에 pom.xml파일이 생성됨

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>kr.or.connect</groupId>
    <artifactId>examples</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>mysample</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>
  • project : pom.xml 파일의 최상위 루트 엘리먼트
  • modelVersion : POM model의 버전
  • groupId : 프로젝트를 생성하는 조직의 고유 아이디를 결정. 일반적으로 도메인 이름을 거꾸로 적은 것
  • artifacId : 버전 없는 jar파일의 이름.
  • packaging : 해당 프로젝트를 어떤 형태로 packaging할 것인지 정함. jar, war,ear 등
  • version : 프로젝트의 현재 버전. 개발 중인 프로젝트는 SNAPSHOT 접미사를 사용함.
  • name : 프로젝트의 이름
  • url : 프로젝트 사이트가 있을 경우 URL을 등록함
  • dependencies : Dependency Management 기능의 핵심. 해당 엘리먼트 안에 필요한 라이브러리를 지정함.



이클립스

참고링크 : https://devsnote.com/writings/2185

eclipse

JAVA를 비롯한 다양한 프로그래밍 언어를 개발할 수 있는 통합 개발 환경(IDE).
이클립스는 플러그인 구조로 쉽게 기능을 추가할 수 있는 구조로 되어 있다.

IDE

코딩, 디버그, 컴파일, 배포 등 프로그램 개발에 관련된 모든 작업을 하나의 프로그램 안에서 처리할 수 있도록 환경을 제공하는 소프트웨어

생각해보기

  1. 이클립스는 자바로 만들어진 프로그램입니다. 이클립스가 실행되기 위해서 설치되어 있어야 할 프로그램은 무엇일까요?

    자바로 만들어진 프로그램을 실행하기 위해서, JRE이 설치되어 있어야 한다.

  2. 이클립스에 모든 플러그인을 제거하면 빈 윈도우만 남는다고 하였습니다. 플러그인을 제작할 수 있다면, 이 빈 윈도우에 플러그인을 채워 넣을 수 있을 것입니다. 이런 방식으로 개발하는 것을 이클립스 RCP(Rich Client Platform)이라고 말합니다. 이클립스 RCP를 이용하여 만들어진 소프트웨어에는 어떤 것들이 있을까요?

  • Object Aid UML Diagram : UML 다이어그램을 그리는 툴
  • CheckStyle : 특정 코딩 표준을 준수하는지 확인하는 유효성 검사 도구
  • Project Lombok : 자주 쓰이는 코드를 줄이는 것을 목표로 코드 생성을 자동화 하는 도구
  • Maven : POM(프로젝트 객체 모델) 개념으로 프로젝트 정보를 한군데에서 관리하도록 함
  • Gradle : Maven과 비슷한 역할을 하지만 JSON 형태로 빌드를 관리해주는 도구
  • Jacoco : 단위 테스트의 측정 도구

느낀점

vscode에서 flutter와 nodejs로 개발할때는 특정 도구 없이 날 것으로 코딩했었는데위와 같은 도구들이 있다니... 어메이징하다.

반복작업으로 신물이 났었는데 도구들을 사용해서 더 생산성있는 개발자가 될 수 있을 것 같다.

profile
나는 사는데로 생각하지 않고, 생각하는데로 살겠다

0개의 댓글