스프링부트에서 예전처럼 jstl을 사용하기 위해 pom.xml 파일에 dependency를 설정합니다.

 

               <dependency>
                       <groupId>javax.servlet</groupId>
                       <artifactId>jstl</artifactId>
                       <version>1.2</version>
               </dependency>

 

이게 기존에 사용하던 jstl 내용인데 Spring Boot 3.0부터는 오류가 발생 합니다.

 

웹 브라우저에서는 [Whitelabel Error Page]와 함께 하단에 status=500 오류가 나타납니다.

 

 

 

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Thu Feb 15 09:19:28 KST 2024
There was an unexpected error (type=Internal Server Error, status=500).
 

 

 

서버 로그에서는 Servlet.service() for servlet [jsp] threw exception 오류가 발생합니다.

 

 

 

2024-02-15T09:19:27.884+09:00  INFO ---[nio-8080-exec-1]o.a.c.c.C.[Tomcat].[localhost].[/]      : Initializing Spring DispatcherServlet 'dispatcherServlet'

2024-02-15T09:19:27.884+09:00  INFO ---[nio-8080-exec-1]o.s.web.servlet.DispatcherServlet       : Initializing Servlet 'dispatcherServlet'

2024-02-15T09:19:27.886+09:00  INFO ---[nio-8080-exec-1]o.s.web.servlet.DispatcherServlet       : Completed initialization in 2 ms

2024-02-15T09:19:28.149+09:00 ERROR ---[nio-8080-exec-1]o.a.c.c.C.[.[localhost].[/].[jsp]       : Servlet.service() for servlet [jsp] threw exception

 

java.lang.ClassNotFoundException: javax.servlet.jsp.tagext.TagLibraryValidator

        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]

        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]

        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[na:na]

        at java.base/java.lang.ClassLoader.defineClass1(Native Method) ~[na:na]

        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017) ~[na:na]

 

 

지금까지 잘 사용하던 jstl dependency라 잘못 적용한 내용은 없지만 Spring Boot 버전이 맞지 않아 발생하는 오류입니다.

 

기존 jstl 1.2 설정은 Spring Boot 3.0부터 지원을 하지 않으므로 가능하면 다른 해결방법을 찾기 위해 노력하지 말고 다른 dependency를 설정해 주면 됩니다.

 

 

               <dependency>

                       <groupId>jakarta.servlet</groupId>

                       <artifactId>jakarta.servlet-api</artifactId>

                       <version>6.0.0</version>

                       <scope>provided</scope>

               </dependency>

              

               <dependency>

                       <groupId>jakarta.servlet.jsp.jstl</groupId>

                       <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>

                       <version>3.0.0</version>

               </dependency>

                             

               <dependency>

                       <groupId>org.glassfish.web</groupId>

                       <artifactId>jakarta.servlet.jsp.jstl</artifactId>

                       <version>3.0.1</version>

               </dependency>

 

 

이렇게 수정된 내용으로 pom.xml에 추가를 하고 예전처럼 Controller를 작성해서

 

@Controller

public class TestController {

 

        @RequestMapping("/test/cal")

        public String cal() throws Exception {

               return "test/cal";

        }

}

 

 

실행을 하면 아무런 일 없이 cal.jsp를 호출하고 결과를 볼 수 있습니다.

 

 

- copy coding -

 

 

로컬 컴퓨터에서 python을 이용한 개발을 하려면 대부분 아나콘다(Anaconda)를 설치하고 필요한 라이브러리를 또 설치하고 설정 값이 틀려서 지우고 다시 설치하는 반복작업들이 귀찮았는데 로컬 컴퓨터가 아닌 인터넷상에서 기본적인 라이브러리는 설치가 되어있고 필요한 라이브러리도 쉽게 설치해 사용할 수 있는 colab이 있다는건 알았지만 눈팅만 하다가 한번 사용을 해보았습니다.

너무 종속된다는 느낌이 들지만 초보자들에게는 쉽게 접근 가능하고 코딩에만 집중할 수 있어서 좋을것 같습니다.

 

