본문 바로가기

개발 회고

[솔데스크] 풀스택 과정 12주-1 총50회차 ‘회고’ | 스프링(0219)

[서론]

○● 0219 새로웠던 것
1. TestDto에서 

//롬복 라이브러리가 아래 게터함수, 세터함수를 자동으로 만들어줌. @Data 라고 붙이면.

//게터, 게터함수, 게터메소드
// public Long getNo() {
// return no;
// }

//세터
// public void setNo(Long no) {
// this.no = no;
// }

//str_data 쪽 게터,세터도 ...

 

@Data 어노테이션을 통해 Lombok 라이브러리를 사용하고 있습니다. 이를 통해 롬복은 자동으로 게터(Getter), 세터(Setter), toString(), equals(), hashCode() 등의 메서드를 생성해줌

 

2. 프로젝트에서 mapper와 resource에서 파일이름 동일하게 만들어야함(xml파일)

 

3. 일일이 db연결안해도 됨, 스프링이 연결해줌, db연결되는 걸 도와주는 역할을 하는 파일-> TestMapper.xml

TestMapper.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">
<mapper namespace="com.peisia.mapper.TestMapper">
	<select id="getData1" resultType="com.peisia.spring.dto.TestDto">
		SELECT no,str_data from tbl_test where no = 1
	</select>
	<select id="getData2" resultType="com.peisia.spring.dto.TestDto">
		SELECT * from tbl_test where no = 2
	</select>
	<select id="getData3" resultType="com.peisia.spring.dto.TestDto">
		SELECT * from tbl_test where no = 3
	</select>
	<select id="getData4" resultType="com.peisia.spring.dto.TestDto">
		SELECT * from tbl_test where no = 4
	</select>
</mapper>

 

[본론]
○● 0219  내용 정리
 
● 스프링

 

○○○●●● 스프링이란

 

 

자바 엔터프라이즈(기업)  급 웹 개발을 편하게 해주는 프레임워크.

스프링은 설정이 반임. https://12bme.tistory.com/157봄?

손반죽으로 붕어빵(jsp) 만들던 것을 붕어빵 틀 (프레임워크.fw) 을 써서 장사 제대로 하게되는 것임.

1.역사 .c "스프링은 2003년 Rod Johnson, 런던 기업인 Interface21의 전 소프트웨어 엔지니어가 처음으로 발표했습니다. 처음에는 Java Enterprise Edition (Java EE) 개발을 단순화하고 개발자가 엔터프라이즈 수준 응용 프로그램을 구축하는 것을 쉽게하려는 목적으로 설계되었습니다. 년이 흐를수록, 스프링은 현대적인, 확장 가능한, 고성능 응용 프로그램 개발을 위한 다양한 기능 및 모듈을 제공하는 포괄적인 프레임워크로 진화했습니다.

오늘날, 스프링은 가장 널리 사용되는 자바 프레임워크 중 하나이며, 큰 커뮤니티와 활발한 개발자가 있어 성장과 개발에 기여하고 있습니다. 프레임워크는 또한 Spring Boot 프레임워크 등 다른 오픈 소스 프로젝트의 개발을 영감으로하여 스프링으로 응용 프로그램 개발을"
2.어원? 참고?

1. 개발은 어디서함?
이클립스에 sts 설치해서 하거나, sts 전용툴(이클립스 커스텀한거)을 설치해서 하는데 우리는 후자를 세팅해서 쓸 것임.
🐈 . [1/n] . 이거 보고 세팅 시작하시오 [sts3설정] << 자바 및 jsp 때 할거 다해서 이건 패스하면 됨

2.  스프링 설정
🐤[1+2준비]🐤 🐈 . [2/n] . 위 세팅 끝나고 이 탭 보고 설정 하시오
스프링은 설정이 반이라는 말이 많을 만큼 실제로 책 보면 책 절반이 설정임. 잘 정리 해두었으니 이거 보고 세팅하면 됨.

