과정

1. Database 생성

//데이터 베이스 생성
CREATE DATABASE keystone;

//keystone 계정에 모든 권한을 부여하며, 
//keystone 계정은 localhost 로 접속가능하게 한다. 
//비밀번호는 openstack
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'openstack';

//계정이름 keystone의 접속 주소를 외부도 허용한다. 비밀번호는 openstack
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%'IDENTIFIED BY 'openstack';

2. 관리 토큰 생성

openssl rand -hex 10

> 나오는 값을 저장

 

3. Keystone 설치

 

4. Apache HTTP Server 설치

 

 

 

IaaS : 인프라를 빌려주는 서비스

1) 인프라 : ex) 컴퓨터 자원 (CPU, Memory, HDD, 스토리지, 네트워크 장비등을 빌려줌)

 

PaaS : 플랫폼을 빌려주는 서비스

1) 플랫폼 : 서비스 개발, 배포 등을 위해 필요한 안정적인 플랫폼 제공.

 

SaaS : 서비스를 빌려주는 서비스

1) 서비스 : Gmail, DropBox, 네이버 클라우드... 등 웹에서 쓰는 서비스들

 

사진 출처

<terms.naver.com/entry.nhn?docId=3580686&cid=59088&categoryId=59096>

관리할 부분이 줄어들고 서비스 개발에  초점

@Controller (view 를 반환)


Controller Class 에 @Controller 를 작성합니다.

해당 어노테이션의 의미는 "이 class 는 Controller 이며" 해당 클래스가 bean으로 등록됩니다.

해당 class 가 Controller로 사용됨을  Spring Framework에 알립니다.

 

1) String 을 반환하는 메서드에서 return "main"; 을 하면, views/main.jsp 파일을 찾음

2) ModelAndView 를 반환하는 메서드에서 return mav; 를 하면, ModelAndView 객체를 반환하며, setViewName으로 view 화면과, addObject() 로 객체를 View 단에 넘겨줄 수 있음.

 

@ResponseBody


json 형태로 응답해줄 수 있으며,  view 를 반환하지 않음

 

 

'Spring Framework > Annotation' 카테고리의 다른 글

Spring @Bean - 스프링 빈  (0) 2021.07.08
import java.util.HashSet;
import java.util.Set;
import java.util.Arrays;
class Solution {
	public int[] solution(int[] numbers) {
		int[] answer = {};
		int answers = 0;
		
		Set<Integer> hashset = new HashSet<>();
		
		
		//System.out.println("Size of Array : " + numbers.length);
		
		for (int n = 0; n < numbers.length; n++) // 0 1 2 3 4
		{
			for (int m = n + 1; m <= numbers.length-1; m ++) 
			{
				//System.out.println("Selected Array : " + "["+ n +"]" + "["+ m +"]");
				answers = numbers[n] + numbers[m];
				hashset.add(answers);
			}
		}
		
		answer = new int[hashset.size()];
		
		int j = 0;
		for(int i : hashset)
		{
			answer[j] = i; 
			//System.out.println(i + "=?" + answer[j]);
			j++;
		}
        Arrays.sort(answer);
		return answer;
	}
}

출처

https://openwiki.kr/tech/%EB%A6%AC%EB%88%85%EC%8A%A4_%ED%8C%8C%EC%9D%BC_%EC%8B%9C%EC%8A%A4%ED%85%9C_%EA%B5%AC%EC%A1%B0

 

리눅스 파일 시스템 구조 - 기술 - 오픈위키

오픈위키 간단 사용법 위키위키는 많은 분들이 쉽게 참여할 수 있고, 자유로운 업데이트, 한눈에 알아보기 쉬운 정리가 가능하다는 장점이 있다. 위키는 여러 사람이 함께 같이 수정하면서 문서

openwiki.kr

 

리눅스를 설치하면, 상당히 많은 디렉토리가 자동으로 생성된다. 이러한 디렉토리는 대부분의 유닉스와 유사하다. DOS에서는 거의 사용자 임의대로 디렉토리의 이름을 정하여 사용하나, 유닉스에서는 아래와 같은 디렉토리의 이름들과 구조로 대부분 정해져 있다.

 

목차

설명

/bin

