오늘 공부한 내용

  • Spring 백오피스 프로젝트 / 리뷰 CRUD 만들기
  • 코드카타 2문제

 

어려웠던 내용

  •  프로젝트 API 구상

 

새로 알게된점

  • JetBrains IDE에서 제공하는 Code With Me

Code With Me란 IntelliJ 기반 IDE에서 기본적으로 제공하는 공동 프로그래밍 기능으로 이를 사용하면 전문 개발자가 물리적으로 서로 다른 위치에 있는 경우에도 동일한 코드 기반에서 실시간으로 원활하게 작업할수 있다.

 

 

오늘의 느낀점

오늘 프로젝트의 기본적인 Entity를 구상하기위하여 코드작성에 들어갔다.
이전 조에서는 코드짤때 각자 코드를 짠후 합치는 형식이었는데 이번에는 팀장,팀원 분들이 Code With Me 를 통해 짠후 각자 작업에 들어가자고 얘기하자 나는  Code With Me를 처음 들어서 뭔지 모르는 상태로 가만히 있었다.
잠시후 팀장인 원호님이 인텔리제이로 팀원들을 초대하여 하나의 프로젝트에 다같이 들어오게 됬고 여기서 바로 코드를 짜면 각자 똑같이 반영되며 동시에 빠르게 수정할수 있었고 덕분에 팀원들이 작성하는 코드를 바탕으로 작성후 서로 보완해주면 빠르게 마칠수 있었다.
코드 공부를 하며 지금 사용하고 있는 인텔리제이 에서 이런 기능까지 있는줄은 전혀 몰랐다.
이뿐아니라 github등 앞으로 개발자 생활하는데 있어서 도움이 되는 기능 및 프로그램에 대해 찾아봐야 겠다고 느끼게 됬다.

오늘 공부한 내용

  • Spring 심화 팀별과제 발제 / 백오피스 프로젝트
  • 프로젝트 구상 
  • 베이직반 보충수업 / 
  • 코드카타 2문제

 

어려웠던 내용

  •  프로젝트 API 구상

- 이번 백오피스 프로젝트로 배달의민족 같은 음식배달 페이지를 만들기 위해서 들어갈 기능에대해 API를 구상하면서 추후 백오피스에 적용가능하도록 세부적으로 작성하다보니 많은 시간이 소요됨

 

새로 알게된점

  • API, ERD, 와이어프레임 등 설계에 시간이 많이걸릴지라도 정확한 구상은 프로젝트의 전체기간을 줄일수 있다.
  • @PathVariable,@RequestParam, @ModelAttribute, @RequestBody 에대한 개념
    1. @PathVariable
      • 개념 : URL 경로에 포함된 변수를 컨트롤러 메서드의 매개변수로 바인딩하는 데 사용된다.
      • 특징 : 
        • URL 경로의 일부를 변수로 사용하여, 동적으로 변하는 URL 경로를 처리할 수 있다
        • 간결하고 직관적인 API 경로를 설계할 수 있다.
    2. @RequestParam
      • 개념 : 클라이언트가 전송하는 HTTP 요청 파라미터를 컨트롤러 메서드의 매개변수로 바인딩하는데 사용
      • 특징 :
        • URL에서 지정된 이름의 파라미터를 메서드 매개변수로 전달한다.
        • 필수 여부, 기본값 설정 등의 추가적인 설정이 가능하다.
    3. @ModelAttribute
      • 개념 : 요청 파라미터를 객체로 매핑하여, 복잡한 데이터 구조를 쉽게 다루게 해준다.
      • 특징 :
        • 폼 데이터의 각 필드가 객체의 필드와 자동으로 매핑한다.
        • 복잡한 객체 구조의 데이터를 간편하게 처리한다.
    4. @RequestBody
      • 개념 : 클라이언트가 전송하는 HTTP 요청의 본문(body)을 Java 객체로 변환
      • 특징 : 
        • HTTP 요청 본문의 내용을 자바 객체로 역직렬화 한다.
        • 주로 JSON 또는 XML 형식의 데이터 처리에 사용 한다.

 

 

 

오늘의 느낀점

CRUD를 작성하면서 어느정도 따라칠수 잇었지만 정확한 구조에대해서는 잘 이해가 못가는 상태로 적고 있었다.
베이직 클래스 수업에서 알려준 어노테이션에 대한 개념을 이해하기 쉽게 알려주어서 내가 작성하는 CRUD에 어떻게 들어가는지 이제 감이 오기 시작햇다.

 

 