3. 개발 - 1+2
🐤[1+2개발]🐤 🐈 . [3/n] . 이 탭 보고 1+2 개발 하시오.
개발이긴 하지만 이것도 반 쯤 설정임. 설정이라기 보단 세팅. 


4. 개발 - 방명록
🐤[방명록]🐤 🐈 . [4/n] . 이 탭 보고 방명록 개발 하시오.

 



0. 설정 하기 전에 현재 개발 환경이 아래 환경이여야 함
1. java 11 깔린 상태
2. sts3 가 설치 된 상태 설치 안됐으면 [sts3설치와설정] 참고하여 설치 및 세팅 먼저 하시오 ㅇㅅㅇ
3. 톰캣9 설치된 상태 톰캣 설치는 톰캣 공식홈 내 깃 설치 가이드 참고하여 설치 및 세팅 먼저 하시오 ㅇㅅㅇ
4. mysql 이나 오라클 깔린 상태
5. 롬복 lib 깔린 상태 롬복 안깔렸으면 아래 보고 설치 하시오

*. 롬복 lib 설치 2023.07.24 기준

사이트이동: https://projectlombok.org/download

 

다운받기 Download 1.18.28 이 형식의 파일은 어쩌고.. 나와도 계속

다운 파일 챙겨놓기 lombok.jar d: 드라이브 등 경로 안복잡한곳에 우선 복사해두기

 




cmd 창에서 c 드라이브로 폴더 이동하기 (윈도우키 + r) - cmd 입력 - 콘솔창에서 - (d: 에 복사했다고 가정) 
학생분들 pc는 d가 없으니 c로..
참고 cmd 명령들:
c:  하면 c 드라이브로 이동함
cd .. 현재 보다 상위 폴더로 이동(한칸)
아니면 cd.. 여러번 해서 c:\ 까지 이동하기
dir 폴더 내 파일 확인
dir/w 폴더 내 파일 확인(넓게)


그 다음 이거입력: java -jar lombok.jar


