[CS스터디]Day 27

DaramGee·2024년 5월 7일

Study

목록 보기
13/20
post-thumbnail

일시 : 2024.05.07 14:00~14:30

jstl이 무엇인지, 그 주기능은?

JSTL은 JavaServer Pages Standard Tag Library의 약자로, JSP 개발을 위한 태그 라이브러리입니다. JSTL은 JSP 스크립트릿을 대체하여 코드의 가독성을 높이고 개발을 단순화시킬 수 있습니다. JSTL은 다음과 같은 기능을 제공합니다

  • XML 데이터 처리

  • 조건문 및 반복문

  • 국제화 및 지역화

  • 데이터베이스 작업

  • JSTL을 사용하려면 JSP 파일 상단에 JSTL 라이브러리를 선언해야 합니다.

  • JSTL 주요 기능

  1. 코어 태그 (Core Tags)
    JSTL 코어 태그는 가장 많이 사용되는 태그로, 다음과 같은 기능을 제공합니다:

<c:if>: 조건문 처리
<c:forEach>: 반복문 처리
<c:choose>, <c:when>, <c:otherwise>: 다중 조건문 처리
2. 함수 태그 (Functions Tags)
JSTL 함수 태그는 문자열 처리, 숫자 처리 등의 기능을 제공합니다.

  1. 포맷팅 태그 (Formatting Tags)
    JSTL 포맷팅 태그는 날짜, 시간, 숫자 등의 데이터를 형식화하는 기능을 제공합니다.

  2. XML 태그 (XML Tags)
    JSTL XML 태그는 XML 데이터를 처리하는 기능을 제공합니다.

  3. SQL 태그 (SQL Tags)
    JSTL SQL 태그는 데이터베이스 작업을 수행하는 기능을 제공합니다.

postgreSQL?

PostgreSQL은 오픈 소스 객체-관계형 데이터베이스 시스템으로, 20년 이상의 역사를 가지고 있습니다. 다양한 데이터베이스 객체를 만들 수 있는 기능을 제공하며, 클라이언트/서버 모델을 사용합니다.
ANSI:2008 표준을 만족시키며, 지속적으로 기능이 추가되고 있습니다. 안정성, 유연성, 다양한 데이터 타입 지원으로 알려져 있습니다. 오늘날 디지털 환경에서 동적 데이터베이스 시스템을 유지하는 데 중요한 역할을 합니다.

  • PostgreSQL vs 오라클
    오라클은 상용 DBMS로 성능과 기능이 뛰어나지만, 비용이 높습니다.
    PostgreSQL은 오픈 소스로 무료이며, 오라클에 비해 기능이 다소 부족하지만 점점 발전하고 있습니다.
    오라클은 decode 함수, sysdate 등을 사용하지만, PostgreSQL은 case when 문을 사용합니다.
    오라클은 outer join 구문이 다르며, PostgreSQL은 text_pattern_ops 옵션을 사용해야 할 수 있습니다.

  • PostgreSQL vs MySQL
    MySQL은 읽기 전용 작업에 더 적합하고, PostgreSQL은 읽기-쓰기 작업과 대규모 데이터 세트 관리에 더 적합합니다.
    MySQL은 PostgreSQL보다 기능이 적지만, 읽기 전용 쿼리에서 더 가볍고 안정적이며 빠른 처리 속도를 유지할 수 있습니다.
    PostgreSQL은 다양한 join 방식을 제공하며, 적절한 인덱스를 사용할 수 없는 경우에 더 적합합니다.
    MySQL은 멀티 스레드 방식, PostgreSQL은 멀티 프로세스 방식으로 동작합니다.

종합적으로 PostgreSQL은 오라클과 MySQL에 비해 기능이 다소 부족하지만, 오픈 소스로 무료이며 지속적으로 발전하고 있습니다.
특히 읽기-쓰기 작업과 대규모 데이터 세트 관리에 강점이 있습니다.

JWT란 무엇인지?

Spring Security: 스프링의 보안 프레임워크로, 인증과 권한 부여 등의 보안 기능을 제공합니다.

  • JWT(JSON Web Token): 사용자 정보를 안전하게 전달하기 위한 토큰 기반 인증 방식입니다. 토큰에는 Header, Payload, Signature 3가지 부분으로 구성됩니다.
  • JWT 인증 과정
    로그인: 사용자가 로그인하면 서버는 사용자 정보를 이용해 JWT 토큰을 생성합니다.
    토큰 전송: 생성된 JWT 토큰은 클라이언트에게 전송됩니다.
    토큰 인증: 클라이언트는 이후 모든 요청에 JWT 토큰을 포함시켜 서버에 전송합니다.
    토큰 검증: 서버는 JWT 토큰의 서명을 확인하여 토큰의 유효성을 검증합니다.
    권한 부여: 토큰이 유효하면 사용자의 권한을 확인하여 요청에 대한 접근을 허용합니다.
  • 스프링 JWT 구현
    의존성 추가: JWT 관련 의존성(jjwt-api, jjwt-impl)을 추가합니다.
    JWT 토큰 생성: 로그인 시 사용자 정보로 JWT 토큰을 생성합니다.
    토큰 인증 필터: 모든 요청에 JWT 토큰을 검증하는 필터를 적용합니다.
    리프레시 토큰: 액세스 토큰 만료 시 리프레시 토큰으로 새 토큰을 발급합니다.