오늘 공부한 내용

  • Spring 심화 영상 시청
  • Spring 심화과제 테스트 해설영상 시청, 따라치기
  • 코드카타 2문제

 

어려웠던 내용

  •  테스트 안에 사용되는 코드에 대한 이해도가 낮다.

 

새로 알게된점

아스키코드 (ASCII) : 미국 ANSI(미국 국가표준 협회)에서 표준화한 정보 교환용 7비트 부호체계

  • 아스키 코드 특징
    1. 영어 알파벳을 사용하는 대표적인 문자 인코딩
    2. 컴퓨터와 통신장비를 비롯하여 문자를 많이 사용되는 장치에 사용
    3. 대부분의 문자 인코딩이 아스키코드에 기초를 두고있다.

아스키 코드 구조 표

  • 출력 가능한 문자들
    • 영문 알파벳 대 + 소문자 52개 ( 65 ~ 90, 97 ~ 122 )
    • 숫자 0 ~ 9 총 10개 ( 48 ~ 57 )
    • 특수문자 32개 ( 33 ~ 47, 58 ~ 64, 91 ~ 96, 123 ~ 126 )
    • 공백문자 1개 ( 32 )
  • 아스키 코드 사용경우

컴퓨터는 문자를 인식할수 없기 때문에 숫자만 알 수 있다. 때문에 문자 또한 숫자 형태로 인식하게 되는데 이때 아스키코드를 참조하여 숫자를 문자로 표현 할 수 있게 된다.

 

여기서 문자 A의 아스키 코드값은 65이다. 그럼 65 숫자를 char형으로 출력해주면 어떻게 나올까?

public class Main {
	public static void main(String[] args) {
    	System.out.println((char)65);
	}
}

결과는 "A " 가 나오게 되며 여기서 반대로 문자인 A를 INT형으로 출력하면

public class Main {
	public static void main(String[] args) {
    	System.out.println((int)'A');
	}
}

결과는 65가 나오게 된다.

 

 

오늘의 느낀점

 

코드카다 문제에서 일정 코드를 작성시 집합 안에 문자열로 숫자와 글자가 들어있는 경우 false, 숫자만 들어있는 경우 true 로 증명하라는 형태의 문제가 있었는데 작성중 답변을 구하기위해 문자를 숫자형으로 숫자형을 다시 문자형으로 바뀌기 위해 코드를 짜다보니 오히려 어지럽고 작성이 잘안됬었다.

그러던중 숫자로 문자를 나타내는 아스키코드를 알게되었고 이를 이용하니 좀더 편안하게 코드를 짤수 있게 되었다.

컴퓨터는 복잡한 일을 할수 있을것 같지만 세심히 들여다보변 복잡한 일을 하기보다는 정해진 규칙대로 반복적인 일을 수행할뿐이며 결국 사람이 코드를 짜주어야 다양한 일을 할수 있겠다라고 느끼게 됬다.

오늘 공부한 내용

  • Spring 심화 영상 시청
  • Spring 심화과제 테스트 작성
  • 코드카타 2문제

 

어려웠던 내용

  •  개념은 이해했는데 응용이 어렵다...

 

새로 알게된점

테스트 코드 ( 단위테스트, 통합테스트)

테스트코드를 작성 하는 이유

- 테스트란 의도된 대로 정확히 작동하는지 검증하는 절차이며 코드 수정시 예상치 못한 부작용을 방지할수 있다.

단위 테스트 : 소스 코드의 개별 단위로 한가지의 기능 테스트 하는 방법

  • 장점 
    1. 프로그램의 각 부분별로 테스트 하여 개별부분을 올바른지 확인하여 문제점을 찾기 쉽다
    2. 코드변경시, 변경한 부분으로 인한 영향도를 쉽게 파악가능 하다
  • 단점
    1. 일정 기능대한 작동하는 코드로 외부 종속성과 올바르게 작동하는지 확인알수 없다.

 

통합합 테스트 : 단일 테스트가 끝난 코드들을 통합하는 과정중 생길수 있는 오류를 찾는 테스트 방법

  • 장점 
    1. 코드가 외부 종속성에 어울리는지에 대해 전체 시스템을 구축할 때 오류를 감지할수 있다.
  • 단점
    1. 어느부분이 문제인지 오류를 찾는 것이 어렵다.
    2. 복잡성이 증가하여 시간이 오래 걸릴 수 있으며 유지,관리에도 어려움을 느낄수 잇다.

 