간단한 사용방법을 알아보도록 하겠습니다.

colabgoogle에서 인터넷으로 제공되는 것으로 구글드라이브가 있어야 사용 가능합니다.

이 말은 구글에 계정이 있어야 한다는 뜻이고 크롬에서 구글에 로그인을 한 후 google drive를 검색합니다.

 

 

검색된 결과중 [Google Drive] 을 찾아 클릭하면 로그인이 된 상태인 경우 바로 드라이브 페이지로 이동 합니다.

 

또는 로그인 상태라면 우측 상단 더보기 아이콘을 클릭하여

 

 

 

[드라이브] 아이콘을 클릭 합니다.

 

 

 

colab을 설치하지 않았기 때문에 우측에 아무것도 보이지 않습니다.

colab을 설치하기 위해 좌측 상단에 있는 [새로 만들기]를 클릭 합니다.

 

 

 

여기에도 colab 관련 메뉴가 없다는건 아직 한번도 사용해보지 않았다는것입니다.

팝업 메뉴에서 하단의 [더보기]를 클릭하고 여기에서 colab이 보이지 않는다면 다시 [연결할 앱 더보기]를 클릭 합니다.

 

 

 

팝업 창에서 [Colaboratory]를 찾아 선택해 줍니다.

이 팝업은 colabGoogle Drive에 설치해서 메뉴에 추가하는 작업을 진행하는 독립된 팝업 창 입니다.

 

 

 

간단한 설명 페이지로 넘어가는데 우측 상단 파란색 [설치] 버튼을 클릭하면 구글 드라이브에 설치가 됩니다.

 

 

 

[계속]을 클릭해서 설치를 진행 합니다.

 

 

 

설치할 계정을 선택 합니다.

지금 로그인한 계정이 아닌 다른 계정에 설치하려면 [다른 계정 사용]을 클릭해서 설치할 계정을 선택하면 됩니다.

 

 

 

선택한 구글 계정의 Google Drive에 연결을 하기위해 [확인] 버튼을 클릭하고 [완료] 버튼을 클릭해 줍니다.

 

 

 

설치가 완료 되었으니 팝업 창은 우측 [닫기] 버튼을 이용하여 닫아주고 Google Drive를 새로고침하고 메뉴를 다시 시작해 봅니다.

 

 

[새로 만들기]  >  [더보기]  >  [Google Colaboratory]

 

 

이제 메뉴에 colab이 설치 되었네요. [Google Colaboratory]를 클릭하면

잠시후 생성이 완료되고 화면이 전환 됩니다.

 

 

 

주피터 노트북(Jupyter Notebook)과 비슷한 형태의 창이 나옵니다.

사용법도 메뉴가 조금 다를뿐 비슷합니다.

현재 아무것도 설치하지 않았지만 기본적으로 python이 설치되어 있으니 간단히 출력문을 실행해 봅니다.

 

 

 

[+코드]를 클릭 한 후 print(“test”)를 입력하고 검은원 화살표 이미지를 클릭합니다.

잘 되는군요. 

 

 

 

작업을 저장하고 나면 다음부터는 구글 드라이브에 저장된 작업이 나타납니다.

시간 날때마다 오랜만에 python을 공부해 봐야겠습니다.

 

- copy coding -

 

코딩할때 tab을 사용하거나 space를 사용하거나 한가지만 잘 사용하면 되는데 사람에 따라 두가지를 혼용하여 사용하면서 문제가 발생하게 됩니다.

특히 공통을 적용하거나 한번에 모든 소스를 수정할 때에 가끔 어려움을 격어야 하기도 하고 문서 작업할 때 소스를 복사하면 들쑥날쑥해서 한번더 손을 대야하는 경우가 발생 합니다.

이런 상황을 방지하기 위해서는 tab 보다는 space를 사용하는게 좋은데 eclipse는 기본적으로 tab을 적용하게 되어 있어서 space를 사용하려면 한번 설정을 해줘야 합니다.

 

설정 방법은 파일 종류별로 하나씩 설정을 할 수도 있고

