์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- ํ ์คํธ๋ถ์
- AI
- tableau
- ๋ฐ์ดํฐ๋ถ์
- erp
- react
- ์์ฐ์ด์ฒ๋ฆฌ
- ์ฝ๋ฉํ ์คํธ
- abap
- ๋ฐ์ดํฐ ๋ถ์
- ์ธ๊ณต์ง๋ฅ
- ์ฝํ
- github
- Git
- nlp
- ๋น ๋ฐ์ดํฐ
- ํ ์คํธ๋ง์ด๋
- sap
- ์๊ณ ๋ฆฌ์ฆ
- ๊นํ๋ธ
- ํ๋ธ๋ฃจ
- ํ์ด์ฌ
- ๋ฅ๋ฌ๋
- ์๋ง์กด์น์๋น์ค
- ๋ฆฌ์กํธ
- AWS
- ์๋ฐ์คํฌ๋ฆฝํธ
- ํ๋ธ๋ก
- ๋ฐฑ์ค
- DFS
- Today
- Total
DATA101
[Java] Servlet ๊ธฐ๋ฐ MySQL ์๋ฒ ์ฐ๋ํ๊ธฐ!(Tomcat ํ์ฉ) ๋ณธ๋ฌธ
[Java] Servlet ๊ธฐ๋ฐ MySQL ์๋ฒ ์ฐ๋ํ๊ธฐ!(Tomcat ํ์ฉ)
DATA101 2021. 12. 7. 16:56๐ก ๋ชฉํ
Java Sevlet์ ํ์ฉํ ์๋ฒ-ํด๋ผ์ด์ธํธ ๊ฐ MySQL ์ฐ๋ ๋ฐฉ๋ฒ์ ํ์ตํ๋ค.
์ฌ์ฉํ Tool
1. Java 11 ๋ฒ์
2. IDE(์ดํด๋ฆฝ์ค)
3. Tomcat 9 ๋ฒ์
4. MobaXterm
5. Virtual Box
6. Ubuntu-20 64bit
7. ์๋์ฐ10 64bit
8. MySQL
๋ชฉ์ฐจ
1. Java ์ฝ๋ฉ
2. Virtual Box ์ธํ
3. ๊ฐ์ ๋จธ์ ์ ์
4. ๊ธฐ๋ณธ ํจํค์ง ์ค์น
5. ์๋ฐ ์ค์น
6. Tomcat ์ธํ
7. MySQL ์ธํ (๋ฆฌ๋ ์ค)
8. MySQL ์ธํ (์๋์ฐ)
9. MySQL ์ฐ๋ ํ ์คํธ
โ๏ธ ์ฌ์ ์ค๋น
Virtual Box, MobaXterm ์ค์น ๋ฐ ์ธํ
https://heytech.tistory.com/192
1. Java ์ฝ๋ฉ
(1) MySQL Connector ์ค์น
MySQL ์ปค๋ฅํฐ๋ฅผ ์ค์นํด ์ฃผ์ธ์.
ํ์ผ์ ์๋ฐ ํ๋ก์ ํธ ๋ด src/main/webapp/WEB-INF/lib ํด๋ ์์ผ๋ก ์ฎ๊ฒจ์ค๋๋ค.
https://dev.mysql.com/downloads/connector/j/
(2) Java ์ฝ๋
์ ๋ Prj01 ์ด๋ฆ์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ์๊ณ ๋ค์๊ณผ ๊ฐ์ด ํ์ผ์ ๊ตฌ์ฑํ์์ต๋๋ค.
1) src/main/java/Dao/Member.java
package Dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class Member {
private Connection conn = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;
public Member() {
try {
String DB_URL = "jdbc:mysql://localhost:3306/db01?"
+ "useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC"; // DB ์ ์ ์ฃผ์
String USERNAME = "gbpark"; // DB ID
String PASSWORD = "1"; // DB Password
String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver"; // jdbc ๋๋ผ์ด๋ฒ ์ฃผ์
Class.forName(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USERNAME, PASSWORD);
} catch (Exception e) {
e.printStackTrace();
}
}
public int register(String name, int age, int salary) {
String SQL = "INSERT INTO mytable01(name, age, salary) VALUES(?,?,?)";
try {
pstmt= conn.prepareStatement(SQL);
pstmt.setString(1, name);
pstmt.setInt(2, age);
pstmt.setInt(3, salary);
return pstmt.executeUpdate();
} catch(Exception e) {
e.printStackTrace();
}
return -1; // database error
}
}
2) src/main/webapp/index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Web Title</title>
</head>
<body>
<h1>์ด๋ฆ, ๋์ด, ๊ธ์ฌ ๊ฐ๊ฐ ์
๋ ฅ</h1>
<form action = "res.jsp">
์ด๋ฆ<input type = "text" name = "name"/><br/>
๋์ด<input type = "text" name = "age"/><br/>
๊ธ์ฌ<input type = "text" name = "salary"/><br/>
<input type = "submit" value = "์ ์ก"/><br/>
</form>
</body>
</html>
3) src/main/webapp/res.jsp
<%@page import="Dao.Member"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1> res.jsp </h1>
<%
Member member = new Member();
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
int salary = Integer.parseInt(request.getParameter("salary"));
member.register(name, age, salary);
%>
</body>
</html>
(3) WAR Export
ํ๋ก์ ํธ ์ฐํด๋ฆญ - Export - WAR file ์ฐจ๋ก๋ก ํด๋ฆญํฉ๋๋ค.
์๋ ์ฒดํฌ๋ฐ์ค๋ ๋ชจ๋ ์ฒดํฌํฉ๋๋ค.
Export ๊ฒฝ๋ก๋ ์๋์ ๊ฐ์ด ํฐ์บฃ ์ค์น ์์น ๋ด webapps ํด๋๋ก ์ง์ ํฉ๋๋ค.
C:\Program Files (x86)\Apache Software Foundation\Tomcat 9.0\webapps
2. Virtual Box ์ธํ
(1) PC IP ํ์ธ
cmd ์ฐฝ์ ipconfig ๋ช ๋ น์ด๋ฅผ ํตํด PC IP๋ฅผ ํ์ธํฉ๋๋ค.
ipconfig
VirtualBox ์ฃผ์๊ฐ ์๋ ์ผ๋ฐ ์ด๋๋ท ํน์ ๋ฌด์ ๋ IPv4 ์ฃผ์ ๋ณต์ฌ!
(2) ๊ฐ์ ๋จธ์ ํฌํธ ํฌ์๋ฉ
Virtual Box ์คํ ํ ์๋จ ๋ฉ๋ด๋ฐ์์ ํ์ผ-ํ๊ฒฝ์ค์ ํด๋ฆญ
๋คํธ์ํฌ ํญ์ ๋ค์ด๊ฐ๋๋ค.
์์ฑํด๋ ๋คํธ์ํฌ๋ฅผ ๋๋ธ ํด๋ฆญํ๊ณ ํฌํธ ํฌ์๋ฉ์ ํด๋ฆญํฉ๋๋ค.
์ฐ์ธก์ ๋ น์ ํ๋ฌ์ค ๋ฒํผ์ ๋๋ฌ ํฌํธํฌ์๋ฉ ๊ท์น์ ์์ฑํฉ๋๋ค.
ํธ์คํธ IP์ ์์ ํ์ธํ IP ์ฃผ์๋ฅผ ์ ๋ ฅํฉ๋๋ค.
ํธ์คํธ ํฌํธ์ ๊ฒ์คํธ ํฌํธ 3306๋ฒ์,
๊ฒ์คํธ IP์๋ ๊ฐ์ ๋จธ์ ์ IP๋ฅผ ์ ๋ ฅํ๊ณ ํ์ธ ๋ฒํผ์ ๋๋ฌ์ค๋๋ค.
(3) ๊ฐ์ ๋จธ์ ์คํ
์ด์ ๊ฐ์ ๋จธ์ ์ ๋๋ธ ํด๋ฆญํ์ฌ ์คํํฉ๋๋ค.
3. ๊ฐ์ ๋จธ์ ์ ์
MobaXterm์ ์คํํ๊ณ ์ข์ธก ์๋จ์ Session ์์ด์ฝ์ ํด๋ฆญํฉ๋๋ค.
์ข์ธก์ SSH๋ฅผ ํด๋ฆญํฉ๋๋ค.
PC IP ์ฃผ์๋ฅผ Remote host ์ ๋ ฅ์ฐฝ์ ์ ๋ ฅํ๊ณ ํ๋จ์ OK ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
(4) ๊ฐ์ ๋จธ์ ๋ก๊ทธ์ธ
๊ฐ์ ๋จธ์ ์ ์ ์์ ์ผ๋ก ์ ์ํ๋ค๋ฉด ๋ก๊ทธ์ธ ์ฐฝ์ด ๋์ต๋๋ค.
์์ด๋ ์ ๋ ฅ ํ ์ํฐ, ๋น๋ฐ๋ฒํธ ์ ๋ ฅ ํ ์ํฐ!
์ ์์ ์ผ๋ก ๋ก๊ทธ์ธ์ด ๋์๋ค๋ฉด ์๋์ ๊ฐ์ด ๊ฐ์ ๋จธ์ ์ ์ ์๋ฉ๋๋ค.
4. ๊ธฐ๋ณธ ํจํค์ง ์ค์น
๊ฐ์ ๋จธ์ ์ ๋ฐ์ดํธ์ ์ ๊ทธ๋ ์ด๋๋ฅผ ์งํํฉ๋๋ค.
sudo apt-get update
sudo apt-get upgrade
๋คํธ์ํฌ ๊ด๋ จ ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค.
sudo apt install net-tools
5. ์๋ฐ ์ค์น
๊ฐ์ ๋จธ์ ์ ์๋ฐ 11 ๋ฒ์ ์ ์ค์นํฉ๋๋ค.
sudo apt-get install openjdk-11-jdk
์๋ฐ๊ฐ ์ ์์ ์ผ๋ก ์ค์น๋์๋์ง ํ์ธํฉ๋๋ค.
java -version
6. Tomcat ์ธํ
(1) Tomcat ์ค์น
๊ฐ์ ๋จธ์ ์ ํฐ์บฃ ๋ฒ์ 9๋ฅผ ์ค์นํฉ๋๋ค.
sudo apt-get install tomcat9 -y
(2) Tomcat ์ํ ํ์ธ
ํฐ์บฃ์ด ์ ์์ ์ผ๋ก ์ค์น๋์๋์ง ํ์ธํฉ๋๋ค.
ps -ef | grep tomcat
์๋์ ๊ฐ์ด tomcat ์ํ๊ฐ ์ถ๋ ฅ๋๋ฉด ์ ์์ ์ผ๋ก ์ค์น๋ ๊ฒ์ ๋๋ค.
(3) Tomcat ๋ฒ์ ํ์ธ
ํฐ์บฃ ๋ฒ์ ์ ํ์ธํฉ๋๋ค.
sudo /usr/share/tomcat9/bin/version.sh
์๋์ ๊ฐ์ด 9 ๋ฒ์ ์ด ์ ๋๋ก ์ค์น๋ ๊ฒ์ ํ์ธํฉ๋๋ค.
(4) ํ๊ฒฝ๋ณ์ ํธ์ง
sudo nano /etc/default/tomcat9
์ฃผ์ ์ฒ๋ฆฌ๋์ด ์๋ ํ๊ฒฝ๋ณ์ JAVA_HOME์ ํธ์งํฉ๋๋ค.
์๋ ์คํฌ๋ฆฐ์ท๊ณผ ๊ฐ์ด "java-8-openjdk" ๋ด์ฉ ์ค 8์ 11๋ก ๋ณ๊ฒฝํฉ๋๋ค.
์๋ฐ 11 ๋ฒ์ ์ ์ค์นํ๊ณ ์ฌ์ฉํ๊ธฐ ์ํจ์ ๋๋ค.
(5) WAR ํ์ผ ๋ณต์ฌํ๊ธฐ
exportํ war ํ์ผ์ ๊ฐ์ ๋จธ์ home/์ฌ์ฉ์ ํด๋์ ๋ณต์ฌํฉ๋๋ค.
MobaXterm์ ๋๋๊ทธ ์ค ๋๋กญ์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ๊ฐํธํ๊ฒ ํ์ผ์ ๋ณต์ฌํ ์ ์์ต๋๋ค.
ํฐ๋ฏธ๋ ๋๋ ํ ๋ฆฌ๋ฅผ war ํ์ผ์ด ์๋ ๊ณณ์ผ๋ก ์ฎ๊ธด ํ์ war ํ์ผ์ ์ด๋ํด ์ค๋๋ค.
sudo mv ํ์ผ๋ช
.war /var/lib/tomcat9/webapps
(5) Tomcat ์์
ํฐ์บฃ์ ์คํํฉ๋๋ค.
ํฐ์บฃ์ด ์คํ๋๋ฉด war ํ์ผ๋ก ๋ฌถ์ฌ์๋ ํจํค์ง๊ฐ ์๋์ผ๋ก
ํ๋ฆฌ๋ฉด์ warํ์ผ๊ณผ ๋์ผํ ์ด๋ฆ์ ํด๋๊ฐ ์์ฑ๋ฉ๋๋ค.
sudo service tomcat9 start
ํฐ์บฃ ์๋ฒ ํ์ฑํ ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค.
sudo service tomcat9 status
์๋์ ๊ฐ์ด active ๋ ๊ฒ์ ํ์ธํ์๋ฉด ์ ์์ ์ผ๋ก ์๋ฒ๊ฐ ๊ตฌ๋๋ ๊ฒ์ ๋๋ค.
์ฐธ๊ณ
1) Tomcat ์ ์ง
sudo service tomcat9 stop
2) Tomcat ์ฌ์์
sudo service tomcat9 restart
(5) ์๋ฒ ์ฐ๊ฒฐ ํ์ธ
MobaXterm ์ข์ธก ์๋จ์ Session์ ํด๋ฆญํ๊ณ ์๋์ ๊ฐ์ด Browser๋ฅผ ํด๋ฆญํฉ๋๋ค.
URL์ ๋ณธ์ธIP:8080์ ์ ๋ ฅํ๊ณ ํ๋จ์ OK ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
์ ๋ ฅ ์์) http:123.123.123.123:8080
๋ธ๋ผ์ฐ์ ์ ์๋์ ๊ฐ์ด It works!๋ผ๋ ๋ฌธ๊ตฌ๊ฐ ์ถ๋ ฅ๋๋ฉด ์ ์์ ์ผ๋ก ์๋ฒ๊ฐ ๊ตฌ๋๋๊ณ ์๋ค๋ ๊ฒ์ ๋๋ค.
(6) ํ๋ก์ ํธ ํ์ด์ง ์ ๊ทผ
์ด๋ฒ์๋ index.jsp ํ์ด์ง์ ์ ๊ทผํด ๋ณด๊ฒ ์ต๋๋ค.
๋ธ๋ผ์ฐ์ ์ http:๋ณธ์ธIP์ฃผ์:8080/ํ๋ก์ ํธ์ด๋ฆ์ ์ ๋ ฅํ๋ฉด, ์๋์ ๊ฐ์ ํ๋ฉด์ด ์ถ๋ ฅ๋ ๊ฒ์ ๋๋ค.
7. MySQL ์ธํ (๋ฆฌ๋ ์ค)
(1) ์ ๋ฐ์ดํธ
sudo apt update
(2) MySQL ์ค์น
sudo apt install mysql-server
(3) ๋ฐฉํ๋ฒฝ ์คํ
3306๋ฒ ํฌํธ์ ๋ฐฉํ๋ฒฝ์ ์ด์ด์ค๋๋ค.
sudo ufw allow 3306/tcp
(4) ๋ฌธ์ ์ธ์ฝ๋ฉ ์ค์
์ธ์ฝ๋ฉ ๋ณ๊ฒฝ์ ์ํด ๋ฌธ์๋ฅผ ์ด์ด์ค๋๋ค.
sudo vi /etc/mysql/my.cnf
๋ฌธ์์ ์๋ ๋ด์ฉ์ ๋ณต์ฌ + ๋ถ์ฌ ๋ฃ๊ธฐ ํฉ๋๋ค.
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
(5) root ๊ถํ ๋ถ์ฌ๋ฐ๊ธฐ
๊ฐ์ ๋จธ์ ๋ก๊ทธ์ธ ์ ์ด์ฉํ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํฉ๋๋ค.
sudo -i
(6) MySQL root ๊ถํ ์ ์
๊ฐ์ ๋จธ์ ๋ก๊ทธ์ธ ์ ์ด์ฉํ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํฉ๋๋ค.
mysql -u root -p
(7) DB ์์ฑ
create database db01 default character set UTF8;
(8) ์ฌ์ฉ์ ์์ฑ
๋น๋ฐ๋ฒํธ๋ MySQL ์ ์ฉ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ฉด ๋ฉ๋๋ค.
create user '์ฌ์ฉ์ ์ด๋ฆ'@'%' identified by '๋น๋ฐ๋ฒํธ';
(9) ๊ณ์ ๊ถํ ์ค์
grant all privileges on *.* to '์ฌ์ฉ์ ์ด๋ฆ'@'%' identified by '๋น๋ฐ๋ฒํธ';
๊ถํ์ ์ค์ ํ๊ธฐ ์ํด์๋ ๋ฐ๋์ ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ผ ํฉ๋๋ค.
flush privileges;
(10) ํ ์ด๋ธ ์์ฑ
mytable01์ด๋ผ๋ ์ด๋ฆ์ ํ ์ด๋ธ์ ์์ฑํ๊ฒ ์ต๋๋ค.
์นผ๋ผ์ ๋ฌธ์์ด ํ์ ์ name, ์ ์ํ ํ์ ์ age, salary๋ก ๊ตฌ์ฑํ์์ต๋๋ค.
create table mytable01(name VARCHAR(20), age INT, salary INT) default character set UTF8;
(11) MySQL ๋๊ฐ๊ธฐ
exit
(12) bind address ์ฃผ์์ฒ๋ฆฌ
์๋์ ๊ฐ์ด ์ค์ ์ฐฝ์ ์ ๊ทผํ์ฌ bind address๋ฅผ ์ฃผ์์ฒ๋ฆฌ(#)ํฉ๋๋ค.
์ ์ฅํ๊ณ ๋๊ฐ๋๋ค.
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
(11) MySQL ์ฌ์์
๊ฐ์ ๋จธ์ ๋ก๊ทธ์ธ ์ ์ด์ฉํ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํฉ๋๋ค.
sudo systemctl restart mysql
8. MySQL ์ธํ (์๋์ฐ)
์๋์ฐ์์ MySQL Workbench๋ฅผ ์คํํฉ๋๋ค.
์๋ฒ ์ฐ๊ฒฐ ์ค์ ์ ํธ์งํฉ๋๋ค.
ํญ๋ชฉ๋ณ๋ก ์๋์ ๊ฐ์ด ์ ๋ ฅํฉ๋๋ค.
- Connection name: ์์ ๋กญ๊ฒ ์์ฑ
- Connection Method: Standard TCP/IP over SSH ์ ํ
- hostname: ip ์ ๋ ฅ(VM ์ด๋๋ท IP์ด ์๋, ์ผ๋ฐ ์ด๋๋ท ํน์ ๋ฌด์ ๋ IP)
- port: 3306 ์ ๋ ฅ
- username: ์์ฑํ ์ฌ์ฉ์ ์ด๋ฆ
- show in Valut: ์ฌ์ฉ์ ๋น๋ฐ๋ฒํธ
์๋์ Test Connection ๋ฒํผ ํด๋ฆญ
์ ์์ ์ผ๋ก ์ฐ๊ฒฐ๋์๋ค๋ฉด ์๋์ ๊ฐ์ ๋ฉ์์ง๊ฐ ๋์ต๋๋ค.
๊ฐ์ ๋จธ์ ์์ ์์ฑํ ๋ฐ์ดํฐ๋ฒ ์ด์ค db01 ๋ด mytable01 ํ ์ด๋ธ์ ์กฐํํด ๋ด ๋๋ค.
Use db01;
select * from mytable01;
9. MySQL ์ฐ๋ ํ ์คํธ
์ด์ ๊ฐ์ ๋จธ์ ๋ธ๋ผ์ฐ์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๊ณ ์ ์ก ๋ฒํผ์ ๋๋ฅด๋ฉด
์๋์ฐ์ MySQL ์ํฌ๋ฒค์น์์ ๋ฐ์ดํฐ ๊ฐฑ์ ์ด ๋๋์ง ํ์ธํด ๋ด ๋๋ค.
์ ์ก ๋ฒํผ์ ๋๋ฅด๋ฉด ์๋์ ๊ฐ์ด res.jsp๋ก ํ์ด์ง๊ฐ ์ด๋ํฉ๋๋ค.
์๋์ฐ MySQL ์ํฌ๋ฒค์น๋ก ๋์์ ํ ์ด๋ธ์ ์กฐํํด ๋ด ๋๋ค.
select * from mytable01;
์๋์ ๊ฐ์ด ๋ฐ์ดํฐ๊ฐ ์ ๋์ด์จ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
ํฌ์คํ ๋ด์ฉ์ ์ค๋ฅ๊ฐ ์๋ค๋ฉด ์๋์ ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์!
๊ทธ๋ผ ์ค๋๋ ์ฆ๊ฒ๊ณ ๊ฑด๊ฐํ ํ๋ฃจ ๋ณด๋ด์๊ธธ ๋ฐ๋๋๋ค.
๊ณ ๋ง์ต๋๋ค :)
'SW ๊ฐ๋ฐ > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JPA์ ๊ฐ๋ ๊ณผ ์ฌ์ฉ ์ด์ ์ ๋ํด ์์๋ณด์! (0) | 2021.12.27 |
---|---|
[Java] MVC ํจํด์ ํ์ฉํ MySQL ์๋ฒ ์ฐ๋(Tomcat ํ์ฉ) (0) | 2021.12.09 |
์ดํด๋ฆฝ์ค ์ฝ์์ฐฝ ํ๊ธ ๊นจ์ง ํด๊ฒฐ๋ฐฉ๋ฒ! (6) | 2021.12.06 |
[Java] JavaFX ์ค์น ๋ฐฉ๋ฒ, ํ๊ฒฝ ์ค์ , ์ฌ์ฉ ๋ฐฉ๋ฒ (8) | 2021.11.24 |
[Java] Syntactic Sugar ์๋ฏธ์ ์ผํญ์ฐ์ฐ์ ํ์ฉ ๋ฐฉ๋ฒ ๊ณต์ ! (0) | 2021.11.17 |