반응형

배치에서 노드.js 를 실행시켜야 하는데
해당 파일명을 파라미터로 넘겨야한다

하드 코딩 하려다 찾아봄

%~n0 파일명
%~x0 확장자 합쳐서 전달

echo "C:\Program Files\Centric Software\C8\nodejs\node.exe" "SendTest.js" %~nx0


그 외 기타

%~0   파일전체경로 C:\BAT\Path\240613.bat
%~d0 드라이브 명 C:
%~p0 경로  \BAT\Path\

%~n0 파일명 240613
%~x0 확장자 .bat

반응형
반응형
param.replaceAll("/", "\\\\")

 

반응형
반응형

원본 유지 & 파일추적 중지

git update-index --skip-worktree file1
// 위 건 영구히 추적하지 않음.
// 아래 건 변화있으면 풀림.
git update-index --assume-unchanged file1

사용 예 ) git update-index --skip-worktree  ./.gitignore

 

넌 좀 가만히 ~~ 있어 ㅋㅋㅋ

반응형
반응형

도커컴포즈 는 탭에 아주 예민스럽다

별거 아닌데 탭 하나에 ㅠㅠ 삽질은 10분이나...

 

폴더 하나 만들고 

전 c 드라이브에 mariadb

 

mariadb 폴더는 처음에 없어요~~

그 후 .env 파일 과 docker-compose.yml 파일을 생성한다.

 

MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=1234
MYSQL_DATABASE=edu
MYSQL_USER=edu
MYSQL_PASSWORD=1234

.env

 

version: "3"

services:
    mariadb:
        image: mariadb:latest
        ports:
        - 3306:3306
        volumes:
        - ./mariadb/Shared/data/mariadb/conf.d:/etc/mysql/conf.d
        - ./mariadb/Shared/data/mariadb/data:/var/lib/mysql
        - ./mariadb/Shared/data/mariadb/initdb.d:/docker-entrypoint-initdb.d
        env_file: .env
        networks:
        - backend
        restart: always

networks:
  backend:

docker-compose.yml

 

항상 탭을 확인하자... 으으으으

 

파일 2개 만든 후

 

해당 폴더에서  docker-compose up -d

모두 올라가면 도커 프로그램 확인하면 

콘테이너에 잘 올라간걸 확인하였다..

그리고 볼륨 폴더도 자동으로 쫘잔 생성 됨 

 

쓰봉 tab 12시에 자려고 했는데 이것땜시 

 

참고로 볼륨 설정을 통해 도커 꺼졌다 켜져도 데이타는 그대로 살아있음 !!! 

 

귀찮게 로컬 DB 매번 설치 하지 마시고 도커 이용하세요~~

귀찮음이 날 학습 시킴니다

근데 할때 마다 새로운 도커 

이거 몇년전에 프로젝트에서 해봤는데 ... 전혀 기억이 안나요 ㅎㅎㅎㅎㅎㅎㅎ

 

반응형
반응형

JPA 기본 설정 완성 후 

 

소스 작업 전 테스트 소스를 먼저 만들어보자

 

Base도메인 설정

 

@MappedSuperclass
@EntityListeners(value = { AuditingEntityListener.class })
//spring jpa AuditingEntityListener 에서 가져옴
// 해당 클래스가 적용되면 엔티티가 데이터베이스에 추가 / 변경될 때 자동으로 시간 값을 저장
// AuditingEntityListener 활성화 하기 위해 프로젝트 설정에 @EnableJpaAuditing 추가 해야함
@Getter
public class BaseEntity {

    @CreatedDate
    @Column(name = "regdate", updatable = false)
    private LocalDateTime regDate;

    @LastModifiedDate
    @Column(name = "moddate")
    private LocalDateTime modDate;


}

repository 인터페이스 설정

 

// spring jpa data 이용할 때 JpaRepository 인터페이스를 이용해서
// 인터페이스 선언만으로 데이터 베이스 기본 작업 CRUD 와 페이징 처리가 가능하다.

public interface BoardRepository extends JpaRepository<Board, Long> {}

실제 사용 Board 도메인 설정

@Entity
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Board extends BaseEntity {
    //BaseEntity 에서 전체 적용 되는 데이터베이스 값을 가져온다

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    // GenerationType.IDENTITY 데이터 베이스에 위임-auto_increment (mysql/maria)
    private Long bno;

    @Column(length = 500 , nullable = false) //컬럼 길이와 null  허용 여부
    private String title;

    @Column(length = 2000 , nullable = false)
    private String content;

    @Column(length = 50 , nullable = false)
    private String writer;

}

 

인서트 테스트 코드 작성 후 RUN ~~~

@SpringBootTest
@Log4j2
public class BoardRepositoryTest {

    @Autowired
    private BoardRepository boardRepository;

