WIL 17

WAI-ARIA: Role과 Aria-Label이란?

웹 접근성을 향상시키기 위해 사용되는 중요한 도구 중 하나는 바로 WAI-ARIA다. WAI-ARIA는 Web Accessibility Initiative's Accessible Rich Internet Applications의 약자로, 스크린 리더가 웹 페이지를 읽을 때 요소의 역할과 의미를 파악할 수 있도록 돕는다. 특히 JavaScript 같은 동적 언어를 사용해 페이지 요소가 변경되더라도 스크린 리더는 새로고침 없이 변경된 내용을 읽을 수 있다.스크린 리더란?스크린 리더는 시각적으로 웹 페이지를 읽는 것이 어려운 사용자들을 위해 컴퓨터 화면의 내용을 읽어주는 소프트웨어다. 우리가 웹 페이지를 만들 때 시맨틱 태그를 사용하지 않거나 시각적으로만 요소를 꾸민다면, 스크린 리더 사용자들은 웹 페이지를 ..

WIL/웹 개발 2024.11.19

Spring 애플리케이션 배포 시 GitHub Actions 환경 변수 설정법

GitHub Actions에서 Elastic Beanstalk에 배포할 때 환경 변수를 설정하는 방법에는 $GITHUB_ENV 방식과 직접 Elastic Beanstalk 환경에 설정하는 방식이 있다. 이 두 방식이 어떻게 다른지, 그리고 어떤 상황에 어떤 방법이 좋은지 알아보자.1. $GITHUB_ENV 파일에 저장하는 방식먼저 $GITHUB_ENV 파일에 환경 변수를 저장하는 방식이다. GitHub Actions에서 echo로 환경 변수를 $GITHUB_ENV에 추가해두면, 이후 단계에서 바로 사용할 수 있다. 예를 들면:- name: Set environment variables run: | echo "DB_URL=${{ secrets.DB_URL }}" >> $GITHUB_ENV ec..

WIL/웹 개발 2024.11.04

Spring Boot 3 애플리케이션을 AWS Elastic Beanstalk에 배포했을 때의 Bad Gateway 문제 해결 과정

Spring Boot 3으로 작성한 애플리케이션을 AWS Elastic Beanstalk에 배포한 후, Nginx에서 502 Bad Gateway 오류가 발생하며 제대로 포트 포워딩이 되지 않는 상황을 겪었다. 기본적으로 Spring Boot는 8080 포트를 사용하고, Elastic Beanstalk의 Nginx는 5000 포트로 프록시하도록 설정되어 있어 이로 인해 충돌이 발생한 것으로 생각했다. 그러나 서버 포트를 수정했는데도 불구하고 계속 문제가 발생했다. 문제를 정확히 파악하기 위해 EC2 인스턴스에 직접 접근하여 상태를 확인해보기로 했다. 1. 문제 분석애플리케이션 설정 파일(application.yml)에서 서버 포트를 5000으로 설정했음에도 불구하고 여전히 502 Bad Gateway 오..

WIL/웹 개발 2024.10.31

2024년 10월 1일 이후 Github Action과 AWS Beanstalk를 사용한 CI/CD

CI/CD1. CI (지속적 통합, Continuous Integration)지속적 통합은 개발자들이 코드를 자주 병합하고, 각 병합 시마다 자동으로 빌드와 테스트를 수행하는 것을 뜻한다.코드 변경 시 자동으로 오류를 발견할 수 있기 때문에 코드의 품질을 높이고, 개발과정에서 문제가 생겼을 때 빠르게 수정할 수 있도록 도와준다.CI 도구로는 Jenkins, GitHub Actions, GitLab CI, CircleCI 등이 있다.2. CD (지속적 전달, Continuous Delivery)지속적 전달은 CI 단계를 거쳐 코드가 테스트를 통과하면, 이를 배포 준비 상태로 자동화하여 유지하는 것을 의미한다.배포는 수동으로 수행할 수 있지만, 준비된 최신 버전의 코드가 언제든 프로덕션 환경으로 전달될 수 ..

WIL/웹 개발 2024.10.29

CPU와 GPU의 차이와 최근 동향

1. CPU(중앙 처리 장치)CPU의 역할CPU는 컴퓨터의 두뇌 역할을 하는 중앙 처리 장치이다. 프로그램의 명령을 해석하고 실행하며 데이터를 처리하는 데 사용된다. 여러 작업을 빠르고 효율적으로 처리할 수 있는 범용 프로세서이다.하드웨어 구조CPU는 소수의 강력한 코어를 가지고 있다. 이 코어들은 복잡한 연산을 처리할 수 있으며, 클럭 속도가 높고 명령어 파이프라인, 캐시 메모리, 분기 예측 같은 고급 기술이 적용되어 있다.코어(Core): CPU는 보통 4~16개의 코어로 구성된다. 각 코어가 독립적으로 명령어를 처리할 수 있으며, 여러 작업을 순차적으로 처리하는 데 최적화되어 있다.캐시 메모리: CPU 내부에는 고속 메모리인 캐시가 있다. 캐시는 CPU가 자주 사용하는 데이터를 빠르게 접근할 수 있..

