몇가지 테스트가 필요해 오랜만에 설치를 하려고 하니 기억이 나지 않는군요.

전자정부프레임워크는 좀 무겁고 여러가지 기능을 모아놓아서 복잡하긴 하지만 기본적으로 제공하는 프로젝트가 몇개 있어서 다운로드 받자마자 바로 사용할 수 있는 장점이 있습니다.

저는 모든 기능이 포함된 All in one 프로젝트 설치방법에 대해 하나씩 알아보겠습니다.

 

 

1. 전자정부프레임워크 다운로드 및 설치

 

전자정부프레임워크 포털 사이트에 접속을 합니다.

https://www.egovframe.go.kr/home/sub.do?menuNo=94

 

 

 

상단의 [다운로드] 메뉴를 클릭하고 [개발환경] 탭을 선택 합니다. 설치할 버전을 선택 하게되면 목록이 나오는데 설치하려는 상세 버전을 클릭하여 첨부파일을 다운로드 받아 적당한 위치에 압축을 풀어주면 설치가 완료됩니다.

 

 

2. 프로젝트 생성

 

처음에 설명한것 처럼 전자정부프레임워크는 기본적으로 제공되는 프로젝트가 여러개 있는데 모든 내용이 들어있는 프로젝트인 all-in-one을 설치 합니다.

 

 

압축을 풀어준 위치가 사용자마다 다르겠지만 eclipse 폴더에서 eclipse.exe를 실해합니다.

 

 

 

상단 메뉴에서 순서대로 메뉴를 선택 하여 템플릿 선택 창을 오픈합니다.

File > New > eGovFrame Template Project

 

 

팝업 창에서 설치하려는  Common All-in-one을 선택하고 [Next] 버튼을 클릭 합니다.

 

 

 

프로젝트 명(Project name)은 나중에 설정작업에 필요하므로 잘 기억하고 있어야 합니다.

저는 테스트만 할거라 별 의미 없이 AllProj 이렇게 정했습니다.

 

[Finish] 버튼을 누르면 프로젝트와 프로그램 소스가 생성됩니다.

 

 

3. 프로젝트 설정

 

프로젝트 설정은 DB와 프로젝트 명에 대한 작업이 대부분 입니다.

globals.properties 파일을 수정합니다.

/src/main/resources/egovframework/egovProps/globals.properties

#-----------------------------------------------------------------------
#
# globals.properties : 시스템
#
#-----------------------------------------------------------------------
# 1. key = value 구조입니다.
# 2. key값은 공백문자를 포함불가, value값은 공백문자를 가능
# 3. key값으로 한글을 사용불가, value값은 한글사용이 가능
# 4. 줄을 바꿀 필요가 있으면 '\' 라인의 끝에 추가(만약 '\'문자를 사용해야 하는 경우는 '\\' 사용)
# 5. Windows에서의 디렉토리 표시 : '\\' or '/' ('\' 사용하면 안됨)
# 6. Unix에서의 디렉토리 표시 : '/'
# 7. 주석문 처리는 #사용
# 8. value 뒤에 스페이스가 존재하는 경우 서블릿에서 참조할때는 에러발생할 있으므로 trim()하거나 마지막 공백없이 properties 값을 설정할것
#-----------------------------------------------------------------------
# 운영서버 타입(WINDOWS, UNIX)
Globals.OsType = WINDOWS
# DB서버 타입(mysql, oracle, altibase, tibero, cubrid, maria, postgres, goldilocks) - datasource sqlMap 파일 지정에 사용됨
Globals.DbType = mysql
 

 

Globals.OsType : 기본이 UNIX인데 자신의 운영체제에 맞게 변경합니다.

Globals.DbType : 사용하려는 DB에 맞게 하나를 선택 해서 기입합니다.

(mysql, oracle, altibase, tibero, cubrid, maria, postgres, goldilocks 중 선택)

 

조금 아래로 내려가서 DB 접속 정보를 기입합니다.

 

#mysql
Globals.mysql.DriverClassName=net.sf.log4jdbc.DriverSpy
Globals.mysql.Url=jdbc:log4jdbc:mysql://127.0.0.1:3306/com
Globals.mysql.UserName = com
Globals.mysql.Password = xz4fmrSdr1vGGl6UtwPLwA%3D%3D
#oracle
#Globals.oracle.DriverClassName=oracle.jdbc.driver.OracleDriver
#Globals.oracle.Url=jdbc:oracle:thin:@127.0.0.1:1521:xe
#Globals.oracle.UserName = com
#Globals.oracle.Password = xz4fmrSdr1vGGl6UtwPLwA%3D%3D
#altibase
#Globals.altibase.DriverClassName=Altibase.jdbc.driver.AltibaseDriver
#Globals.altibase.Url=jdbc:Altibase://127.0.0.1:20300/mydb?encoding=UTF-8
#Globals.altibase.UserName = com
#Globals.altibase.Password = xz4fmrSdr1vGGl6UtwPLwA%3D%3D
 

 

