Skip to content

Commit 5cfb442

Browse files
committed
feat: 도커 및 로컬 mysql 설정 완료
1 parent 816d311 commit 5cfb442

File tree

9 files changed

+152
-31
lines changed

9 files changed

+152
-31
lines changed

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ repositories {
2626
dependencies {
2727
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
2828
implementation("org.springframework.boot:spring-boot-starter-security")
29+
implementation("org.springframework.boot:spring-boot-starter-oauth2-client")
2930
implementation("org.springframework.boot:spring-boot-starter-web")
3031
implementation("org.springframework.boot:spring-boot-starter-websocket")
3132
compileOnly("org.projectlombok:lombok")

compose.yaml

Lines changed: 0 additions & 10 deletions
This file was deleted.

docker-compose.yaml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
name: commitfield
2+
services:
3+
mysql:
4+
image: mysql:9.2.0
5+
container_name: mysql-cmf
6+
environment:
7+
MYSQL_ROOT_PASSWORD: cmfgogo!!1236
8+
MYSQL_DATABASE: cmf_db
9+
ports:
10+
- "3306:3306"
11+
volumes:
12+
- ./db/:/var/lib/mysql
13+
14+
# mongodb:
15+
# image: mongo
16+
# restart: always
17+
# container_name: mongodb
18+
# # 접근 포트 설정 (컨테이너 외부:컨테이너 내부)
19+
# ports:
20+
# - "27017:27017"
21+
# # 환경 변수 설정
22+
# environment:
23+
# # MongoDB 계정 및 패스워드 설정 옵션
24+
# MONGO_INITDB_ROOT_USERNAME:
25+
# MONGO_INITDB_ROOT_PASSWORD:
26+
# # 볼륨 설정
27+
# volumes:
28+
# - ./data/mongodb:/data/db
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package cmf.commitField.domain.user.controller;
2+
3+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
4+
import org.springframework.security.oauth2.core.user.OAuth2User;
5+
import org.springframework.web.bind.annotation.GetMapping;
6+
import org.springframework.web.bind.annotation.RestController;
7+
8+
import java.util.Map;
9+
10+
@RestController
11+
public class AuthController {
12+
@GetMapping("/user")
13+
public Map<String, Object> user(@AuthenticationPrincipal OAuth2User principal) {
14+
return principal.getAttributes(); // 사용자 정보 반환
15+
}
16+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package cmf.commitField.domain.user.controller;
2+
3+
import jakarta.servlet.http.HttpServletRequest;
4+
import jakarta.servlet.http.HttpServletResponse;
5+
import org.springframework.stereotype.Controller;
6+
import org.springframework.web.bind.annotation.GetMapping;
7+
8+
import java.io.IOException;
9+
10+
@Controller
11+
public class LogoutController {
12+
13+
@GetMapping("/logout")
14+
public void logout(HttpServletRequest request, HttpServletResponse response) throws IOException {
15+
request.getSession().invalidate();
16+
response.sendRedirect("/");
17+
}
18+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package cmf.commitField.domain.user.entity;
2+
3+
import cmf.commitField.global.jpa.BaseEntity;
4+
import jakarta.persistence.Entity;
5+
import jakarta.persistence.Id;
6+
import lombok.Builder;
7+
8+
@Entity
9+
@Builder
10+
public class User extends BaseEntity {
11+
@Id
12+
private long id;
13+
private String email;
14+
private String nickname;
15+
private String password;
16+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
spring:
2+
datasource:
3+
url: jdbc:mysql://localhost:3306/cmf_db
4+
username: root
5+
password: cmfgogo!!1236
6+
driver-class-name: com.mysql.cj.jdbc.Driver
7+
jpa:
8+
open-in-view: false
9+
hibernate:
10+
ddl-auto: create

src/main/resources/application.yml

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
1-
#server:
2-
# port: 8090
3-
# timezone: Asia/Seoul
4-
#spring:
5-
# config:
6-
# import: application-secret.yml
7-
# output:
8-
# ansi:
9-
# enabled: ALWAYS
10-
# profiles:
11-
# active: dev
12-
# include: secret
13-
# datasource:
14-
# url: jdbc:mysql://localhost:3306/cmf_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Seoul
15-
# username: root
16-
# password: cmfgogo!!1236
17-
# driver-class-name: com.mysql.cj.jdbc.Driver
18-
# jpa:
19-
# open-in-view: false
20-
# hibernate:
21-
# ddl-auto: update
1+
server:
2+
port: 8090
3+
timezone: Asia/Seoul
4+
spring:
5+
config:
6+
import: application-secret.yml
7+
output:
8+
ansi:
9+
enabled: ALWAYS
10+
profiles:
11+
active: dev
12+
include: secret
13+
datasource:
14+
url: jdbc:mysql://localhost:3306/cmf_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Seoul
15+
username: root
16+
password: cmfgogo!!1236
17+
driver-class-name: com.mysql.cj.jdbc.Driver
18+
jpa:
19+
open-in-view: false
20+
hibernate:
21+
ddl-auto: update

src/main/resources/static/index.html

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<!DOCTYPE html>
2+
<html lang="ko">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
<title>GitHub OAuth2 로그인 테스트</title>
7+
</head>
8+
<body>
9+
<h1>GitHub OAuth2 로그인 테스트</h1>
10+
11+
<a href="/oauth2/authorization/github">
12+
<button>GitHub 로그인</button>
13+
</a>
14+
15+
<button id="logoutBtn" style="display: none;">로그아웃</button>
16+
17+
<h2>사용자 정보</h2>
18+
<pre id="userInfo">로그인 후 정보를 불러옵니다...</pre>
19+
20+
<script>
21+
async function fetchUser() {
22+
try {
23+
const response = await fetch('/user');
24+
if (!response.ok) throw new Error("Not logged in");
25+
26+
const data = await response.json();
27+
document.getElementById("userInfo").textContent = JSON.stringify(data, null, 2);
28+
document.getElementById("logoutBtn").style.display = "block";
29+
} catch (error) {
30+
document.getElementById("userInfo").textContent = "로그인이 필요합니다.";
31+
}
32+
}
33+
34+
document.getElementById("logoutBtn").addEventListener("click", async () => {
35+
await fetch('/logout', { method: 'GET' });
36+
location.reload();
37+
});
38+
39+
fetchUser();
40+
</script>
41+
</body>
42+
</html>

0 commit comments

Comments
 (0)