/bin은 "binaries"의 약자이며, 실행 파일들이 모여 있다. 이 디렉토리에는 많은 필수적인 프로그램들이 포함되어 있다. "ls /bin"을 해보면 이 안의 파일들을 볼 수 있으며 cp, ls, mv 같은 몇 개의 명령어들은 알아볼 수 있을 것이다. 이것들은 이들 명령어들의 실제 프로그램들이다. 따라서, ‘cp’ 명령을 입력하면, /bin/cp 프로그램이 실행되는 것이다. “ls -F”를 사용하면, /bin의 대부분의 파일들에서 "*"가 파일명 끝에 추가되어 있는 것을 볼 수 있을 것이다. 이것은 이 파일이 실행 가능한 파일임을 표시한다.

/dev

/dev 안의 파일들은 디바이스 드라이버들이다. 이것들은 디스크 드라이버, 모뎀, 메모리 등과 같은 시스템 디바이스나 자원들을 액세스하는데 사용된다. 예를 들면, 파일들로부터 정보를 읽어볼 수 있는 것과 같이, /dev/mouse를 액세스함으로써 마우스로부터 입력되는 정보를 읽어 올 수 있다. fd로 시작하는 파일 이름들은 플로피 장치들이다. fd0는 첫 번째의 플로피디스크 드라이브이며, fd1은 두 번째이다. 이 이외의 것들은 보통 플로피 디스크의 특정 형태를 표시한다. 예를 들면, fd0H1440은 첫 번째 드라이브(A: 드라이브)의 고밀도 3.5인치 디스켓을 말한다. 여기서는 가장 많이 사용되는 디바이스 파일을 열거하였다.

/dev/console

시스템의 콘솔이며, 모니터가 시스템에 직접 연결되어 있음을 말한다.

/dev/ttyS 와 /dev/cua

직렬 포트를 액세싱한다. 예를 들면, /dev/ttyS0는 도스 상의 "COM1"을 말하며, /dev/cua 는 "callout" 장치로써, 이것은 모뎀을 쓸 때 사용된다.

hd로 시작하는 디바이스 이름

하드 디스크를 액세스한다. /dev/hda는 첫 번째 하드 디스크 전체를 말하며, hda1은 /dev/hda의 첫 번째 파티션을 말한다.

sd로 시작하는 디바이스 이름

SCSI 하드 디스크 드라이브나 테이프 드라이브 같은 SCSI 장치들을 말한다. 만약 SCSI 하드 디스크를 가지고 있다면, /dev/hda를 액세스하는 대신에 /dev/sda를 액세스하여야 할 것이다.

lp로 시작하는 디바이스 이름

병렬 포트를 말하며, /dev/lp1은 도스의 "LPT1"와 같다.

/dev/null

"black hole"로서 사용되는 것으로서 어떠한 데이터를 이 장치에 보내면 모두 없어지게 된다. 예를 들면, 화면에 아무 것도 출력되지 않기를 바랄경우, /dev/null로 출력을 보내면 된다.

/dev/tty로 시작되는 디바이스 이름

시스템에 있는 "가상 콘솔 : Virtual Console(VC)"이다. /dev/tty1은 첫 번째 VC이며, /dev/tty2는 두 번째이다. 가상 콘솔은 한 화면이 여러개의 가상 터미날을 갖는 것이다. 각각의 터미날은 [alt-F1], [alt-F2] 등을 누름으로서 전환할 수 있으며, 같은 사용자나 다른 사용자로 login 할 수 있다.

/dev/pty로 시작하는 디바이스 이름

이것들은 원격 login 세션에서 사용되는 "pseudo-terminal"들이다. 예를 들어, 사용중인 컴퓨터가 네트워크에 연결되어 있고, telnet으로 login하려고 할 때, /dev/pty 디바이스를 사용한다.

 

/etc

/etc는 시스템 설정 파일, 프로그램, 유틸리티 등 다양한 프로그램들을 포함하고 있으며 대부분의 파일들은 관리자에 의해 사용되는 것이다. 리눅스 etc 폴더 이해하기참조

 

/home

/home은 사용자의 홈 디렉토리로서 login하였을 경우, 처음으로 위치하게 되는 디렉토리이다. 예를 들어, /home/larry는 사용자 "larry"의 홈 디렉토리이다. 시스템이 새로 설치되면, 이 디렉토리 안에 아무 것도 포함되어 있지 않다.

 

/lib