한번에 모든 파일에 적용되게 할 수도 있으며

기존에 작업한 파일들도 한방에 space로 전부 변경할 수도 있습니다.

하나씩 알아보도록 하겠습니다.

 

 

 

I. file 종류별 설정

 

 

1. Preferences 설정 창 열기

 

Eclipse 또는 STS(Spring boot)를 열고 메뉴에서

Windows > Preferences를 선택 하면 설정 창이 오픈 됩니다.

 

 

 

 

2. tab 검색

 

Preferences 창의 “type filter text” 부분에 설정을 위헤 tab을 입력해 검색을 진행 합니다.

 

 

좌측에 탭을 설정해야할 파일 종류별 목록들이 다 보이는 군요.  차례대로 하나씩 설정을 진행 합니다.

스페이스로 변경해야 하는 파일 종류만 선택해서 작업을 진행 하면 됩니다.

CSS는 디자이너랑 싸우기 싫은뎅…. 걍 넘어가야지….

 

 

3. java 파일 설정

 

파일 확장자가 java인 파일들의 tab 간격을 space로 변경하도록 합니다.

Java > Code Style > Formatter를 선택 하고

 

 

 

우측에서 [New] 버튼을 선택 하면 새로운 창이 나오는데

 

 

 

Profile name에 구분하기 좋은 임의의 명칭을 입력해 줍니다.   저는 java space로 입력 했습니다.

name 입력을 하였으면 [OK]버튼을 클릭 합니다.

 

 

이제 실제 설정 창이 나타나는데

Indentation > Tab policy에서 Tabs only로 선택되어 있는데 이것을 Spaces only로 변경하고

 

 

 

하단 우측의 [OK] 또는 [Apply] 버튼을 클릭 하여 설정화면을 닫습니다.

 

 

 

다시 Preferences 창으로 돌아와 보면 FormatterActive profilejava space로 변경이 되었습니다.  만약 변경이 안되었다면 클릭해서 방금 수정한 java space를 선택하고 우측 하단 [Apply] 버튼을 클릭해서 설정이 반영되도록 합니다.

java만 설정하려는 거라면 [Apply and Close] 버튼을 클릭하여 Preferences 창을 닫으면 됩니다.

 

 

 

4. JavaScript 파일 설정

 

JavaScript 파일도 java 설정 방법과 동일하게 좌측 메뉴에서 Formatter를 선택하고

 

 

우측에서 [New] 버튼을 클릭해서 이름 설정 창을 오픈 합니다.

 

 

 

Profile name에 기억하기 좋은 이름을 입력하고 [OK] 버튼을 클릭 클릭하여 설정 창을 오픈 합니다.

 

 

 

설정 창 Indentation 탭에서 Spaces only를 선택하고 우측 하단의 [OK] 버튼을 클릭 합니다.

 

 

 

다시 Preference 창으로 돌아와 Active profile에 방금 설정한 이름으로 변경이 되었는지 확인 하고 우측 하단의 [Apply] 버튼을 클릭해서 설정을 반영 합니다.

 

 

 

5. css 파일 설정

 

 

css 파일 설정은 위에서 했던 설정 방법과는 조금 다르게 진행 되는데 좌측에서 Editor 메뉴를 선택합니다.

 

 

 

그리고 우측에서 Indent using spaces를 선택 하고 탭 사이즈도 알맞게 변경한 후에 [Apply] 버튼을 클릭해서 설정을 반영 합니다.

 

 

6. html 파일 설정

 

htmlcss 파일 설정과 동일한 방법으로 좌측에서 Editor 를 선택 하고

 

 

 

우측에서 Indent using spaces를 선택 하고 탭 사이즈도 알맞게 변경한 후에 [Apply] 버튼을 클릭해서 설정을 반영 합니다.

 

 

7. xml 파일 설정

 

xml 파일도 Editor를 선택 하고

 

 

 

우측에서 Indent using spaces를 선택 하고 탭 사이즈도 알맞게 변경한 후에 [Apply] 버튼을 클릭해서 설정을 반영 합니다.

 

 

