[컴][웹][자바][스프링] 간단한 hello world with spring 5

maven 으로 spring 5.0-mvc 의 helloworld 만들기

간단한 hello world with spring 5


maven 3.0 부터 -DarchetypeRepository 는 동작하지 않는다. (참고) 그래서 여기 조언 을 따라야 한다.
  1. mvn archetype:generate -DarchetypeGroupId=fr.uha.ensisa.ff -DarchetypeArtifactId=spring-mvc-archetype -DarchetypeVersion=1.0.3 -DgroupId=com.mysimple -DartifactId=my-simple-spring -Dversion=0.8 -DarchetypeRepository=http://kolorobot.github.io/spring-mvc-quickstart-archetype

  2. pom.xml 의 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 추가
  3. plugin versrion 추가
    <build>
        ...
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                ...
            </plugin>
            ...
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>2.22.0</version>
                ...
            </plugin>
        </plugins>
    </build>
    

maven 에서 local jar import 하기

<repository>
    <id>in-project</id>
    <name>In Project Repo</name>
    <url>file://${project.basedir}/libs</url>
</repository>

<dependency>
    <groupId>dropbox</groupId>
    <artifactId>dropbox-sdk</artifactId>
    <version>1.3.1</version>
</dependency>

libs 안의 구조는 아래처럼 만든다.
/groupId/artifactId/version/artifactId-verion.jar


원하는 곳에 local repository 를 만들어서 사용하는 법

개인적으로 이방법이 가장 나은듯 하다.
  • Randomized Sort: Configuring Maven to Use a Local Library Folder
    • mvn install:install-file -Dfile=c:\\a\\programming\\java\\simple-spring\\my-simple-spring\\lib\\ex-common-1.0.1.jar  -DgroupId=com.nh -DartifactId=ex-common -Dversion=1.0.1 -Dpackaging=jar -DlocalRepositoryPath=c:\\a\\programming\\java\\simple-spring\\my-simple-spring\\lib 
    • 이런식으로 등록하고, pom.xml 에 <dependency> 를 추가하면 된다.
maven-war-plugin 사용시
참고로 'maven-war-plugin' 을 사용하게 되면, <distributionManagement> 에 repository 를 추가해줘야 한다.
<repositories>
    ...
    <repository>
        <!-- DO NOT set id to "local" because it is reserved by Maven -->
        <id>lib</id>
        <url>file://${project.basedir}/lib</url>
    </repository>
</repositories>
<distributionManagement>
    <repository>
        <!-- DO NOT set id to "local" because it is reserved by Maven -->
        <id>lib</id>
        <url>file://${project.basedir}/lib</url>
    </repository>
</distributionManagement>

local repository 에 jar 을 등록

.so 등 다른 type 의 library 를 이용할 때

특정 file 을 war 에 포함하기