선택한 DB 이외에는 모두 주석처리를 합니다.

 

context-datasource.xml 파일은 다른 DB 정보에 대해 주석처리를 안해도 되는데

만일 비밀번호를 암호화하지 않고 사용하려면

<property name="password" value="#{egovEnvCryptoService.getPassword()}"/>

이 부분을

<property name="password" value="${Globals.maria.Password}"/>

이렇게 그냥 텍스트를 사용한다고 수정하면 됩니다.

 

 

DB에 테이블 및 데이터가 있어야 구동이 되므로 Script 폴더에서 설정한 DB에 맞는 스크립트를 이용하여 쿼리를 실행해줍니다.

 

 

이제 마지막으로 프로젝트 명을 수정해 줍니다.

처음 설치할 때 프로젝트 명을 잘 기억해 두라고 했는데 그걸 사용합니다.

기본적으로 egovframework-all-in-one 이렇게 설정 되어있으니 한번 검색을 해 봅니다.

 

 

검색 창을 열고 검색을 시작 합니다.

 

 

11개가 검출 되었습니다.  모두 수정하는건 아니고 설정이 필요한 부분만 수정하면 되므로

이렇게 4곳만 egovframework-all-in-one AllProj 으로 수정해 줍니다.

 

 

 

4. Web Server 설치

 

기존에 웹 서버가 설치되어 있다면 이 단계는 건너뛰면 됩니다.

처음에는 아무런 서버가 설치되어있지 않을 경우 Server 탭이 아래의 모습입니다.

 

 

파란 글씨를 클릭해서 창을 열어줍니다.

 

 

Apache를 확장해서 Tomcat v9.0을 선택 했습니다.

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

 

 

 

다른 곳에 웹서버가 설치되어 있어서 불러올 수도 있고 신규로 설치도 가능합니다.

여기서는 신규 설치로 [Download and Install...] 버튼을 클릭 합니다.

 

 

저작권관련 선택을 하고 [Finish] 버튼을 클릭 합니다.

 

 

 

설치할 위치의 폴더를 선택하여 설치를 진행 합니다.

 

 

 

5. 실행

 

프로젝트가 메이븐 기준이므로 먼저 메이븐을 설치합니다.

프로젝트 명에 마우스를 대고 우측 버튼을 이용하여

 

 

 

 

Run As > Maven Install 을 선택합니다.

 

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:58 min
[INFO] Finished at: 2024-08-07T17:32:18+09:00
[INFO] ------------------------------------------------------------------------
 

 

[BUILD SUCCESS]가 안보이면 오류를 확인해야 하는데 작업한게 없으므로 잘 빌드 됩니다.

 

 

 

동일한 방법으로 Run On Server 를 선택 합니다.

Run As > Run On Server

 

 

 

설치한 apache 9.0 서버가 보이는군요. 선택하고 [Next] 버튼을 클릭 합니다.

 

 

 

생성한 프로젝트가 우측에 들어있는지 확인하고 [Finish] 버튼을 클릭 합니다.

 

이상이 없다면 기본 브라우저에 화면이 나타납니다.

보이지 않는다면 프로젝트 명을 이용하여 화면을 호출합니다.

http://localhost:8080/AllProj/

 

 

 

 

 

 

기본 계정 정보는 전자정부프레임워크 페이지에 있습니다.

계정관련 정보만 복사해 왔습니다.

1. 홈페이지 템플릿(Simple Homepage)
로그인계정(관리자) : admin 로그인암호 : 1

2.
표준프레임워크 샘플포탈(Portal Site)
로그인계정(관리자) : admin , 로그인암호 : 1
로그인계정(사용자) : user1 , 로그인암호 : 1

3.
샘플 내부 업무사이트(Enterprise Business)
로그인계정(관리자) : admin , 로그인암호 : 1
로그인계정(사용자) : user1 , 로그인암호 : 1

4.
공통컴포넌트 (Common All-in-one)
*
대소문자 유의

구분 : 일반사용자, ID : USER, PW : rhdxhd12    (영문으로 공통12)
구분 : 기업사용자, ID : ENTERPRISE, PW : rhdxhd12 (영문으로 공통12)
구분 : 업무사용자, ID : TEST1, PW : rhdxhd12 (영문으로 공통12)
구분 : 업무사용자, ID : webmaster, PW : rhdxhd12 (영문으로 공통12)

 

 

 

 

스프링부트에서 예전처럼 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 -


1234···8

+ Recent posts