Skip to content

Commit

Permalink
[2주차/포비] 워크북 제출합니다.
Browse files Browse the repository at this point in the history
[2주차/포비] 워크북 제출합니다.
  • Loading branch information
jpark0506 authored Oct 5, 2024
2 parents 03ba594 + 89f59b6 commit 0baf18d
Show file tree
Hide file tree
Showing 8 changed files with 182 additions and 0 deletions.
Binary file added keyword/chapter02/2-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
60 changes: 60 additions & 0 deletions keyword/chapter02/keyword.md
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 인터페이스를 구현한다.
Binary file added mission/chapter02/2-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added mission/chapter02/2-2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added mission/chapter02/2-3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added mission/chapter02/2-4.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added mission/chapter02/erd.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
122 changes: 122 additions & 0 deletions mission/chapter02/mission.md
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;
```

0 comments on commit 0baf18d

Please sign in to comment.