/lib는 공유 라이브러리 이미지를 포함하고 있다. 이 파일들은 일반적으로 사용되는 많은 프로그램에서 호출되는 코드들을 포함하고 있다. 어떤 프로그램이 공유 될 수 있는 루틴을 단독으로 포함하지 않고, 그 루틴을 일반 장소인 /lib 안에 저장한다. 이렇게 함으로서 실행 파일의 크기를 작게 만들어 사용자의 공간을 넓힐 수 있다.

 

/media

DVD, CD-ROM, USB 등과 같은 탈부착이 가능한 장치들의 마운트포인트로 사용되는 디렉토리.

 

/mnt

/media 디렉토리와 비슷한 용도로 탈부착이 가능한 장치들에 대하여 일시적인 마운트포인트로 사용하는 디렉토리.

 

/proc

/proc는 "가상 파일 시스템"이다. 이 디렉토리의 내용들은 시스템에서 운영되고 있는 다양한 프로세서들에 관한 내용과 프로그램에 대한 정보를 포함하고 있다. 이 디렉토리에서 볼 수 있는 것은 실제 드라이브에 저장되어 있는 내용이 아니며, 메모리상에 저장되어 있는 것이다.

 

/tmp

많은 프로그램들은 여러 정보가 임시 파일 안에 저장되는 것을 필요로 한다. 이런 파일들이 위치할 장소가 /tmp 이다.

 

/usr

시스템이 아닌 일반사용자들이 주로 사용하는 디렉토리. 즉, c++, chsh, cpp, crontab, du, find등과 같이 일반사용자들용 명령어들은 /usr/bin 에 위치한다. /usr는 실제 작업을 위한 응용 패키지들이 설치되어 있는 디렉토리이다. 따라서 많은 서브디렉토리를 포함하고 있다.

/usr/bin

/usr/bin은 모든 유닉스 시스템이 소유하고 있는 소프트웨어를 담기 위한 진정한 warehouse이다. 이것은 /bin 같은 곳에는 없는 유용한 실행 파일들을 가지고 있다.

/usr/etc

/etc는 시스템 파일과 사양 파일이 있는 것처럼, /usr/etc에는 더많은 유틸리티와 파일들이 있다. 일반적으로 /usr/etc에 있는 파일들은 /etc에 있는 것만큼의 반드시 필요로 한 것들은 아니다.

/usr/lib

/usr/bin은 /lib에서 찾을 수 있는 "stub"와 "static"와 같은 라이브러리를 포함하고 있다. 프로그램을 컴파일할 때, 프로그램은 /usr/lib에 있는 파일들과 "link"되며 이 라이브러리 안에 실행 코드가 필요로 할 때, /lib를 찾는다. 또한, 많은 프로그램들이 /usr/lib 안에 사양 파일을 저장한다.

/usr/local

/usr/local은 /usr에 포함된 것과 매우 유사하고, 시스템에 반드시 필요로 하는 것은 아니지만, 매우 유용한 것들을 포함하고 있다. 일반적으로, /usr/local에 있는 프로그램들은 시스템의 특성을 결정짓는 소프트웨어들이 있으며, 따라서, 유닉스 시스템마다 매우 다르다. TeX(문서 형식화 시스템)나 Emacs(에디터)를 설치하였다면 이 디렉토리에서 찾을 수 있을 것이다.

/usr/man

이 디렉토리는 실제적인 man page를 포함하고 있다. 또한, 모든 man page 를 위한 두 개의 서브 디렉토리가 있다. 예를 들면, /usr/man/man1 은 section 1 안에 man page를 위한 형식화되지 않은 소스가 포함되어 있으며, /usr/man/cat1은 section 1을 위한 형식화된 man page가 포함되어 있다.

/usr/spool

/usr/spool 은 어떤 프로그램을 위한 "spool"된 파일들을 포함하고 있다. 예를 들면, 만약 사용중인 컴퓨터가 네트워크에 연결되어 있다면, 받은 메일은 /usr/spool/mail 안에 읽거나 지우기 전까지 저장될 것이다. 뉴스 글을 보내거나 받을 때는 그 내용이 /usr/spool/news에 있게 된다.

/usr/src

/usr/src는 시스템에 있는 다양한 프로그램의 컴파일 되지 않은 소스 코드들을 포함하고 있다. 여기서 가장 중요한 것은 /usr/src/linux이며, 이것은 리눅스 커널의 소스 코드를 포함하고 있다.

 

/var

