법정의무교육 시작하자마자 시험까지 다 끝냄. 100점일 듯.


사대리 교육 준비 - 서버의 이해


spring 반절 알음

 - MVC 패턴 돌아가는 거 알아냄

 - 모양으로 그리면 이런 모양
    JSP - Controller - Service - impl - DAO - xml

    VO

 - 간단한 설명

   JSP : View
   Controller : 핸들러
   Service : 서비스 inerface 선언
   impl : Service interface 동작 실제 구현한 클래스
   DAO : DB접근 및 컨트롤
   xml : DAO에서 쓸 query문
   VO : 곳곳에서 쓸 Model 정의

 

############7개 단순히 이렇게 외우면 됨.
복잡하게 생각하지 말고.
오늘까지 한 걸로 spring 반절은 끝났음.
############

 

 

##### 리스트, 상세보기, 등록, 수정 네가지. 삭제는 jsp로 끝나니까 필요없고. 이 4가지를 사용해서 +-됨.
##### impl이랑 service는 같이 다님.

 

 

 

https://blog.naver.com/7-3-7/221314424965
https://nobang.tistory.com/entry/%EC%A0%84%EC%9E%90%EC%A0%95%EB%B6%80%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-%EB%B8%94%EB%A1%9C%EA%B7%B8-%EA%BE%B8%EB%AF%B8%EA%B8%B01


###
EgovSampleController.java 보면
등록, 삭제.. 작업 볼 수 있음.


Open Declaration //정의
Open Implementation //구현

 

 

 

 


########################################################################

단어 간단 정리

 

 

 

#DAO
Data Access Object

DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트
트랜잭션 객체. 데이터에 접근하고 업데이트하는 기능

 

DB연결 및 쿼리 실행 부분

ex)
https://m.blog.naver.com/jihoon8912/220240747123

 


#Service
여러가지 DAO에서 데이터에 접근하여 받은 결과로 비지니스 로직을 수행하는 역할

#Controller
사용자의 요청을 어찌 처리할지 결정하는 것. 핸들러.

#@Controller
클라이언트의 요청이 서버에 도착했을 때 여기서 정의한 기준대로 요청을 처리하게 된다.

 


#@RequestMapping
(value="test", method=RequestMethod.GET) 이렇게 되면
베이스 경로 +/test이렇게 매핑이 되고 여기 안에 있는 내용을 실행한다. return 경로 이렇게 설정해주면 원하는 페이지를 리턴해줄 수 있다.

#ModelMap modelMap 파라미터
해당 페이지에 전달해야할 내용이 있을 경우에 GET 혹은 POST값을 담아서 보내게 된다.

#Impl파일
interface로 선언된 service와 DAO를 구현한 클래스

 

 


#VO(Value Object)(개념은 동일하지만, VO는 read only 속성을 가짐) = DTO(Data Transfer Object)

계층간 데이터 교환을 위한 자바빈즈
일반적인 DTO는 로직을 갖고 있지 않다.
순수한 데이터 객체이며, 속성과 그 속성에 접근하기 위한 getter, setter 메소드만 가진 클래스를 말한다.
여기에 추가적으로 toString(), equals() 등의 Object 클래스 메소드를 작성할 수 있다.

ex)
public 어쩌고(){
 get
 set

}


#자바빈즈
JavaBeans
https://m.blog.naver.com/javaking75/140181706815

자바빈즈란 자바로 작성된 소프트웨어 컴포넌트를 지칭하는 단어로
이 컴포넌트를 빈이라고 부르며
썬사의 JavaBeans API에 정의된 스펙에 따라 만든다.

자바빈즈는 자바 관련 소프트웨어 개발에 있어
재사용이 가능한 표준 컴포넌트 모델이다.

Beans
=> java 클래스들을 모아놓은 package
=> Model, View, Controller(MVC패턴 구현)
     Model - 저장소역할(setXxx(), getXxx() 구현) - java코딩
     View - GUI역할(클라이언트에게 보여줄 화면구성 구현) - jsp코딩
     Controller - DAO(데이터처리 담당 -DB연동)역할, 비즈니스 로직, 내부적으로 보이지 않게 처리해야하는 기능 구현 - java코딩, 서블릿문서
=> Beans를 이용하여 MVC패턴으로 구현함으로써 재사용성과 유지보수 용이
=> 이러한 MVC패턴을 기반으로 나오는 다양한 프레임웍이 있음.


#throws exception
자바 예외처리

