본문 바로가기

프로젝트

(21)
Java에서 AWS SDK를 사용할 때 발생하는 Warning & Error 로그 제거 AWS SDK 2 Version을 적용했을 때 발생한 Warning & Error 💬 Java Spring Project에 AWS S3 사용을 위하여 의존성을 추가하여 사용하였다. 그 이후부터 아래와 같은 Warning과 Error가 발생하기 시작하였다. 서버를 가동하는 데에는 문제가 없어서 그동안 놔두었는데, 유의미하지 않은 Warning과 Error의 메시지가 계속해서 뜬다면 실제 중요한 로그를 놓칠 수 있다고 판단이 되어 이번 기회에 해결하기로 했다. ✔ Warning 문구 [main] WARN com.amazonaws.util.EC2MetadataUtils - Unable to retrieve the requested metadata (/latest/meta-data/instance-id). Fa..
Redis I/O에서 생기는 동시성 문제 이슈 💬 회사 프로젝트에서 캐싱을 위하여 Redis를 사용을 하고 있다. 일반 로직에서 캐싱을 읽고 업데이트 해주는 작업이 같이 수행이 되었다. 트래픽이 발생하기 이전에는 응답 시간이 짧아 Redis I/O에서 발생하는 문제는 발생하지 않았는데, 트래픽이 몰리면서 중간 로직의 응답시간이 길어지면서 Redis I/O 과정에서 업데이트를 하기 이전에 데이터를 읽어가는 문제가 발생하게 되었다. 대응 방안 고민 💬 하나의 자원에 하나의 스레드만 접근을 하여 처리를 할 수 있어야 데이터의 무결성이 깨지지 않을 수 있다. 무결성을 지켜주기 위하여 하나의 자원에 접근을 제한하는 Synchronized, Lock 등을 고려해볼 수 있었다. 회사에서는 서버를 Scale-out을 하여 여러대를 운영을 하고 있었기 때문에 ..
[ 미니 프로젝트 ] 오늘의 노래 2~3일 마무리 협업 과정 Git을 사용하여 각 페이지와 기능별로 브랜치를 생성하고 작업했다. 1일은 페이지 단위로 팀원들과 나누어 구현을 했다. 2~3일에는 각 페이지에 필요한 기능들을 구현했다. 각 페이지와 기능을 구현할 때마다 Commit 후 Push를 했으며, 확인 과정을 거쳐 main에 합쳤다. Branch. [화면] feature/{페이지 명}-page [기능] feature/{페이지 명}-function 내가 맡은 페이지 및 기능. 메인 페이지 - 지역별 글 조회, 페이징 글쓰기 페이지 - 지역별 작성 조회, 글 저장 협업 이슈 사항 각 페이지를 만드는 것은 수월하게 진행이 되었다. 하지만 각 기능을 구현하는 데에 있어 에러 사항이 있었다. 각자 그런 문제들을 해결하기 위해 30분에서 1시간 정도를 사용했으..
[ 미니 프로젝트 ] 오늘의 노래 1일차 웹 페이지 설명 제목. 오늘의 노래 설명. 날씨에 따라 드는 느낌을 작성하고 노래를 추천하는 사이트 환경 환경. Python 3.7 파이썬 패키지 설치 pip install flask pymongo dnspython bs4 requests certifi 폴더 구조 - app.py - .venv - templates - pages - main.html - my.html - ... - index.html API 명세 Git Repository GitHub - gunhoray/todays-music: hanghae99-group#4 hanghae99-group#4. Contribute to gunhoray/todays-music development by creating an account on GitHub...
[ 프로젝트 ] Swagger 적용 Swagger 적용 이유 인생퍼즐 프런트, 백엔드의 리팩터링을 진행을 하고 있다. 같이 진행하다보니 API 명세가 안되어 있어 프런트, 백엔드가 어긋나는 부분이 생겼다. 그로 인해 시간을 더 써야하는 문제가 발생했다. 이 문제를 해결과 추후 기능 개발 및 유지보수를 위해 Swagger를 적용해 API 명세를 하기로 했다. Swagger 라이브러리 선택 자바 스프링에서 Swagger 라이브러리로 SpringFox를 많이 사용이 된다. 하지만 Swagger의 버전은 올라가지만 SpringFox 라이브러리는 2020.10을 마지막으로 업데이트가 이루어지지 않는다는 문제가 있었다. 최근까지 계속 업데이트가 이루어지고 있는 SpringDoc에서 제공하는 라이브러리를 사용하기로 했다. OpenAPI 3 Librar..
[ 프로젝트 ] JWT 라이브러리 검증 메서드 이름 JJWT의 검증 메서드에 대한 의문 Java Spring에 적용한 JWT에 대해서 친구와 이야기하게 되었다. 거기서 토큰 검정 로직에 대해서 이야기 하면서 코드를 보는데 JJWT가 제공하는 토큰 확인하는 메서드 이름이 어울리지 않다는 생각이 들었다. parseClaimJws 메서드는 token을 Claim으로 파싱하는 메서드로 보인다. 하지만 실제로는 token의 검증과 파싱된 Claim을 반환 두 가지 역할을 가진다. public static boolean validateToken(String token) { try { Jwts.parserBuilder().setSigningKey(SIGNING_KEY).build().parseClaimsJws(token); return true; } catch (io..
[ 프로젝트 ] Java Spring에 JWT 적용 JWT Token 파일 구성 1. SecurityConfig.java Java Spring Security에 대한 설정과 JWT 필터 등록을 한다. @EnableWebSecurity 어노테이션을 추가해줘야 하며, 백엔드 상황에 따라 접근 정책을 작성해주면 된다. @Configuration @EnableWebSecurity(debug = true) public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .cors() .and() .csrf() .disable() .exceptionHandling() .and() .sessionManagement() .s..
[ Docker ] Docker hub를 사용해 Jar 파일 EC2에서 실행해보기 이유 친구와 작은 사이드 프로젝트를 하면서 서버에 자바를 띄우는 방식에 대해 이야기를 했다. 이번에는 Docker hub에 Jar 이미지를 올려 EC2에서 실행하는 방식으로 해보는 것이 어떠하냐는 친구의 제안이 있었다. image 파일을 서버에서 받아서 실행만 하면 되기에 EC2에서 처리해야 할 일이 적었고 Docker를 공부할 수 있는 기회가 되는 것 같아 진행해 보기로 했다. Java Project를 Docker를 사용해 EC2에 올리는 방법 1. Jar 파일을 build를 통해 생성 ./gradlew build 2. Docker 파일 생성 # Dockerfile FROM openjdk:17-jdk-alpine ARG JAR_FILE= ${JAR 폴더 경로}/*.jar COPY ${JAR_FILE} ..