프로젝트를 진행하면서 .properties 파일을 .yml 파일로 변경했다.

기본적인 작성 방식은 다르지만 설정 내용들을 비슷해서 각 문법에 맞게끔 변환만 해주면 된다.

 

아래는 내가 .properties 파일을 .yml 파일로 변경한 일부 예시이다.

변경 이후 설정한 포트 번호로 스프링부트가 잘 작동함을 확인했다.

 

한글로 적힌 부분들은 각자의 환경에 맞게 넣어주시면 됩니다.

 

application.properties 

spring.profiles.include=prod,jwt,oauth,redis,mail

application.yml

spring:
  application:
    name: 9T
  profiles:
    include: jwt,oauth,redis,mail
    active: prod

application-prod.properties

spring.config.activate.on-profile=prod

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://RDS 엔드포인트:3306/데이터베이스 테이블 이름?serverTimezone=Asia/Seoul&characterEncoding=UTF-8
spring.datasource.username=RDS 사용자 이름
spring.datasource.password=RDS 비밀번호
spring.jpa.hibernate.ddl-auto=update
spring.jpa.generate-ddl=true

spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true

server.port=9000

application-prod.yml

server:
  port: 9000

spring:
  application:
    name: prod

  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver # mysql 8버전
    # driver-class-name: com.mysql.jdbc.Driver # mysql 5버전
    url: jdbc:mysql://RDS 엔드포인트:3306/데이터베이스 이름?autoReconnect=true&serverTimezone=Asia/Seoul&characterEncoding=UTF-8
    username: RDS 유저이름
    password: RDS 비밀번호

  jpa:
    show-sql: true
    generate-ddl: true
    #database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
    hibernate:
      ddl-auto: update
    properties:
      hibernate.enable_lazy_load_no_trans: true
      hibernate.format_sql: true

application-dev.yml

server:
  port: 8080

spring:
  application:
    name: dev

  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver # mysql 8버전
    # driver-class-name: com.mysql.jdbc.Driver # mysql 5버전
    url: jdbc:mysql://RDS 엔드포인트:3306/데이터베이스 이름?autoReconnect=true&serverTimezone=Asia/Seoul&characterEncoding=UTF-8
    username: RDS 유저이름
    password: RDS 비밀번호

  jpa:
    show-sql: true
    generate-ddl: true
    #database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
    hibernate:
      ddl-auto: update
    properties:
      hibernate.enable_lazy_load_no_trans: true
      hibernate.format_sql: true

 

application-redis.properties

spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=비밀번호
spring.redis.lettuce.pool.max-active=10
spring.redis.lettuce.pool.max-idle=10
spring.redis.lettuce.pool.min-idle=2

application-redis.yml

spring:
  redis:
    host: localhost
    port: 6379
    password: 비밀번호
    jedis:
      pool:
        max-active: 10
        max-idle: 10
        min-idle: 2

application-jwt.yml

spring:
  jwt:
    secretKey: 시크릿키

application-oauth.yml

spring:
  security:
    oauth2:
      client:
        registration:
          google:
            client-id:클라이언트아이디
            client-secret: 클라이언트시크릿키
            redirect: 리다이렉트 주소 예시는 https://localhost:9000/googleLogin
            url:
              login: https://accounts.google.com/o/oauth2/v2/auth
              token: https://oauth2.googleapis.com/token
              profile: https://www.googleapis.com/oauth2/v3/userinfo

 

 

참고 사이트

https://blog.naver.com/PostView.nhn?blogId=codingspecialist&logNo=221499365350

https://github.com/SangHyunGil/SpringSecurityJWT-Local-OAuth2-EmailAuth-Redis/blob/main/src/main/resources/application.yml

https://blog.startsomething.dev/2021/05/08/yaml%EC%97%90%EC%84%9C-%EB%94%B0%EC%98%B4%ED%91%9C%EB%A5%BC-%EC%8D%A8%EC%95%BC-%EB%90%A0%EA%B9%8C%EC%9A%94/

https://velog.io/@code12/spring-boot-OAuth%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4-%EC%86%8C%EC%85%9C-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EA%B8%B0%EB%8A%A5-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0-myBatis%EA%B5%AC%EA%B8%80-%EB%A1%9C%EA%B7%B8%EC%9D%B8