WIL/스터디 2024.10.23

JwtFilter는 어디에 배치해야 할까?

스프링 시큐리티(Spring Security)를 사용할 때, 요청이 서버로 들어오고 나가는 과정을 필터 체인이 담당한다. 이 필터 체인에서 JwtFilter는 JWT 토큰을 인증하고, ExceptionTranslationFilter는 인증 과정에서 발생하는 예외를 처리한다. 그렇다면, JwtFilter는 필터 체인에서 어디에 배치해야 할까?1. JWT 필터(JwtFilter)란?JwtFilter는 클라이언트가 요청에 포함한 JWT(JSON Web Token)를 확인하고, 유효하다면 해당 사용자의 인증 정보를 스프링 시큐리티의 SecurityContextHolder에 저장하는 역할을 한다. 이를 통해 클라이언트 요청이 인증된 사용자로부터 온 것임을 보장할 수 있다.public class JwtFilter ..

WIL/웹 개발 2024.10.19

Presigned URL을 사용한 파일 업로드 구현

프리사인드 URL이란?프리사인드 URL(Presigned URL)은 클라이언트가 서버를 거치지 않고, 직접 클라우드 저장소(예: AWS S3)에 파일을 업로드할 수 있도록 임시 권한을 제공하는 URL. 이 URL은 일정 시간 동안만 유효하고, 그 시간 안에만 지정된 파일을 업로드할 수 있음.장점:서버 부하 감소: 파일이 서버를 거치지 않고 클라이언트에서 클라우드로 바로 업로드되기 때문에 서버 자원이 절약됨.보안 강화: URL은 제한된 시간 동안만 유효하고, 업로드할 수 있는 파일도 미리 지정되므로 안전함.업로드 속도 향상: 클라이언트가 직접 파일을 올리기 때문에 업로드 속도가 더 빠름.클라이언트 코드: 파일 업로드와 폼 제출1. 파일 선택하고 폼 제출const fileInput = document.get..

WIL/웹 개발 2024.10.15

Session, JWT, OAuth 개념

1. Session 방식Session 방식은 유저가 로그인을 완료하면 서버에서 ID, LoginTime, ExpireTime, SessionID 등을 기록하거나 DB에 저장함.그 후 유저에게 Session ID를 리턴해 주는데, 이를 갖고 판단하는 방식. 장점 : 유저의 GET/POST 요청마다 체크하기 때문에 엄격하게 로그인 상태를 검사할 수 있음.단점 : DB에 무리가 감. -> Redis 같은 DB를 사용해서 부담을 줄이기도 함. 2. Token 방식 (JWT)로그인을 완료하면 유저에게 ID, LoginTime, ExpireTime 등을 암호화해서 입장권 발급함. 그 후 유저가 서버를 사용할 때 Token을 제출해서 이를 확인하는 방식. 장점 : DB 부담이 적음. 유저가 많으면 좋음.단점 : 토큰..

WIL/스터디 2024.09.22

PintOS 메모리 할당 순서

Pintos 운영체제가 부팅될 때, 메모리에 데이터를 로드하는 순서는 특정한 단계를 따릅니다. 이 과정은 하드웨어 초기화, 커널 로드, 초기화 루틴 실행 등을 포함합니다.1. 부트로더 (Bootloader) 실행컴퓨터가 전원을 켜면, CPU는 메모리의 특정 위치(일반적으로 0x7c00)에서 실행을 시작합니다. 이 위치에 있는 것은 BIOS가 로드한 부트로더 코드입니다.부트로더는 하드웨어 초기화 및 운영체제를 로드할 준비를 합니다. Pintos에서는 이 부트로더가 운영체제의 커널 이미지를 메모리에 로드하는 역할을 합니다.2. 커널 로드 (Kernel Load)부트로더는 하드 디스크 또는 플래시 메모리와 같은 저장 장치에서 Pintos 커널 이미지를 메모리로 로드합니다.이 커널 이미지는 일반적으로 메모리의 ..

WIL/스터디 2024.09.10

PintOS의 메모리에 관한 공부

Pintos에서 메모리 할당 전략은 주로 페이지 단위로 이루어지며, 물리 메모리와 가상 메모리 시스템을 효과적으로 관리하기 위한 다양한 기법을 사용합니다.1. 커널 메모리 할당 (Kernel Memory Allocation)Pintos의 커널은 페이지 단위로 메모리를 할당합니다. 이는 운영 체제 자체가 사용하는 메모리나 커널 내에서 필요로 하는 메모리를 할당하는 과정에서 이루어집니다.페이지 할당 (Page Allocation): 커널은 palloc_get_page()와 같은 함수로 물리 메모리에서 페이지를 할당합니다. 이 함수는 물리 메모리에서 사용할 수 있는 페이지를 찾아 반환하며, 페이지는 일반적으로 4KB 크기의 고정된 메모리 블록입니다.프레임 할당 (Frame Allocation): 페이지는 물리..

WIL/스터디 2024.09.10