시스템운용중에 생성되었다가 삭제되는 데이터를 일시적으로 저장하기 위한 디렉토리. 거의 모든 시스템로그파일은 /var/log 에 저장되고, DNS 의 zone 설정파일은 /var/named 에 저장되고, 메일파일은 /var/spool/mail 에 저장되며, 크론설정파일은 /var/spool/cron 디렉토리에 각각 저장됨.

 

/lost+found

최상위 디렉토리인 / 디렉토리에만 존재하는 것이 아니라 파일시스템마다 존재할 수 있는 디렉토리임. 이 디렉토리는 fsck 또는 e2fsck 등과 같은 파일시스템 체크 및 복구유틸리티 실행후에 주로 생성이 되는 것으로서 복구되지 않은 채로 블록(block)만 존재하는 파일 즉, 연결이 끊어진 inode 들이 숫자파일형태로 존재하는 곳임. 숫자형태로 존재하는 파일들은 mv 명령어로 파일이름만 바꾸면 바로 복구될 수 있다.

1. 1991년 11월 리누스 토발즈가 공개

    1) 유닉스 기반 : 유닉스는 중대형 컴퓨터에서 사용

    2) 개인컴퓨터용 공개 운영체제


2. 오픈소스

    무상으로 공개된 소스코드 또는 소프트웨어

3. 파일 구성과 시스템 기능의 일부는 유닉스 기반

    시스템(영어: system)은 각 구성요소들이 상호작용하거나 상호의존하여 복잡하게 얽힌 통일된 하나의 집합체(unified whole)다. 또는 이 용어는 복잡한 사회적 체계의 맥락에서 구조와 행동을 통제하는 규칙들의 집합체를 일컫기도 한다.


4. 핵심 커널은 유닉스와 차이가 있음

    커널(Kernel)은 운영체제의 핵심을 이루는 요소로서 컴퓨터내의 자원을 사용자 프로그램(User Application)이 사용할 수 있도록 관리하는 프로그램

 

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;

public class Solution {
	public String solution(String[] participant, String[] completion) {
        
		String answer = "";
        
        ArrayList<String> arr = new ArrayList<String>();
        ArrayList<String> arr1 = new ArrayList<String>();
        
        Collections.addAll(arr, participant);
        Collections.addAll(arr1, completion);
        
        Iterator<String> iter = arr.iterator();
        Iterator<String> iter1 = arr1.iterator();

        
        while (iter.hasNext())
        {
        	System.out.println(iter.next());
        }
        while (iter1.hasNext())
        {
        	System.out.println(iter1.next());
        }
        return answer;
	}
	
	public static void main(String[] args) {
		Solution sol = new Solution();
		
		String[] participant = {"a", "b", "c"};
		String[] completion = {"a", "c"};
		
		sol.solution(participant, completion);
	}
}

'JAVA' 카테고리의 다른 글

[Java] Map 자료형 저장, 출력  (0) 2021.01.07
[JAVA] - 자바 Email 전송하기  (0) 2019.12.26
[JAVA] window builder - login  (0) 2019.11.18
[JAVA] WINDOW BUILDER  (0) 2019.11.18
[JAVA] 읽으면서 정리하기  (0) 2019.11.10

web.xml 에 적용

	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>
			org.springframework.web.filter.CharacterEncodingFilter
		</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

Bot Creators : 봇을 생산하는 생산자

Control Room : 모든게 작업이 이루어지는 중앙집중 웹기반 서비스

Bot Runners : 봇을 실행 (attended - 사람을 거쳐 실행 / unattended - 사람을 거치지 않고 실행) 

 

HA / DR을 지원하는 분산 아키텍처

 

HA : 이중화

DR : 재해복구

https://docs.automationanywhere.com/bundle/enterprise-v2019/page/enterprise-cloud/topics/aae-architecture-implementation/cloud-control-room-overview.html#Zj0vY2F0ZWdvcnkvYnVpbGQ/cD1CdWlsZA==

 

Enterprise 제어실

Please fill all the fields Passwords do not match Password isn't strong enough. Consider using more characters, including capital letters, numbers and special characters. Please enter a valid Email address The email address you're trying to use is already

docs.automationanywhere.com

 