    @Test
    public void testInsert(){
        IntStream.rangeClosed(1,100).forEach( i ->{
            Board board = Board.builder()
                    .title("제목 ... "+i)
                    .content("내용 ... "+ i)
                    .writer("user"+(i%10))
                    .build();
            Board result = boardRepository.save(board);
            log.info("BNO : " + result.getBno());
        });
    }
}

위 코드를 GPT가 분석해 줌

위의 자바 코드는 빌더 패턴을 이용하여 board 객체를 생성하는 코드입니다.
빌더 패턴은 복잡한 객체를 생성할 때, 객체의 생성과 표현을 분리하여 객체를 생성하는 디자인 패턴입니다. 이 코드에서는 빌더를 사용하여 제목, 내용 및 작성자가 있는 게시판 객체를 생성합니다.

빌더는 메소드 호출 체인으로 사용되고 있습니다. title() 메소드는 i 변수의 값과 문자열을 연결하여 게시판의 제목을 설정합니다. content() 메소드는 i 변수의 값과 문자열을 연결하여 게시판의 내용을 설정합니다. writer() 메소드는 i를 10으로 나눈 나머지와 문자열을 연결하여 게시판의 작성자를 설정합니다.

마지막으로 build() 메소드가 호출되어 빌더가 설정한 값으로 새로운 board 객체가 생성되고 반환됩니다.

 

실제 스프링 띄우면서 JPA 테이블 생성하고 인서트 까지 이상없이 실행

Starting Gradle Daemon...
Gradle Daemon started in 1 s 5 ms

> Task :compileJava
> Task :processResources UP-TO-DATE
> Task :classes
> Task :compileTestJava
> Task :processTestResources NO-SOURCE
> Task :testClasses
> Task :test

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.0.5)

2023-04-22T17:35:45.154+09:00  INFO 6100 --- [    Test worker] o.d.j.repository.BoardRepositoryTest     : Starting BoardRepositoryTest using Java 17.0.4 with PID 6100 (started by user in C:\Users\user\IdeaProjects\jisou)
2023-04-22T17:35:45.155+09:00  INFO 6100 --- [    Test worker] o.d.j.repository.BoardRepositoryTest     : No active profile set, falling back to 1 default profile: "default"
2023-04-22T17:35:45.570+09:00  INFO 6100 --- [    Test worker] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2023-04-22T17:35:45.616+09:00  INFO 6100 --- [    Test worker] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 38 ms. Found 1 JPA repository interfaces.
2023-04-22T17:35:45.925+09:00  INFO 6100 --- [    Test worker] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2023-04-22T17:35:45.976+09:00  INFO 6100 --- [    Test worker] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 6.1.7.Final
2023-04-22T17:35:46.227+09:00  INFO 6100 --- [    Test worker] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2023-04-22T17:35:46.373+09:00  INFO 6100 --- [    Test worker] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@18b40fe6
2023-04-22T17:35:46.375+09:00  INFO 6100 --- [    Test worker] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2023-04-22T17:35:46.427+09:00  INFO 6100 --- [    Test worker] SQL dialect                              : HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
Hibernate: 
    
    create table board (
       bno bigint not null auto_increment,
        moddate datetime(6),
        regdate datetime(6),
        content varchar(2000) not null,
        title varchar(500) not null,
        writer varchar(50) not null,
        primary key (bno)
    ) engine=InnoDB
2023-04-22T17:35:47.117+09:00  INFO 6100 --- [    Test worker] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2023-04-22T17:35:47.126+09:00  INFO 6100 --- [    Test worker] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2023-04-22T17:35:47.217+09:00  WARN 6100 --- [    Test worker] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2023-04-22T17:35:47.663+09:00  INFO 6100 --- [    Test worker] o.d.j.repository.BoardRepositoryTest     : Started BoardRepositoryTest in 2.684 seconds (process running for 3.944)
Hibernate: 
    insert 
    into
        board
        (content, moddate, regdate, title, writer) 
    values
        (?, ?, ?, ?, ?)
2023-04-22T17:35:47.872+09:00  INFO 6100 --- [    Test worker] o.d.j.repository.BoardRepositoryTest     : BNO : 1
Hibernate: 
    insert 
    into
        board
        (content, moddate, regdate, title, writer) 
    values
        (?, ?, ?, ?, ?)
2023-04-22T17:35:47.891+09:00  INFO 6100 --- [    Test worker] o.d.j.repository.BoardRepositoryTest     : BNO : 2
Hibernate: 
    insert 
    into
        board
        (content, moddate, regdate, title, writer) 
    values
        (?, ?, ?, ?, ?)
2023-04-22T17:35:47.907+09:00  INFO 6100 --- [    Test worker] o.d.j.repository.BoardRepositoryTest     : BNO : 3
Hibernate: 
    insert 
    into
        board
        (content, moddate, regdate, title, writer) 
    values
        (?, ?, ?, ?, ?)
