728x90

개발한 웹 애플리케이션을  Apache Tomcat을 이용해 배포하고 서버를 운영하는 환경을 구축하는 방법 

 

-Application Packaging

 

mvn clean compile package

gradlew build

명령어 혹은 task 도구를 이용해 패키징한다. 

 

package를 완료하면 war 파일이 모듈의 target 폴더에 생성된다. 

 

-startup.bat 사용하기 

(windows는 배치파일, linux기반 os는 쉘스크립트)

tomcat-webapps폴더에 패키징한 war파일을 복사하여 옮겨준다.

tomcat\bin\startup.bat 파일을 실행하면 webapps의 war 파일들 압축해제하여 실행시켜준다. 

 

tomcat\webapps 폴더에 war파일이 압축해제되어 maven_begin 폴더가 생성되었다.

서버를 종료할 때는shutdown  배치파일을 실행하면된다. 

  

-Tomcat Manager 사용하기 

 

tomcat\conf\tomcat-users.xml 파일에 관리자 계정 권한 부여하기 

<tomcat-users>
  <role rolename="manager-gui"/>
  <role rolename="manager-script"/>
  <role rolename="manager-jmx"/>
  <role rolename="manager-status"/>

  <user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
</tomcat-users>

*터미널에서 code 명령어를 사용하면 파일을 vscode로 편집할 수 있다.

 

startup.bat로 서버를 실행하고 

localhost/manager로 접속하면 

로그인할 수 있는 창이 뜨는데 여기에 아까 만들어주었던 어드민 계정으로 로그인한다.

manager에서는 톰캣이 실행중인 웹 애플리케이션들을 관리할 수 있는 gui를 제공하공하고 있다.  

 

 배치할 war파일에서 파일을 업로드하여 배치할수 있다. 

 

파일을 선택학고 배치를 클릭하면 

 maven_begin 애플리케이션이 배치되었다 .

728x90

Eclipse 와 IntelliJ 의 차이

 

Eclipse IntelliJ
Workspace Project
Project Module
Facet
Library
JRE SDK
Classpath variable Path variable

 

 

 

IntelliJ 다운로드 

https://www.jetbrains.com/ko-kr/idea/download/?section=windows

 

최고의 Java 및 Kotlin IDE인 IntelliJ IDEA를 다운로드하세요

 

www.jetbrains.com

Community Edition을 다운로드하면 제한적으로 무료로 사용할수 있다.

 

Community Edition 사용시 필요한 플러그인

- Smart Tomcat 

 

 

Maven을 이용한 Web Project 생성

-Maven Archetype(Project Template):maven-archetype-webapp

 

 

 

IntelliJ IDEA 설정

 

프로젝트에 관한 설 

 

++파일 검색

 

Shift키 두번

 

 

 

maven으로 web project를 생성하면 maven 도구를 이용해 프로젝트 작업을 수행할 수 있다.

 

IntelliJ의 터미널을 이용해 프로젝트의 작업을 수행할 수도 있다. 

 

Windows의 터미널을 가져와 사용하기 때문에 터미널이 작동하지 않는다면 다른 터미널 프로그램을 사용하면 된다.  

 

maven 명령어를 실행할 위치는 pom.xml 파일이 존재해야한다.

maven을 설치하고 환경변수를 제대로 설정해줬다면 mvn 명령어를 통해 작업을 수행할 수 있다.   

 

아래 화살표를 클릭하면 사용할 터미널을 선택하거나 터미널을 설정할 수 있다. 

Git Bash 터미널이 있기 때문에 바로 Git 명령어를 입력할 수도 있다.    

 

 

Web Project를 Tomcat Server에 실행하려면 

 메뉴바의 실행버튼 옆에 톰캣을 클릭해 Edit Configuration을 클릭하여 설정하고 실행하면 된다.     

 

실행버튼을 클릭하면

 서버를 실행하고 웹 브라우저에서 확인할 수 있다.

 

JSP 프로젝트 

pom.xml 파일에 servlet dependency 추가  

 

main의 java 폴더에 servlet 클래스 생성 

HttpServlet 을 상속한 HelloServlet 클래스에 필요한 메소드를 구현해준다. 

 

