본문 바로가기
교육/Java&Spring

kosta 클라우드 네이티브 애플리케이션 개발 과정 day 21 (docker)

by Renechoi 2023. 1. 17.

kosta 클라우드 네이티브 애플리케이션 개발 과정 day 21

 


커리큘럼의 변경 

 

1. Java Programming (4주) 완료 

 

2. DB (1주)

- sql, oracle 

 

3. web (1주)

- html5, css3, js, 

 

4. servelet/Jsp (1주) 

- 과제 성격으로 프로젝트... 개인프로젝트를 servelet으로 한다 

 

5. 1차 프로젝트 (1주) 2~3명) 

 

6. Linux / Unix (1주) 

 

7. 스프링 프레임워크 (2주 이상) 

- Spring, myBatis 

- SQL 문장이 달라지는 것을 수행해주는 것이 myBatis라고 이해하자 

- lombok 프레임 워크, ajax, restApi 

 

8. 2차 프로젝트 -> 과제라고 생각을 해라 

 

9. SpringBoot/Jpa => sts툴 (2주)

=> 팀을 구성 

 

10. docker, aws, jenkis, springcloud

 

11. 최종 프로젝트 . . . => 

 

 

스케줄표 

 

1월 25 ~ 27 html 

1월 30일 ~ 2월 10일 servlet 

2월 13일 ~ 17일 linux 

2월 20일 ~ 24일 spring 4

2월 27일 ~ 3월 3일 spring 5 

3월 6일 ~ 3월 10일 spring 개인 프로젝트 

3월 13일 ~ 24일 spring boot STS 

3월 27일  ~ aws + 최종 프로젝트  . . . 

 

 

 

 


채팅 프로그램 

 

한쪽에서 한쪽으로 전달하는 것이 아니라 

서버가 받아서 양쪽에 뿌려주는 방식 

 

서버가 받아서 echo를 해준다 

 


오늘 부터는 새로운 마음으로 oracle을 배운다 ! 

 

 

데이터베이스 : 정보성으로 가치가 있는 애들만 저장해 놓는 곳 

 

백엔드 개발자들이 주로 다루는 것 분야는 조작 기능 : 검색, 삭제, 갱신, 삽입 

 

Rdbms => Relational dbms 

키와 값들의 간단한 관계를 테이블화 시킴 

정형화된 테이블 

 

DML (data manipulation lg) 

DDL (dada definition lg)

DCL (data control lg) 

 

 

pk (primary key) : 기본키 

- 릴레이션에서 튜플을 구분하기 위하여 사용하는 기본 키

- 하나의 attribute, 또는 attribute의 집합 

- 관리자에 의해 릴레이션 생성시 정의됨 

- 동일한 pk를 지닌 레코드가 존재할 수 없음 

 

fk (foreign key) : 외래키 

- 기본키를 참조하는 속성

- 다른 테이블과의 연결고리

- null 가능 (참조되지 않음을 의미) 

 

 

 

docker에서 localhost oracle 이용하도록 설치하기 

 

 

 

oracle db DBaver에서 실행하기 

 

 

 

오라클에서 hr 언락하고 비밀번호 변경하여 사용하는 법 

 

ALTER USER hr IDENTIFIED BY hr ACCOUNT unlock; 
COMMIT;
ALTER USER hr IDENTIFIED BY oracle;
COMMIT;

 


 

 

 

 

 

SQL NAMING Convention 

 

https://purumae.tistory.com/200

 

[MySQL] 데이터베이스 명명 규칙

공통소문자를 사용한다.단어를 임의로 축약하지 않는다.register_date (O) / reg_date (X)가능하면 약어의 사용을 피한다.약어를 사용해야 하는 경우, 약어 역시 소문자를 사용한다.동사는 능동태를 사

purumae.tistory.com

 

 

 


도커 설치를 2중으로 해서 5시간 동안 삽질했다. 

 

기존에 도커가 설치되어 있었는데 m1에 orcal을 도커를 통한 환경에서 작동하려면 

별도의 colima 를 통해 설치해야 했다. 

 

문제는 brew 로 설치할 경우 cask 환경에서 설치가 되어 2중 설치가 되어버린 것이다. 

 

그것을 모르고 앱에서 켜지는 도커 데스크톱에 이미지가 생성되지 않아 한참을 고생했는데 

 

또 알고보니 colima를 통해 cli에서 명령을 넣을 경우 별도로 감싸서 설치가 된다는 것이다. 즉 결론은 colima 환경에서 새로운 도커가 작동하게 된다(라고 그냥 이해함) 

 

따라서 cask에 설치된 docker와 일반 docker를 전부 삭제했고 

 

다시 

 

일반 docker 설치 

 

이후 cli를 통해 colima를 실행했다. 

 

colima가 이미 설치되어 있어서 그런지 새롭게 설치하는 도커가 자연스럽게 colima 위에 올려졌고 colima를 통해서만 구현이 되도록 되었다. 

 

colima start --memory 4 --arch x86_64

 

이와 같은 명령어를 실행하고 

 

oracle 버전을 가져와 run 시켰다. 

 

그리고 만일의 불상사를 위해 모든 컨테이너와 이미지도 전부 지웠다가 다시했다. 

 

그런 후 

docker logs -f oracle11(컨테이너명) 명령으로 로그를 확인하여 db 접근을 활성화 시켜주었더니 

 

성공 ! 

 

인텔리제이 datagrip을 통해 쿼리문을 날릴 수 있게 되었다 !!! 

 

 

 

