์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- Java
- ์๋ฐ
- ๋ ์
- database
- ๊ฐ๋ฐ
- ์ปดํจํฐ๊ณผํ
- ์ฑ
- css
- ์ฝ๋ฉ
- JavaScript
- K๋ฐฐํฐ๋ฆฌ๋ ๋ณผ๋ฃจ์
- ๋ฐ์ํ
- ๋ง์ผ๋ด๊ฐ์ธ์์๋ค์์ฐ๋ค๋ฉด
- ๊น๋ฏธ๊ฒฝ์๋งํ์์
- Python
- html
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ํ์ด์ฌ
- K๋ฐฐํฐ๋ฆฌ
- ๋ฆฌ์กํธ
- ์ํ
- ์ค๋ผํด
- ํ๋ก๊ทธ๋๋ฐ
- ์๋ฐ์คํฌ๋ฆฝํธ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ์นํ์ด์ง๋ง๋ค๊ธฐ
- ์นํผ๋ธ๋ฆฌ์ฑ
- ๋ผํ๋ผ์ค์๋ง๋
- ์ค๋ธ์
- ComputerScience
- Today
- Total
JiYoung Dev ๐ฅ
[JSP/Servlet] Maven (2023.05.22) ๋ณธ๋ฌธ
๐ Build
ํฉ์ด์ง ์์๋ค์ WAS๊ฐ ์ธ์ํ ์ ์๋ ๊ตฌ์กฐ๋ก ๋ง์ถฐ์ฃผ๋ ๊ฒ
ex. ํ๋ฉด์ ๋ณด์ฌ์ผ ํ๋ ๊ฒ์ web-app ๋ด๋ถ์ ๋ค์ด๊ฐ์ผ ํจ.
WEB-INF๋ ํด๋ผ์ด์ธํธ๊ฐ ์ง์ ์ ๊ทผ ๋ถ๊ฐํ ๊ณณ์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ์ ์ ์ฅ
๊ณผ๊ฑฐ์๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์ด์ค์ผ ํ์ >> ์๋ํ๋ฅผ ์ํ ๋ง๋ค์ด์ง ๋๊ตฌ >> ๋น๋ ๋๊ตฌ
๐ ๋น๋๋๊ตฌ
โ Ant
์๋ฐ ํ๋ก์ ํธ์ ๋น๋๋ฅผ ์๋ํํด์ฃผ๋ ๋น๋ ํด
โ Maven
์๋ฐ ํ๋ก์ ํธ์ ๋น๋๋ฅผ ์๋ํํด์ฃผ๋ ๋น๋ ํด
์ปดํ์ผ๊ณผ ๋น๋๋ฅผ ๋์์ ์ํ, ํ ์คํธ๋ฅผ ๋ณํํ๊ฑฐ๋ ์๋ฒ ์์์ ๊ด๋ฆฌํ ์ ์๋ ํ๊ฒฝ ์ ๊ณต
Ant๋ฅผ ๊ฐํธํํ ๊ฒ
- Ant์ ๊ฒฝ์ฐ
- Maven์ ๊ฒฝ์ฐ
๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ์ ์ง์ ๋ค์ด๋ฐ์ ๋ฃ์ด์ฃผ๋๊ฒ ์๋๋ผ pom.xml์ ์ ๊ธฐ๋ง ํ๋ฉด ๋จ
๐ Maven ์ค์ต
๐ Maven ํ๋ก์ ํธ ์์ฑ
Group Id : ์๋ณ ์์ด๋ (๊ฒฝ๋ก)
artifact id : ํ๋ก์ ํธ ์ด๋ฆ
โ ์์ฑ๋ Maven ํ๋ก์ ํธ ๊ตฌ์กฐ
pom.xml ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ผ๋ฉด ์์ฑํ๋ ํ์ผ
๐ pom.xml์์ JDK ๋ฒ์ ๊ณผ Maven-Servlet ์ฐ๊ฒฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ
โ jdk ๋ฒ์ ๋ณ๊ฒฝ
ํ์ผ ์ ์ฅ
โ Maven-Servlet ์ฐ๊ฒฐ
Maven ํ๋ก์ ํธ ์์ฑ์ ์ค๋ฅ๋จ๋ ์ด์ : mavenํ๋ก์ ํธ์์๋ java ์ฌ์ฉ ๋ถ๊ฐ >> ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํด์ผ ํจ
pom์ ์์ฑํ ์ ์๋ ๋ด์ฉ์ ๊ฐ์ ธ์ฌ ์ ์๋ ์ฌ์ดํธ :
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฅ์ >> https://mvnrepository.com/
๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ค์ ์ ์ฅ์์ ๊ฐ๋ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๋ก๋ํ๋ฉด ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ ๋ฉ์ด๋ธ ์ค์ ์ ์ฅ์(Repository)์์ ๋ด๋ ค๋ฐ์ ์ฌ์ฉํ ์ ์์.
servlet-api ๊ฒ์
์ ์ฅ ํ index.jsp ๋ค์ด๊ฐ์ ๋ด๋ถ ๋ด์ฉ ์๋ผ๋ด๊ธฐ ํ ๋ค์ ๋ถ์ฌ๋ฃ์ผ๋ฉด ์ค๋ฅ ์ฌ๋ผ์ง
์๋์ผ๋ก ๋ค์ด๋ก๋ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฅ์ : Maven Dependencies
jsp ํ์ผ์ ์ง์์ ์ฐ๊ธฐ ๊ท์ฐฎ์๋ indexํ์ผ ์ง์ด ํ ๊ฐ์ ์ด๋ฆ์ผ๋ก ์๋ก ์์ฑ
๐ ๊ธฐํ ์ค์
โ java ํด๋ ์์ฑํ๊ธฐ
โ url mapping (๋์ด์์!)
annotation ๋ฐฉ์ ๋์ web.xml์ ์์ฑ
๐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐํ๊ธฐ - MyBatis ์ฌ์ฉ
ํ๋ ์์ํฌ์ ์ฅ์ ์ด์ ๋จ์ : ์ฒ์์ ์ฌ์ฉํ๋ ค๋ฉด ๊ณต๋ถํด์ผ ํจ. ๊ทธ๋ฌ๋ ์ต์ํด์ง๋ฉด ์ฌ์ฉ์ฑ์ด ์ข์
2, 3๋ฒ์ ์คํ๋ง ๋ ์ฌ์ฉ
Maven์์๋ 1๋ฒ ๋ฐฉ์์ผ๋ก
MyBatis์ ํน์ง ์ค ํ๋
DB์์ ๋์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ๋ฌด์กฐ๊ฑด ํ๋๋ก ๋ฌถ์ด์ผ ํจ
๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ค ๋ ๋ํ ํ๋๋ก ๋ฌถ์ด์ผ ํจ
VO ํด๋์ค๊ฐ ๊ผญ ํ์ํจ
๐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ
โ MyBatis, ojdbc ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ
- pom.xml์์ ์ํ
โ mybatis - ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋์ํ ํ์ผ ์์ฑ
- mybatis-config.xml
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ํ์ผ์ ๋ณ๋ package ๋ง๋ค์ด์ ์ ์ฅ
์ฐธ๊ณ ์๋ฃ :
https://mybatis.org/mybatis-3/ko/getting-started.html
์๋ ๋ด์ฉ ๋ณต๋ถ
xml ํ์ผ ํ์
>> ํ์ผ๋ช
์์ฑ๋ด์ฉ
enviroment : ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ๊ฒฝ์ ๋ณด
๋ณดํต์ db๋ฅผ 2~3๊ฐ์ง๋ฅผ ์ฌ์ฉ (๊ฐ๋ฐ, ํ ์คํธ, ๋ฐฐํฌ์ฉ)
๊ฐ๋ฐ์ค ์ฌ์ฉํ๋ db >> id = "development" (์ด๋ฆ์ ์ง์ ํ๋ ๊ฒ)
property ์ value ๊ฐ์ ์ง์ ํด์ค์ผ ํจ >> ๋ค๋ฅธ ํ์ผ์ ์ ์ฅํด๋๊ณ ๊ฐ์ ธ๋ค ์ธ ์ ์์
- mybatis-config.xml ๋ด๋ถ์ db์ property value๋ฅผ ๋ณ๋๋ก ์ ์ฅํด๋ ํ์ผ ์์ฑ
ํ์ฅ์ : file
ํ์ผ๋ช : db.properties
์์ด๋ = value ํํ๋ก ์์ฑ
- db.properties ์์ฑ ๋ฐ ์ ์ฅ ํ mybatis-config.xml๊ณผ ํ์ผ ์ฐ๊ฒฐ
myBatis์์ db.properties๋ฅผ ๋์ด๋ค ์ฐ๊ฒ ๋ค ์ ์ํด์ผํจ
โ SqlSessionManager ํด๋์ค ์์ฑ
์ค์ ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ, sql ์คํ ๋ฑ์ ์ญํ ํด์ฃผ๋ ๋งค๋์
์ ๋ณด๋ฅผ ์ฝ์ด์์ ์ค์ ๋ก DB์ ์ฐ๊ฒฐํด์ฃผ๋ ์น๊ตฌ : SqlSessionManager
- sql ์คํ, ์ฐ๊ฒฐ์ ์ํ
ํด๋์ค ์์ฑ
package com.smhrd.database;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
//์ค์ ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ, sql ์คํ ๋ฑ์ ์ญํ ํด์ฃผ๋ ๋งค๋์
public class SqlSessionManager {
//์ค์ ์ฐ๊ฒฐ, ์คํ ๋ฑ์ ์ญํ ์ ์ํํ session์ ์์ฑํด์ฃผ๋ factory
//DB์์ session์ ์ฐ๊ฒฐ๋ถํฐ sql ์คํํ๊ณ , ์คํ ํ ์ฐ๊ฒฐ ๋๊ธฐ๊น์ง์ ์ผ๋ จ์ ๊ณผ์ ์ session์ด๋ผ๊ณ ํจ
public static SqlSessionFactory sqlSessionFactory;
//ํด๋์ค ์ด๊ธฐํ ๋ธ๋ญ : ํด๋์ค๊ฐ ์ฒ์ ๋ก๋ฉ๋ ๋ ๋ฑ ํ๋ฒ๋ง ์ํ
//์์ฑํ ํ๋ก๊ทธ๋จ์ด ์คํ๋์๋ง์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ > ํด๋์ค๋ฅผ ์ด๊ธฐํ ํด์ฃผ๋ ์ญํ
static {
//์ค์ ์ ๋ณด ๊ฐ์ง๊ณ ์ค๊ธฐ์ํ mybatis-config.xml ๊ฒฝ๋ก ์์ฑ
//์ฐ๊ฒฐํ๊ณ ์ถ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
String resource = "com/smhrd/database/mybatis-config.xml";
//์ค์ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ ์ํ์ฌ reader ์ฌ์ฉ
//์ง์ ํ ๊ฒฝ๋ก ์์ ํ์ผ ๋ด์ฉ์ ์ฝ์ ๋ ์ฌ์ฉ
Reader reader;
//๊ฒฝ๋ก๊ฐ ๋ฌธ์์ด๋ก ์์ฑ๋์ด ์์. ์คํ ๋ฐ์ ๊ฐ๋ฅ์ฑ ์์ >> ์์ธ์ฒ๋ฆฌ
try {
//๋ฌธ์์ด ๊ฒฝ๋ก๋ก ํ์ผ์ฝ๊ธฐ
reader = Resources.getResourceAsReader(resource);
//์ฝ์ ์ ๋ณด๋ฅผ ํ ๋๋ก DB ๊ด๋ จ ๊ธฐ๋ฅ์ ๊ฐ์ง SqlSessionFactory ์์ฑ
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
}catch (IOException e) {
e.printStackTrace();
}
}
//static ์ด๊ธฐํ ๋ธ๋ญ์์ ์์ฑ๋ factory๋ฅผ ๋ฐํํด์ฃผ๋ ๋ฉ์๋
//๋ง์ฝ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๊ณ ์ถ์ด. ๊ทธ๋ผ get~ ํธ์ถํ๋ฉด db์ฐ๊ฒฐ~๋๊ธฐ๊น์ง ์์
์ ํด์ฃผ๋ factory๋ฅผ ์์ฑํด์ค
public static SqlSessionFactory getSqlSessionFactory() {
//static : ๊ฐ์ฒด ์์ฑํ์ง ์์๋ ๋ฉ์๋๋ฅผ ์คํํ๋ฉฐ ๋ฐ๋ก ์คํ๋จ
return sqlSessionFactory;
}
}
SqlSessionManager ํด๋์ค ์์ฑ์ ์ฃผ์ํ ์ !
resource - ibatis.io
โ DAO์์ SqlSessionManager ์ฌ์ฉํ๊ธฐ
package com.smhrd.model;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import com.smhrd.database.SqlSessionManager;
//MyBatis DAO ์ ์
public class MyMemberDAO {
//manager๊ฐ factory ์์ฑ, factory๊ฐ session ์์ฑ
//SqlSessionFactory ์์ฑ : DB ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ์ง์ ์ฌ์ฉํ ์ ์๋ ์ธ์
์ ์์ฑ
SqlSessionFactory sqlSessionFactory = SqlSessionManager.getSqlSessionFactory();
//ํ์๊ฐ์
public int join(MyMember member) {
//Factory๋ฅผ ์ฌ์ฉํด์ ์ค์ db ๊ด๋ จ ๊ธฐ๋ฅ์ ์ํํด์ฃผ๋ session์ ์์ฑ
//true : auto commit - jdbc๋ ์๋ commit์ด์์. myBatis๋ ์๋์ปค๋ฐ์ด ์๋๋ฏ๋ก ์ค์ ํด์ค์ผ ํจ
SqlSession sqlSession = sqlSessionFactory.openSession(true);
int cnt = 0;
try {
//sqlSession์ผ๋ก member๋ฅผ db์ ๋๊ฒจ์ค์ผ ํจ
//์ฝ์
: insert, ์ญ์ : delete, ํธ์ถ : select
//insert(์ค์ ์คํํ sql๋ฌธ - xmlํ์ผ namespace.id , sql ์คํํ ๋ ๋๊ฒจ์ค ๊ฐ - ?)
//?์ ์ฑ์์ง ๊ฐ์ member์ ๋ด๊ฒจ์์
cnt = sqlSession.insert("MyMemberDAO.insert",member);
//๋ฐํ๊ฐ : sql ์คํ ์ฑ๊ณต ์ฌ๋ถ (์ฝ์
์ฑ๊ณต - 1, ์คํจ - 0)
}catch(Exception e) {
e.printStackTrace();
}finally {
sqlSession.close(); //์์๋ฐํ
}
return cnt;
}
}
MyMemberDAO ํด๋์ค ์์ฑ์ ์ฃผ์ํ ์ !
SqlSessionMager - ์ง์ ๋ง๋ ํด๋์ค ํ์ผ ์ฝ์
memberDAO์์ sqlSession ์์ฑ ํ ์ค์ sql๋ฌธ์ ์คํํ๊ธฐ ์ํด์๋ sql๋ฌธ์ด ๋ด๊น ํ์ผ์ด ์์ด์ผํจ!
>> mappers : ์ค์ ๋ก sql์ ์์ฑํ ํ์ผ
โ Mappers.xml ํ์ผ ์์ฑ
๋๊ตฌ ๊ฐ์ ธ์ค๊ธฐ
mapper ์์ฑ ํ ์ฌ์ฉํ๊ธฐ ์ํด์๋ mybatis-cong.xml ๊ฒฝ๋ก ์ง์ ํด์ผ ํจ!
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace : mapper - dao ๋งค์นญ -->
<mapper namespace="MyMemberDAO">
<insert id="insert" parameterType="com.smhrd.model.MyMember">
<!-- ํ์ ์์ฑ : id(ํ๊ทธ์๋ณ๊ฐ) -->
<!-- #{๊ฐ์ง๊ณ ์ฌ ํด๋์ค์ ํ๋๋ช
} -->
insert into mymember values (#{id},#{pw},#{nick})
</insert>
</mapper>
parametherType์๋ ์ฐ๋ฆฌ๊ฐ ์ ์ํ ํด๋์ค์ธ ๊ฒฝ์ฐ ๊ฒฝ๋ก๋ก ์์ฑํด์ผํจ!
string, int๋ฉด ๊ทธ๋ฅ ์์ฑํด๋๋จ!
insert๋ int๋ก ๋ฐํ
Servlet์์ DAO ์ฌ์ฉํ๊ธฐ
package com.smhrd.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.smhrd.model.MyMember;
import com.smhrd.model.MyMemberDAO;
public class JoinCon extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//์์ฒญ ๋ฐ์ดํฐ ์ธ์ฝ๋ฉ ๋ฐฉ์ ์ง์
request.setCharacterEncoding("UTF-8");
//id, pw, nick ๋ฐ๊ธฐ - DBํ
์ด๋ธ์ ์ปฌ๋ผ๋ช
๊ณผ ์๋ฃํ ๋ง์ถ๊ธฐ
String id = request.getParameter("id");
String pw = request.getParameter("pw");
String nick = request.getParameter("nick");
MyMember member = new MyMember(id, pw, nick);
//๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋ >> ๊ฐ ๋ฃ์ด์ฃผ๊ธฐ (MyBatis ํ์ฉ)
MyMemberDAO dao = new MyMemberDAO();
//DAO ๊ฐ์ฒด ์์ฑํ๋ ์๊ฐ SqlSessionFactory ์์ฑ
int cnt = dao.join(member); //ํ์๊ฐ์
๊ธฐ๋ฅ
if(cnt>0) {//ํ์๊ฐ์
์ฑ๊ณต
System.out.println("ํ์๊ฐ์
์ฑ๊ณต!");
}else {//ํ์๊ฐ์
์คํจ
System.out.println("ํ์๊ฐ์
์คํจ!");
}
}
}
๐ ์ค๋ฅ ๋ฐ์
1. ๋ถ์ ํฉํ ์ด ์ ํ : SQL๋ฌธ์ด ์๋ชป๋ ๊ฒ
์ฒซ๋ฒ์งธ ์ค๋ฅ๋ฅผ ์ฐพ์์ ๋ด์ผ ํจ.
id๊ฐ์ด null ๊ฐ > ์๋ชป ๋ฐ์์์
formํ๊ทธ ํ์ธ > servlet์์ ์ ๋ฐ๋์ง > ...
2. SQLSyntaxError : SQL ์๋ชป ์์ฑํ ๊ฒ
mapper ํ์ธ
3. NoClassDefFoundError : ํด๋์ค๋ฅผ ๋ชป๊ฐ์ ธ์์ ๋
(SqlSessionManager con-figํ์ผ์์ ๊ฒฝ๋ก ์๋ชป๋จ)
3. ivalid character
์ฐ๋ฉด ์๋๋ ๊ฒ ์ผ์ ๋ ๋ํ๋จ
์ธ๋ฏธ์ฝ๋ก ์ผ์ ๋
4. namespace ์๋ชป ์ง์
'full stack > Back-End' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] AJAX ๋น๋๊ธฐ ํต์ - ์์ด๋ ์ค๋ณต ์ฒดํฌ ๊ธฐ๋ฅ ๊ตฌํ (2023.06.01) (0) | 2023.06.01 |
---|---|
[JSP&Servlet] FrontController (2023.05.23~24) (0) | 2023.05.24 |
[JSP/Servlet] Web MVC (2023.05.19) (0) | 2023.05.19 |
[JSP/Servlet] JSP ๋ด์ฅ๊ฐ์ฒด(HttpServletResponse) & ์ฟ ํค(Cookie) (2023.05.17) (0) | 2023.05.19 |
[JSP/Servlet] ์ธ์ (session) (2023.05.18) (0) | 2023.05.19 |