학교 작곡수업 마지막 과제로 만들어 보았다.


무언가, 혹은 누군가를 기다린다는 것이


내게는 설레면서도 약간은 쓸쓸한 느낌이 들었는데, 


최대한 그런 느낌을 상상하며 작곡을 해 보았다.


어디선가 들어본 것 같은 느낌이 드는 것 같기도 하고.,. 아닌 것 같기도 하고.,.


일단 듣기에는 좋은 것 같다.





학교에서 교양으로 작곡 수업을 듣는데, 기말고사 과제물로 작곡을 해야 했다.


하루종일 열심히 작곡했다.


1분 30초 정도 되는 곡인데, 느낌이 좋은 곡이 완성된 것 같아서 기분이 좋다.


왠지 이 곡의 제목은 '회상'이라는 단어와 어울리는 것 같아서 그렇게 지었다.






DAO(Data Access Object) : DB 데이터 조회/조작

DAOInterface/DAOImplement 로 구분지어 명세와 구현 분리하며 개발.

만약 Mybatis연동 때처럼 Interface만 필요한 경우 그냥 DAO라고 명시할 수 있음


DTO(Data Transfer Object) = VO(Value Object) : 계층 간의 데이터 교환을 위해 쓰이는 것.

VO는 Ready-Only 속성을 띔.


BO : 여러 DAO를 사용해 데이터 처리


이 모든게 Model 부분이고,


이제 Controller에서 Model과 View 조작.


참고 : https://pupli.net/2017/03/06/how-to-configure-spring-session-with-jdbc-for-mysql/


Springboot에서 Session 정보를 Mysql DB에 연동하는 방법에 대해 적어 보겠습니다.


Dependency는 다음과 같습니다.


저는 Maven을 사용합니다.


pom.xml

<dependency>

    <groupId>org.springframework.session</groupId>

    <artifactId>spring-session-jdbc</artifactId>

</dependency>

<dependency>

<groupId>mysql</groupId>

    <artifactId>mysql-connector-java</artifactId>

    <version>5.1.6</version>

</dependency>

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-jdbc</artifactId>

</dependency>


application.properties 파일에 다음과 같이 작성합니다.


spring.session.store-type=jdbc

server.compression.enabled=true

server.use-forward-headers=true

server.compression.mime-types=application/json,application/xml,text/html,text/xml,text/plain,text/css,application/javascript

logging.file=logbook-server.log

spring.datasource.url=jdbc:mysql:DB서버 IP/DB 이름

spring.datasource.username=ID입력

spring.datasource.password=PW입력

spring.datasource.driver-class-name=com.mysql.jdbc.Driver


# Number of ms to wait before throwing an exception if no connection is available.

spring.datasource.tomcat.max-wait=10000


# Maximum number of active connections that can be allocated from this pool at the same time.

spring.datasource.tomcat.max-active=50


# Validate the connection before borrowing it from the pool.

spring.datasource.tomcat.test-on-borrow=true


spring.jpa.hibernate.ddl-auto=create // 기존에 생성된 테이블들 삭제하고 새로 만드는 옵션

// jpa, 하이버네이트에 대한 간략한 설명은 요기 블로그를 보쟝. http://bcho.tistory.com/906


Table을 2가지 만든다.


SPRING_SESSION에는 생성시간, 등의 Session의 기본 속성에 대한 데이터를 저장하고,


SPRING_SESSION_ATTRIBUTES에는 유저의 Token Key와 저장한 데이터의 Key/Value 정보가 저장된다.


CREATE TABLE SPRING_SESSION (

    SESSION_ID CHAR(36),

    CREATION_TIME BIGINT NOT NULL,

    LAST_ACCESS_TIME BIGINT NOT NULL,

    MAX_INACTIVE_INTERVAL INT NOT NULL,

    PRINCIPAL_NAME VARCHAR(100),

    CONSTRAINT SPRING_SESSION_PK PRIMARY KEY (SESSION_ID)

) ENGINE=InnoDB;