web.xml파일에서 

servlet 클래스를 등록하고 맵핑해줘야 한다.

 

<servlet> 태그 안에 name과 그 name에 해당하는 class의 주소를 등록하고 

<servlet-mapping> 태그 안에 servlet name에 url pattern을 등록해준다. 

web.xml 파일에 mapping하는 방법 이외에 어노테이션을 이용하는 방법도 있다. 

    

@WebServlet 어노테이션과 그 안에 url pattern을 입력하면 mapping을 간단하게 처리할 수 있다. 

 

JSP 파일 생성하기 

webapp폴더 안에 .jsp 파일을 생성한다. 

index.jsp 파일은 기본으로 생성된다.  

내용을 입력하고 /index.jsp url로 확인할 수 있다. 

728x90

Vue.js에서 회원가입 폼을 만들어 실습하면서 form을 통해 데이터를 전송하는 법을 알아보자

 

<template>
    <form action="" @submit.prevent="submitForm">
        <div>
            <label for="userId">아이디</label>
            <input id="userId" type="text" v-model="username">
        </div>
        <div>
            <label for="password">패스워드</label>
            <input id="password" type="password" v-model="password"> 
        </div>
        <button type="submit">회원가입</button>
    </form>
</template>

form을 만들고 input:text, label로 아이디와 패스워드를 입력 받을 폼을 만든다. 

 

submit 버튼은 디폴트로 submit 이벤트가 발생하고 페이지가 새로고침되기 때문에 새로고침을 막아야한다. 

 

새로고침을 막기 위해서 @submit 이벤트 핸들러에 .prevent를 붙여 preventDefault를 한다. 

그리고 submit 이벤트가 발생하면 폼의 input을 전송할 함수인 submitForm을 등록한다. 

 

            <input id="userId" type="text" v-model="username">

 input 태그에 v-model이라는 속성이 붙어있다. 

v-model은 input 태그의 value를 바인딩 해주는 디렉티브이다. 

만약 v-model을 사용하지 않는다면

input 태그에 input 이벤트가 발생할 때 input 태그의 value값을 가져와 v-bind: 바인딩해주는 작업을 해야한다. 

<input
  :username="text"
  @input="event => text = event.target.value">

 

data(){
	return {
    	username: '',
        password: '',
    }
}

 

그리고 data에 username과 password를 정의해준다. 

 

다음으로 비밀번호를 표시할지 password 타입으로 **처리할지 선택할 수 있는 체크박스를 만들어보자 

 <input type="checkbox" id="show" v-model="checked" @change="showPassword"> 
 
 data(){
 	return {
    	username: '',
        password: '',
        checked: '',
    }
 }
 methods:{
            showPassword(){
                if(this.checked){
                    document.querySelector('#password').type='text';
                }else{
                    document.querySelector('#password').type = 'password';
                }
            }
        }

template의 password input 태그 아래 checkbox를 추가하고 

change이벤트 핸들러에 showPassword 함수를 등록한다. 

showPassword 함수는 v-model로 받은 checked의 값에 따라 #password 태그의 type을 text와 password로 바꿔준다. 

여기서 this.checked는 data의 checked를 의미한다. 

체크박스가 해제 되었을 땐 password 타입

checked 상태에선 text 타입인 것을 확인할 수 있다. 

 

다중 checkbox, radio, select 를 사용한 input 태그를 작성