오늘의 느낀점

 

어차피 코드 돌리면 문제가 발생한 지점에 대해 오류 뜰텐데 굳이 왜 테스트 코드까지 돌려야 하나 라고 생각했지만 듀터님의 말씀으로 테스트 코드가 기록되어 있을시 현업에서 일할시 발생되는 문제점에 대해 즉각적인 대응을 할수 있다는 것에 대해 알게됬다.

확실히 어떤 업무는 기준을 정해놓고 작업을 실시하면 흐트려지지 않고 내가 가고자 하는 방향을 갈수 있으며 추후 문제점 발생시 당황하지 않고 처리가 가능하기 때문에 작성을 해두면 큰도움이 될것이라 고 느끼게 됬다.

다만 테스트 코드 만드는것도 나름 일이라서 어려운게 문제다 ㅠㅠ

 

오늘 공부한 내용

  • Spring 심화주차 영상 시청
  • 코드카타 2문제
  • 베이직반 보충수업 / 디스패처 서블릿, CSR, SSR

 

어려웠던 내용

  • 개인 과제 / 테스트 코드 구현
    • 약 2시간 가량 작성하며 고민했으나 진도가 나가지 않음... 테스트코드 자체에 대한 공부 필요

 

새로 알게된점

  • DispatcherServlet

디스패처 서블릿의 dispatch는 "보내다"라는 뜻을 가지고 있다.

그리고 이러한 단어를 포함하는 디스패처 서블릿은 HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러(Front Controller)라고 정의할 수 있습니다.

 

  • 디스패처의 장점

과거에는 모든 서블릿을 URL 매핑을 위해 web.xml에 모두 등록해주어야 했지만, dispatcher-servlet이 해당 어플리케이션으로 들어오는 모든 요청을 핸들링해주고 공통 작업을 처리면서 편리하게 사용가능 합니다.

 

  • 디스패처 서블릿의 흐름

  1. 처음 클라이언트에서 요청이 오면 디스패처 서블릿이 해당 요청을 받는다.
  2. Handler Mapping을 통해 요청에 알맞은 컨트롤러를 찾아낸다.
  3. 찾아낸 컨트롤러를 Handler Adapter를 통해 해당 컨트롤러의 메서드를 실행시킨다.
  4. 컨트롤러는 요청을 처리한 뒤 처리한 결과와 해당 뷰 정보(ModelAndView)를 다시 디스패처 서블릿에게 전달한다.
  5. 받은 정보로 디스패처 서블릿은 View Resolver를 통해 View 파일을 찾는다.

 

  • CSR ( Client Side Rendering )

SSR과 달리 렌더링이 클라이언트 쪽에서 일어나는 형식, 서버는 요청을 받으면 클라이언트에 HTML과 JS를 보내준다. 클라이언트는 그것을 받아 렌더링을 시작한다.

  1. 기본적인 HTML구조를 받고 JavaScript가 실행되면서 필요한 데이터를 불러와 화면을 작성.
  2. 서버에 부하가 적습니다.
  3. 네트워크를 많이 사용하기 때문에  첫 진입 시 로딩 속도가 길다.
  4. HTML 파일을 하나만 받아와서 작동하다 보니 각각 페이지에 대한 정보를 담기 힘들어 SEO에 취약.

 

  • SSR ( Server Side Rendering )

서버쪽에서 렌더링 준비를 끝마친 상태로 클라이언트에 전달하는 방식

  1. 모든 HTML을 받아서 렌더링만 하면 됩니다.
  2. 서버에 부하가 많이 갑니다.
  3. 완성된 페이지를 빠르게 볼 수 있습니다.
  4. 초기 진입은 CSR보다 빠를지 몰라도 페이지 이동은 SSR이 더 느린 편에 속함.
  5. Javascript 다운로드가 늦어진다면 기능이 동작하지 않는 경우가 있음.

 

오늘의 느낀점

박성원 튜더님의 보충강의는 정말 이해가 잘간다.

영상을 보면서 의문을 가지거나 혹은 이해가지 않는 개념을 하나하나 세세히 알려주면서 이해를 도와주기 때문에 필수적으로 들으면서 복습에도 좋은 공부가 된다.

오늘 공부한 내용

  • 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

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

 

오늘의 느낀점

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

+ Recent posts