이렇게 해서 tabspace로 변경이 필요한 파일 종류별로 설정하는 방법을 알아 보았습니다.

 

 

 

II. 모든 파일 설정 변경 방법

 

이번에는 각각의 파일 종류와 관계 없이 프로젝트에 포함된 모든 파일들에 대해 tabspace로 한번에 변경하는 벙법에 대해 알아봅니다.

 

 

1. Preferences 창 열기

 

설정 창을 오픈하는 방법은 위에서 사용한 방법과 동일 합니다.

 

Eclipse 또는 STS를 열고 메뉴에서

Windows > Preferences를 선택 합니다.

 

 

 

2. tab 검색

 

Preferences 창의 “type filter text” 부분에 검색을 위헤 tab을 입력해 줍니다.

그리고 검색 결과에서 General >Editors > Text Editors를 선택 합니다.

 

 

 

우측에서 Insert spaces for tabs를 체크 하고 탭 간격(여기서는 4)을 입력해 줍니다.

설정이 완료되면 [Apply and Close] 버튼을 클릭 해서 설정을 반영 합니다.

모든 파일의 tab 간격을 space로 변경해야 한다면 정말 간단한 방법입니다.

 

 

 

III. space 설정 작업 반영하기

 

 

위에서 파일 종류별 설정 방법과 모든 파일에 대한 설정 방법에 대한 두가지 방법으로 tabspace로 설정하는 것을 알아보았습니다.

그런데 설정을 했다고 기존에 tab으로 된 부분이 space로 자동으로 변경되는 것이 아니고 tab으로 작업된 부분은 그냥 원래대로 tab으로 남아있고 새로 작업하는 부분부터 space가 적용됩니다.

그래서 기존에 작업해 놓은 파일들에 대한 수정을 해야 하는데 이걸 한번에 수정하는 방법입니다.

 

I번 방법대로 하나의 파일 종류만 선택한 경우는 해당 종류만 변경되고

II번 방법대로 전체 파일에 대해 선택한 경우에는 모든 파일이 변경 됩니다.

 

프로젝트에 마우스를 놓고 우측 버튼을 클릭 합니다.

 

 

 

Source > Format을 클릭해 줍니다.

 

끝입니다.

모두 수정 되었습니다.

 

 

 

IV. 수정사항 확인

 

지금까지 여러 방법으로 설정을 해 보았는데 실제로 tabspace로 변경이 되는지 확인해 보도록 하겠습니다.

설정을 통해 space tab이 기호로 표기되어 잘 보이도록 합니다.

 

상단메뉴에서

Window > Preference를 선택 하여 Preferences 팝업 창을 오픈하고

 

 

 

General > Editors > Text Editors를 선택 합니다.

 

우측에서 Show whitespace characters를 체크하고 하단에 있는 [Apply and Close] 버튼을 클릭 합니다

 

 

파일 하나를 열어보면 tabspace()가 특수 기호로 보입니다.

1011번 라인은 java 파일에 대해 space를 적용하고 탭을 사용한 경우 getId()에 탭 대신 공백이 반영된 모습입니다.

보다시피 기존의 tab은 변함이 없고 신규로 작업하는 경우에만 tabspace로 나타납니다.

 

이런경우 프로젝트 전체에 대해 설정을 반영하여 한번에 변경하는 방법을 사용해 보겠습니다.

 

위에서 III번에 해당하는 작업을 실행 합니다.(Project에 우측 마우스 클릭 > Source > Format 선택)

 

 

탭이 모두 스페이스로 수정 된것을 확인할 수 있습니다.

 

수정된 space를 다시 tab으로 되돌리고 싶으면 Ctrl + Z를 클릭하면 됩니다.

 

 

여기서 [OK] 버튼을 클릭하면 전체 수정 반영 이전으로 돌아갑니다.

 

필요한 부분만 잘 적용해서 사용하세요.

 

- copy coding -

 