사실 오전에 이 지난한 뻘짓을 시작하게 된 계기가 바로 이 dataGrip을 사용하려고 마음 먹은 데서부텨였다. 

 

그 때에도 oracle 연동이 되었었는데 자꾸 빨간줄이 떠서 그걸 해결해보고자 했고 그러다가 뭐 하나씩 지우고 나서부터 전부 먹통 -> 삽질의 시작 

 

해결해보고 나서 

깨달은 점 

 

- home brew 환경에 대한 이해 

- docker 10번씩 지웠다 설치했다 하면서 알게된 도커 잘 지우고 잘 까는 법 

- 기타 . . .

 

아무튼 이제 데이터베이스 연동이 확실하게 되어 자동완성기능까지 100% 누릴 수 있게 되었다 

 

하하하 

 

 

지금까지 날린 필기 복사하려면 오늘 나머지 공부 빡세게 해야할듯 ... 


1월 18일 추가 

 

8080 포트가 갑자기 안되어서 보았더니 어딘가에서 실행되고 있었다. 

 

이것을 킬해주었더니 도커 접근이 사라졌다. 

 

즉, colima에서 만든 도커가 8080을 잡고 있었던 것이다. 

 

다시 살리기 

 

먼저 colima를 stop 했다. 

 

colima stop

 

 

그런 후 리스타트 

 

colima start --memory 4 --arch x86_64

 

 

도커 확인 

 

docker ps

docker ps -a

 

그다음 container id를 

start 명령어로 살려주었다.

 

docker start 컨테이너명

 

작동확인 

 

docker ps 

 

docker logs -f oracle11g 

 

 


처음 연결하는 법

 

docker pull jaspeen/oracle-xe-11g

 

docker run --name oracle11g -d -p 8080:8080 -p 1521:1521 -v ~/my/oracle/data  jaspeen/oracle-xe-11g

 


 

기본 SQL 문제입니다.

문제 1. 
전체직원의 다음 정보를 조회하세요. 정렬은 입사일(hire_date)의 올림차순(ASC)으로 가장 선임부터 출력이 되도록 하세요. 이름(first_name last_name),  월급(salary),  전화번호(phone_number), 입사일(hire_date) 순서이고 “이름”, “월급”, “전화번호”, “입사일” 로 컬럼이름을 대체(column alias)해 보세요.



문제2.
업무(job_id)와 월급(salary)을 월급의 내림차순(DESC)로 정렬하세요.



문제3.
담당 매니저가 배정되어있으나 커미션비율이 없고, 월급이 3000초과인 직원의 이름, 매니저아이디, 커미션 비율, 월급 을 출력하세요.



문제4.
최고월급(max_salary)이 10000 이상인 업무의 이름(job_title)과 최고월급(max_salary)을 최고월급의(max_salary) 내림차순(DESC)로 정렬하여 출력하세요.    



문제5.
월급이 14000 미만 10000 이상인 직원의 이름(first_name), 월급, 커미션퍼센트 를  월급순(내림차순) 출력하세오. 단 커미션퍼센트 가 null 이면 0 으로 나타내시오



문제6.
부서번호가 10, 90, 100 인 직원의 이름, 월급, 입사일, 부서번호를 나타내시오
입사일은 1977-12 와 같이 표시하시오




문제7.
이름(first_name)에 S 또는 s 가 들어가는 직원의 이름, 월급을 나타내시오

select FIRST_NAME
from EMPLOYEES e
where upper(e.FIRST_NAME) like '%S%';



문제8.
전체 부서를 출력하려고 합니다. 순서는 부서이름이 긴 순서대로 출력해 보세요.

select d.DEPARTMENT_NAME
from DEPARTMENTS d
order by length (DEPARTMENT_NAME) desc;



문제9.
정확하지 않지만, 지사가 있을 것으로 예상되는 나라들을 나라이름을 대문자로 출력하고
오름차순(ASC)으로 정렬해 보세오.

-- 문제 9

select *
from COUNTRIES c
order by c.COUNTRY_NAME;




문제10.
입사일이 2003/12/31 일 이전 입사한 직원의 이름, 월급, 전화 번호, 입사일을 출력하세요
전화번호는 545-343-3433 과 같은 형태로 출력하시오.

 

 

select FIRST_NAME,
       SALARY,
       replace(PHONE_NUMBER, '.', '-') "PHONE",
       HIRE_DATE
from EMPLOYEES
where HIRE_DATE <= '2003/12/31';

 

 

 

 

 

 


 

 

단일행 함수 

TO_CHAR(숫자, 출력모양) 숫자형 -> 문자형으로 변환하기 

 

select FIRST_NAME, to_char(SALARY*12, '$999,999.99') "SAL"
from EMPLOYEES
where DEPARTMENT_ID = 110;

 

 

 

 

 

 

 

 

데이터베이스에서의 필터링 vs 자바에서의 필터링 

날짜 연산 같은 경우 db에서 바로 비교가 가능하다 

 

where HIRE_DATE <= '2003/12/31';

 

하지만 내부 로직이 돌아가는 것이며 표현이 명확하지 않아 보인다 

 

어차피 데이터를 전부 조회하는 과정이 들어간다면 

굳이 필터링을 해서 가져오는 게 아니라 자바에서 별도의 로직 (숫자로의 비교)을 구현해 비교하는 것이 더 좋은 성능일 수 있다 

 

 

반응형