야호호
나는 윤선이가 아주아주 글에 재능이 있음을 알고 있다.
지금은 다른 업에 종사하고 있지만 언젠가는 윤선이가 꼭 글을 쓰며 행복한 나날을 보냈으면 좋겠다 ^0^/
그런 소망으로 윤선이에게 시간이 나면 나에게 보여주지않아도 좋으니 어딘가에 꾸준히 글을 써다오! 라는
부탁을 했는데, 똑똑하고 착한 윤선이가 나에게 굿 아이디어를 내주었다.
바로 함께 블로그를 만들자는 것!
그래서 이것은 언제까지일런지는 모르겠지만 개발자를 꿈꾸는 나에게는 개발경험을
그리고 글을 잘 쓰는 윤선이에게는 글을 투고할 수 있는 공간을 만들자~ 라는 빅빅 프로젝트가 되겠다.
언제가 될지 정확한 시기는 모르지만 이직을 염두에 두고 있는 나에게 직업적인 동기부여도 되지만
무엇보다 꼭 기본적인 글쓰기 기능과 저장기능이라도 만들어서 윤선이에게 힘이 되었으면 좋겠다.
참고로 이 시리즈는 지식전달이 아니라, 개발일지에 가까운 성격이니까
어떤 개발과 관련하여 정보를 얻고 싶다면 나보다 훨씬 잘 아는 분들의 글을 찾아보자!
설명도 잘 안할 것 같다...
(꼭 찾아보셈)
우선 개발도구는 IntelliJ 를 쓰기로 했다.
지금은 학교계정을 써서 무료로 쓰고 있긴한데...언제까지 무료로 쓸 수 있으려나?
라고 생각이 들어서 지금 확인해봤는데
이야 16일 남았네
너무 즐거워
돈벌려고 쓰는 툴을 돈주고 쓰게 생겼어
아무튼 나는 개발도구는 IntelliJ 를 썼고
백엔드 환경은 스프링부트, MariaDB를 사용하기로 했다.
자바 버전은 11을 썼고...빌드툴은 Gradle을 썼다.
이번 기회에 익숙하지않은 JPA를 써보고 싶었지만
괜히 욕심부리다가 진행이 더뎌질까봐 익숙한 MyBatis를 쓰기로 했다.
이번건 꼭 완성시켜야하니깐~
인텔리제이의 도움을 받거나 아니면 이미지 밑에 있는 주소를 통해서
Spring initializer를 사용할 수 있다.
나는 우선 아래에 있는 디펜던시들을 추가하기로 했다.
1. Spring Boot DevTools
2. Lombok Spring Configuration Processor
3. Srping Web
4. MyBatis Framework
프로젝트를 생성하자마자 톰캣을 한번 돌려보면 이런 메시지를 볼 수 있다.
여기서 꿀팁
오류메시지가 보이면 오류가 난 것을 알 수 있다.
다 알려줬다 ㅋㅋ 렬루
compile("org.mariadb.jdbc:mariadb-java-client")
compile group: 'org.mariadb.jdbc', name: 'mariadb-java-client', version: '2.7.0' // mariadb
에러는 dataSource 어쩌구 하는걸 보면 DB 관련한 에러가 났다는 것 같다.
우리는 MariaDB를 쓰기로 했으므로 관련한 디펜던시를 추가해준다. (build.gradle)
오라클, MySQL, PostgreSQL등을 쓴다면 각자 필요한 것들을 추가해주도록 하자.
그런 다음 우리가 해야할 일은 DB 접속정보를 입력해주어야한다.
나와 같은 세팅으로 시작을 하면 아마
static
templates
application.properties
이렇게 세 가지 파일들이 있을텐데, 나는 yml 을 쓸 것이므로 application.properties의 이름을 바꿔주고
application.yml을 생성했다.
yml나 properties를 쓰는 것에는 엄청나게 중요한건 아니지만 보기 편안한 yml을 쓸것이다.
(resources 폴더 아래에 mappers라는 폴더는 이따 사용할거지만, 이왕 보이는거 지금 만들어주자)
yml 파일 내에 기본적인 접속정보를 입력할 곳을 적어주자.
(코드는 아래에 있음)
그리고 우리는 사용할 데이터베이스를 만들어야한다.
cmd 창에서 접속을 하거나, 아니면 나처럼 실행창에서 찾아서 실행을 하거나하여 커맨드라인 클라이언트를 열자.
그리고 이렇게
CREATE DATABASE 데이터베이스명;
을 입력하여 사용할 데이터베이스를 만든다.
나는 울윤선이의 글창고니까 ysbase루다가 정했다.
CREATE TABLE `connection_test` (
`NAME` VARCHAR(50) NULL DEFAULT NULL,
`AGE` INT(11) NULL DEFAULT NULL
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;
-- 더미데이터 삽입
INSERT INTO CONNECTION_TEST
SELECT '이윤선' AS NAME, 25 AS AGE FROM DUAL;
INSERT INTO CONNECTION_TEST
SELECT '김민성' AS NAME, 27 AS AGE FROM DUAL;
이거는 그냥 이따 접속테스트를 해보려고 만든 temp 테이블이고, 더미데이터이다.
휴 정말 비밀스러워
아까 뼈대만 입력해주었던 yml 파일에 이런식으로 적어주면 된다.
username이랑 password는 대충 뭔지 알 수 있을텐데
datasource가 뭔지, datasource의 url이 뭔지는 조금 찾아봐야할 수도 있다.
(찾아보라는 뜻ㅎ)
# mariaDB 접속정보
spring:
datasource:
driver-class-name: org.mariadb.jdbc.Driver
url: jdbc:mariadb://IP:포트번호/데이터베이스명?characterEncoding=UTF-8&serverTimezone=UTC
username: 유저명
password: 패스워드
이걸 가져다가...붙여쓰자...
그리고 Java 소스를 생성할 config라는 패키지를 하나 만들어준다.
이름은 꼭 config가 아니어도 상관없지만 보통 이름짓는데 시간을 많이 할애하니까
설정 관련 클래스가 들어갈거면 설정이라고 지어주자
완전 꿀팁
@Configuration
public class DatabaseConfig {
@Bean
public SqlSessionFactory sqlSessionFatory(DataSource datasource) throws Exception{
SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
sqlSessionFactory.setDataSource(datasource);
sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/mappers/*/*.xml"));
return (SqlSessionFactory) sqlSessionFactory.getObject();
}
@Bean
public SqlSessionTemplate sqlSession(SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
DatabaseConfig.java 라는 파일을 만들고 위와 같은 내용으로 채워주었다.
코드내용은 나도 설명할 만큼 잘 모르므로 잘 찾아보도록 하자.
에잉 쯔쯔 나같은 개발자가 많아지면 세상이 어떻게 될라고 그냥
중요한건 저~기 딱봐도 무슨 경로같이 생겨보이는 곳이 중요한데
/mappers/*/*.xml
resources 아래의 mappers라는 폴더 아래의 어떤 폴더(든 다 가능하다는 뜻) 아래의 확장자가 xml인 어떤 파일들을
가져오겠다는 뜻이다.
우리가 아까 mappers 라는 폴더를 만들었으니, 그 아래에 하위 디렉토리를 만들고(맨날 실수한다)
그 안에 xml 파일을 만들면 그 파일들을 읽어오겠다는 뜻이다.
이런 식으로 mappers 아래에 하위 디렉토리를 만들고, 그 밑에 xml 파일을 만들면 된다.
여기서 이 xml 파일은 도당체 무슨 일을 한단 말이오?
MyBatis 라는 프레임워크에서 사용할 쿼리를 적어주는 파일이다.
MyBatis에 대해서는 나도 공부를 많이해야하므로 나중에 기회가 되면...
(지금은 찾아보라는 뜻ㅎ)
1
2
3
4
5
6
7
8
9
10
|
<?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">
<mapper namespace="love.mappers.index">
<select id="connectionTest" resultType="HashMap">
SELECT *
FROM CONNECTION_TEST
</select>
</mapper>
|
cs |
대강 위와 같은 포멧으로 적으면 된다.
우선 우리가 지금 작업하는 현재시점에서 중요한 것은
<mapper namespace="~~">
<select id="~~">
가 되겠다.
잘 기억해두고 조금 이따가 써먹어보도록 하자.
이번 목표는 스프링부트 및 DB연결 세팅이므로
세팅간 사용할 간단한 Controller-Service-DAO를 만들어주도록 하자.
왜 인터페이스를 안썼냐?
이정도 규모, 작업자 수의 작업에서는 오히려 작업 효율이 떨어질 것 같아서 안썼다!
@RestController
public class IndexController {
private final IndexService indexService;
public IndexController(IndexService indexService) {
this.indexService = indexService;
}
@GetMapping(value = "/")
public List<Map<String, Object>> enter() {
List<Map<String, Object>> list = indexService.connectionTest();
return list;
}
}
컨트롤러.
아마 SpringBoot를 쓴다면 이정도 내용은 굳이 설명할 필요가 없겠지만
대충 'localhost:포트번호/' 로 접속하면 enter라는 메소드를 타게하겠다는 내용이다.
@Service
public class IndexService {
private final IndexDAO indexDAO;
public IndexService(IndexDAO indexDAO) {
this.indexDAO = indexDAO;
}
public List<Map<String, Object>> connectionTest() {
return indexDAO.connectionTest();
}
}
@Repository
public class IndexDAO {
private static final String NAMESPACE = "love.mappers.index.";
private final SqlSessionTemplate sqlSessionTemplate;
public IndexDAO(SqlSessionTemplate sqlSessionTemplate) {
this.sqlSessionTemplate = sqlSessionTemplate;
}
public List<Map<String, Object>> connectionTest() {
String queryId = "connectionTest";
return sqlSessionTemplate.selectList(NAMESPACE + queryId);
}
}
서비스는 아무 하는 일없이 DAO와의 다리 역할을 해주고 있고
DAO는 이름대로 DB에 접근하고 있다.
(DAO: Data Access Object)
여기서 첫번째로 짚고 넘어가야할 것은 String 타입으로 선언된 NAMESPACE라는 녀석이다.
우리는 아까 네임스페이스라는 것을 본 적이 있다.
매퍼를 작성할때 '이 매퍼는 이 이름입니다.' 하는 것이 바로 네임스페이스였는데,
DAO에서는 내가 어떤 매퍼를 쓸 것인지를 정해주어야한다.
두번째로 짚고 넘어가야할건 마찬가지로 String 타입으로 선언된 queryId 라는 놈인데
얘는 아까 매퍼에서 각 쿼리의 ID를 뜻한다.
사실 반드시 이 양식대로 사용할 필요는 없다.
그냥 변수로 안만들고
sqlSessionTemplate.selectList("love.mappers.index.connectionTest") 이런 식으로 적어주어도 된다.
근데 보기 안좋으니까 돋보기 쓸거 아니면 보기에 나와있는대로 하자
여기까지 하고 나서 톰캣을 다시 실행해보자.
에러없이 톰캣이 올라왔다면, localhost:8080/ 에 접속해보자.
우리가 아까 넣었던 더미데이터가 반갑게 마주해준다면
아~주 기본적인 스프링부트 + DB연결 환경세팅 끝!
'원앙둥지' 카테고리의 다른 글
윤선이와 블로그 만들기_5. 글 조회와 되돌아오기 처리 (0) | 2021.02.02 |
---|---|
윤선이와 블로그 만들기_4. 글 목록 만들기 (0) | 2021.02.01 |
LUVLOG_S1 (0) | 2020.12.27 |
윤선이와 블로그 만들기_3. 에디터(Toast UI Editor) 붙이기 (2) | 2020.11.21 |
윤선이와 블로그 만들기_2. 리액트(React) 붙이기 (0) | 2020.11.11 |