1) A2019 Enterprise 제어실(Control Room)

    (1) 기능1 : 봇과 봇 러너의 다양한 기능을 관리를 웹 기반 서비스로 제공

        ㄱ) 봇 스케줄링

        ㄴ) 실행, 관리

        ㄷ) 배포    

 

    (2) 구성 요소

        ㄱ) 컨트롤룸 서버

             a) Control Room Reverse Proxy : 원격 연결 요청을 listen 후 목적에 맞는 서비스로 전달

             b) Control Room Proxy 관리 :

                 

                 Control Room Service : 

                 Control Room Messaging :

                 Control Room Caching : 

              

       

2) 특징

    (1) 중앙 집중식 자동화 배포

        ㄱ) 봇 실행을 위한 단일 액세스 지점 및 제어 역할

        ㄴ) 봇 업로드 및 다운로드 기능을 제공

        ㄷ) 모든 예약은 Control Room 에서 관리. 임시 or 사전 정의된 일정으로 배포

   

    (2) 중앙 집중식 액세스 제어

        ㄱ) 최소 권한 및 액세스는 사용자 액세스를 제어. RBAC (역할 기반 액세서 제어)를 통해 구현

        ㄴ) 모든 사용자 및 역할은 제어실에서 작성 및 관리

 

    (3) 협업 중앙화 된 인력 관리

         ㄱ) 대시보드 : 전체 자동화 인프라에 대한 단일 뷰 제공

         ㄴ) 이벤트, 예외 및 경고와 함께 자동화에서 실시간 하트 비트 및 원격 측정을 수신

         ㄷ) 무단 사용자는 Bot Runner 에서 진행중인 자동화를 일시 중지, 재개 또는 중지 불가

         ㄹ) 모든 자동화 데이터 내역은 Audit Logs로 확인 가능

 

 

> A2019 는 컨트롤룸 서버를 중심으로 봇생성, 관리, 제어, 배포, 사용자관리, 스케줄링 등 모든게 다이루어 진다.

= 컨트롤룸만 다 파악하면 모든 기능을 다쓸수 있다

 

 

 

https://bumcrush.tistory.com/116

 

크롤링을 하다보니 "태그위치 달라지는" 날짜를 얻어오는 것에 대해 방법을 찾다가 위의 글을 찾게 되었습니다.


<크롤링 할 내용>

  • 1. 기사 - title

  • 2. 신문사 - newspaper

  • 3. 날짜 - date

  • 4. 내용 요약 - content

  • 5. 링크 - link

 

1. 크롤링을 위한 라이브러리 

    설치 방법

        외부 라이브러리

        1) Beautifulsoup - 태그 접근 

            CMD - 'python -m pip install bs4' 입력 ('제외)

         

        2) pandas (엑셀로 저장할 때) or python-docx(워드로 저장)

            CMD - 'python -m pip install pandas'

            CMD - 'python -m pip install python-docx'

         

        내부 라이브러리

        1) datetime - 저장파일을 시간으로 저장하기 위해서

 

        2) requests - 웹 요청

 

        3) re - 정규식

         

2. 크롤링을 하려면 html 태그를 알아야하며, 태그의 속성 (href, class, title...) 같은 속성이 필요

    크롬도구(F12) -> 빨간 네모 부분 클릭 -> 가져올 기사 Title에 포커스를 두고 클릭 -> 해당하는 부분이 바로 찾아짐

 

3. html 코드는 아래 처럼 많은 태그들로 이루어 져있고, 아래의 a 태그에는 href, target, class 등과 같은 속성과 strong 태그도 존재

<a href="https://www.zdnet.co.kr/view/?no=20200526125336"
	target="_blank" 
    class=" _sp_each_title" 
    onclick="return goOtherCR(this, 'a=nws*a.tit&amp;r=1&amp;i=8800011E_000000000000000002189487&amp;g=092.0002189487&amp;u='+urlencode(this.href));" 
    title="유아이패스, 27일 RPA 세미나 개최">
    유아이패스, 27일 
	<strong class="hl">RPA</strong> 
	세미나 개최
</a>

 

4. 검색 파라미터 url 분석

#1일 이내 (현재시간으로부터)
https://search.naver.com/search.naver?&where=news
&query=RPA
&sm=tab_pge
&sort=1
&photo=0
&field=0
&reporter_article=
&pd=4
&ds=2020.05.26.13.23
&de=2020.05.27.13.23
&docid=
&nso=so:dd,p:1d,a:all
&mynews=0
&start=1
&refresh_start=0