같은 컴퓨터 인데도 STS3은 이상이 없는데 버전 4를 사용하려면 오류가 발생해서 프로젝트를 생성하지 못하는 상황이 발생해서 해결한 방법을 기록 합니다.

 

이런 경우 https://start.spring.io/에서 프로젝트를 생성하고 다시 STS4에서 import해서 사용하는 방법도 있지만 조금의 시간을 들이면 쉽게 해결이 됩니다.

 

인증이 안되었다고 하는것으로 인증서를 PC에 등록해서 사용하면 됩니다.

 

인증서를 다운받기 위해 크롬을 이용해 사이트에 접속 합니다.

 

https://start.spring.io/

 

 

그리고 URL 앞에 있는 자물쇠 모양의 아이콘을 클릭합니다.

 

 

크롬 버전에 따라 팝업메뉴가 위 그림과 다르게 보일 수 있지만 의미가 비슷한것을 클릭 합니다.

진행 하다가 아닌것 같으면 다시 처음으로 돌아와 다른 메뉴를 선택 하면 됩니다.

 

 

인증서 관련 메뉴를 선택 합니다.

 

 

인증서 정보 창이 열렸습니다.

상단 탭에서 [자세히] 탭을 클릭 합니다.

 

 

인증서에 대한 설명이 나오고 버튼들도 보입니다. 저장해야 하니 [파일에 복사] 버튼을 클릭 합니다.

 

 

저장을 위한 인증서 내보내기 마법사 창이 나오면 [다음] 버튼을 클릭하고

 

 

DER로 인코딩된 바이너리 X.509가 기본으로 선택 되어있을 텐데 아니라면 선택을 하고 [다음] 버튼을 클릭 합니다.

 

 

인증서를 저장할 위치와 이름을 임의대로 입력하고 [저장] 버튼을 클릭 합니다.

 

 

저장 위치를 다시 확인하시고 다음에 사용해야 하니 가능하면 복사해 두세요.

[다음] 버튼을 클릭합니다.

 

 

[마침] 버튼을 클릭 해서 인증서를 저장 합니다.

 

 

인증서를 파일로 저장을 완료 했고 이제부터 PC에 등록해야 하는데 수작업으로 해야 합니다.

 

자바 설치 방법 및 위치가 대부분 다를텐데 bin 폴더로 이동을 합니다.

아니면 path가 걸려있어서 keytool 명령이 작동하면 그냥 사용해도 됩니다.

keytool 명령이 console에서 작동 하는것으로 설명 합니다.

 

command 창을 열고 다운받은 인증서를 등록하기 위해 아래와 같이 입력 합니다.

 

 

keytool -import -alias sts-key -keystore “C:\Program Files\Java\jre1.8.0_221\lib\security/cacerts” -storepass copycoding -file E:\project\spring.crt

 

-alias는 인증서를 등록한 이름이라고 생각하면 되고

-storepass는 인증서에 대한 비밀번호 입니다.  나중에 삭제할 일이 있으면 필요합니다.

-file은 인증서가 저장된 폴더와 파일명입니다.  좀전에 복사해셨으면 붙여넣기하면 됩니다.

 

이제 마지막으로 등록된 인증서를 STS에서 사용하기 위해 등록을 해야 합니다.

 

SpringToolsSuite4.ini 파일을 열고 아래 두줄을 추가 합니다.

 

-Djavax.net.ssl.trustStore=C:\Program Files\Java\jre1.8.0_221\lib\security\cacerts
-Djava.net.ssl.trustStorePassword=copycoding

 

인증서를 등록한 위치와 비밀번호를 적어주면 됩니다.

이제 다시 STS를 실행하면 프로젝트를 생성할 수 있습니다.

 

사용할 일이 있을지 모르겠지만 참고로 인증서 리스트와 삭제 명령어 입니다.

 

keytool -list -keystore “C:\Program Files\Java\jre1.8.0_221\lib\security/cacerts”

 

keytool -delete -alias sts-key -keystore “C:\Program Files\Java\jre1.8.0_221\lib\security/cacerts”

 

- copy coding -


1234···8

+ Recent posts