CREATE INDEX SPRING_SESSION_IX1 ON SPRING_SESSION (LAST_ACCESS_TIME);


CREATE TABLE SPRING_SESSION_ATTRIBUTES (

    SESSION_ID CHAR(36),

    ATTRIBUTE_NAME VARCHAR(200),

    ATTRIBUTE_BYTES BLOB,

    CONSTRAINT SPRING_SESSION_ATTRIBUTES_PK PRIMARY KEY (SESSION_ID, ATTRIBUTE_NAME),

    CONSTRAINT SPRING_SESSION_ATTRIBUTES_FK FOREIGN KEY (SESSION_ID) REFERENCES SPRING_SESSION(SESSION_ID) ON DELETE CASCADE

) ENGINE=InnoDB;


CREATE INDEX SPRING_SESSION_ATTRIBUTES_IX1 ON SPRING_SESSION_ATTRIBUTES (SESSION_ID);


테이블 이름은 꼭 위와 같이 해야 한다. 기본 옵션으로 저 이름으로 되어 있는 것 같다.


다르게 해보려 했으나 옵션 설정을 아직 잘 모르겠다. 아시는 분은 댓글 부탁드려욧!


이제 Jdbc Session을 적용시켜야 한다. 


이것은 SpringBoot에서는 간단히 다음과 같이 @EnableJdbcHttpSession 어노테이션을 @Configuration 어노테이션과 함께 작성해 주면 적용된다.


@Configuration

@EnableJdbcHttpSession

public class HttpSessionConfig {

}


@EnableJdbcHttpSession에 대한 설명은 Spring문서 에서 자세히 확인할 수 있는데,


@Configuration 어노테이션이 달린 클래스와 함께 사용하면


SessionRepositoryFilter라는 클래스를 Bean으로 등록해 활성화시킨다고 한다.


SessionRepositoryFilter클래스는 Spring 서버가 HttpSession을 지원하도록 활성화시킨다.. 정도로 이해하고 있습니다.



이렇게 구성하면 DB에 세션 정보가 잘 저장되는 것을 볼 수 있습니다.

mysql 설치 시 기본으로 등록되어 있는 root 유저는 외부 접속 권한이 없다.


그래서 새로 권한을 부여해야 한다.


다음과 같이 입력한다.


grant all privileges on *.* to 'user id'@'%' identified by 'password';


*.* - [DB명.테이블명]

% - 모든 외부 IP에 대해 외부 접속을 허용한다는 의미이다.


이걸 하고 


flush privileges;


입력하여 변경된 privileges 사항들을 적용시킨다.


이제 mysql 설정파일인 /etc/mysql/mysql.conf.d/mysqld.cnf 를 텍스트 편집기로 열면



bind-address 부분이 있는데, 이를 위와 같이 주석처리 해 준다.


그리고 mysql server를 restart한다.


여기까지 했는데도 원격에서 접속이 되지 않는다면


아마 포트 문제일 것이다. mysql은 기본적으로 3306포트를 사용한다.


그렇다면 외부에서 접속할 수 있도록 포트를 열어 주어야 한다.


공유기 설정을 보면 있을 것이다.


만약 클라우드 서버를 이용하고 있다면 '방화벽 설정' 같은 이름으로 제공해 줄 것이다.

'DB > MySQL' 카테고리의 다른 글

[MySQL] 외부 접속 권한 설정  (0) 2018.01.22




참가자로 선정되어 23~24일 춘천 커넥트원에 다녀왔다!


모든 것이 기밀이라 하여 정말 아무 사진도 찍지 않았다...,아쉽..


굉장히 재미있고 유익한 시간이었다. 멘토님도 너무 좋고 팀원들도 다들 실력 좋고 착한 분들이었다.


프로젝트에 대한 자세한 사항은 Github에 올려 두었다.


https://github.com/hsb0818/NaverHackday2017Winter_Ranking_System


프로젝트 소스코드는 역시 기밀이라 하여 올리지 않았다.

'소식' 카테고리의 다른 글

Naver Campus Hackday 2017 Winter 참가자 합격  (0) 2017.11.26