#1주일 
https://search.naver.com/search.naver?&where=news
&query=RPA
&sm=tab_pge
&sort=1
&photo=0
&field=0
&reporter_article=
&pd=1
&ds=2020.05.20
&de=2020.05.27
&docid=
&nso=so:dd,p:1w,a:all
&mynews=0
&start=1
&refresh_start=0

필터를 넣어서 검색을 해보면 위와 같은 url을 볼 수 있다.

특징을 살펴보자.

 

  1. &query= "검색값"
  2. &sm="tab_pge" 이 값은 검색했을 때 "tab_opt"로 나오고, 페이지를 한번 2페이지로 옴겼다가 1페이지로 돌아오면 됨
  3. &sort="정렬 방식" 1일 때 최신순
  4. &pd= "period"의 pd로 생각 된다.
  5. 필터를 조절하며, 값을 다르게 주었더니 다음과 같은 결과를 얻었다.
&pd =
  1. '1일 이내'='4',
  2. '1주이내'='1',
  3. '1개월 이내' = '2',
  4. '6개월 이내' = '6',
  5. '1년 이내' = '5',
  6. '선택기간' = '3' 

&ds=  기간이며, 1일 이내의 시간에 대해서는 2020.05.27.'tt'.'mm' 으로 표시되며, 기준은 현재시간

 

 

 

 

 

 

 

 

 

 

 

'Python' 카테고리의 다른 글

[python] 파이썬 네이버 크롤링 하여 csv 파일로  (0) 2020.05.25
from urllib.request import urlopen
from urllib.parse import quote_plus
from bs4 import BeautifulSoup
import pandas as pd

pageNum = 1
search = input('검색어: ')

page = input('끝 페이지 입력')
lastpage = int(page) * 10 -9

searchlist = []
while pageNum < lastpage + 1: 
     url = f'https://search.naver.com/search.naver?&where=news&query={quote_plus(search)}&sm=tab_pge&sort=0&photo=0&field=0&reporter_article=&pd=0&ds=&de=&docid=&nso=so:r,p:all,a:all&mynews=0&cluster_rank=37&start=1&refresh_start={pageNum}'

     html = urlopen(url).read()
     soup = BeautifulSoup(html, 'html.parser')

     title = soup.find_all(class_='_sp_each_title')

     

     
     for i in title :
          print(i.attrs['title'])
          print(i.attrs['href'])
          print(pageNum)

          temp = []
          temp.append(i.attrs['title'])
          temp.append(i.attrs['href'])
                         
          searchlist.append(temp)     
          searchfile = pd.DataFrame(searchlist)     
     pageNum += 10
               
searchfile.to_csv('naver.csv', encoding = 'CP949', index = False, header = ['제목' , '기사 url'])

'Python' 카테고리의 다른 글

[python] Beautifulsoup 네이버 뉴스 크롤링  (0) 2020.05.27

https://docs.automationanywhere.com/bundle/enterprise-v2019/page/enterprise-cloud/topics/release-notes/cloud-feature-comparison-matrix.html

출처!


https://sky-opal.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4%EC%97%90%EC%84%9C-%EA%B0%91%EC%9E%90%EA%B8%B0-%EB%AA%85%EB%A0%B9%EC%96%B4%EA%B0%80-%EC%95%88%EB%A8%B9%ED%9E%90-%EB%95%8C


위에서 방법을 얻어서 기록해둠


PATH=/usr/local/bin:/bin:/usr/bin


한번 설정해두면 계속 적용이 될 줄 알았으나


계속 풀려서 환경변수 적용을 찾아봄.


리눅스 전역( global ) 로 환경변수 등록


https://memory.today/dev/23



$vi /etc/profile


shift + g


PATH=/usr/local/bin:/bin:/usr/bin



https://www.inflearn.com/

 

내용 출처

 

온라인 클래스 오픈 플랫폼, 인프런

인프런은 누구에게나 성장의 기회를 균등하게 부여하기 위해 만들어진 온라인 학습, 지식 공유 중개 플랫폼 입니다. 개발, 프로그래밍, IT, 영상 편집, 그로스 해킹, 블록체인, 마케팅, 디자인, 금융, 투자 등 온라인 수업을 듣고 낡은 지식이 아닌 현업 전문가가 가르치는 현업에서 쓰이는 실전 강의를 시간적, 경제적 제약 없이 어디서든 학습하세요. 세상에 알리고 싶은 지식을 온라인 강의로 제작하고 20만명 이상의 인프런 회원에게 공개해보세요. 지식 공유를