<template>
    <form action="" @submit.prevent="submitForm">
        <div>
            <label for="userId">아이디</label>
            <input id="userId" type="text" v-model="username">
        </div>
        <div>
            <label for="password">패스워드</label>
            <input id="password" type="password" v-model="password">
            <input type="checkbox" id="show" v-model="checked" @change="showPassword"> 
        </div>
        <div>
            <h3>성별</h3>
            <input type="radio" name="gender" id="M" value="남자" v-model="picked">
            <label for="M">M</label>
            <input type="radio" name="gender" id="F" value="여자" v-model="picked">
            <label for="F">M</label>
        </div>
        <div>
            <h3>기술스택</h3>
            <input type="checkbox" id="springboot" value="springboot" v-model="checkedNames">
            <label for="springboot">SpringBoot</label>
            <input type="checkbox" id="jpa" value="jpa" v-model="checkedNames">
            <label for="jpa">JPA</label>
            <input type="checkbox" id="mybatis" value="mybatis" v-model="checkedNames">
            <label for="mybatis">MyBatis</label>
            <input type="checkbox" id="vue" value="vue" v-model="checkedNames">
            <label for="vue">Vue</label>
            <input type="checkbox" id="react" value="react" v-model="checkedNames">
            <label for="react">React</label>
        </div>
        <div>
            <h3>주소</h3>
            <select name="address" id="address" v-model="selected">
                <option disabled value="">선택</option>
                <option value="서초구">서초구</option>
                <option value="관악구">관악구</option>
            </select>
        </div><br>
        <button type="submit">회원가입</button>
    </form>
</template>

 

input data를 전송하기 위한 submitForm 함수 작성 

 submitForm(){
                axios.post('https://jsonplaceholder.typicode.com/users/',{
                    username:this.username,
                    password:this.password,
                    checked:this.checked,
                    checkedNames:this.checkedNames,
                    picked:this.picked,
                    selected:this.selected
                }).then(response=>{
                    console.log(response);
                });
            },

 

axios는 비동기 요청방식 api이다. 

데이터를 서버로 전송하고 응답을 받아 처리할 수 있다. 

 

axios를 사용하기 위해 axios를 다운로드

https://github.com/axios/axios

 

GitHub - axios/axios: Promise based HTTP client for the browser and node.js

Promise based HTTP client for the browser and node.js - GitHub - axios/axios: Promise based HTTP client for the browser and node.js

github.com

 

사이트의 installing package manager에서 본인이 사용하는 패키지 매니저에 따라 명령어를 카피하고

프로젝트 디렉터리의 터미널에서 명령어를 실행한다. 

 

정상적으로 다운로드되면 package.json의 dependencies에 axios가 추가된다. 

import axios from 'axios'

App.vue에서 axios를 사용하기 위해 import 해준다. 

 

axios.post('url','data')으로 post 요청을 한다. 

 

이때 가상 서버 역할을 해줄 api가 필요하다면 

https://jsonplaceholder.typicode.com/users/를 이용할 수 있다. 

 

 data() {
            return {
                username: '',
                password: '',
                checked: '',
                checkedNames: [],
                picked: '',
                selected: ''
            }
        },
        
        
        
 axios.post('https://jsonplaceholder.typicode.com/users/',{
                    username:this.username,
                    password:this.password,
                    checked:this.checked,
                    checkedNames:this.checkedNames,
                    picked:this.picked,
                    selected:this.selected
                }).then(response=>{
                    console.log(response);
                });

 

 

data는 {객체형식으로 넘겨주면 된다.}

다중 checkbox는 배열로 넘겨주었다. 

input태그에 값을 입력하고 회원가입을 클릭하면 

users/ 요청이 날아가고 

payload를 클릭하면 요청할 때 보낸 data를 확인할 수 있다. 

 

.then은 서버로부터 응답을 받은 후의 로직을 작성할 수 있다. 

console.log(response) 에 의해 

response가 console창에 찍혔다. 

 

https://ko.vuejs.org/guide/essentials/forms.html

 

Form 입력 바인딩 | Vue.js

 

ko.vuejs.org

 

'Vue.js' 카테고리의 다른 글

Vue.js 프로젝트 생성하기  (0) 2023.11.29
Vue.js 기초 문법  (2) 2023.11.28
Vue.js Intro  (0) 2023.11.28
728x90

#vue-cli 

 

폴더구조, 라이브러리, build 등 기본 vue 개발 환경을 설정해주는 cli 도구 

 

#vue-cli 설치하기 

npm install -g @vue/cli

 

#vue 프로젝트 생성하기 

vue create projectName

vue create 명령어로 프로젝트 생성

 

* vs code terminal에서 실행되지 않는다면 windows powershell 문제로 

 

preset을 선택하면 프로젝트를 생성한다.

vue3 기본 환경으로 프로젝트를 생성하고 싶다면 vue3를 