.dll 같은 특정파일을 target/WEB-INF/lib 에 넣고 싶었다. 이 .dll 을 lib/*.jar 에 의해 쓰이는 파일이다. 그래서 찾은 방법은 그냥 copy 해 넣는 방법이 가장 나았다. 아래를 참고하자.
<plugin>
 <groupId>org.codehaus.mojo</groupId>
 <artifactId>exec-maven-plugin</artifactId>
 <version>1.6.0</version>
 <executions>
  <execution>
   <id>copy-libs</id>
   <phase>prepare-package</phase>
   <goals>
    <goal>exec</goal>
   </goals>
  </execution>
 </executions>
 <configuration>
  <workingDirectory>${project.basedir}</workingDirectory>
  <executable>cp_sodll.bat</executable>
  <!-- <executable>bash</executable>
  <commandlineArgs>handleResultJars.sh</commandlineArgs> -->
 </configuration>
</plugin>

tomcat 띄우기

  1. tomcat download : Apache Tomcat® - Apache Tomcat 9 Software Downloads
  2. 압축을 푼다.
  3. cmd 창을 열고,
  4. <tomcat_root>\bin\catalina.bat 실행

tomcat의 debug port 열기

JPDA_ADDRESS port 로 attach를 하면 된다.
set JPDA_ADDRESS=8000
set JPDA_TRANSPORT=dt_socket
bin/catalina.bat jpda start



References

  1. Create Spring Web MVC Project from Maven Archetype in Eclipse Neon - Pega Exchange

[컴][웹] open graph meta tag

태그 / 메타태그 / 페북 메타태그 / 카카오톡 메타 태그 / 텔레그램 메타태그

open graph meta tag


meta property 중 open graph 관련 meta 를 수정할일이 생겼다. 몇가지 알게된 사실이 있어서 적어놓는다. 아래는 필자가 사용한 meta tag 이다.

<meta property="og:title" content="사이트 제목">
<meta property="og:type" content="website">
<meta property="og:description" content="이 사이트는 개인 사이트 입니다.">
<meta property="og:url" content="https://www.mysite.com:443">
<meta property="og:image" content="http://www.mysite.com/apple-touch-icon.png">
<meta property="og:image:secure_url" content="https://www.mysite.com/apple-touch-icon.png">
<meta property="og:image:width" content="180" />
<meta property="og:image:height" content="180" />


og:image 의 content 는 path 가 아니라 url 이다.[ref. 2]

처음에는 그저 path 를 적으면 되는지 알았다. 하지만 그러면 메신저등에서 제대로 동작하지 않는다.

https 를 사용할 때는 og:image:secure_url 을 사용하자.

이것은 확실치 않지만, ref. 1의 글에서도 https 는 secure_url 을 사용하라고 하기도 하고, 실제로 og:image 에 https url 을 넣고 텔레그램(telegram) 에서 테스트를 해봤는데 잘 동작하지 않았다.

og:image 의 url 을 변경하지 않으면 다시 updaet 하지 않는 경우도 있다.

이것은 적어도 facebook 에서는 맞는 이야기 같다. ref. 3 을 참고하자.

메신저의 cache 된 image 를 purge 하는 법

각 메신저마다 refresh 하는 법을 제공한다.




References

  1. The Open Graph protocol
  2. https://stackoverflow.com/a/9858694
  3. Webmasters - Sharing, Facebook developers



[컴][유틸] VSCode 에서 간단한 Maven project 사용하기

vscode java /

VSCode 에서 간단한 Maven project 사용하기


vscode 에서 Maven for Java 를 사용 해 보자.

java 관련 extension들

아래 3개의 extension 을 설치하자.


maven install

  1. 여기서는 Windows 를 이용한다.
  2. 여기 서 download 를 하자.(apache-maven-3.5.4-bin.zip) 을 다운로드 하면 된다.
  3. 그리고 원하는 경로에 압축을 풀자. 여기서는 아래 경로에 풀었다.
    1. c:\a\apps\maven\apache-maven-3.5.4
  4. Maven – Installing Apache Maven 에서 얘기하는 것처럼 Windows 에는 2가지를 해줘야 한다.
    1. %JAVA_HOME%변수 설정(시스템 > 고급 시스템 설정 >  환경변수 )
    2. %PATH%에 maven\bin 의 경로를 추가
  5. cmd 를 열어서 mvn -v 를 해서 동작하면 설정이 잘 된 것이다.

maven 으로 project 만들기

아래처럼 해주면 간단한 project 를 하나 생성할 수 있다.
mvn archetype:generate -DgroupId=com.mynamh.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false



참고: maven 의 Archetype : maven 의 Archetype은 maven template 을 자동으로 생성해주는 tool 같은 것이다. 자신만의 archetype 을 생성할 수도 있고, 기존에 만들어진 archetype 을 사용할 수도 있다.


Vs Code 에서 mvn path 설정하기

vscode 를 열자. 그리고 Open User Setting 을 하자. 그리고 아래 처럼 mvn 실행파일의 경로를 set 해주자. 아래는 Red Hat's Java Language Support extension을 설치한 상황에서 configuration 이다. (java.home)
{...
  "maven.executable.path": "c:\\a\\apps\\maven\\apache-maven-3.5.4\\bin\\mvn.cmd",
  "java.home": "c:\\Program Files\\Java\\jdk1.8.0_121", // Red Hat's Java Language Support extension 
  "maven.terminal.useJavaHome": true,
}

Vs Code 에서 project 불러오기

  • File > Open Folder > <project folder>선택

compile 하기

이제 command pallet (ctrl+shift+p) 에서 아래처럼 maven compile 을 하자.
  • Maven: Execute commands > my-app 선택 > compile

실행하기

compile 이 다 되면 F5를 눌러서 debugger 로 run 을 하면 된다.


Spring Web app (Spring Boot)

  • Build Java Web Apps with VS Code
    1. git clone https://github.com/spring-guides/gs-spring-boot.git
    2. vscode 에서 연다.
    3. complete/src/main/java/hello/Application.java 를 open
    4. F5(debugger run) 를 누르면, launch.json 이 생성된다.
    5. 다시 F5 를 누르면 실행된다.
    6. 브라우저를 열고 localhost:8080 으로 접속해 보면 화면이 보인다.

attach debugger

  • 간단한 hello world with spring 5 > tomcat의 debug port 열기 를 참고하자.
  • Tomcat for Java - Visual Studio Marketplace : (2019-10-01) 기준
    이것을 사용하려면 , tomcat 을 chocolety 의 기본설정으로 설치하면 안된다.(그냥 다운로드 받아서 설치하자.) tomcat directory 내에 모든 관련 파일들이 있어야 tomcat directory 로 인식하기 때문이다.
    여튼, 이 것을 이용해야, webapp 이 초기에 initializing 하는 부분에 대한 debugging 이 가능하다.
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        ...
        {
            "type": "java",
            "name": "Attach",
            "request": "attach",
            "hostName": "localhost",
            "port": 8000
        }
    ]
}

See also

  1. 쿠...sal: [컴][자바] vscode 에서 java 사용하기


[컴][웹] Scaling

스케일링 / 확장 / 웹 확장 / 서버 확장 / 서버 증설 / 디비 증설 / 디비 스케일링

Scaling

Database Scaling

https://youtu.be/dkhOZOmV7Fo



App Server Scaling

https://youtu.be/xUumgxZ04SM

[컴][리눅스] sudo group 에 계정 추가

자신의 계정의 sudo 가 되게 하는 법 / sudo가 안되는 이유 /

sudo group 에 계정 추가

자신의 계정의 sudo 가 안될때는 sudo group 에 user account 를 추가해주면 된다. 그리고 재로그인을 하자.

sudo usermod -a -G sudo <user-account>

gpasswd -a user_account group


group 에서 user 삭제

gpasswd -d user_account group


sudo 가 가능한 그룹 확인

vi /etc/sudoers

아래처럼 가능한 그룹을 확인할 수 있다.
...

%wheel  ALL=(ALL)   ALL

...


References

  1. sudo - How can I add a new user as sudoer using the command line? - Ask Ubuntu
  2. How do I remove a user from a group? - Unix & Linux Stack Exchange

[컴][리눅스] wtmp, utmpdump

로그관련  / 로그 / log / 리눅스 관리 로그 /


/var/log/wtmp

utmpdump 를 이용해서 최근의 접속 기록을 살펴볼 수 있다.
/var/log/wtmp 는 /etc/logrotate.conf 에 의해 일정기간, 일정 사이즈가 되면 wtmp.0 등으로 파일이 바뀐다.

# utmpdump /var/log/wtmp 

wtmp 의 의미

'w' 는 who 를 뜻한다. 'tmp' 는 temporary 에서 유래된 것이라 한다. 예전에 /tmp folder 에 있었기도 했고, file 자체가 주기적으로 교체되기 때문에 그렇다고 한다. 요즘은 timestamp 를 뜻하는 것이라고도 한다.


logrotate.conf

cat /etc/logrotate.conf


[컴][HDD] Degaussing (디가우징) 이후에 HDD 를 재사용할 수 있나?

하드디스크 디가우징후 다시 하드를 사용할 수 있나? / 하드 재사용 / 디가우징 하드 재사용


Degaussing 이후에 HDD 를 재사용할 수 있나?


요즘 디가우징(degaussing) 이 이슈이다. 그래서 관련해서 HDD 드라이브에 대해 좀 더 알아보기로 했다.

디가우징을 하면 데이터가 사라진다는 것은 알고 있다. 그럼 이 degaussing 을 한 HDD 를 다시 사용할 수 있을까??

degaussing tool 에 따라 다르다

결론은 degaussing tool 에 달려있다. degaussing 을 할 때 servo mark (또는 servo sector 라고 함) 를 지우느냐 그렇지 않느냐에 달려있다. ref. 3을 보면 servo mark 를 살리는 degaussing tool 도 존재하는 듯 하다.


servo mark, servo sector


그럼 이 servo sector 가 무엇이길래 이것에 따라 HDD 를 다시 사용할 수 있기도 하고 없기도 할까?

HDD 는 아래와 같이 만들어져 있다. 여기서 HDD 의 head arm 이 disk platter 위를 움직이면서 read/write 를 하게 된다. 이때 이 head arm 이 움직이는 길을 만들어주는 것이 servo sector 이다.
출처 : https://ayende.com/blog/174561/the-guts-n-glory-of-database-internals-managing-records

일단 HDD 를 구성하는 flatter 내부를 보자. 보다시피 servo mark 가 존재하고, servo mark 사이에 data 를 write 하게 된다.(좀 더 자세한 내용은 ref. 4를 참고하자)

ser




servowriter

servowriter 는 HDD 를 만드는 공장에서 platter 를 묶어서 HDD 로 만들기 전에 platter(raw media)위에 servo track 들을 그려준다.

그러니 만약 degaussing 으로 servo sector 가 사라졌다면, platter 를 빼서, servowriter 로 다시 servo sector 를 그려줘야 한다.


Servo(Servomechanism)

서보메카니즘은 "피드백 제어 시스템" 이다. ref. 1 의 설명에 나와 있지만, 자전거타기를 생각하면 이해하기 쉽다.

우리는 자전거를 타면서 넘어지지 않기 위해서 페달을 돌리고, 핸들을 좌우로 꺾는다. 그리고 돌부리가 보이면 핸들을 꺾어서 피하고, 다시 원위치로 돌아오는 등 상황에 따라서 자전거를 제어한다.

이렇게 상황(output) 에서 오는 결과(feedback) 을 보고, 다음 동작(input) 을 하는 것을 이야기한다.




References


  1. 서보 메커니즘 : 김상진
  2. Servowriter - Wikipedia
  3. Secure erase 9840 and 9940 data cartridges
  4. HDD from inside: Tracks and Zones. How hard it can be?
  5. 대통령 하드디스크도 통째 보관…근거없는 양승태 컴퓨터 '디가우징' - 노컷뉴스, 2018-06-28