본문 바로가기

실습64

application.yml 적용법 application.properties vs application.yml Spring Boot에서는 외부에서 환경 변수를 삽입할 수 있는 application.properties와 application.yml을 제공한다. application.properties는 key-value 형식으로 환경 변수를 설정할 수 있다. 그에 반해 yml은 계층적으로 환경 변수를 설정할 수 있다. 아무래도 properties보다 직관적으로 관리할 수 있고, key를 중복해서 작성해지 않아도 된다는 장점 때문에 최근 프로젝트에서는 yml을 주로 사용하게 되었다. 이에 properties를 yml로 바꾸는 방법과, 더불어 다중 profile을 적용하는 방법을 포스팅해놓고자 한다. properties 파일을 yml 파일로 전.. 2023. 1. 15.
JPA에서 외래키 사용 오늘은 JPA에서 외래키를 사용하는 방법을 작성해놓을까 한다. DB를 설계할 때 테이블간 관계 표현을 위한 외래키 사용은 필수이다. JPA에서는 이러한 외래키를 클래스 안에 클래스를 선언함으로써 사용 가능하도록 기능을 제공하고 있다. 아래와 같은 DB가 있을 경우, 다음과 같이 클래스를 생성하면 JPA를 사용한 외래키를 생성할 수 있다. Parent.java @Entity @Getter @Setter @NoArgsConstructor @AllArgsConstructor @Table(name="parent_table") public class Parent { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="parent_id", nul.. 2022. 12. 13.
[Shell Script] 프로그램 실행/종료 스크립트 만들기 다음 포스팅에서 이어진다. https://123okk2.tistory.com/387 [Shell Script] 쉘 스크립트 문법 쉘 스크립트의 최상단은 다음과 같은 명령어로 시작되어야 한다. #!/bin/sh 해당 명령어는 스크립트를 실행할 쉘을 지정하는 문법이다. 이제부터 쉘 스크립트의 사용법을 간략하게 적어보고자 한 123okk2.tistory.com 프로그램을 만들었으면 클라이언트 혹은 서버에 해당 프로그램을 배포해야 한다. 하지만 동일 프로그램을 실행시키더라도 실행하는 환경에 따라 application.properties (혹은 yml), bootstrap.properties 등의 설정 파일의 값은 바뀌어야 한다. 물론 이 부분은 윈도우는 7Zip등을 통해, 리눅스는 vim 등을 통해 얼마든지 수.. 2022. 9. 18.
[Shell Script] 쉘 스크립트 문법 쉘 스크립트의 최상단은 다음과 같은 명령어로 시작되어야 한다. #!/bin/sh 해당 명령어는 스크립트를 실행할 쉘을 지정하는 문법이다. 이제부터 쉘 스크립트의 사용법을 간략하게 적어보고자 한다. 쉘 스크립트는 일반 함수형 프로그래밍 언어와 마찬가지로 사용할 수 있다. 가장 먼저 알아볼 것은 변수 선언 및 입출력이다. 변수 선언 및 입출력 변수 선언은 일반적으로 다음의 세 가지 경우로 나뉜다. 선언 시 고정값을 입력하는 방법 쉘 스크립트 실행 시 파라미터를 받아 사용하는 방법 사용자에게 직접 입력받아 사용하는 방법 가장 먼저 고정값을 이용하는 방법은 아래와 같다. num_var=123 chr_var='123' *이 때 = 양 옆에는 띄어쓰기가 없어야 함을 주의한다. 출력은 echo 명령어를 이용하며, 변.. 2022. 8. 16.
JPA 페이징 게시판에 약 100,000개의 게시글들이 등록되어 있다고 가정한다. 이 경우 굳이 사용자에게 100,000개의 게시글들을 전부 제공해야 할까? 만약 그런다면 속도가 느린 것은 당연하고, 한 페이지 내에서 모든 게시글들을 보여주기 어려워 사용자 편의성이 크게 떨어질 수 있다. 페이징이란 이러한 경우 사용하는 것으로, 게시판을 페이지 단위로 나누어 사용자게에 제공하는 작업이다. 페이징은 원래대로라면 DB 파라미터에 LIMIT 등의 조건을 추가하면 구현할 수 있다. 하지만 DB마다 조금씩 그 방식에 차이가 있기 마련인데, ORM인 JPA는 이러한 페이징도 DB의 종류에 관계없이 쉽게 구현할 수 있도록 Pageable이라는 클래스를 제공한다. 즉 JPA는 Pageable이라는 클래스를 파라미터로 주고받으며 위의.. 2022. 7. 25.
application.properties (yml) 암호화 신입사원분을 대상으로 하는 OJT 과정 중 "Spring Boot 기반 개발" 과정을 담당하게 되었다. 이에 간단한 자료와 예제 프로젝트를 작성하여 OJT를 진행하였다. application.properties (yml)에 대한 설명을 하던 중 다음과 같은 질문을 받았다. "저 application.properties 내 DB 정보는 외부에 유출이 되면 안될텐데, 저걸 저렇게 그대로 작성해도 괜찮나요?" application.properties 내 정보는 특정 라이브러리를 사용하면 암호화할 수 있다는 것 정도는 알고 있었다. 하지만 그 라이브러리가 무엇인지, 어떻게 사용할 수 있는지는 미처 알지 못했었다. 그래서 위 질문에 제대로 된 답변을 내놓지 못했다. OJT가 끝난 후 위에서 받은 질문은 언제든지 .. 2022. 7. 25.
Spring WebFlux Filter 처음으로 Spring Webflux를 이용한 프로젝트에 투입되었다. 해당 프로젝트의 요구사항 중에는 Request의 특정 Header에 URL이 들어오는데, 해당 URL에 접속하여 그 안의 정보를 파싱해서 DB에 유지해야 하는 요구사항이 존재했다. 이 요구사항을 식별했을 때 "이 정도면 Filter를 사용하면 쉽게 해결되겠는데?" 라는 생각이 들었고, 평소와 다를 것 없이 Filter를 작성하려고 했으나 실패했다. Spring Web과 달리 Spring Webflux는 별도의 방식으로 Filter를 제공하기 때문이았다. Spring Webflux에서 Filter를 사용하기 위해서는 org.springframework.web.server.WebFilter를 상속받은 클래스를 생성해야 한다. 해당 클래스는 .. 2022. 7. 25.
Spring Security rememberMe (자동 로그인) 웹 사이트들을 보면 종종 로그인 정보 저장, 내 정보 저장 등 사용자의 정보를 기억하고 추후 웹 사이트 재방문 시 별도의 로그인 과정 없이 인증이 수행되도록 하는 기능이 존재한다. 문득 Spring의 인증/인가를 담당하는 Spring Security도 위의 기능을 제공하는지 궁금해졌고, 찾아본 결과 rememberMe라는 이름으로 해당 기능을 간편하게 구현할 수 있도록 제공한다는 것을 알아냈다. 그래서 해당 기능을 공부해보았고, 추후에 있을 프로젝트에서 언제든지 해당 기능을 쉽게 구현할 수 있도록 코드와 사용법을 정리해놓으려고 한다. 메인 주제가 Spring Security이기에 이전에 작성한 Spring Security 포스팅에서 이어서 작성한다. 가장 먼저 해야할 일은 HTML에 자동 로그인을 위한 .. 2022. 7. 25.
Docker 기본 명령어 (계속 추가) Community Edition 설치 yum -y install yum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin Docker 명령어 사용 시 탭 사용 # yum install bash-completion # curl https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/contrib/completion/bash/docker -o /etc/bash_completion.d/doc.. 2022. 7. 13.
컨테이너 설치 및 실행 (계속 추가) MariaDB Docker Container 이미지 설치 # docker pull mariadb 컨테이너 실행 # docker run \ -p 3306:3306 \ -v {로컬 custom.cnf 파일}:/etc/mysql/conf.d/custom.cnf \ -v {로컬 초기 설정 sql문이 포함된 디렉토리}:/docker-entrypoint-initdb.d/ \ -v {데이터를 저장할 로컬 디렉토리}:/var/lib/mysql/ \ -v {로그를 저장할 로컬 디렉토리}:/var/log/ \ -e MYSQL_ROOT_PASSWORD=password \ -e MYSQL_ROOT_HOST=%\ -e TZ=Asia/Seoul \ --restart=always \ --name=mariadb \ -d \ mari.. 2022. 6. 26.
Ehcache 아래 포스팅에서 이어진다. https://123okk2.tistory.com/326 Spring Boot 캐시 사용 개발이 완료된 프로그램이 있다. 해당 프로그램은 필요 이상의 인프라 (DB, RabbitMQ 등)를 요구했고, 이 점으로 인해 설치가 어렵고 프로그램의 복잡도가 높았다. 그래서 해당 프로그램의 인프라 123okk2.tistory.com 기본적으로 아무런 선언 없이 캐시를 사용하면 ConcurrentMapCacheManager가 빈으로 등록되어 사용된다. @Autowired CacheManager cacheManager; public String getCacheType() { return cacheManager.toString(); } 프로젝트를 만들어 위의 함수를 만든 다음 테스트로 함수를.. 2022. 4. 2.
Redis In Java_메시지 큐 https://123okk2.tistory.com/344 Redis In Java_자료구조 Redis 레디스는 인메모리 기반의 키-값 데이터 저장소이다. 인메모리의 특성상 아주 빠른 속도를 가지고 있고, 이에 따라 자주 사용하는 데이터 정도를 저장하는 간단한 데이터베이스 정도로 생 123okk2.tistory.com 윗글에서 이어서 포스팅을 진행하자. 남이 만든 프로그램을 인수인계 받는 것은 참 어려운 일이다. 구조를 하나하나 다 뜯어보고, 코드 내부도 전부 읽어봐야 하니까 말이다. 아주 힘든 일이지만 그래도 그만큼 얻는 건 많은 것 같다. 만약 이번에 해당 프로그램을 인수인계 받지 않았다면 Redis를 메시지 큐로도 활용할 수 있다는 사실을 알지 못했을 테니까. *함께 설치되는 인프라 중에 Rabbit.. 2022. 3. 20.