SpringBoot
-
Scale out 분산 환경에서의 세션 관리SpringBoot 2021. 8. 13. 19:49
후에 Scale out 분산 서버를 구축해보기 위해 작성한 포스팅입니다. 몇 가지의 토이 프로젝트들을 진행하면서 단일 서버로만 구축해 진행해보았습니다 개발을 해 나가면서 수많은 사용자들이 사용하는 서비스들은 어떻게 구축되었고, 어떤 방법들이 있는지에 대해 궁금해져 찾아보고 정리해보고 분산 서버 환경에서의 Session 관리는 어떻게 되는지 공부해보기로 했습니다. 먼저 단일 서버로 구현된 서비스는 많은 사용자가 몰려 서버가 감당할 수 없거나, 서버에 장애가 발생하면 치명적인 손실로 다가올 수 있을 것 같습니다. 그렇기에 많은 서비스들이 여러 대의 서비스를 두어 사용하는 것으로 알고 있는데 먼저 서버의 확장 방법은 Scale up, Scale out이 있습니다. 확장 방법 1. Scale up 수직적 확장 ..
-
Spring Security & JWT 사용할 때 조회 쿼리 여러번 발생 처리SpringBoot/Spring Security & JWT 회원 조회 이슈 2021. 6. 18. 21:53
Spring Security & JWT 사용 시 회원 조회 쿼리가 여러 번 나가는 현상 문제점 Spring Security와 JWT를 사용해 인증을 처리하는 프로젝트를 개발하던 중 JWT 토큰을 통해 회원 정보를 조회하는 UserDetails userDetails = memberService.loadUserByUsername(claims.getSubject()); 해당 로직이 2번 이상씩 반복되는 현상이 발생했습니다. 원인 확인해본 결과 JwtFilter 클래스에 @Componenet 컴포넌트를 선언하면 필터가 두번 등록되어 필터가 두번 돌아 조회 쿼리가 두번 나가는 것을 Jwt 멤버 조회 쿼리가 두번 나가는 것으로 착각한 것이었습니다. 사실 조회 쿼리가 두번 나가는 것이 아닌 필터가 두번 등록되어 중첩..
-
Spring Boot - WebSocket & JWT & Spring Security 토큰 인증SpringBoot/WebSocket 2021. 6. 18. 19:16
개발 환경 : Spring Boot, Maven, Web Socket ( Sock JS ), Spring Secuirty , Json Web Token, Vue jwt 인증 헤더 : 'Authorization' JWT 인증 기반의 프로젝트에서의 인증 JWT를 기반으로 하는 제 프로젝트의 인증은 클라이언트에서 보내는 모든 요청에 JWT를 넣어 전송하고, 서버에서 이를 검증해 통신을 주고받게 사용합니다. 문제점 발생 위의 개발환경에서 채팅 기능을 개발하던 중 소켓을 연결할 때 JWT 토큰이 인식되지 않아 401 UNAUTHORIZED 로 정상적으로 동작하지 않는 이슈가 발생했습니다. 왜 발생했을까 ? 왜 그런가? 생각했을 때 떠오른 것은 401이 난다는 건 인증이 제대로 처리가 안됐나? 였습니다. 하지만 다..
-
Spring Boot - 유효성 검증 ( Validate )SpringBoot/유효성 검증 2021. 6. 18. 00:01
Maven Dependency 입니다. Pom.xml org.springframework.boot spring-boot-starter-validation Gradle implementation 'org.springframework.boot:spring-boot-starter-validation' BoardRequestDto.class 이런 간단한 예제를 사용해보겠습니다. import com.exam.demo.domain.board.Board; import lombok.Getter; import lombok.Setter; import javax.validation.constraints.AssertTrue; import javax.validation.constraints.NotBlank; import jav..
-
Spring Boot - SMTP 메일 전송 ( Naver )SpringBoot/SMTP 메일전송 ( Naver ) 2021. 6. 15. 15:42
SMTP Mail Service With Naver 네이버 메일 전송 방법! 1. 네이버 환경설정 1.1 아래 사진에 표시되어있는 메일 -> 환경설정으로 들어갑니다. 1.2 아래 사진에 표시된 POP/IMAP 설정으로 들어갑니다. 1.3 아래 사진과 같이 POP3/SMTP 사용에 '사용함' 을 체크하시고 원하시는 설정값을 고른 뒤 저장합니다. 2. SpringBoot에서의 사용을 위한 설정 2.1 Dependency 추가 Maven org.springframework.boot spring-boot-starter-mail Gradle implementation 'org.springframework.boot:spring-boot-starter-mail' 2.2 mail 전송을 위한 yml 파일 작성 appl..
-
게시판 만들기(5) - 데이터 Update,Delete (게시글 수정, 삭제)SpringBoot/게시판 (SpringBoot, H2,Mybatis,Thymeleaf) 2021. 1. 20. 15:12
게시판 카테고리의 포스팅들은 IntelliJ, Gradle, SpringBoot, Mybatis, H2-Database, Thymeleaf를 사용해 간단한 게시판을 만들어가는 포스팅입니다. boardMapper.xml (쿼리 작성) 수정문은 update태그로 열어주신 후 id를 설정한 뒤 parameterType으로 Board.class를 받도록 작성합니다. 내부 쿼리문은 UPDATE 테이블명 (tbl_board) SET 바꿀 컬럼 (title,content) = 매개변수 (#title, #content) WHERE 조건 (tbl_board의 pk인 boardId가 매개변수로 넘어온 #boardId와 같다면) 위와 같이 동작할 수 있도록 작성해주시고, 삭제문은 delete태그로 열어주신 후 id를 설정한..
-
게시판 만들기(4)- Create(게시글 만들기)SpringBoot/게시판 (SpringBoot, H2,Mybatis,Thymeleaf) 2021. 1. 5. 23:59
게시판 카테고리의 포스팅들은 IntelliJ, Gradle, SpringBoot, Mybatis, H2-Database, Thymeleaf를 사용해 간단한 게시판을 만들어가는 포스팅입니다. 지난 포스팅인 게시글 조회에 이어 생성을 진행해보겠습니다. BoardMapper.xml 쿼리문 작성 먼저 id를 입력해주신 후, 파라미터로 도메인을 넘길 수 있도록 domain의 클래스 경로까지 parameterType에 입력합니다. 그 후 INSERT INTO 테이블명 (입력할 컬럼명) VALUES(#{컬럼명})을 위 코드와 같이 작성하면 xml파일 작성이 완료됩니다. BoardMapper Interface 작성 위에서 작성한 BoardMapper.xml의 id와 BoardMppaer interface의 메소드 명을..
-
게시판 만들기(3) - 데이터 Read (게시글 리스트와 게시글 상세보기SpringBoot/게시판 (SpringBoot, H2,Mybatis,Thymeleaf) 2021. 1. 3. 23:57
게시판 카테고리의 포스팅들은 IntelliJ, Gradle, SpringBoot, Mybatis, H2-Database, Thymeleaf를 사용해 간단한 게시판을 만들어가는 포스팅입니다. 더미 데이터 삽입하기 위의 스키마 파일을 다음과 같이 변경해줍니다. 이유는 1개의 데이터는 없어보이기 때문입니다. 컨트롤러 수정 이전의 포스팅에서 작성한 컨트롤러와 다른점은 맨 하단의 GetMapping("/main")인데요, http://localhost:8080/board/main으로 이동했을 때 Model 객체에 service의 boardList 메소드를 호출해 저장하는 동작을 수행합니다. http://localhost:8080/board/main 이동 -> main()실행 -> service의 boardList..