-
Notifications
You must be signed in to change notification settings - Fork 11
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[2주차/포비] 워크북 제출합니다.
- Loading branch information
Showing
8 changed files
with
182 additions
and
0 deletions.
There are no files selected for viewing
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
# 추가 과제 | ||
|
||
## JVM 메모리의 구조 | ||
|
||
JVM은 Static, Heap, Stack 영역으로 나뉜다. | ||
|
||
### Static 영역 | ||
|
||
클래스가 로드 될 때 생성됨, 클래스 변수와 **static 변수**가 저장된다. | ||
|
||
### Heap 영역 | ||
|
||
객체와 인스턴스 변수가 저장되는 공간이다. | ||
|
||
### Stack 영역 | ||
|
||
메서드 호출 시 생성되는 지역변수와 매개변수가 저장되는 공간이다. | ||
|
||
## Class Loader | ||
|
||
### 역할 | ||
|
||
자바 컴파일러에 의해 컴파일된 .class 파일을 JVM으로 로드하여 런타임 영역에 배치한다. | ||
|
||
### 과정 | ||
|
||
1. Loading: .class 파일을 읽고, JVM의 메모리에 로드 | ||
2. Linking: 클래스 파일을 사용하기 위해 검증한다. | ||
3. Initializing: **static 변수**를 비롯한 클래스 변수들을 적절한 값으로 초기화한다. | ||
|
||
## Collection Interface | ||
|
||
![collection](./2-1.png) | ||
|
||
### 정의 | ||
|
||
- Collection은 Java에서 데이터의 그룹, 즉 여러 개의 객체를 하나의 단위로 표현하는 인터페이스 | ||
- List, Set, Queue, Map 인터페이스의 상위 인터페이스로, 컬렉션 프레임워크의 root 인터페이스 역할을 한다. | ||
|
||
## 하위 인터페이스 | ||
|
||
1. List | ||
|
||
- 순서가 있는 데이터의 집합으로, 데이터의 중복을 허용한다. | ||
- ArrayList, LinkedList, Vector, Stack 등의 클래스가 List 인터페이스를 구현한다. | ||
|
||
2. Set | ||
|
||
- 순서가 없고, 데이터의 중복을 허용하지 않는 데이터의 집합이다. | ||
- HashSet, TreeSet, LinkedHashSet 등의 클래스가 Set 인터페이스를 구현한다. | ||
|
||
3. Queue | ||
|
||
- F~IFO(First In First Out) 형태의 자료구조로, 데이터의 중복을 허용한다. | ||
- PriorityQueue, Deque, ArrayDeque 등의 클래스가 Queue 인터페이스를 구현한다. | ||
|
||
4. Map | ||
|
||
- key-value 쌍으로 이루어진 데이터의 집합으로, key는 중복을 허용하지 않는다. | ||
- HashMap, TreeMap, LinkedHashMap, Hashtable 등의 클래스가 Map 인터페이스를 구현한다. |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
## ERD Preview | ||
|
||
![ERD 사진](./erd.png) | ||
|
||
## 미션 2-1 | ||
|
||
![미션 2-1](./2-1.png) | ||
|
||
```sql | ||
-- OFFSET 기반 -- | ||
SELECT | ||
s.name AS store_name, | ||
m.contents, | ||
m.point, | ||
um.startdate | ||
FROM | ||
mission m | ||
JOIN store s ON m.store_id = s.id | ||
JOIN usermission um ON m.id = um.missionid | ||
WHERE | ||
um.userid = <userid> AND | ||
(um.status = 'PENDING' OR um.status = 'SUCCESS') | ||
ORDER BY um.startdate DESC, m.id, um.userid; | ||
LIMIT <limit_value> OFFSET <offset_value>; | ||
-- CURSOR 기반 -- | ||
SELECT | ||
s.name AS store_name, | ||
m.contents, | ||
m.point, | ||
um.startdate | ||
FROM | ||
mission m | ||
JOIN store s ON m.store_id = s.id | ||
JOIN usermission um ON m.id = um.missionid | ||
WHERE | ||
um.userid = <userid> AND | ||
um.missionid = <missionid> AND | ||
(um.status = 'PENDING' OR um.status = 'SUCCESS') AND | ||
( | ||
(um.startdate, m.id, um.userid) > ('<last_startdate>', <last_mission_id>, <last_userid>) OR | ||
(um.startdate = '<last_startdate>' AND m.id > <last_mission_id>) OR | ||
(um.startdate = '<last_startdate>' AND m.id = <last_mission_id> AND um.userid > <last_userid>) | ||
) | ||
ORDER BY um.startdate DESC, m.id, um.userid | ||
LIMIT <limit_value>; | ||
``` | ||
|
||
## 미션 2-2 | ||
|
||
![미션 2-2](./2-2.png) | ||
|
||
```sql | ||
INSERT INTO Review (reviewid, storeid, score, content) | ||
VALUES ('<reviewid>', '<storeid>', <score>, '<content>'); | ||
``` | ||
|
||
## 미션 2-3 | ||
|
||
![미션 2-3](./2-3.png) | ||
|
||
```sql | ||
-- Cursor 기반 -- | ||
SELECT | ||
s.name AS store_name, | ||
s.type, | ||
m.contents, | ||
m.point, | ||
m.duedate | ||
FROM | ||
mission m | ||
JOIN store s ON m.store_id = s.id | ||
LEFT JOIN usermission um ON m.id = um.missionid AND um.userid = <userid> | ||
WHERE | ||
um.missionid IS NULL AND | ||
s.regionid = <regionid> AND | ||
m.duedate > NOW() AND | ||
( | ||
(m.duedate, m.id) > ('<last_duedate>', <last_mission_id>) OR | ||
(m.duedate = '<last_duedate>' AND m.id > <last_mission_id>) | ||
) | ||
ORDER BY m.duedate, m.id | ||
LIMIT <limit_value>; | ||
-- OFFSET 기반 -- | ||
SELECT | ||
s.name AS store_name, | ||
s.type, | ||
m.contents, | ||
m.point, | ||
m.duedate, | ||
FROM | ||
mission m | ||
JOIN store s ON m.store_id = s.id | ||
LEFT JOIN usermission um ON m.id = um.missionid | ||
WHERE | ||
um.userid = NULL AND | ||
s.regionid = <regionid> | ||
m.duedate > NOW() AND | ||
ORDER BY um.startdate, m.id, um.userid; | ||
LIMIT <limit_value> OFFSET <offset_value>; | ||
``` | ||
|
||
## 미션 2-4 | ||
|
||
![미션 2-4](./2-4.png) | ||
|
||
```sql | ||
-- 최신 포인트를 가져오기 위해 LIMIT 1 사용 -- | ||
-- 전화번호 인증이 없으면 null 반환 -- | ||
SELECT | ||
u.name, | ||
u.nickname, | ||
u.email, | ||
u.phonenum, | ||
p.point, | ||
FROM | ||
user u | ||
JOIN point p ON u.id = p.userid | ||
WHERE | ||
u.id = <userid> | ||
ORDER BY p.id | ||
LIMIT 1; | ||
``` |