#쓰레드
Thread
https://goodgid.github.io/What-is-Thread/
https://m.blog.naver.com/PostView.nhn?blogId=rja1104&logNo=220551216367&proxyReferer=https:%2F%2Fwww.google.co.kr%2F
위아래 주소의 그림이 다름

쓰레드란 프로그램(프로세스) 실행의 단위
하나의 프로세스는 여러개의 쓰레드로 구성이 가능
하나의 프로세스를 구성하는 쓰레드들은 프로세스에 할당된 메모리, 자원 등으로 공유한다.

프로세스와 쓰레드의 차이
: 프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고
쓰레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위이다.

 

 

 

 

 

 

Posted by 캬웃
,

2021-11-29 (월)

일기 2021. 11. 29. 10:57

10월 1일자로 이직했다.

곧 이직한지 2달째다.

 

얼마 안되서 회사가 이사했다.

 

컨설팅 쪽 지원과 개발을 같이 하고 있다.

 

새로운 걸 계속 배울 수 있어서 좋다.

 

내부 교육은

사장님이 종종 해주시고 계시고,

사대리 교육은 한 번 한 상태.

고과장님이 나가시기 전에 디자인적인 꿀팁들을 아낌없이 알려주고 가셨다.

왕수석님에게 아이콘 사이트도 받았고.

 

외부 교육은

스파르타코딩에서 SQL select 교육을

어댑터즈에서 컴퓨터구조론 교육을 받았다.

 

주말에 어댑터즈 요청으로 인터뷰 영상을 찍어서 보내줬다.

생각보다 오래 걸렸다.

강의할인해준다고 하는데,

더 들을지는 몰라서 그건 필요가 없고,

개인적으로 추가 질문하면 잘 받아줬으면.

 

내부 개발공부는

CRUD페이지를 만들고 있다.

 

내부 개발 프로젝트는

전자정부 프레임워크가 필요할 듯하다.

적어도 JAVA, JSP가 필요할 듯.

'일기' 카테고리의 다른 글

2021-12-1 (수)  (0) 2021.12.02
Posted by 캬웃
,

- inner join 뭐가 교집합이예요? 한 줄에 null값이 없고 전부 있는 거? 이게 교집합? 맞음
- left join 어떻게 합쳐지나? 왼쪽 거 다 나오고 겹치지 않는 부분이 오른쪽에 붙음.


[1주차] - 날것의 데이터

#대소문자 상관 없음
!그러나 실제 데이터와 대소문자 맞춰서 써주는 게 나중에 안헷갈림

!꿀팁
- show tables 로 어떤 테이블이 있는지 살짝 살펴봄.
- 원하는 테이블을 select.. from.. 해서 봄. 여기서 필드명 확인하고, 값을 확인해서
  where절을 건다.




- where절하고 같이 쓰이는 문법들 - 
같지 않음  !=
범위  between A and B

         select * from orders
         where created_at between '2020-07-13' and '2020-07-15'

         2020-07-13에서 2020-07-14까지의 데이터를 불러옴

포함  in (1,3,5)
패턴 (문자열 규칙) 조건  like '%@daum.net'






limit
distinct
      select distinct(payment_method) from orders
count
      select count(*) from orders

      select count(distinct(name)) from users




!에러가 있으면 혼자서 해결해 보려는 시간 갖기. 나중에 큰 자산이 됨.
10분이든, 20분이든, 30분이든, 1시간이든.

!
where email like '%gmail.com'
and created_at between '2020-07-12' and '2020-07-14'
처럼 and 다음에 between 쓰는 경우처럼 괄호 안써도 됨.





<숙제>
select * from orders
where email like '%naver.com'
and course_title = '웹개발 종합반'
and payment_method = 'kakaopay'









[2주차] - 통계적인 숫자들. 최대, 최소, 평균, 갯수.. 의미있는 정보로의 변환
범주(카테고리)로 묶어야지 정보들을 통계낼 수 있다.

group by
select name, count(*) from users
group by name;
group by가 들어가면 count가 그룹으로 묶어준 각각의 것에 대한 카운트가 들어간다.

!순서대로 다 쓰는 게 아니라, 쭉 쓰고 필요한 부분 다시 올라가서 수정하는 게 안헷갈리고 좋음.


min
select week, min(likes) from checkins
group by week;

max
avg
select week, avg(likes) from checkins
group by week;

round 반올림
select week, round(avg(likes),2) from checkins
group by week;

sum

! count가 제일 많이 쓰임.













order by
select name, count(*) from users
group by name
order by count(*);
            --------