Spring Boot Batch 란? 그리고 배치프로그램과 스케줄러란?

  • 대량의 데이터를 처리하는 작업을 의미하며 이를 ‘자동화’하여 ‘시스템의 부하를 줄이고 효율적인 데이터 처리’를 가능하게 하는 프레임워크를 의미합니다.
  • Spring Boot Batch 라이브러리로 설치를 하면 ‘스프링 스케줄러’도 함께 사용이 가능합니다.
  • 배치의 기능
    : Job과 Step을 이용한 배치 프로세스 구현 배치 처리의 단위 작업(Job)과 작은 단위 작업(Step)을 이용하여 배치 프로세스를 구현하는 기능을 제공합니다.
    : Chunk 지향 처리 방식을 통한 대용량 데이터 처리 Chunk 단위로 데이터를 처리하여 대용량 데이터 처리 기능을 제공합니다.
    : Quartz, Cron 등의 스케줄러를 이용한 배치 작업 스케줄링 스케줄러를 이용하여 배치 작업을 주기적으로 실행하도록 스케줄링을 제공합니다.
    : Batch 작업에 대한 로깅과 예외 처리 기능 제공 Batch 작업 수행 중 로깅과 예외 처리를 지원하여 안정적인 배치 작업 제공합니다.

💡 배치 프로그램(Batch Program)이란?

  • ‘대량의 데이터를 처리하는 작업을 자동화’하는 프로그램을 의미합니다.
  • 이러한 작업들은 보통 ‘스케줄러’를 이용하여 특정시간에 수행하도록 구성합니다.
  • 예를 들어 매일 밤 12시에 일괄적으로 데이터를 업데이트하는 작업이 배치 프로그램의 예시입니다.

💡 스케줄러(Scheduler)란?

  • 일정한 시간 간격으로 반복적으로 수행되거나 특정 시간에 수행되도록 예약해 놓은 작업을 자동으로 실행해 주는 시스템입니다.
  • 스케줄러를 이용하면 주기적으로 반복되는 일일 업무나 특정 시간에 실행해야 하는 작업 등을 자동으로 처리할 수 있습니다.

💡 배치 프로그램과 스케줄러는 동일한 것이 아닌가?

  • 비슷한 기능을 가지고 있지만 동일한 것은 아닙니다. 실행방법과 목적에 큰 차이가 있습니다.
  • 배치 프로그램은 일괄 처리를 위한 프로그램이며 ‘정해진 시간에 실행되지 않고 사용자의 명령이 있을 때 실행’합니다.
  • 스케줄러는 ‘정해진 시간에 자동으로 실행’되는 프로그램이며 ‘주기적으로 실행되는 작업’을 설정할 수 있습니다.

Call by value 와 Call by Reference 에 대해서 설명하고 java에서는 어떻게 사용되는지?

💡 Call By Value와 Call By Reference의 차이에 대해 설명해주세요.

Call By Value(값에 의한 호출) - 인자로 받은 값을 복사하여 처리하는 방식입니다. 

장점 - 값을 복사하여 처리하기 때문에 원래의 값이 보존된다.
단점 - 복사하기 때문에 메모리 사용량이 증가한다.

Call By Reference(참조에 의한 호출) - 인자로 받은 값의 주소를 참조하여 직접 저장해 값에 영향을 주는 방식입니다. 

장점 - 복사하지 않고 직접 참조하기에 빠르다.
단점 - 직접 참조를 하기에 원래의 값이 영향을 받는다.

💡 그럼 Java에서 어느 부분이 call by value이고 어느 부분이 call by reference에 해당하나요?
닫기

Java는 기본적으로 모든 전달 방식이 Call by Value 입니다.
참조형의 경우 객체의 '주소값'을 매개변수로 전달하니 call by reference가 아니냐는 의문을 가질 수 있지만,
정확하게 말하면 '주소값'이 아니라, '주소를 가리키는 참조값'이다.
또한, 주소값 자체를 '복사 없이' 인자로 전달하는게 아니라 자기 자신이 갖고 있는 값을 복사해서 전달한다.
결국 기본형 변수나 참조형 변수 모두 자기 자신이 갖고 있는 값을 복사해서 전달하기 때문에 Call by value이다.

CORS 이슈란?

💡 CORS란 도메인이 다른 사이트가 데이터를 주고 받을 때 발생하는 문제입니다.
브라우저는 보안 상의 이유로, 교차 출처 HTTP 요청을 제한한다.

CORS 이슈를 해결하는 방법은 크게 3가지가 있습니다:

-서버 측 CORS 설정, 프록시 서버 사용, 브라우저 확장 프로그램 사용방법이 있습니다.

  1. 서버 측에서 CORS 설정을 하는 것이 가장 일반적인 방법입니다. 서버에서 응답 헤더에 CORS 관련 정보를 추가하면 됩니다.
    Access-Control-Allow-Origin/Methods/Age/Headers를 통해
    허용할 도메인, HTTP 메서드, 결과저장시간, 요청 헤더를 지정합니다.
    브라우저에서 CORS 이슈 없이 리소스를 요청할 수 있습니다.

  2. 프록시 서버를 사용하면 CORS 이슈를 해결할 수 있습니다.
    클라이언트가 프록시 서버에 요청을 보내면, 프록시 서버가 실제 서버에 요청을 전달하고 응답을 받아 클라이언트에게 전달합니다.
    이 과정에서 CORS 이슈가 해결됩니다.

  3. 브라우저 확장 프로그램을 사용하면 CORS 이슈를 해결할 수 있습니다.
    대표적인 확장 프로그램으로는 Chrome의 'Allow CORS'가 있습니다.
    이 확장 프로그램을 설치하면 브라우저에서 CORS 이슈를 자동으로 해결해줍니다.
    개발 및 테스트 환경에서 유용하게 사용할 수 있습니다.

스터디 현황

0개의 댓글