www.inflearn.com


 의존 주입 (Dependency Injection)

프로그래밍에서 객체를 만들어서 외부에서 따로 주입하는 방식


제일 안좋은 프로그램 : 변경이 쉽지 않은 프로그램

1. 배터리 일체형 - 장난감 자동차 (배터리가 떨어지면 장난감을 새로 구입해야함) 의존성이 큼

 

생성자에서 객체에 주입

public class ElectronicCarToy {
	private Battery battery;
    
    public ElectroniCarToy() {
    	battery = new NormalBattery();
    }
}

2. 배터리 분리형

setter 메서드에서 객체에 주입

public class ElectronicRobotToy {
	private Battery battery;
    
    public ElectronicRobotToy() {
    
    }
    
    public void setBattery(Battery battery) {
    	this.battery = battery;
    }
}

3. 배터리 분리형 - 공장에서 미리 배터리를 넣어놓고, 원할 때 교체

 

public class ElectronicRobotToy {
	private Battery battery;
    
    public ElectronicRobotToy() {
    	this.battery = battery;
    }
    
    public void setBattery(Battery battery) {
    	this.battery = battery;
    }
}

스프링에서의 의존주입

스프링 컨테이너에서 주입하고 의존하는 관계

 

1. 스프링 DI 설정

  ㄱ) 스프링 설정파일 (XML) 파일

  ㄴ) GenericXmlApplicationContext 로 파일을 읽음

  ㄷ) 스프링 컨테이너에서 큰 객체에 작은 객체가 들어있는 것을 보고 (주입이 되어있다고 함)

  ㄹ) 사용할 때는 getBean라고 사용하고, 객체를 생성할 때는 Bean사용

 

기존의 자바 프로그램 작성시에 다른 클래스의 메서드를 사용할 때에

객체를 생성하는 것과 스프링에서 객체를 생성하는 방법의 차이.

 

기존방식


A.java

public class A
{
	public void printA()
    {
    	System.out.println("클래스 A");
    }
}

MainClass.java

public class MainClass
{
	public static void main(String[] args)
    {
    	A a = new A();
        a.printA();
    }
}

 

스프링에서 사용하는 방식

- 클래스 컨테이너에 객체를 생성( xml 파일에 작성)

- 클래스에서 클래스 컨테이너 경로를 잡아줌

- 클래스 컨테이너에서 객체를 얻어옴


applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans.xsd">
	
	<!-- 클래스 모음 / 객체 생성 -->
	<bean id="a" class="test.A" />
	
</beans>

A.java

public class A
{
	public void printA()
    {
    	System.out.println("클래스 A");
    }
}

MainClass.java

 

import org.springframework.context.support.GenericXmlApplicationContext;

public class MainClass
{
	public static void main(String[] args)
    {
    	//spring container에 접근 = applicationContext.xml(클래스 컨테이너)
		//1. 클래스를 선언해놓은 컨테이너에 접근하기위해 컨테이너 주소를 적어줌
		GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("classpath:applicationContext.xml");
		//2. 객체를 가져와서 사용
		A a = ctx.getBean("a", A.class);
		a.printA();
    }
}

pom.xml 에 dependency에 작성해주는 것을 그대로 따라 적는데

왜 project의 groupId 랑 artifactId랑 다른가 해서 찾아보니

 

외부에 있는

groupId = 제작자

artifactId = 프로젝트 이름

 

으로 부터 제공 받는다고 생각하니 의문이 풀렸다.

 

org.springframework를 주소에 쳐보니 이해가 됬다.

 

Maven 프로젝트를 선택하면 그것에 맞는 pom.xml 에 넣을 수 있는 형태로 만들어 준다.

 

 (inflearn 강좌 정리) - https://www.inflearn.com/course

1. Eclipse -> Maven Project  생성

2. Create a simple project 체크 -> Next

 

3.

Group id 는 가장 큰 프로젝트를 감싸는 이름 

> spring4

 

Artifact id 는 큰 프로젝트 안에서 하나하나의 모듈을 의미

> testPjt

 

 

4. 프로젝트를 생성하고나면 아래에 Creating project 가 100% 까지 완료되어야 프로젝트가 온전하게 생성이 된 것임

스크린샷 보다 폴더가 더 생겨나기 때문에 그 사이에 뭐 해보려고 하지 말자

5. pom.xml 설정

 

