오늘 공부한 내용

  • Spring 숙련주차 2주차 영상 완강
  • 코드카타 2문제
  •  

 

어려웠던 내용

  • 회원별 상품 API구현

 

새로 알게된점

  • Scheduler 기능 구현

스케줄러 기능은 주기적으로 정보를 업데이트 하는 기능이다.

주로 다른 곳에서 가져와서 저장한 정보를 일정시간마다 업데이트 하여 최신정보를 유지하기 위한 목적으로 쓰인다.

@EnableScheduling // 스프링 부트에서 스케줄러가 작동하게 합니다.
@EnableJpaAuditing // 시간 자동 변경이 가능하도록 합니다.
@SpringBootApplication
public class MyselectshopApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyselectshopApplication.class, args);
    }

}

Spring boot에는 스케줄러 기능을 지원하며 위 코드 처럼 기본적으로 프로젝트 Application 안에 @EnableScheduling 어노테이션을 사용하면 기능 활성화를 할 수 있다.

 

package com.sparta.myselectshop.scheduler;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class AcadScheduler {
  private static final Logger logger = LoggerFactory.getLogger(AcadScheduler.class);
  
  @Autowired
  private AcademyMapper academyMapper;
  
  // 매주 토요일 새벽 3시에 자동으로 시작하는 스케쥴러
  @Scheduled(cron = "0 0 3 * * 6")
  public void autoUpdate() throws Exception {
    logger.info(new Date() + "스케쥴러 실행");
  }

이후 클래스 파일에 컴포넌트를 달아주면 스케쥴러를 사용할 수 있다. DB를 연동하고 싶다면 Autowired로 service나 mapper를 연결해주면 된다. 나는 mapper를 이용했다.

 

또한 스케줄러의 갱신주기를 조절 할 수있는데 @Scheduled의 ()안에 cron이란 표현식을 사용하여 적용가능하다.

이를 크론 표현식이라고 하는데 이는 '필드허용되는 값허용되는 특수문자' 를 뜻하며 밑에 표처럼 문자별 값을 가진다.

 

Cron 표현식 - 특수문자,

* : 모든 값을 뜻합니다.

? : 특정한 값이 없음을 뜻합니다

- : 범위를 뜻합니다. (예) 월요일에서 수요일까지는 MON-WED로 표현

, : 특별한 값일 때만 동작 (예) 월,수,금 MON,WED,FRI

/ : 시작시간 / 단위  (예) 0분부터 매 5분 0/5

L : 일에서 사용하면 마지막 일, 요일에서는 마지막 요일(토요일)

W : 가장 가까운 평일 (예) 15W는 15일에서 가장 가까운 평일 (월 ~ 금)을 찾음 

# : 몇째주의 무슨 요일을 표현 (예) 3#2 : 2번째주 수요일

 

Cron 표현식 작성시 예시 모습

 

 

오늘의 느낀점

확실히 이전보다는 API 작성과 JWT에 대한 코드 구조가 이해가 된다.

전 강의 시청때는 코드를 따라 치면서도 이게 뭔지 왜 나오는지 전혀 모르는 상태로 쳤었든데 지금은 그래도 작성중 이 매개변수가 와야 하는구나 정도로 구분이 점점 되고 있다.

그래도 희망이 조금 보이는 구나 ㅎㅎ

 

 

오늘 공부한 내용

  • Spring 숙련주차 2주차 영상 시청
  • 코드카타 2문제
  •  

 

어려웠던 내용

  • Filter 적용 / 아직 필터에 대한 정확한 개념을 못잡고 있다.

 

새로 알게된점

  • Naver Open API

네이버의 Open API는 '네이버 개발자센터 NAVER Developers'에서 확인 할수 있으며 네이버플랫폼의 기능을 외부 개발자가 쉽게 이용할 수 있게 웹 또는 SDK 형태로 공개한 기술들을 말한다.

 

위 내용은 네이버 에서 현재 제공하고 있는 오픈 API 목록이며 API에 따라 일정 횟수에 따른 호출제한이 걸려 있기도 하고, 서비스 이용 약관에 따라 제한되는 부분도 존재한다. 따라서 네이버 오픈 API를 활용해 서비스를 개발하고자 할 경우에는 홈페이지를 자세히 확인해야 한다.

 

위와 같은 오픈 API들은 크게 네가지 카테고리로 분류된다.

네이버가 개발 및 서비스 하고 있는 인공지능 플랫폼 CLOVA, 네이버가 아닌 다른 서비스에서 네이버의 사용자 인증 기능을 이용할 수 있게 하는 서비스 네이버 로그인, 다국어 언어 처리에 대한 네이버의 기술과 경험을 적용해 보다 정확한 번역 결과를 제공하는 파파고, 그 밖의 서비스 API 로 구분한다.

오늘의 느낀점

 오늘 스프링 심화주차에 들어가게 된다.

먼저 심화주차 과제 발제를 알려주셨는데 차후 개발자가 되기 위해서 스스로 코드 작성시 문제점을 알기위해서 테스트 작업에 익숙해져야 한다는 의의 하게 진행 하게 된거 같다.

다만 과제내용이 기존에 작성한 과제물에 Controller, Service, Repository, Entity, DTO 레이어에 맞는 단위 테스트 작성하기 이다 보니 나는 이전과제를 완성하지 못해서 완성을 한후 시행해야 할거같다.

 

 

 

 

프로젝트

  • 팀명 : 밥사조
  • 팀원 : 김대영, 문형원(팀장), 손다희
  • 프로젝트명 : 직관메이트 게시판
  • 개발 기간 : 2023.11.21 ~ 2023.11.27
  • 개발 내용 : 뉴스피드 게시판 만들기  
    • 의도 : 카카오톡의 오픈카톡에서 특정 주제로 친목모임을 가지는 것처럼 야구를 보러갈시 혼자가 아닌 내가 원하는 경기때 각자의 사정에 부담없이 같이 보러갈 사람을 구하는 형태의 게시판 작성
  • 깃허브 : https://github.com/hyeon9won/newsfeed

1. KEEP

협업

  • 과제실행에 앞서 전체적인 구조설계 와 실현기능을 구분하기위해 API명세서 와 와이어프레임 작성
  • Git으로 수정된 파일을 바로 올려서 적용 

기술

  • 회원가입, 로그인, 로그아웃을 위한 JWT 와 Spring Security 활용
  • DateBase 로 Mysqs 을 이용
  • Spring Data JPA 이용
  • API 를 세부적으로 운용하며 테스트 하기위해 API명세서 작성 및 Postman 활용
  • 와이어프레임 작성을 위해 Figma 활용
  •  

2. PROBLEM

협업

  • Java Spring Boot의 낮은 숙련도로 기능 구현하는데 여러움을 느낌
  • 서로간의 코드작성시 변수의 혼란으로 커밋할시 혼선이 옴
  • 클래스, 패키지의 명칭 명명시 세분화 필요

기술

  • JWT 작성시 구조에대해 좀더 명확하게 세분화 필요, 작성시 가독성이 떨어져 추후 다른기능 구현에 객체 찾는데 어려움을 느낌
  • Spring Security 활용시 원하는 정보의 값을 정확하게 가져오는데 어려움을 느낌
  •  

3. TRY

협업

  • 각 담당 기능 별 코드 리뷰
  • 코드 작성시 사용하고 있는 변수 값에 대해서 공지글에 올리기
  • 클래스, 패키지의 이름 작성시 좀더 세부적으로 나누어서 작성하rl
  • 팀원 개인의 역량을 파악하는 시간을 갖기
    • 할 수 있는 것과 없는 것의 명확한 구분 필요
  • 정기 소통 시간 계획
    • 저녁 정기 미팅: 진행 현황 공유
  • 강의에서 배운 자바 스프링 부트 기초를 최대한 이용하여 제작
  • Github 사용
  • Postman 사용
  • figma 사용

기술

  • Redis 시도
    • 로그아웃이후 사용되었던 토큰의 유효성을 없애기 위하여 사용
    • 코드를 작성하면서 문제점이 발생시 어느지점에서 어떻게 잘못된것인지 잘 찾지 못함으로 JWT를 좀더 세부적이고 가독성이 편한 상태로 정리해야 하는 필요성을 느낌
  •  

4. 느낀 점

 

김대영

백엔드 에 실질적으로 사용되는 Java Spring Boot 라는 새로운 언어를 배우면서 WEB에서 데이터가 어떻게 처리되는지 에대해서 크게 이해하고 알 수 있었습니다.

다만 수업진도에 비해 낮은 이해로 많은시간과 노력을 부었음에도 과제에 실질적인 적용을 크게 하지못한것에 대해 많은 아쉬움이 남습니다.

기초를 정확하고 올바르게 쌓는데 좀더 중점으로 노력하여 앞으로 하게될 프로젝트에 보다 성취감을 느끼고 싶기에 포기 하지 않고 노력하고자 합니다.

문형원

 

 

손다희

 

 

 

 

 

 

오늘 공부한 내용

  • Spring 숙련주차 1주차 영상 재시청
  • Spring 팀별과제 / 뉴스피드 만들기
  • 코드카타 2문제

 

어려웠던 내용

  •  회원가입을 위한 JWT 구조작성

 

새로 알게된점

  • HTTP 통신의 특징 

 HTTP 통신은 다음과 같은 프로토콜 환경을 가지고 있다. 프로토콜 환경은 "connectionless, stateless"한 특성을 가지기 때문에 서버는 클라이언트가 누구인지 매번 확인해야한다. 이 특성을 보완하기 위해서 쿠키와 세션을 사용하게된다.

 

1. Connectionless 프로토콜 (비연결 지향)

클라이언트가 서버에 요청(Request)을 했을 때, 그 요청에 맞는 응답(Response)을 보낸 후 연결을 끊는 처리방식입니다.

즉 두 플랫폼 사이에는 어떠한 연결 고리도 존재하지 않고, 그 전에 이루어진 HTTP 통신에 대해서는 알 방법이 없으며

이로 인해 서버에 가해지는 부담이 많이 줄어들어 리소스 낭비를 방지할 수 있습니다.

다만, HTTP 1.1버전 부터는 keep-alive라는 커넥션을 유지하여 요청을 재사용하는 옵선이 기본값으로 설정되어 있습니다.

 

2. Stateless 프로토콜

커넥션을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보는 유지하지 않는 특성이 있습니다.

연결이 끊어지는 순간 모든 상태 정보가 사라지게 되는 방식이다.

서버에서 첫 번째 통신에서 데이터를 주고받았다 해도, 두 번째 통신에서 이전 데이터를 유지하지 않아 보낸 요청인지 분간할 수 없기 때문에 다른행동을 할 시 모든 데이터를 다시 보내야 하는 상황이 발생하게된다.

즉, 매번 통신을 할 때마다 인증을 해야한다.

 

이러한 두 특성을 해결하여 지속적으로 페이지를 사용하기 위해서 쿠키 와 세션이 필요하다.

 

  • 쿠키 와 세션 개념

1. 쿠키(Cookie)

HTTP의 일종으로 사용자가 어떠한 웹 사이트를 방문할 경우, 그 사이트가 사용하고 있는 서버에서 사용자의 컴퓨터에 저장하는 작은 기록 정보 파일이다. HTTP에서 클라이언트의 상태 정보를 클라이언트의 PC에 저장하였다가 필요시 정보를 참조하거나 재사용할 수 있다.

 

쿠키는 다음과 같이 구성 되어 있다.

  • 이름 : 쿠키를 구별하는 이름
  • 값 : 쿠키에 저장되는 값
  • 유효시간 : 큐키 유지시간
  • 도메인 : 쿠키를 전송할 도메인
  • 경로 : 쿠키를 전송할 요청 경로

 

2. 세션(Session)

일정 시간 동안 같은 사용자(브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 유지시키는 기술이다. 여기서 일정 시간은 방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점부터 웹 브라우저를 종료하여 연결을 끝내는 시점을 말한다. 즉, 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라고 한다.

주로 보안에 취약한 쿠키를 보완해주는 역할을 한다.

 

세션(Session) 의 특징

사용자의 데이터를 담는 쿠키는 통신 중 탈취당하면 쉽게 개인 정보가 유출될 수 있는 쿠키와는 다르게, 세션은 서버측에 저장된 데이터를 사용할 뿐더러 유일하게 클라이언트에 저장하는 세션 ID는 탈취당하더라도 역으로 정보 확인이 불가능하다.

이와 같이 네트워크 상으로 사용자의 개인 정보가 흘러 가지 않아 쿠키보다 보안성은 높지만, 사용자의 수가 많은 대형 서비스의 경우에는 세션 정보까지 관리해야하는 서버에 부담이 갈 수 있다는 단점이 존재한다.

 

 

오늘의 느낀점

 뉴스피드 과제를 만들면서 회원가입 기능을 맡기로 했다.
강의를 들으면서 연습할때는 잘 모르고 따라 했지만 이번에 내가 직접 회원가입 기능을 작성하기위해서 코드를 치다보니 페이지에 적용하기 위해서는 쿠키 와 세션에 대해서 정확하게 이해하고 있어야 왜 쓰이고 어디서 쓰이게 될지 를 확인할 수 있었다.

 

오늘 공부한 내용

  • Spring 숙련주차 1주차 영상 재시청
  • Spring 숙련주차 1주차 과제 해석영상 공부
  • 코드카타 2문제

 

어려웠던 내용

  •  회원가입을 위한 JWT 구조작성

 

새로 알게된점

  • Integer.parseInt() //  문자를 정수로 바꾸는 함수

먼저 이것에 대해 알게된 것은 코드 카타를 하던중이다. 해당문제는 

문자열을 정수로 바꾸기

문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.

제한 조건

  • s의 길이는 1 이상 5이하입니다.
  • s의 맨앞에는 부호(+, -)가 올 수 있습니다.
  • s는 부호와 숫자로만 이루어져있습니다.
  • s는 0으로 시작하지 않습니다.

입출력 예

예를들어 str이 1234이면 1234를 반환하고, -1234이면 -1234를 반환하면 됩니다. str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.

메서드는 일부 문자열을 입력으로 받고 필요한 정보를 "추출"하여 호출 클래스의 객체로 변환합니다.

 

숫자를 문자형태로 바꾸는 toString에 대해서는 알고 잇었지만 문자를 숫자로 바꾸는 메서드는 알지를 못했다.

이후 답을 찾아보았는데 굉장히 간단한 코드여서 맥이 빠졌다.

class Solution {
    public int solution(String s) {
        int answer = Integer.parseInt(s);
        return answer;
    }
}

위와 같이 문자형태인 n을 바꾸고자하는 정수형태로 바꾸기 위해서

Integer.parseInt(s) 형태처럼 앞에 래퍼클래쓰를 적은후 parse뒤에 자료형 을 적으면 된다.

즉 int 뿐만 아니라 byte, short, long, float, double 등 정수 와 관련된 타입은 전부 가능하다.

그리고 int로 숫자를 바꿀시 기본적으로 십진법을 적용하며 만약 원한다면 8진수, 16진수 를 적용하여 바꿀수도 있다.

 

방법은 Integer.parseInt(String s, int radix) 형태로 코드를 적는 것이며 여기서 숫자형의 문자열을 첫번째 인자 값 (String s) 으로 받고 변환할 진수값 (int radix)을 입력하면 해당 진수에 맞춰 Integer 형으로 변환된다.

class Javaparse {
    public static void main(String args[]){
           int x = Integer.parseInt("12");
           double c = Double.parseDouble("12");
           int b = Integer.parseInt("100",2);

           System.out.println(Integer.parseInt("12"));
           System.out.println(Double.parseDouble("12"));
           System.out.println(Integer.parseInt("100",2));
           System.out.println(Integer.parseInt("101", 8));
   }
}

이것에 대한 출력값으로

 12 
 12.0 
 4 
 65

이렇게 출력되는것을 확인 할 수 있다.

 

오늘의 느낀점

 간단한 코드카타 라고 볼수 있겠지만 정말 많은 형태의 메서트가 있다는걸 알게됬다.
알고리즘을 더 잘풀기위해서는 더욱더 많은 문제를 접해서 다양한 메서드를 겪어봐야 실력이 향상이 될거 같다.

오늘 공부한 내용

  • Spring 입문주차 1주차, 2주차 영상 재시청
    • CRUD, JPA 위주로 공부
  • 코드카타 2문제

어려웠던 내용

  •  CRUD 작성 , JPA 작성

 

 

 

 

오늘의 느낀점

 오늘은 과제 작성을 위하여 복습하는 날로 정하고 미숙한 CRUD 작성과, JPA작성에 중점을 두고 영상을 시청하며 따라치는 연습을했다.
내용을 보지 않고 직접 CRUD를 머리속으로 구상하면서 칠수있는 날이 오기까지 시간날때마다 반복적으로 치는 연습을 가져서 숙달해야 이후 개발자로서 한사람몫을 하게 될거 같다.
 

 

오늘 공부한 내용

  • Spring 숙련주차 2주차 시청 
  • 숙련주차 2주차 과제수행

 

어려웠던 내용

  • 숙련주차 2주차 과제 수행

어노테이션 적용후 Dto 연결이 어렵다.

새로 알게된점

1. Validation

Validation 이란 어떤 데이터 (주로 사용자 또는 다른 서버의 request)의 값이 유효한지, 잘못된 내용이 있는지 확인하는 단계를 뜻합니다. 예를들어 이메일 주소의 양식은 "email@email.com"의 양식어어야 하는데, 이 양식과 일치하지 않는 값이 들어온다면 해당 값의 저장을 막을 수 있습니다.

 

  • Java Bean Validation

스프링 부트에서는 gradle에 의존성 하나만 추가해주면 간단하게 사용할 수 있습니다.

implementation("org.springframework.boot:spring-boot-starter-validation")

JavaBean 기반으로 간편하게 개별 데이터를 검증할 수 있으며, JavaBean내에 어노테이션으로 검증방법을 명시하면 됩니다. 

Validation의 주요 어노테이션

  • Validation 예외처리

회원가입 진행 시 데이터 검증 시 오류가 발생했을 때 로그인 페이지가 아니라 회원가입 페이지로 이동 하려면 Validation 예외를 처리해야합니다.

예시로 SignupRequestDto에 들어있는 내용에 제한을 가져 보자

기존에 적혀 있는 SignupRequestDto 내용이다.

@Getter
@Setter
public class SignupRequestDto {
    private String username;
    private String password;
    private String email;
    private boolean admin = false;
    private String adminToken = "";
}

 

 

여기서 각각의 내용에 제한을 걸려면 위에 어노테이션을 이용하여 적어준다.

@Getter
@Setter
public class SignupRequestDto {
    @NotBlank(message = "공백X") //빈값 + 공백만 있는 경우를 허용하지 않는다.
    private String username;
    
    @Pattern(regexp = "^[a-zA-Z0-9]") // 소문자 a에서 z까지, 대문자 A에서 Z까지, 0~9의 순자만 사용할수있다.
    private String password;
    
    @Pattern(regexp = "^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^.-]+@[a-zA-Z0-9.-]+$") 
    // 위와 동일하게 적용되며 특수문자(!#$%&'*+/=?`{|}~^.-)도 사용할수있다.
    @NotBlank
    @NotNull //null을 허용하지 않는다.
    private String email;
    private boolean admin = false;
    private String adminToken = "";
}

 

 

오늘의 느낀점

오늘 부터 실질적인 과제작성에 들어갔다. 다만 막상 시작하려고 하니 어디서부터 건드려야 할지 모르겠고 진도가 안나가서 결국 영상을 다시 보게 된다.

회원가입 기능, 할일 카드, 댓글 구현 총 3가지의 기능을 주축으로 만들어야 하는데 메모할때 와 다르게 막상 만들려고 하니 어떻게 응용해야 할지를 모르겠다.

영상을 보면서 모르는 부분도 많지만 그래도 어느부분부분은 하나하나 익힐수 있는 구조가 되어서 도움이 된다만 기초공부를 다시 해야 할거 같다.

오늘 공부한 내용

  • Spring 숙련주차 1주차 시청 
  • Spring Security 로그인, 접근불가 처리
  • 코드카타 문제 풀기

어려웠던 내용

  •  Spring Security JWT

초기 가르쳐줄때 인증, 인가 만 하던 처리 하던것에서 토큰을 가져와서 적용하는 부분으로 수정할때 이해가 어렵다.

 

 

새로 알게된점

  • API 접근 권한 제어 이해

페이지 접속시 관리자를 제외한 회원들을 관리자 페이지에 접속 하지 못하게 하기위해서 회원 상세정보 (UserDetailsImpl)에 권한(Authority) 설정하여 특정 권한을 가지지 못하게 하는자를 API를 통해 못들어오게 할 수 있다.

 

  • 자릿수 더하기
문제 설명

자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

 
제한사항
N의 범위 : 100,000,000 이하의 자연수
 

입출력 예

N answer
123 6
987 24
입출력 예 설명

입출력 예 #1
문제의 예시와 같습니다.

입출력 예 #2
9 + 8 + 7 = 24이므로 24를 return 하면 됩니다.

 

*원래 문제의 의도대로 숫자에서 각각의 백의 자리, 십의 자리, 일의 자리를 더하는 방식으로 정수 N을 문자 String 방식으로 바꾸었으나 각각 따로 합치는 방법을 찾지 못했다. 그래서 while문을 사용해서 정수를 10씩 나누어 일의자리를 더하는 방식으로 만들었다.

public class Solution {
	public int solution(int n) {
		int answer = 0;
		
		while (n > 0) {
			answer += n % 10; // 일의 자리부터 자릿수 더하기
			n /= 10;
		}
		return answer;
	}
}

이렇게 할 경우 입력한 값에서 answer += n % 10; 통해 나머지 값을 따로 빼낸후 입력값을 10으로 나누어 나머지를 없애는 int형 정수로 만든다음 다시 answer += n % 10; 통해 나머지 값을 따로 빼내는 형식의 while문으로 처리된면서 빼낸값들을 합치는 방식으로 처리한다.

만약 입력한 값이 135 라면 135%10 = 5 이며

answer += 5 인 셈이다

135 -> 5

13 -> 3

1 -> 1

5+3+1 = 9 를 쉽게 구할 수 있다.

 

이후 처음 의도대로 하는 방법을 찾아보다가 코드를 찾았는데

class Solution {
    public int solution(int n) {
        int answer = 0;
        String a = Integer.toString(n);
        
        for(int i = 0; i < a.length(); i++){
            answer += Integer.parseInt(a.substring(i, i + 1));
        }
        return answer;
    }
}

해당 코드에서는 parseInt를 이용했었다.

분명 처음 배울때 parseInt에 대해 배우긴 했지만 실제로 이렇게 이용하는거는 처음봐서 굉장히 신기 했다.

 

 

 

오늘의 느낀점

코드 카타를 풀고 다른사람들의 풀이를 보면서 정말 다양한 방법들이 있다는것을 알게 된다.

코드를 쉽게 적거나, 읽기좋게 만들거나, 효율을 올리는등 정말 다양하게 적혀 있는걸 보면서 좀더 생각의 틀을 넓혀야 겠다는 생각을 느꼈다.

오늘 공부한 내용

  • Spring 숙련주차 1주차 시청 
  •  

어려웠던 내용

1.  필터, 'Spring Security' 프레임 워크

 

새로 알게된점

1. 필터의 사용 이유

필터란 무엇인가?

HTTP 요청과 응답을 변경할 수 있는 재사용 가능한 코드이며 Web 애플리케이션에서 관리되는 영역으로 Client로 부터 오는 요청과 응답에 대해 최초/최종 단계의 위치이며 이를 통해 요청과 응답의 정보를 변경하거나 부가적인 기능을 추가할 수 있습니다.  

필터는 객체의 형태로 존재하며 옆에 그림에 보이는 것처럼 클라이언트로부터 오는 요청(request)을 받아 최종자원(서블릿/JSP/기타 문서)을 거쳐 클라이언트의 요청 정보를 알맞게 변경한 후 다시 필터를거쳐  최종 자원과 클라이언트로 가는 응답(response)를 제공한다.

 

 

 

 

오늘의 느낀점

처음에 필터를 배울때 이런 방식을 왜쓰나 했는데 이후 Spring Security를 배우면서 내가 사용하는 페이지에서 재접속시 이미 다시 로그인하는 번거로움을 없애기위해 필수적인 구조라는 것을 깨닫고 웹구조는 사람의 편의를 위해서 정말 많은 수정을 겪어왔다는 것을 느꼈다.

점점더 배울수록 어렵고 이해가 안되서 혼자 끙끙대면서 머리를 싸매지만 영상에서 알려준 내용의 구조와 설명을 듣고 평소 내가 사용했던것이 이렇게 만들어졌구나라는것을 보고 느끼면서 신기하면서도 조금씩 재미를 느껴가는거 같다.

 

 

 

오늘 공부한 내용

  • Spring 숙련주차 1주차 시청 
  •  

어려웠던 내용

1.  JWT다루기

 

새로 알게된점

1. JWT를 사용하는 이유

수많은 클라이언트들의 데이터를 저장하기 위해서는 다량의 서버가 필요하며 이 다수의 서버를 운용하기 위해서 Session Storage가 필요한데 카카오 같은 동시접속자가 많은 경우에는 서버측 부하를 낮추기 위해서 Session Stroage가 아닌 JWT를 사용한다.

왜냐하면 Session Strorage는 모든 클라이언트의 로그인 정보 소유하고 있기때문인데 클라이언트가 서버를 거쳐서 Session Strorage로 로그인정보를 요청하는 과정을 가지는데 JWT는 로그인 정보를 Server 에 저장하지 않고, 클라이언트 에 로그인 정보를 JWT 로 암호화하여 저장하도록 하여 서버를 거치기 않고 클라이언트 정보를 가져오기 때문이다.

Session Storage를 사용하여 로그인시 클라이언트에서 서버를 거쳐 Session Storage로 향한후 다시 돌아오는 모습
JWT 사용시 클라이언트에게 JWT를 부여하여 로그인시 클라이언트가 서버에 부여된 JWT와 동일할시 접속할수 있는모습

 

오늘의 느낀점

JWT 구조를 보면서 확실히 서버에 접속하는데 부하를 줄일수있지만 보안에 취약하다는것을 보고 제대로 관리 못하면 해킹당할 가능성이 높겠다라고 생각이 들었다.

각각의 구조에 따라 장단점이 있으며 가성비에 따라 혹은 운영방침에따라 데이터 관리가 달라지겠다는 생각도 같이 들면서 추후 백엔드 개발자로 일할때 큰 참고가 될것 같다.

+ Recent posts