https://velog.io/@seho100/Spring-boot%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-JWT-%EA%B5%AC%ED%98%84

application.properties와 applicaiton.yml 파일 모두 외부 설정 값 등을 관리하는 파일

스프링부트가 자동으로 로딩하는 설정 파일들

maven이 gradle로 넘어가고 있듯이 xml, properties 파일에서 yml로 넘어가는 트렌드

 

applicaion.properties

STS 진행시 자동 생성

파일 포맷 name=vaule

 

application.yml

인텔리제이에서  진행시 자동 생성

가독성이 좋다

.xml 파일과 거의 유사

계층 구조 형식으로 값 지정 가능

.yml 파일을 이용하기 위해선 SnakeYAML 라이브러리가 필요한데 이는 보통 spring-boot-starter의 의존성이 기본 제공

 

참고사이트

https://sillutt.tistory.com/entry/IntelliJ-applicationproperties-%EA%B3%BC-applicationyml%EC%9D%98-%EC%B0%A8%EC%9D%B4?category=365562

https://velog.io/@tjswlsdl135/application.properties-vs-application.yml

https://goddaehee.tistory.com/213

 

 

1. 오픈소스로 github에서 msi 파일 다운로드 

깃허브 링크

https://github.com/microsoftarchive/redis/releases

2.msi 파일 실행하여 설치

기본 포트는 6379로 설정돼있다.

다운로드 받은 파일 경로를 기억해두자.

3. Redis 서버 작동 확인 

cmd 창에서 netstat -an | findstr 6379 명령어로 확인 가능

정상 작동 상태

4. redis-cli.exe 실행

다운로드 받은 파일 경로로 들어간다.

 

서비스가 자동 등록 돼있고 재부팅시 서버 실행이 자동적으로 되므로 따로 시작을 안해줘도 되지만

따로 시작을 해야하는 상황이라면 redis-server.exe를 실행해야한다.

필자는 자동으로 실행되므로 따로 실행안했다.

 

redis-cli.exe 파일을 실행한다.

 

사진과 같이 ping을 쳤을 때 pong이 돌아오면 정상적으로 작동한다는 걸 확인할 수 있다.

 

5. 비밀번호 설정

다음과 같은 명령어 수행

CONFIG SET requirepass "비밀번호"

AUTH "비밀번호"

 

 

참고 사이트

https://velog.io/@dabeen-jung/Redis-%EC%9C%88%EB%8F%84%EC%9A%B010%EC%97%90%EC%84%9C-%EC%84%A4%EC%B9%98

 

 

 

캐시란?

데이터를 읽을 때 임의의 공간에 저장하여 다음에 읽을 때는 더 빨리 읽을 수 있도록 도와주는 공간

클라이언트가 웹 서버에 요청을 보내면 DB로 가기 전에 캐시 서버에 데이터가 있는지 확인한다.

이때, 캐시 서버에 데이터가 존재한다면 DB에 데이터 요청하지 않고도 바로 클라이언트에 캐시에 존재하는 데이터를 반환해준다. (cache hit)

존재하지 않는다면(cache miss) DB에 해당 데이터를 요청한다.

 

Redis란?

캐시 시스템

키-값 기반 인메모리 데이터베이스

다양한 자료 구조 지원

싱글스레드로 한 번에 하나의 명령어만 처리 가능

 

Redis가 지원하는 다양한 자료 구조

Strings

redis의 가장 기본적인 타입

Vinary-safe한 key-value 구조

Lists

Strings element의 모음

Linked List와 유사한 구조

Sets 

정렬되지 않은 strinf collection

Sorted sets

Sets 자료구조에 score라는 값을 추가로 두어 해당 값을 기준으로 순서를 매김

Hahses

내부에 key-value 구조를 하나더 가지는 Reids 자료구조

value로 또다른 key-value 매핑

Bit arrays(bitMaps)

bit array를 다루는 자료구조

HyperLogLogs

확률적 자료구조로 unique한 항목들의 카운팅하는데 사용

 

 

 

참고 사이트

https://velog.io/@dabeen-jung/Redis-%EC%9C%88%EB%8F%84%EC%9A%B010%EC%97%90%EC%84%9C-%EC%84%A4%EC%B9%98