pom.xml 이란?

스프링의 각 기능들이 있음 (Core, JDBC, AOP ...등 모듈이 존재)

-> 필요한 모듈을 가져오기 위한 파일이다

 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>spring4</groupId>
  <artifactId>testPjt</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  
  <dependencies>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-context</artifactId>
  		<version>4.1.0.RELEASE</version>
  	</dependency>
  </dependencies>
  
  <build>
  	<plugins>
  		<plugin>
  			<artifactId>maven-compiler-plugin</artifactId>
  			<version>3.1</version>
  			<configuration>
  				<source>1.8</source>
  				<target>1.8</target>
  				<encoding>utf-8</encoding>
  			</configuration>
  		</plugin>
  	</plugins>
  </build>
</project>

pom.xml에 붙여넣은 후 프로젝트> maven > update maven 

 

5-1. pom.xml(프로젝트에 있는 pom.xml에 의해서 라이브러리가 다운로드 됨)

다운로드는 Repository 에서 받아옴

프로젝트1 - pom.xml - 라이브러리1, 라이브러리4, 라이브러리5

프로젝트2 - pom.xml - 라이브러리2, 라이브러리3

프로젝트3 - pom.xml - 라이브러리6

 

Maven Dependencies 에 추가 됨 (jar)

 

 

6. 스프링 폴더 구조

 

testPjt(maven project) src(폴더) main java
      resources
    test java
      resources

1. java 폴더 - 앞으로 만들어지는 자바 파일들이 관리되는 폴더

2. resource 폴더 - 자원을 관리하는 폴더로 스프링 설정 파일 (XML)/ 프로퍼티 파일 등이 관리

3. 폴더 구조는 바꾸지않고 이대로 구성해야함

 


궁금한 것

Group id

- 프로젝트마다 접근할 수 있는 고유한 이름

- 패키지 네이밍룰(도메인을 반대로 쓰는)을 따르는 것이 룰

maven.apache.org > org.apache.maven

 

Artifact id

- jar 파일에서 버전 정보를 뺀 이름

- 소문자 사용. 특수문자 x


https://ojava.tistory.com/147

 

Maven project 제대로 사용하기 : pom.xml

Maven project의 핵심이라고 하면 당연히 pom.xml이라고 말할 수 있다. 해당 프로젝트에 import 되는 jar파일 정보 및 버전정보를 담고 있으며 최종적으로 패키징되는 기준값을 담고 있기 때문에 해당 파일만 잘..

ojava.tistory.com

properties (선택사항)

pom.xml에서 사용되는 자주 사용되는 정보를 변수처럼 만들어서 사용

 

dependencies (필수 사항)

라이브러리 호출

 

 

명령어



cd : 디렉터리 이동

(ex : cd /c) C:\


cd .. : 현재 디렉터리에서 한단계 이전


cd ~ : 최상위 디렉터리


pwd : 현재 디렉터리의 경로 표시


mkdir : 디렉터리 생성


rm : 디렉터리나 파일 삭제 (rm 명령에 보호가 걸려있어서 --옵션을 뒤에 달아줘서 지워야함)



git 명령



1) 로컬 레포 생성 


$git init

현재의 디렉터리 하위에 .git이라는 하위 디렉토리 생성


2) README.md 파일 생성

echo "# java-chat" >> README.md

ll명령어 입력후  README.md 생성되었는지 확인



3) 파일 추가

$git add README.md


4) 커밋 메세지 

$git commit -m 'first commit'


5) 원격지 주소 지정

$git remote add origin https://github.com/SsackTeun/java-chat.git


잘못적었을 때

$git remote remove origin



6) 원격지로 푸쉬

$git push -u origin master




1. weblogic 계정추가

2. weblogic 디렉터리

3. 다운로드는 오라클 홈페이지의 generic 버전 10.3.6 기준

4. scp c:\Users\jaeyo\Downloads\wls1036_generic.jar root@192.168.0.110:/home/weblogic

5. 실행권한을 주기 chmod +x  파일이름

6. ls 로 확인

7. java jar- 파일 이름

8. 설치

http://1004lucifer.blogspot.com/2018/08/weblogic-linux-103-1211.html

9.도메인설치

http://1004lucifer.blogspot.com/2018/08/weblogiclinux-103-1211.html

 

웹로직 어드민 콘솔 > 어드민 서버 접속 > 노드 매니저 > 서버들 관리