맨 마지막에 하는 게 정렬(그러므로 맨 마지막에 써줌)
뒤에 아무것도 안쓰면 기본적으로 오름차순.(asc. ascending) desc라고 써주면 내림차순.(descending)

! 세미콜론(;)은 끝나는 부분 표시하는 건데 안붙여도 됨.


select payment_method, count(*) from orders
where course_title = '웹개발 종합반'
group by payment_method
order by count(*) desc


! 꿀팁. 이렇게 쿼리를 작성하면 편해요!
1) show tables로 어떤 테이블이 있는지 살펴보기
2) 제일 원하는 정보가 있을 것 같은 테이블에 select * from 테이블명 limit 10 쿼리 날려보기
3) 원하는 정보가 없으면 다른 테이블에도 2)를 해보기
4) 테이블을 찾았다! 범주를 나눠서 보고싶은 필드를 찾기
5) 범주별로 통계를 보고싶은 필드를 찾기
6) SQL 쿼리 작성하기!

참 쉽죠? 여러분은 이제 범주에 따라 통계치를 계산할 수 있는 사람이 되었답니다! 







별칭 기능
Alias [알리아스]

1. 첫번째 알리아스

select * from orders o
                          --
where o.course_title = '앱개발 종합반'
        --


2. 두번째 알리아스
select payment_method, count(*) as cnt from orders o
                                          -------
where o.course_title = '앱개발 종합반'
group by payment_method




<숙제>
select payment_method, count(*) as 주문건수 from orders o
where o.email like '%naver.com'
and o.course_title = '앱개발 종합반'
group by o.payment_method 









[3주차]

Join
테이블과 테이블을 붙히는 것
테이블을 붙일 때 기준이 뭔가 하나 필요하다.
(예를 들면, 두 테이블에 공통으로 들어있는 user_id)
(통상적으로 key값이라 부르는 것들이 그러하다)
(엑셀의 vlookup과 동일한데, vlookup보다 쉬움. 그래서 엑셀보다 쉬운 SQL이 되는 것임. 후후.)

! join 굉장히 실무에서 많이 쓰임. 거의 다 쓴다고 보시면 돼요. 거의 모든 쿼리에 Join이 들어간다고 보시면 돼요



테이블을 한 목적에 맞는 것들만 모아 두는 것이 가장 좋습니다
그게 실제로 웹서비스가 동작하는데 있어서
훨씬 더 편하고, 간편하고,
또 그렇게 안하면 나중에 뭔가를 수정하고 싶을 때 문제가 많이 생겨요.
그래서 그렇게 많이들 해 둡니다.




Join의 종류
Left Join, Inner Join
(, Outer Join도 있는데 거의 필요가 없음. 위 2개만 잘 써도 원하는 결과 대부분 얻을 수 있을 것)
(Inner Join이 조금 더 쉽고, 많이 쓰임)

Left Join ?
왼쪽에 있는 거 기준으로 붙인다

Inner Join ?
교집합만 나온다.
(Null값이 있는 건 빼고 나온다)

select * from enrolleds e
inner join courses c on e.course_idd = c.course_id


! 알리아스는 안 헷갈려도 붙여주는 게 좋음.
(?왜인지는 안말함.)



select c1.title, c2.week, count(*) as cnt from courses c1
inner join checkins c2 on c1.course_id = c2.course_id
group by c1.title, c2.week     //두가지 다 써서 최대한 다양한 그룹으로 묶음
order by c1.title, c2.week     //앞에거 먼저 정렬하고, 뒤에 거 정렬



select c1.title, c2.week, count(*) as cnt from courses c1
inner join checkins c2 on c1.course_id = c2.course_id
inner join orders o on c2.user_id = o.user_id //한 번 더 묶는다. 바로 앞에 거랑 묶음.
where o.created_at >= '2020-08-01'
group by c1.title, c2.week
order by c1.title, c2.week



1. sql은 같은 결과에 도달할 수 있는 방법이 여러가지예요. 정답이 하나가 아니다.
2. sql을 쓸 때 저도 마찬가지지만, 지금 계속 해나가는 과정이 그랬지만,
이렇게 해봤다가 또 저것도 확인했다가,
어 에러 나네, 고치고,
또 이렇게 콤마도 넣어 보고,
이렇게 왔다 갔다 왔다 갔다
하면서 만들면 되는 겁니다. 아셨죠?
그 누구도, 한 번에 쭉 위에서부터 써 가지고
탁 실행시켜서 '음 결과가 나왔군~' 이런 사람 없습니다 아셨죠