https://brunch.co.kr/@jehovah/20

https://devlog-wjdrbs96.tistory.com/374

 

리디렉션 설정을 통해 ip를 주소창에 입력하면 저절로 도메인 주소로 넘어가게 설정할 수 있다.

 

1. nginx 설정 변경

$ sudo vi /etc/nginx/sites-available/default

 

 

아래와 같은 꼴로 블럭을 추가하면 된다.

 

server {

listen 80;

server_name aws IPv4 주소;

return 301 https://brynserver.site$request_uri;

}

 

+)301 리디렉션: 해당 URL이 영구적으로 새로운 URL

서버 및 클라이언트 언어에서 다른 수행 없이 곧 바로 리디렉션

302 리디렉션: 임시적으로 새로운 URL로 이동

$ sudo service nginx restart

 

 

이후, 아이피 주소로 접속해보면 도메인 주소로 변경돼있음을 확인 가능

개발용 서버와 배포용 서버를 분리하기 위해 서브 도메인을 적용해보자.

개발용 주소는 dev.도메인 주소로 설정하고 배포용 주소는 prod.도메인 주소를 사용하겠다.

이름은 취사 선택의 문제로 원하는 대로 설정해도 되며 필요에 의해 알맞는 이름으로 설정하면 된다.

1. 가비아에서 dns 추가

 

My가비아->도메인->해당 도메인 관리->DNS 정보->DNS 관리->DNS 설정

아래와 같이 레코드 추가하여 수정 후 저장

 

타입 : CNAME, 호스트 : prod, ,위치 : brynserver.site. , TTL : 3600

타입 : CNAME, 호스트 : dev, ,위치 :brynserver.site. , TTL : 3600

타입 : CNAME, 호스트 : www.prod, ,위치 : brynserver.site. , TTL : 3600

타입 : CNAME, 호스트 : www.dev, ,위치 :brynserver.site. , TTL : 3600

 

CNAME Canonical Name의 약자로 도메인 주소를 또 다른 도메인 주소로 매핑 시키는 형태의 DNS 레코드 타입

2. ec2 디렉토리 생성

root가 아닌 일반 계정에서도 디렉토리 생성할 수 있도록 권한을 변경해줘야 한다.

$ cd  /var/www/html
/var/www/html$ sudo chmod -R 777 .

 

뒤에 점 빼먹지 않게 조심

 

폴더를 각각 만든 후 거기에 페이지 실행 시 나오길 원하는 html 파일을 각각 만들어주면 된다. 

 

 

html 코드 예시도 밑에 첨부하겠다.

$cd product
$sudo vi index.html
//html 코드 작성
$cd ..
$cd develop
$sudo vi index.html
//hteml 코드 작성

html 코드 예시

<!DOCTYPE html>

<html>

  <head>

    <meta charset="utf-8">

    <title>브라우저 상단 탭 웹 사이트 제목</title>

  </head>

  <body>

    <h1>헤드 부분, 본문 제목 정도</h1>

    <p>본문 내용, 각 한글 부분 원하는 대로 작성해주시면 됩니다. </p>

  </body>

</html>

3. nginx 설정 변경

$sudo vi /etc/nginx/sites-available/default

$sudo vi /etc/nginx/sites-available/default

nginx 설정 파일에 아래 코드를 뒷부분에 추가 해주시면 됩니다.

index 다음에는 2번에서 만든 파일명을 적어주시면 됩니다.

이때 주의해야될 점은 원래 있던 server 블록과 괄호 유의하여 분리해줘야 됩니다!

server{

root /var/www/html/product;

index index.php;

server_name www.prod.도메인주소 prod.도메인주소;

location / {

try_files $uri $uri/ =404;

}



}

server{

root /var/www/html/develop;

index index.html;

server_name www.dev.도메인주소 dev.도메인주소;

location / {

try_files $uri $uri/ =404;

}

}

 

nginx 재시작

이때 재시작이 되지 않는다면 설정파일에 오타가 있거나 블럭을 제대로 구분해주지 않은 거니 다시 들어가서 수정해줘야한다.

$sudo service nginx restart

 

 

 

4. 서브도메인 정상 작동 확인

 

이후 서브도메인 주소로 실행해보면 제대로 작동함을 확인 가능

 

+ Recent posts