2023-04-22T17:35:47.925+09:00  INFO 6100 --- [    Test worker] o.d.j.repository.BoardRepositoryTest     : BNO : 4
Hibernate: 
    insert 
    into
        board
        (content, moddate, regdate, title, writer) 
    values
        (?, ?, ?, ?, ?)
2023-04-22T17:35:47.942+09:00  INFO 6100 --- [    Test worker] o.d.j.repository.BoardRepositoryTest     : BNO : 5
Hibernate: 
    insert 
    into
        board
        (content, moddate, regdate, title, writer) 
    values
        (?, ?, ?, ?, ?)
2023-04-22T17:35:47.959+09:00  INFO 6100 --- [    Test worker] o.d.j.repository.BoardRepositoryTest     : BNO : 6
Hibernate: 
    insert 
    into
        board
        (content, moddate, regdate, title, writer) 
    values
        (?, ?, ?, ?, ?)
2023-04-22T17:35:47.974+09:00  INFO 6100 --- [    Test worker] o.d.j.repository.BoardRepositoryTest     : BNO : 7
Hibernate: 
    insert 
    into
        board
        (content, moddate, regdate, title, writer) 
    values
        (?, ?, ?, ?, ?)
2023-04-22T17:35:47.989+09:00  INFO 6100 --- [    Test worker] o.d.j.repository.BoardRepositoryTest     : BNO : 8
Hibernate: 
    insert 
    into
        board
        (content, moddate, regdate, title, writer) 
    values
        (?, ?, ?, ?, ?)
2023-04-22T17:35:48.014+09:00  INFO 6100 --- [    Test worker] o.d.j.repository.BoardRepositoryTest     : BNO : 9
Hibernate: 
    insert 
    into
        board
        (content, moddate, regdate, title, writer) 
    values
        (?, ?, ?, ?, ?)
2023-04-22T17:35:48.030+09:00  INFO 6100 --- [    Test worker] o.d.j.repository.BoardRepositoryTest     : BNO : 10
Hibernate: 
    insert 
    into
        board
        (content, moddate, regdate, title, writer) 
    values
        (?, ?, ?, ?, ?)
2023-04-22T17:35:48.047+09:00  INFO 6100 --- [    Test worker] o.d.j.repository.BoardRepositoryTest     : BNO : 11
Hibernate: 
    insert 
    into
        board
        (content, moddate, regdate, title, writer) 
    values
        (?, ?, ?, ?, ?)
2023-04-22T17:35:48.060+09:00  INFO 6100 --- [    Test worker] o.d.j.repository.BoardRepositoryTest     : BNO : 12
Hibernate: 
    insert 
    into
        board
        (content, moddate, regdate, title, writer) 
    values
        (?, ?, ?, ?, ?)

디비 인서트 확인

반응형
반응형

컨트롤러에서 넘어본 변수 .. 에러 화면

 

세팅에서 thy 로 검색후 

아래처럼 변경하면 변수 검사 하지 않아서 오류 발생 안함 

 

페이지에 오류가 보이믄 쫘증쫘증

반응형
반응형

에디트 컨비그에서 

On Update action >> update classes and resources

On freme deactivation >> update classes and resources 선택하면 된다

 

 

반응형
반응형

gradle could not find mysql:mysql-connector-java

 

build.gradle 설정 파일에 아래 처럼 설정 되어 있는걸

 

 

 

runtimeOnly  'mysql:mysql-connector-java'

 

>>  아래 처럼 변경 하고 다시 빌드 하니 오류가 해결 됨

runtimeOnly 'com.mysql:mysql-connector-j'

 

시간이 지나면서 스프링의 버전이 업데이트되고, mysql을 연동하는 gradle입력 코드가 변경 되었다고 한다 

 

출처 : https://skyriv312079.tistory.com/35

 

[Spring] Spring boot와 Mysql 연동 (Gradle)

스프링을 이용해 공부를 하면서 기존에는 H2 데이터베이스를 사용하다가 Mysql을 사용해서 연결을 해보려고 한다. application.properties과 build.gradle의 파일을 비교 변경하면서 진행하려고 한다. build.g

skyriv312079.tistory.com

 

 

성공 ~

 

 

 

반응형
반응형

mysql 도 설치 했으니 

오늘은 web 서버 세팅까지 알아보도록 합시다!

 

reverse proxy (역방향 프록시)

보통 apache 와 nginx가 사용 된다

 

기본 개념

외부 인터넷에서 내부(서버) 망으로 들어오는 요청을 , 중간 프록시 서버가 중계하는 방식

 

브라우저에서 http request 를 nginx 가 먼저 받아서 처리

  nginx 처리할 수 있는 요청은 nginx가 처리하고 (정적파일 이미지나 html)

  Java 서버 애플리케이션은 url 요청은 tomcat에게 전달한다. 

 