그래서 정말 심하게 말씀을 드리면
모로 가도 데이터만 나오면 된다
이렇게 일단 생각을 하시고
작업을 하셔도 무방합니다 아셨죠







left join
이런 경우에 많이 쓰겠죠.
한쪽에는 있는데 한쪽에는 없는 것을 가지고 통계내고 싶을 때

그러니, 더 큰 걸 왼쪽에 둠.

null을 찾는 거, null을 빼는 거
NULL은 대문자로 쓸 것

select u.name, count(*) as cnt from users u
left join point_users pu on u.user_id = pu.user_id
where pu.point_user_id is not NULL
group by u.name

!
count는 NULL을 제외하고 센다.

!
강의 3-7 끝에 정렬 내용 나옴.






Union
필드가 다 똑같은데, (필드명이 같다)
이어보고 싶을 때 씀.
(예를 들어, 7월달 것과 8월달 것)

(
select '7월' as month, c1.title, c2.week, count(*) as cnt from courses c1
inner join checkins c2 on c1.course_id = c2.course_id
inner join orders o on c2.user_id = o.user_id
where o.created_at < '2020-08-01'
group by c1.title, c2.week
order by c1.title, c2.week
)
union all
(
select '8월' as month, c1.title, c2.week, count(*) as cnt from courses c1
inner join checkins c2 on c1.course_id = c2.course_id
inner join orders o on c2.user_id = o.user_id
where o.created_at >= '2020-08-01'
group by c1.title, c2.week
order by c1.title, c2.week
)

! union에선 order by 가 안먹는다. (그래서 위에서 order by 두 줄을 빼도 결과 같음.)
(다 나온 다음에 order를 해야지, order를 한 상태로 합치는 건 안된다는 거예요.
그래서 다 나온 다음에 다시 한 번 정렬 순서를 주는 방법이 있습니다.) -> 4주차 서브퀴리 개념



클렌징
case when문을 써서
서브쿼리로 계속 써야

엑셀에서 해라






숙제: enrolled_id별 수강완료(done=1)한 강의 갯수를 세어보고, 완료한 강의 수가 많은 순서대로 정렬해보기. user_id도 같이 출력되어야 한다.



select e.enrolled_id, e.user_id, count(*) as max_count from enrolleds e
inner join enrolleds_detail ed on e.enrolled_id = ed.enrolled_id
where done = 1
group by e.enrolled_id, e.user_id
order by max_count desc



숙제는 이렇게 나왔으니 시험문제면 
group by에
group by e.enrolled_id, e.user_id 든 group by e.enrolled_id 든 맞겠지만,

실제 업무에선 select문에 맞춰서 group by도 만들어야 함.

(enrolled_id는 내가 강의들을 때 부여받는 아이디)
여기선 enrolled_id로 그룹지어도 user_id가 중복이 되지 않겠지만,
그런 문제가 생길 수 있으니
실제 업무에선 select문에 맞춰서 group by도 만들어야 함.








[4주차]

이번 주차까지 다 하시면요
이제는 거의 왠만한 문법들은 다 다루셨다고 생각하시면 되고
이 문법들을 거의 조합해가지고
약간의 트릭이라든지
아니면 실전에서의 응용이라든지
이런 것들만 실력을 넓혀나가면 되는
그런 단계에 이를 겁니다 아셨죠



Subquery
여러분이 조금 더 쿼리문을 복잡하게 쓸 수 있게 하는 테크닉

배울 것
1. Subquery
2. Subquery를 좀 더 간결하게 보일 수 있도록 하는 with 구문에 대해서도 배울 거고요
3. 이 현실에서의 데이터는요 여러분 지저분하고 복잡합니다.
그래서 여기 현실에서의 데이터를 가공할 수 있는
그런 문자열들을 가지고 어떻게 가공할 수 있는지
문자열을 가지고 노는 법
4. 그 다음에 마지막으로 이 case when이라고 하는
조건문에 대해서도 배워보겠습니다.

여기까지 딱 배우시면
이제는 문법은 다 배우신 거예요


이제 분석 가능한 사람이다.



'SQL' 카테고리의 다른 글

엑셀보다 쉬운 SQL - 후기  (0) 2021.10.24
엑셀보다 쉬운 SQL - 4주차  (0) 2021.10.24
엑셀보다 쉬운 SQL - 3주차  (0) 2021.10.24
엑셀보다 쉬운 SQL - 2주차  (0) 2021.10.24
엑셀보다 쉬운 SQL - 1주차  (0) 2021.10.24
Posted by 캬웃
,