고추 표시된 윈도우형 설치 화면이 뜨면 install/update 버튼을 눌러 설치하기
install successful 확인 후 quit install 하기
이때 IDE를 찾을 수 없다고 팝업 뜨면 수동으로 sts3 경로 설정해주고 설치해야됨.
( i can't find any IDEs on your computer. 팝업 뜨면.. )
팝업은 확인 눌러서 끄고 아래 그대로 진행하면 됨

설치 창에서 specify location 하고 sts3 경로 가서 ( sts.exe 있는 경로 까지 가야 됨 ) select 하면 이제 목록에 추가된다. 
이상태에서 install 하면 끝.



*. 롬복 lib 설치확인
설치 확인 1 : (sts3 경우)

D:\00_sungmo\12_spring_sts3\sts-bundle\sts-3.9.18.RELEASE\lombok.jar 여기 가서 lombok.jar 잘 있는지 확인

설치 확인 2 : (sts3 경우)
sts3 설치 폴더의 sts3.ini 도 열어서 확인-맨 밑에 이거 삽입 되었는지 확인:

-javaagent:D:\00_sungmo\12_spring_sts3\sts-bundle\sts-3.9.18.RELEASE\lombok.jar

* 경고 * 롬복 설치 후 sts3 껏다 켜야함.
* 경고 * 바로가기도 다시 만들어야됨. (단축 명령 해놓은거)



1. 파일 준비하기:
오라클 경우: ojdbc8.jar mysql 경우: mysql-connector-java-8.0.33
<< 디비 라이브러리 파일 준비해두시라는거
2. 설정 시작
1. 새 PJ 생성 생성 시 오류 case: "Could not initialize class 
com.thoughtworks.xstream.converters.collections.PropertiesConverter"
ctrl + n 하고 leg 검색해서 spring 레거시 프로젝트 고르고 https://kaey.tistory.com/169?category=857147
이름 정해주고 자바 재설치로 해결한 케이스도 있었음
PJ명: Mi << 처음 연습 시 pj 명과 패키지는 아래 이름으로 고정해서 진행하세요.
( 설정 등에서 패키지명을 틀려서 오류내는 경우가 많아서 그럼 )

중간에-템플릿츠-spring MVC 프로젝트 선택 - next



* 2024.02.18 기준: mvc 프로젝트 목록이 안나오는 현상이 있음. 
(sts3 옛날 거 다 받아도 인터넷 검색에 나온 방법 다해봐도 이제 동일하게 안되는 것으로 보임.)
(구 이클립스 2019같은거 받아서 sts 따로 설치하는것도 안됨)
mvc 템플릿 설정을 서버에서 받아오는거 같은데 이게 이제 지원이 끝난것으로 추측됨..  todo.. deprecated 이야기..

>> 대체: 구성된 pj를 import 받아서 pj 명이나 패키지를 수정해서 개발하겠음

mvc템플릿안떠서올린거(헬로월드)Mi.zip 을 받아서 이 아래 나오는 내용들을 실행하는 형식으로 진행예정
https://github.com/kittycaravan/lecture/blob/main/spring/Mi/%5Bmvc%ED%85%9C%ED%94%8C%EB%A6%BF%EC%95%88%EB%96%A0%EC%84%9C%EC%98%AC%EB%A6%B0%EA%B1%B0(%ED%97%AC%EB%A1%9C%EC%9B%94%EB%93%9C)%5D/Mi.zip

받은 pj 에러 시: (롬복 안깔아서 그럴 것임)
깔고 나서도 에러 상태인데 
pj - 우클 - maven - update pj  하면 해결 됨-> 나도 에러 떴었는데 하니까 해결됨

please specify the top-level package : 패키지: cohttp://m.peisia.spring.mi
(패키지명 입력)

2. pom.xml 설정 << PJ 루트폴더 바로 아래에 있음
. 이게 뭐하는거 ??? gradle maven
spring 프로젝트에서는 라이브러리들을 < 메이븐 > 이라는 방식으로 추가함.
라이브러리를 기존 방식이 아닌 pom.xml 같은 특정 설정문서에 메이븐에서 요구하는
형식 (태그식) 으로 해당 라이브러리의 이름, 버전, 옵션 등을 표기하면
설정파일 작성 완료시 (또는 pj 마우스 우클릭 후 메이븐 업데이트 처리 시)
편하게 해당 라이브러리를 다운 및 연동처리하게 된다.



. 2-1. 버전 수정하기 >>

1. 자바 버전 변경:
<java-version>1.6</java-version> << 이 부분을 찾아서. 11행쯤 있음. ctrl + shift + c ( 주석 단축 키 )
<!-- <java-version>1.6</java-version> --> << 주석치고 ( 혹시 몰라서. 이전 내용으로 돌리거나, 수정 여부를 티나게 하기 위한 용도임 )
<java-version>11</java-version><!-- 내가 버전수정(1/7) --> ( 자바 11 인 경우 )

<java-version>1.8</java-version><!-- 내가 버전수정(1/7) --> ( 자바 8 인 경우 ) <!-- 내가 버전수정(1/n) -->

2. 스프링 버전 변경:
<org.springframework-version>3.1.1.RELEASE</org.springframework-version>
<< 이 부분을 찾아서. 12행쯤 있음. ctrl + shift + c ( 주석 단축 키 )

<!-- <org.springframework-version>3.1.1.RELEASE</org.springframework-version>  --> << 주석치고

<org.springframework-version>5.0.7.RELEASE</org.springframework-version><!-- 내가 버전수정(2/7) --> << 이걸로 집어넣자

*주의* 3하고 4. maven-compiler-plugin 자바 버전 변경

<artifactId>maven-compiler-plugin</artifactId>
<< 이 부분을 찾아서. 141 행쯤 있음. ( 복사해서 ctrl + f 로 검색하기 )

<!-- <source>1.6</source>  --> << 세칸 아래쯤에 이것들 주석치기
<!-- <target>1.6</target>  --> << 세칸 아래쯤에 이것들 주석치기

자바 11 경우
<source>11</source><!-- 내가 버전수정(3/7) --> << 이걸로 집어넣자
<target>11</target><!-- 내가 버전수정(4/7) --> << 이걸로 집어넣자

자바 8 경우
<source>1.8</source><!-- 내가 버전수정(3/7) --> << 이걸로 집어넣자
<target>1.8</target><!-- 내가 버전수정(4/7) --> << 이걸로 집어넣자

5. lib 버전 변경 - jUnit
<version>4.7</version>
<< 이 부분을 찾아서. 119 행쯤 있음. ( 복사해서 ctrl + f 로 검색하기 )

<!-- <version>4.7</version> --> << 주석 쳐버리고

<version>4.12</version><!-- 내가 버전수정(5/7) --> << 이걸로 집어넣자

*주의* 6. (6-1, 6-2 두군데임. 주의. ) lib 버전 변경 - servlet
<artifactId>servlet-api</artifactId>
<< 이 부분을 찾아서. 99 행쯤 있음. ( 복사해서 ctrl + f 로 검색하기 )

<!-- <artifactId>servlet-api</artifactId> --> << 주석 쳐버리고

<artifactId>javax.servlet-api</artifactId><!-- 내가 버전수정(6-1/7) -->
<< 이걸로 집어넣고... 그 바로 한칸 아래에

<version>2.5</version> << 이걸

<!-- <version>2.5</version> --> << 주석 쳐버리고

<version>3.1.0</version><!-- 내가 버전수정(6-2/7) -->
<< 이걸로 집어넣자

7. lib 버전 변경 - log4j
<version>1.2.15</version>
<< 이 부분을 찾아서. 67 행쯤 있음. ( 복사해서 ctrl + f 로 검색하기 )

<!--  <version>1.2.15</version>  --> << 주석 쳐버리고

<version>1.2.17</version><!-- 내가 버전수정(7/7) -->
<< 이걸로 집어넣자

 

Download

 

projectlombok.org



. 2-2. 라이브러리 추가하기 >>
아래 1~8 추가인데 그냥 이 메모로 한방에 다 추가하겠음

</dependencies>
<build>
<< 이 부분을 찾아서. 130 행쯤 있음.


<< 여기 </dependencies> 윗쪽에 
</dependencies> ( 디펜던시즈 복수형 태그안에 디펜던시로 하나한 들어가는식임 )
( 밖에 있으면 안됨 )

		<!-- ////////////////// 내가 추가 (시작) ////////////////////// -->
		<!-- 내가 추가(1/8) -->	
		<!-- spring-tx -->	
		<dependency>	
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		<!-- 내가 추가(2/8) -->	
		<!-- spring-jdbc -->	
		<dependency>	
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		
		<!-- 내가 추가(3/8) --> 
		<!-- spring-test -->	
		<dependency>	
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		<!-- 내가 추가(4/8) -->
		<!-- 커넥션 풀 - 아파치 - Commons DBCP 2.8.0 -->
		<dependency>	
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-dbcp2</artifactId>
			<version>2.8.0</version>
		</dependency>
		<!-- 내가 추가(5/8) -->
		<!-- mybatis -->	
		<dependency>	
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.4.6</version>
		</dependency>
		<!-- 내가 추가(6/8) -->	
		<!-- mybatis - spring -->	
		<dependency>	
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.3.2</version>
		</dependency>
		<!-- 내가 추가(7/8) -->	
		<!-- log4jdbc-log4j2 -->	
		<dependency>	
			<groupId>org.bgee.log4jdbc-log4j2</groupId>
			<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
			<version>1.16</version>
		</dependency>
		<!-- 내가 추가(8/8) -->
		<!-- 롬복 -->		
		<dependency>		
			<groupId>org.projectlombok</groupId>	
			<artifactId>lombok</artifactId>	
			<version>1.18.0</version>	
			<scope>provided</scope>	
		</dependency>
		<!-- ////////////////// 내가 추가 (끝) ////////////////////// -->


<< 1~8까지 전부 추가한 메모 >> 설정 태그 메모
<< 이거 다 복붙하기. 
구분 좀 가게 다른 기존 디펜던시에서 엔터 좀 낭낭하게 치고 복붙하기.


1 lib 추가 spring-tx </dependencies> 위에 추가하시오. <build> 태그 안에 하지 말고. <!-- 내가 추가(1/n) -->
2 spring-jdbc
3 spring-test
4 lib 추가(mybatis) Apache Commons DBCP 2
5 mybatis
6 mybatis-spring
7 log4jdbc
8 lib 추가(롬복) lombok << 1~8까지 전부 추가한 메모 << 이걸로 한방에 복붙하기

. 2-3. 메이븐 업데이트해서 라이브러리 불러오게 하기

PJ 우클릭 - maven -  Update PJ
<< 새로고침 같은것임. 이거 한번 해주세요.
우하단에 보면 프로그레스 바 살짝 돔. 조금 기다려야함.

 


○○○●●● interface 설명

 

public abstract class Father{-> class 대신 interface로 바꿈,abstract빼고

//추상 함수(메소드)
abstract protected void kimchi();
//참고로 abstract를 앞에 붙여 넣어야 함-pm 4:09

public void kimchi();

public void x();

public void y();

}

--interface는 추상 함수들만 가질 수 있다.


public class Son implements Father{-> implements는 구현하다는 뜻

}

xml로 작성한 내용을 class로 바꿔서 변환해줌

interface는 객체를 생성할 수 없음

3. PJ 실행


PJ 우클릭 - 런온서버

<< 하고나서 웹 페이지에 아래 처럼 시간 같은거 찍히면 정상임.
깨지는건 무시.

"Hello world!
The time on the server is 2023? 7? 23? ?? 2? 13? 49? KST."




404 에러 및 콘솔 창 확인 시 아래 에러 확인되면
SEVERE: 클래스 [org.springframework.web.context.ContextLoaderListener]의 애플리케이션 리스너를 설정하는 중 오류 발생
java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener
at java.base/java.lang.ClassLoader.defineClass1(Native Method)

<< 톰캣을 10은 쓴경우 그럼. 9로 설치하고 9로 서버를 잡아주면 됨.

톰캣 공식홈 내 깃 설치 가이드

>> 여기까지 이상 없이 잘 됐으면 일단 한 고비는 넘긴 것임.

4. pj에 db 라이브러리( jdbc ) 연결하기 참고: 메이븐 방식으로 이 라이브러리를 추가하는법 
( 메모 메이븐 추가하면 됨. 따로 아래 3번 같은거 안해도 되고. )
( 일단은 아래 소개한 방법으로 해보세요. 이런 방법도 있다는거 학습용. )

mysql-connector-j-8.0.33.jar << mysql 기준 이 파일을 pj에 라이브러리 연동 하라는 것임.

 

+jdbc

JDBC는 "Java Database Connectivity"의 약자로, 자바 언어를 사용하여 데이터베이스와 연결하고 상호작용하기 위한 자바의 표준 API(응용 프로그래밍 인터페이스)입니다


-1. db 라이브러리 파일은 이전 PJ꺼 복사 해와서 PJ 루트에 복붙 해두고..
<< 위치는 상관없으나 아래에서 찾기 편하게 하려고. pj 챙길때 같이 챙겨지게.
복붙했다고 연동되진 않음. 주의.



-2.PJ 에 lib 추가


PJ - 우클릭 - build path - configure Build path - (팝업) - 왼쪽 java build path 선택
 - 중간위 탭 libraries - 가운데 Classpath 선택 - 우측 add jars - pj 고르고 > 눌러 열고
lib 고르고 - ok - 하고 나와서 apply and close. 끝.



- (주의) 3.deployment assembly 항목에도 위 라이브러리를 추가 << 이거 빠뜨려서 에러 많이 냄.

PJ - 우클릭 - build path - configure Build path - (팝업) - 
왼쪽 deployment assembly 선택 - 우측 add
(팝업) - java build path entries 선택 - next - 
위 디비 라이브러리 선택 - finish - apply and close

mysql: mysql-connector-java-8.0.30 오라클: ojdbc8.jar 선택 - finish - apply and close

<< 이 설정은 PJ 를 war 파일로 말을 때 이것도 같이 들어가게 설정하는것임. ( 안하면 에러남 )
이걸 안하고 아래의 유닛 테스트 등을 할 때는 성공하지만 정식 가동 시 에러가 나게 됨.

- 4. 유닛 test

--> 1. 클래스 추가, 코딩하기
<< 주의. src/ 일반 경로가 아니라 src/test 경로임.

pj - src/test/java/패키지경로 ex. cohttp://m.peisia.spring
이 패키지 아래에 JDBCTests 클래스 추가 하고 아래 메모 내용으로 코딩 넣기

mysql 경우: JDBCTests 오라클 경우: JDBCTests
ㄴ자기 정보로 바꾸셈

fail(e.getMessage()); 이거 작성할 때 fail 에 빨간줄 가는데 자동 임포트가 안될 것임.
수동으로 임포트 해야함: import static org.junit.Assert.fail;

log 변수와 onMethod_ 에 빨간줄 가있는 경우 롬복 설치 안되서 그럼
롬복 설치하고 ( sts3 설치 방법 시트에 있는거 참고해서 잘 설치 )
sts3.exe 다시 실행하고 (바로가기는 굳이 새로 안 빼도 되는것 같음. 와보면 log변수 파란색으로 바껴있음. 아직 빨간줄은 가 있음 ) project clean 하면 빨간줄들 사라짐. 끝. 해결함. 내가 직접 해결한거 ㅇㅅㅇ

<< sts3 롬복 위에서 설치 해놓고 나서 한번 껏다 켜야함. 
(안켜서 생긴 에러였음. 롬복 라이브러리 미인식으로 추정)

* 코딩 시 주의: DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:ORCL", 맨뒤 ORCL 이 우리가 만든 DB 명. 책대로 했으면 ORCL
"root", 이건 ID 다르게 줬으면 변경하시고..
mysql>> JDBCTests "book_ex" )){ 이건 PW 다르게 줬으면 변경하시고..

--> 2. 이 테스트 클래스 JUnit Test 실행
JDBCTests 이 클래스 파일 우클릭 - Run as - JUnit Test 단축키 : alt + shift + x 하고 t

--> 3. 확인 ( 아래 로그 확인 )


성공하면 이 로그가 나옴: mysql 경우 : INFO : com.peisia.springhelloworld.JDBCTests - cohttp://m.mysql.cj.jdbc.ConnectionImpl@7a1a14a4

oracle 경우 : INFO : com.peisia.quizspring001.JDBCTests - oracle.jdbc.driver.T4CConnection@4973813a
( Connection 객체 출력 )
sts3로 하다가 log 변수 에러로(아래 해결법있음) sysout 으로 대체하고 정상 확인 함. 
@RunWith 와 @Log4j 에 빨간줄 에러 날 때: 1. @RunWith 에 마우스 올리고 fix에서 add Unit 4 library.... 를 해주기 (다른 곳 에러라인 마우스 올려서 add Unit 4..로 해결 case도 있음)
2. pom.xml에서 log4 dependency 태그 중 scope runtime 태그를 주석 쳐놓기. ( 91행쯤 있음 )
sts3 경우 JDBCTest 추가하는데 log 변수에 빨간줄 가고 log cannot be resolved 라고 떠 있을 때 위에 2번 처리하고, sts3 재실행 후 (또는 바로가기 다시 만들고<이건 안해도 잘 됐었음>) pj clean 후 정상 확인함. (log 가 파란색으로 바뀜)

<< 디비 라이브러리 연동은 잘 되는구나.. 라고 확인하는 과정임.

 

[결론]
 
* 스프링 기초 강의 수강

 

*작업파일


 0219
1) 스프링 기초