vue2 기본 환경으로 프로젝트를 생성하고 싶다면 vue2를 

직접 라이브러리, build 등의 환경을 수동으로 설정하고 싶다면 manually를 선택하면 된다.

프로젝트가 생성되면 cd projectName, npm run serve로 프로젝트를 시작하라고 한다. 

프로젝트 디렉터리로 이동해서 서버를 실행하고 8080 포트로 접속하면 아래와 같은 화면이 나온다. 

 

**서버를 종료할 때는 ctrl+c 

 

vue-cli 로 생성된 프로젝트로 돌아가면 

workspace 안에 vue3-cli 프로젝트가 생성되어있다. 

 

먼저 package.json에는 프로젝트 정보, 프로젝트에 설치된 라이브러리 등이 있고 

package.json에 설정된 라이브러리는 node_module에 설치된 것을 확인할 수 있다. 

여기서 dependencies와 devDependencies 두가지가 있는데 

dependencies는 배포용, dev는 개발용이다. 

개발용 dependencies는 설치할 때 npm install library -D 로 설치하면 된다. 

그리고 scripts 의 serve, build, lint는 custom cli 명령어이다. 

 

 

public의 index.html 파일을 확인하면 

 

#app div가 있다. 

이 태그 안에 createApp 으로 만들어진 app 컴포넌트가 들어갈 것을 예상할 수 있다. 

그런데 index.html 파일에는 vue cdn, createApp을 하는 script등이 보이지 않는다. 

대신 주석을 보면 빌드된 파일을 자동으로 주입된다는 것을 볼 수 있다. 

 

localhost:8080 에서 개발자도구를 확인해본다. 

localhost는 index.html document이다. 

head에 app.js를 가져오는 태그가 자동으로 생성되었고 좌측에 app.js를 다운로드하였다. 

app.js는 main.js를 가져오는것을 알 수 있다. 

 

프로젝트의 main.js

package의 dependencies의 vue라이브러리의 vue로부터 createApp을 가져오고 

App.vue에서 App을 가져와 createApp(App)을 #app에 마운트하고 있다. 

 

App.vue파일은 

app(root)컴포넌트를 정의하는 파일이다. 

component패키지에 정의된 Helloworld.vue 컴포넌트를 import 하여 root 컴포넌트의 자식 컴포넌트로 정의하고 있다. 

이처럼 하위 컴포넌트들은 component 패키지에 분리하여 정의하고 root 컴포넌트를 main.js에서 import 함으로써 

main에는 큰 관심사만 모듈로서 정의하고 하위 컴포넌트들을 분리하여 유지보수와 확장성에 유리한 구조가 되었다. 

 

#Vue SFC (Single File Component)

 

싱글 파일 컴포넌트는 vue 컴포넌트의 템플릿, 스크립트, 스타일을 하나의 파일로 묶어낸 .vue 파일 형식이다. 

<template>
  <img alt="Vue logo" src="./assets/logo.png">
  <HelloWorld msg="Welcome to Your Vue.js App"/>
</template>

<script>
import HelloWorld from './components/HelloWorld.vue'

export default {
  name: 'App',
  components: {
    HelloWorld
  }
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

 

앞서 보았던 App.vue도 싱글 파일 컴포넌트이고 <template>, <script>, <style>로 구성된 것을 확인할 수 있다. 

 

이전 html 파일에서는 카멜케이스 사용에 관한 문제가 있었는데 

SFC 에서는 파스칼 케이스를 사용하는 것을 알 수 있다. 

물론, 카멜케이스로도 사용할 수 있지만 통일성을 위해 파스칼 케이스로 통일해주도록 한다. 

 

** vue vscode snippet 플러그인 shortcut

vbc(v-base with css) + tab : sfc 기본 구조 template, script, style 생성

vdata + tab : data() {return {}} 생성

 

 

 

https://cli.vuejs.org/

 

Vue CLI

 

cli.vuejs.org

 

'Vue.js' 카테고리의 다른 글

Vue.js form submit  (0) 2023.11.30
Vue.js 기초 문법  (2) 2023.11.28
Vue.js Intro  (0) 2023.11.28

+ Recent posts