기본 역활

load balancing, http cache, https

 

nginx 설치 

sudo apt install nginx

 

nginx 설정

tomcat으로 request forwarding 하기 위한 설정 파일 생성

 

 

sudo vi /etc/nginx/sites-available/tomcat.conf

 

파일에 입력

 

upstream tomcat {

        server 127.0.0.1:8080 weight=100 max_fails=5 fail_timeout=5;

}

 

server {

        listen 80;

        server_name www.test.org;

 

        location / {

                proxy_set_header X-Forwarded-Host $host;

                proxy_set_header X-Forwarded-Server $host;

                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

                proxy_pass http://tomcat/;

        }

}

요청 URL 에서 hostname 이 www.test.org  이면  nginx 에서 처리해서 tomcat 으로 보냄

 

중계 설정 파일 활성화

 

sudo ln -s /etc/nginx/sites-available/tomcat.conf /etc/nginx/sites-enabled/

 

nginx  재시작

 

sudo service nginx restart

 

tomcat 설치 

sudo apt install tomcat9

https 설정

https 프로토콜 통신에는 SSL 인증서가 필요하다. (SSL certificate)

인증서 무료로 발급해 주는 비영리 기관이 있다.

 

https://letsencrypt.org/ko/

 

Let's Encrypt - 무료 SSL/TLS 인증서

 

letsencrypt.org

 

Let's encrypt 기관이 제공하는 certbot (certification robot) 데몬을 이용하면

인증서 발급, 인증서 설치, 인증서 갱신이 모두 자동으로 처리된다

SSL 인증서는 90 일 마다 갱신되어야 한다.

이 갱신 작업도 certbot에 의해 자동으로 처리된다.

certbot 설치

sudo apt install certbot python3-certbot-nginx

 

https://설정한 도메인 설정

 

sudo certbot --nginx -d www.test.org  

 

위 명령은, 암호화된 https 프로토콜로만 설정 도메인을 접근할 수 있도록 설정 !!

https:// 설정한 도메인으로 접속 성공 !! 

 

오늘 작업 완료 !!

 

다음에는 직접 만든 스프링 게시판을 오라클 클라우드에 돌려보는걸로 다가 

반응형
반응형

클라우드 인스턴스 우분투 세팅

 

패키지 업데이트

 

sudo apt update

 

sudo apt upgrade

(2번째건 좀 시간이 걸리네요 커피 한잔 ~ ㅎㅎ)

 

2G 크기의 스왑 영역 만들기

기본 메모리가 낮아서 스왑 영역을 만들어서 공간을 늘려주어야 합니다. 

 

sudo dd if=/dev/zero of=/swapfile bs=1M count=2048

sudo chmod 600 /swapfile

sudo mkswap /swapfile

sudo swapon /swapfile

 

차례대로 하나씩 입력해 주세요

/etc/fstab 파일에 swapfile 등록

 

sudo vi /etc/fstab

위 명령어로  /etc/fstab 파일을 열어서,

이 파일의 마지막 줄에 아래 내용을 추가하자.

 

/swapfile  swap  swap  defaults  0  0

 

스왑 영역 확인

 

 

 

ubuntu 방화벽 설정

ubuntu 방화벽에서 HTTP 80 포트를 열자

sudo iptables -I INPUT 5 -i ens3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

 

ubuntu 방화벽에서 HTTPS 443 포트를 열자

sudo iptables -I INPUT 5 -i ens3 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT

 

끝 입니다.

다른 포트 해제  필요하면 노란색 포트부분만 바꿔서 추가 하시면 됩니다~~

 

ubuntu 리눅스의 방화벽

netfilter

Ubunt 리눅스 커널의 방화벽(packet filtering system) 시스템은 netfilter 이다.

 

iptables 명령

netfilter 방화벽 설정 명령이 iptables 이다.

iptables 명령은 사용법이 어렵

 

mysql 설치

sudo apt install mysql-server

 

설치~~~중

mysql root 계정 활성화

sudo mysql -u root

USE mysql;

UPDATE user SET plugin='mysql_native_password' WHERE User='root';

FLUSH PRIVILEGES;

exit;

 

비밀번호 신규 등록

mysql root 계정의 비밀번호를 처음 등록하는 명령

 

mysqladmin -u root password

 

 

 

외부 접속 확인 

로컬 pc에서 디비툴 로 테스트 해본다

 

 툴 DBeaver 사용하고 있다.

SSH 탭에서 

실제 오라클 인스턴스 아이피 주소를 넣고 터널링 하면 원격 접속 가능하다

와웅 외부 접속 까지 성공했으요~~

수고하셨습니다. 

이제 외부 접속디비 무료 구축 완료 입니다 ㅎㅎㅎ

반응형

+ Recent posts